![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/pub/static/adminhtml/Magento/backend/en_US/js/bundle/ |
require.config({"config": { "jsbuild":{"Magento_MediaGalleryUi/js/image-uploader.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiComponent',\n 'jquery',\n 'underscore',\n 'Magento_Ui/js/lib/validation/validator',\n 'mage/translate',\n 'jquery/file-uploader'\n], function (Component, $, _, validator, $t) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n imageUploadInputSelector: '#image-uploader-form',\n directoriesPath: 'media_gallery_listing.media_gallery_listing.media_gallery_directories',\n actionsPath: 'media_gallery_listing.media_gallery_listing.media_gallery_columns.thumbnail_url',\n messagesPath: 'media_gallery_listing.media_gallery_listing.messages',\n imageUploadUrl: '',\n acceptFileTypes: '',\n allowedExtensions: '',\n maxFileSize: '',\n maxFileNameLength: 90,\n loader: false,\n modules: {\n directories: '${ $.directoriesPath }',\n actions: '${ $.actionsPath }',\n mediaGridMessages: '${ $.messagesPath }',\n sortBy: '${ $.sortByName }',\n listingPaging: '${ $.listingPagingName }'\n }\n },\n\n /**\n * Init component\n *\n * @return {exports}\n */\n initialize: function () {\n this._super().observe(\n [\n 'loader',\n 'count'\n ]\n );\n\n return this;\n },\n\n /**\n * Initializes file upload library\n */\n initializeFileUpload: function () {\n $(this.imageUploadInputSelector).fileupload({\n url: this.imageUploadUrl,\n acceptFileTypes: this.acceptFileTypes,\n allowedExtensions: this.allowedExtensions,\n maxFileSize: this.maxFileSize,\n\n /**\n * Extending the form data\n *\n * @param {Object} form\n * @returns {Array}\n */\n formData: function (form) {\n return form.serializeArray().concat(\n [{\n name: 'isAjax',\n value: true\n },\n {\n name: 'form_key',\n value: window.FORM_KEY\n },\n {\n name: 'target_folder',\n value: this.getTargetFolder()\n }]\n );\n }.bind(this),\n\n add: function (e, data) {\n if (!this.isSizeExceeded(data.files[0]).passed) {\n this.addValidationErrorMessage(\n $t('Cannot upload \"%1\". File exceeds maximum file size limit.')\n .replace('%1', data.files[0].name)\n );\n\n return;\n } else if (!this.isFileNameLengthExceeded(data.files[0]).passed) {\n this.addValidationErrorMessage(\n $t('Cannot upload \"%1\". Filename is too long, must be 90 characters or less.')\n .replace('%1', data.files[0].name)\n );\n\n return;\n }\n\n this.showLoader();\n this.count(1);\n data.submit();\n }.bind(this),\n\n stop: function () {\n this.openNewestImages();\n this.mediaGridMessages().scheduleCleanup();\n }.bind(this),\n\n start: function () {\n this.mediaGridMessages().clear();\n }.bind(this),\n\n done: function (e, data) {\n var response = data.jqXHR.responseJSON;\n\n if (!response) {\n this.showErrorMessage(data, $t('Could not upload the asset.'));\n\n return;\n }\n\n if (!response.success) {\n this.showErrorMessage(data, response.message);\n\n return;\n }\n this.showSuccessMessage(data);\n this.hideLoader();\n this.actions().reloadGrid();\n }.bind(this)\n });\n },\n\n /**\n * Add error message after validation error.\n *\n * @param {String} message\n */\n addValidationErrorMessage: function (message) {\n this.mediaGridMessages().add('error', message);\n\n this.count() < 2 || this.mediaGridMessages().scheduleCleanup();\n },\n\n /**\n * Checks if size of provided file exceeds\n * defined in configuration size limits.\n *\n * @param {Object} file - File to be checked.\n * @returns {Boolean}\n */\n isSizeExceeded: function (file) {\n return validator('validate-max-size', file.size, this.maxFileSize);\n },\n\n /**\n * Checks if name length of provided file exceeds\n * defined in configuration size limits.\n *\n * @param {Object} file - File to be checked.\n * @returns {Boolean}\n */\n isFileNameLengthExceeded: function (file) {\n return validator('max_text_length', file.name, this.maxFileNameLength);\n },\n\n /**\n * Go to recently uploaded images if at least one uploaded successfully\n */\n openNewestImages: function () {\n this.mediaGridMessages().get().each(function (message) {\n if (message.code === 'success') {\n this.actions().deselectImage();\n this.sortBy().selectDefaultOption();\n this.listingPaging().goFirst();\n\n return false;\n }\n }.bind(this));\n },\n\n /**\n * Show error meassages with file name.\n *\n * @param {Object} data\n * @param {String} message\n */\n showErrorMessage: function (data, message) {\n data.files.each(function (file) {\n this.mediaGridMessages().add(\n 'error',\n file.name + ': ' + $t(message)\n );\n }.bind(this));\n\n this.hideLoader();\n },\n\n /**\n * Show success message, and files counts\n */\n showSuccessMessage: function () {\n this.mediaGridMessages().messages.remove(function (item) {\n return item.code === 'success';\n });\n this.mediaGridMessages().add('success', $t('Assets have been successfully uploaded!'));\n this.count(this.count() + 1);\n\n },\n\n /**\n * Gets Media Gallery selected folder\n *\n * @returns {String}\n */\n getTargetFolder: function () {\n\n if (_.isUndefined(this.directories().activeNode()) ||\n _.isNull(this.directories().activeNode())) {\n return '/';\n }\n\n return this.directories().activeNode();\n },\n\n /**\n * Shows spinner loader\n */\n showLoader: function () {\n this.loader(true);\n },\n\n /**\n * Hides spinner loader\n */\n hideLoader: function () {\n this.loader(false);\n }\n });\n});\n","Magento_MediaGalleryUi/js/container.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiElement',\n 'jquery'\n], function (Element, $) {\n 'use strict';\n\n return Element.extend({\n defaults: {\n containerSelector: '.media-gallery-container',\n masonryComponentPath: 'media_gallery_listing.media_gallery_listing.media_gallery_columns',\n modules: {\n masonry: '${ $.masonryComponentPath }'\n }\n },\n\n /**\n * Init component\n *\n * @return {exports}\n */\n initialize: function () {\n this._super();\n\n $(this.containerSelector).applyBindings();\n\n return this;\n }\n });\n});\n","Magento_MediaGalleryUi/js/validation/validate-image-title.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'jquery/validate',\n 'mage/translate'\n], function ($) {\n 'use strict';\n\n $.validator.addMethod(\n 'validate-image-title', function (value) {\n return /^[a-zA-Z0-9\\-\\_\\.\\,\\s]+$/i.test(value);\n\n }, $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9), dots (.), commas(,), ' +\n 'underscores (_), dashes(-) and spaces on this field.'));\n});\n","Magento_MediaGalleryUi/js/validation/validate-image-keyword.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'jquery/validate',\n 'mage/translate'\n], function ($, validate, $t) {\n 'use strict';\n\n $.validator.addMethod(\n 'validate-image-keyword', function (value) {\n return /^[a-zA-Z0-9\\-\\_\\.\\,]+$|^$/i.test(value);\n\n }, $t('Please use only letters (a-z or A-Z), numbers (0-9), dots (.), commas(,), ' +\n 'underscores (_) and dashes(-) on this field.'));\n});\n","Magento_MediaGalleryUi/js/validation/validate-image-description.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'jquery/validate',\n 'mage/translate'\n], function ($) {\n 'use strict';\n\n $.validator.addMethod(\n 'validate-image-description', function (value) {\n return /^[a-zA-Z0-9\\-\\_\\.\\,\\n\\s]+$|^$/i.test(value);\n\n }, $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9), ' +\n 'dots (.), commas(,), underscores (_), dashes (-), and spaces on this field.'));\n});\n","Magento_MediaGalleryUi/js/grid/sortBy.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'Magento_Ui/js/grid/sortBy'\n], function (Element) {\n 'use strict';\n\n return Element.extend({\n defaults: {\n columnIndexMap: {}\n },\n\n /**\n * Prepared sort order options\n */\n preparedOptions: function (columns) {\n var index = 0,\n sortBy;\n\n if (columns && columns.length > 0) {\n columns.map(function (column) {\n if (column.sortable === true) {\n sortBy = column['sort_by'] || {};\n\n if (sortBy.excluded) {\n return;\n }\n\n this.options.push({\n value: column.index,\n label: column.label,\n sortByField: sortBy.field,\n sortDirection: sortBy.direction\n });\n\n this.columnIndexMap[column.index] = index++;\n\n this.isVisible(true);\n } else {\n this.isVisible(false);\n }\n }.bind(this));\n }\n },\n\n /**\n * Apply changes\n */\n applyChanges: function () {\n var column = this.getColumn(this.selectedOption());\n\n this.applied({\n field: column.sortByField || this.selectedOption(),\n direction: column.sortDirection || this.sorting\n });\n },\n\n /**\n * Get column by index\n *\n * @param {String} optionIndex\n * @returns {Object}\n */\n getColumn: function (optionIndex) {\n return this.options[this.columnIndexMap[optionIndex]];\n },\n\n /**\n * Select default option\n */\n selectDefaultOption: function () {\n this.selectedOption(this.options[0].value);\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/masonry.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'Magento_Ui/js/grid/masonry',\n 'jquery'\n], function (Masonry, $) {\n 'use strict';\n\n return Masonry.extend({\n defaults: {\n modules: {\n provider: '${ $.provider }'\n }\n },\n\n /**\n * Init component\n *\n * @return {Object}\n */\n initialize: function () {\n this._super();\n this.initEvents();\n\n return this;\n },\n\n /**\n * Initialize events\n */\n initEvents: function () {\n $(window).on('folderDeleted.enhancedMediaGallery', this.reloadGrid.bind(this));\n },\n\n /**\n * Reload grid\n */\n reloadGrid: function () {\n var provider = this.provider(),\n dataStorage = provider.storage();\n\n dataStorage.clearRequests();\n provider.reload();\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/messages.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiElement',\n 'escaper'\n], function (Element, escaper) {\n 'use strict';\n\n return Element.extend({\n defaults: {\n template: 'Magento_MediaGalleryUi/grid/messages',\n messageDelay: 5,\n messages: [],\n allowedTags: ['div', 'span', 'b', 'strong', 'i', 'em', 'u', 'a']\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'messages'\n ]);\n\n return this;\n },\n\n /**\n * Get messages\n *\n * @returns {Array}\n */\n get: function () {\n return this.messages();\n },\n\n /**\n * Add message\n *\n * @param {String} type\n * @param {String} message\n */\n add: function (type, message) {\n this.messages.push({\n code: type,\n message: message\n });\n },\n\n /**\n * Clear messages\n */\n clear: function () {\n this.messages.removeAll();\n },\n\n /**\n * Schedule message cleanup\n *\n * @param {Number} delay\n */\n scheduleCleanup: function (delay) {\n // eslint-disable-next-line no-unused-vars\n var timerId;\n\n delay = delay || this.messageDelay;\n\n // eslint-disable-next-line no-unused-vars\n timerId = setTimeout(function () {\n clearTimeout(timerId);\n this.clear();\n }.bind(this), Number(delay) * 1000);\n },\n\n /**\n * Prepare the given message to be rendered as HTML\n *\n * @param {String} message\n * @return {String}\n */\n prepareMessageUnsanitizedHtml: function (message) {\n return escaper.escapeHtml(message, this.allowedTags);\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/massaction/massactionView.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'uiComponent',\n 'mage/translate',\n 'text!Magento_MediaGalleryUi/template/grid/massactions/massactionButtons.html'\n], function ($, Component, $t, massactionButtons) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n gridSelector: '[data-id=\"media-gallery-masonry-grid\"]',\n standAloneTitle: 'Manage Gallery',\n slidePanelTitle: 'Media Gallery',\n defaultTitle: null,\n are: null,\n standAloneArea: 'standalone',\n slidepanelArea: 'slidepanel',\n massactionButtonsSelector: '.massaction-buttons',\n buttonsSelectorStandalone: '.page-actions-buttons',\n buttonsSelectorSlidePanel: '.page-actions.floating-header',\n buttons: '.page-main-actions :button',\n massactionModeTitle: $t('Select Images to Delete')\n },\n\n /**\n * Initializes media gallery massaction component.\n *\n * @returns {Sticky} Chainable.\n */\n initialize: function () {\n this._super().observe([\n 'massActionMode'\n ]);\n\n return this;\n },\n\n /**\n * Switch massaction view state per active mode.\n */\n switchView: function () {\n this.changePageTitle();\n this.switchButtons();\n },\n\n /**\n * Hide or show buttons per active mode.\n */\n switchButtons: function () {\n if (this.massActionMode()) {\n this.activateMassactionButtonView();\n } else {\n this.revertButtonsToDefaultView();\n }\n },\n\n /**\n * Sets buttons to default regular -mode view.\n */\n revertButtonsToDefaultView: function () {\n $(this.buttons).removeClass('no-display');\n $(this.massactionButtonsSelector).remove();\n },\n\n /**\n * Activate mass action buttons view\n */\n activateMassactionButtonView: function () {\n var buttonsContainer;\n\n $(this.buttons).addClass('no-display');\n\n buttonsContainer = this.area === this.standAloneArea ?\n this.buttonsSelectorStandalone :\n this.buttonsSelectorSlidePanel;\n\n $(buttonsContainer).append(massactionButtons);\n $(this.massactionButtonsSelector).applyBindings();\n },\n\n /**\n * Change page title per active mode.\n */\n changePageTitle: function () {\n var title = $('h1:contains(' + this.standAloneTitle + ')'),\n titleSelector;\n\n if (title.length === 1) {\n titleSelector = title;\n this.area = this.standAloneArea;\n } else {\n titleSelector = $('h1:contains(' + this.slidePanelTitle + ')');\n this.area = this.slidepanelArea;\n }\n\n if (this.massActionMode()) {\n this.defaultTitle = titleSelector.text();\n titleSelector.text(this.massactionModeTitle);\n } else {\n titleSelector = $('h1:contains(' + this.massactionModeTitle + ')');\n titleSelector.text(this.defaultTitle);\n }\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/massaction/massactions.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'uiComponent',\n 'Magento_MediaGalleryUi/js/action/deleteImageWithDetailConfirmation',\n 'uiLayout',\n 'underscore',\n 'Magento_Ui/js/modal/alert',\n 'mage/translate'\n], function ($, Component, DeleteImages, Layout, _, uiAlert, $t) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n allowedActions: [],\n deleteButtonSelector: '#delete_selected_massaction',\n deleteImagesSelector: '#delete_massaction',\n mediaGalleryImageDetailsName: 'mediaGalleryImageDetails',\n modules: {\n massactionView: '${ $.name }_view',\n imageModel: '${ $.imageModelName }',\n mediaGalleryImageDetails: '${ $.mediaGalleryImageDetailsName }'\n },\n viewConfig: [\n {\n component: 'Magento_MediaGalleryUi/js/grid/massaction/massactionView',\n name: '${ $.name }_view'\n }\n ],\n imports: {\n imageItems: '${ $.mediaGalleryProvider }:data.items'\n },\n listens: {\n imageItems: 'checkButtonVisibility'\n },\n exports: {\n massActionMode: '${ $.name }_view:massActionMode'\n }\n },\n\n /**\n * Initializes media gallery massaction component.\n *\n * @returns {Sticky} Chainable.\n */\n initialize: function () {\n this._super().observe([\n 'massActionMode'\n ]);\n this.initView();\n this.initEvents();\n\n return this;\n },\n\n /**\n * Initialize child components\n *\n * @returns {Object}\n */\n initView: function () {\n Layout(this.viewConfig);\n\n return this;\n },\n\n /**\n * Initilize massactions events for media gallery grid.\n */\n initEvents: function () {\n $(window).on('massAction.MediaGallery', function () {\n if (this.massActionMode()) {\n return;\n }\n this.imageModel().selected(null);\n this.massActionMode(true);\n this.switchMode();\n }.bind(this));\n\n $(window).on('terminateMassAction.MediaGallery', function () {\n if (!this.massActionMode()) {\n return;\n }\n\n this.massActionMode(false);\n this.switchMode();\n this.imageModel().updateSelected();\n }.bind(this));\n },\n\n /**\n * Return total selected items.\n */\n getSelectedCount: function () {\n if (this.massActionMode() && !_.isNull(this.imageModel().selected())) {\n return Object.keys(this.imageModel().selected()).length;\n }\n\n return 0;\n },\n\n /**\n * If images records less than one, disable \"delete images\" button\n */\n checkButtonVisibility: function () {\n if (!this.allowedActions.includes('delete_assets')) {\n return;\n }\n\n if (this.imageItems.length < 1) {\n $(this.deleteImagesSelector).addClass('disabled');\n } else {\n $(this.deleteImagesSelector).removeClass('disabled');\n }\n },\n\n /**\n * Switch massaction per current event.\n */\n switchMode: function () {\n this.massactionView().switchView();\n this.handleDeleteAction();\n },\n\n /**\n * Change Default behavior of delete image to bulk deletion.\n */\n handleDeleteAction: function () {\n if (this.massActionMode()) {\n $(this.deleteButtonSelector).on('massDelete.MediaGallery', function () {\n if (this.getSelectedCount() < 1) {\n uiAlert({\n content: $t('You need to select at least one image')\n });\n\n } else {\n DeleteImages.deleteImageAction(\n this.imageModel().selected(),\n this.mediaGalleryImageDetails().imageDetailsUrl,\n this.imageModel().deleteImageUrl\n ).then(function (response) {\n if (response.status === 'canceled') {\n return;\n }\n $(window).trigger('terminateMassAction.MediaGallery');\n });\n }\n }.bind(this));\n }\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/columns/image.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_Ui/js/grid/columns/column',\n 'uiLayout',\n 'underscore'\n], function ($, Column, layout, _) {\n 'use strict';\n\n return Column.extend({\n defaults: {\n bodyTmpl: 'Magento_MediaGalleryUi/grid/columns/image',\n messageContentSelector: 'ul.messages',\n mediaGalleryContainerSelector: '.media-gallery-container',\n deleteImageUrl: 'media_gallery/image/delete',\n addSelectedBtnSelector: '#add_selected',\n deleteSelectedBtnSelector: '#delete_selected',\n gridSelector: '[data-id=\"media-gallery-masonry-grid\"]',\n selected: null,\n allowedActions: [],\n fields: {\n id: 'id',\n url: 'url',\n alt: 'name'\n },\n modules: {\n actions: '${ $.name }_actions',\n provider: '${ $.provider }',\n messages: '${ $.messagesName }',\n massaction: '${ $.massactionComponentName }'\n },\n imports: {\n activeDirectory: '${ $.mediaGalleryDirectoryComponent }:activeNode'\n },\n listens: {\n activeDirectory: 'selectDirectoryHandle',\n '${ $.massactionComponentName }:massActionMode': 'updateSelected'\n },\n viewConfig: [\n {\n component: 'Magento_MediaGalleryUi/js/grid/columns/image/actions',\n name: '${ $.name }_actions',\n imageModelName: '${ $.name }',\n allowedActions: '${ $.allowedActions }'\n }\n ]\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super();\n this.initView();\n $(window).on('fileDeleted.enhancedMediaGallery', this.reloadMediaGrid.bind(this));\n $(window).on('reload.MediaGallery', this.reloadGrid.bind(this));\n\n return this;\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'selected'\n ]);\n\n return this;\n },\n\n /**\n * Is massaction mode active.\n */\n isMassActionMode: function () {\n return this.massaction().massActionMode();\n },\n\n /**\n * Returns url to given record.\n *\n * @param {Object} record - Data to be preprocessed.\n * @returns {String}\n */\n getUrl: function (record) {\n return record[this.fields.url];\n },\n\n /**\n * Returns id to given record.\n *\n * @param {Object} record - Data to be preprocessed.\n * @returns {Number}\n */\n getId: function (record) {\n return record[this.fields.id];\n },\n\n /**\n * Update selected items per massaction mode.\n */\n updateSelected: function () {\n this.selected({});\n this.hideAddSelectedAndDeleteButon();\n },\n\n /**\n * Returns name to given record.\n *\n * @param {Object} record - Data to be preprocessed.\n * @returns {String}\n */\n getImageAlt: function (record) {\n return record[this.fields.alt];\n },\n\n /**\n * Check if the record is currently selected\n *\n * @param {Object} record - Data to be preprocessed.\n * @returns {Boolean}\n */\n isSelected: function (record) {\n if (_.isNull(this.selected())) {\n return false;\n }\n\n if (this.massaction().massActionMode()) {\n return this.selected()[record.id];\n }\n\n return this.getId(this.selected()) === this.getId(record);\n },\n\n /**\n * Click on image\n *\n * @param {Object} record\n * @param {Boolean} collapsibleOpened\n */\n clickOnImage: function (record, collapsibleOpened) {\n if (!collapsibleOpened) {\n this.select(record);\n }\n },\n\n /**\n * Click on three-dots\n *\n * @param {Object} record\n * @param {Boolean} collapsibleOpened\n */\n clickOnThreeDots: function (record, collapsibleOpened) {\n if (!this.isSelected(record) || collapsibleOpened) {\n this.select(record);\n }\n },\n\n /**\n * Handle checkbox click.\n */\n checkboxClick: function (record) {\n var items = this.selected();\n\n if (this.selected()[record.id]) {\n delete items[record.id];\n this.selected(items);\n } else {\n items[record.id] = record.id;\n this.selected(items);\n }\n\n return true;\n },\n\n /**\n * Set the record as selected\n */\n select: function (record) {\n if (this.massaction().massActionMode()) {\n return this.checkboxClick(record);\n }\n\n this.isSelected(record) ? this.selected(null) : this.selected(record);\n this.toggleAddSelectedButton();\n\n return true;\n },\n\n /**\n * Deselect the record\n */\n deselectImage: function () {\n this.selected(null);\n this.toggleAddSelectedButton();\n },\n\n /**\n * Get the selected record\n * @returns {Object}\n */\n getSelected: function () {\n return this.selected();\n },\n\n /**\n * Initialize child components\n *\n * @returns {Object}\n */\n initView: function () {\n layout(this.viewConfig);\n\n return this;\n },\n\n /**\n * Toggle add selected button\n */\n toggleAddSelectedButton: function () {\n if (this.selected() === null) {\n this.hideAddSelectedAndDeleteButon();\n\n return;\n }\n\n if (this.allowedActions.includes('insert')) {\n $(this.addSelectedBtnSelector).removeClass('no-display');\n }\n\n if (this.allowedActions.includes('delete')) {\n $(this.deleteSelectedBtnSelector).removeClass('no-display');\n }\n },\n\n /**\n * Hide add selected and Delete button\n */\n hideAddSelectedAndDeleteButon: function () {\n $(this.addSelectedBtnSelector).addClass('no-display');\n $(this.deleteSelectedBtnSelector).addClass('no-display');\n },\n\n /**\n * @param {jQuery.event} e\n * @param {Object} data\n */\n reloadMediaGrid: function (e, data) {\n if (data.reload) {\n this.reloadGrid();\n }\n\n if (data.message && data.code) {\n this.addMessage(data.code, data.message);\n }\n this.hideAddSelectedAndDeleteButon();\n },\n\n /**\n * Reload grid\n */\n reloadGrid: function () {\n var provider = this.provider(),\n dataStorage = provider.storage();\n\n dataStorage.clearRequests();\n provider.reload();\n },\n\n /**\n * Add message\n *\n * @param {String} code\n * @param {String} message\n */\n addMessage: function (code, message) {\n this.messages().add(code, message);\n this.closeContextMenu();\n this.scrollToMessageContent();\n this.messages().scheduleCleanup();\n },\n\n /**\n * Listener to select directory event\n *\n * @param {String} path\n */\n selectDirectoryHandle: function (path) {\n if (this.selected() &&\n this.selected().directory !== path &&\n !this.massaction().massActionMode()) {\n this.deselectImage();\n }\n },\n\n /**\n * Action to close the context menu in media gallery.\n */\n closeContextMenu: function () {\n $(this.gridSelector).trigger('click');\n },\n\n /**\n * Scroll to the top of media gallery page\n */\n scrollToMessageContent: function () {\n var scrollTargetElement = $(this.messageContentSelector),\n scrollTargetContainer = $(this.mediaGalleryContainerSelector);\n\n scrollTargetContainer.find(scrollTargetElement).get(0).scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest'\n });\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/columns/image/actions.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'uiComponent',\n 'Magento_MediaGalleryUi/js/action/deleteImageWithDetailConfirmation',\n 'Magento_MediaGalleryUi/js/grid/columns/image/insertImageAction',\n 'mage/translate',\n 'Magento_Ui/js/lib/view/utils/async'\n], function ($, _, Component, deleteImageWithDetailConfirmation, image, $t) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_MediaGalleryUi/grid/columns/image/actions',\n mediaGalleryImageDetailsName: 'mediaGalleryImageDetails',\n mediaGalleryEditDetailsName: 'mediaGalleryEditDetails',\n allowedActions: [],\n actionsList: [\n {\n name: 'image-details',\n title: $t('View Details'),\n classes: 'action-menu-item',\n handler: 'viewImageDetails'\n },\n {\n name: 'edit',\n title: $t('Edit'),\n classes: 'action-menu-item',\n handler: 'editImageDetails'\n },\n {\n name: 'delete',\n title: $t('Delete'),\n classes: 'action-menu-item media-gallery-delete-assets',\n handler: 'deleteImageAction'\n }\n ],\n modules: {\n imageModel: '${ $.imageModelName }',\n mediaGalleryImageDetails: '${ $.mediaGalleryImageDetailsName }',\n mediaGalleryEditDetails: '${ $.mediaGalleryEditDetailsName }'\n }\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super();\n this.initEvents();\n\n this.actionsList = this.actionsList.filter(function (item) {\n return this.allowedActions.includes(item.name);\n }.bind(this));\n\n if (!this.allowedActions.includes('delete')) {\n $.async('.media-gallery-delete-assets', function () {\n $('.media-gallery-delete-assets').off('click').addClass('action-disabled');\n });\n }\n\n return this;\n },\n\n /**\n * Initialize image action events\n */\n initEvents: function () {\n $(this.imageModel().addSelectedBtnSelector).on('click', function () {\n image.insertImage(\n this.imageModel().getSelected(),\n {\n onInsertUrl: this.imageModel().onInsertUrl,\n storeId: this.imageModel().storeId\n }\n );\n }.bind(this));\n $(this.imageModel().deleteSelectedBtnSelector).on('click', function () {\n this.deleteImageAction(this.imageModel().selected());\n }.bind(this));\n\n },\n\n /**\n * Delete image action\n *\n * @param {Object} record\n */\n deleteImageAction: function (record) {\n var imageDetailsUrl = this.mediaGalleryImageDetails().imageDetailsUrl,\n deleteImageUrl = this.imageModel().deleteImageUrl;\n\n deleteImageWithDetailConfirmation.deleteImageAction([record.id], imageDetailsUrl, deleteImageUrl);\n },\n\n /**\n * View image details\n *\n * @param {Object} record\n */\n viewImageDetails: function (record) {\n var recordId = this.imageModel().getId(record);\n\n this.mediaGalleryImageDetails().showImageDetailsById(recordId);\n },\n\n /**\n * Edit image details\n *\n * @param {Object} record\n */\n editImageDetails: function (record) {\n var recordId = this.imageModel().getId(record);\n\n this.mediaGalleryEditDetails().showEditDetailsPanel(recordId);\n }\n });\n});\n","Magento_MediaGalleryUi/js/grid/columns/image/insertImageAction.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/* global FORM_KEY, tinyMceEditors */\ndefine([\n 'jquery',\n 'wysiwygAdapter',\n 'underscore',\n 'mage/translate'\n], function ($, wysiwyg, _, $t) {\n 'use strict';\n\n return {\n\n /**\n * Insert provided image in wysiwyg if enabled, or widget\n *\n * @param {Object} record\n * @param {Object} config\n * @returns {Boolean}\n */\n insertImage: function (record, config) {\n var targetElement, forceStaticPath;\n\n if (record === null) {\n return false;\n }\n targetElement = this.getTargetElement(window.MediabrowserUtility.targetElementId);\n\n if (!targetElement.length) {\n window.MediabrowserUtility.closeDialog();\n throw $t('Target element not found for content update');\n }\n\n forceStaticPath = typeof targetElement !== 'function' && targetElement.data('force_static_path') ? 1 : 0;\n\n $.ajax({\n url: config.onInsertUrl,\n data: {\n filename: record['encoded_id'],\n 'store_id': config.storeId,\n 'as_is': typeof targetElement !== 'function' && targetElement.is('textarea') ? 1 : 0,\n 'force_static_path': forceStaticPath,\n 'form_key': FORM_KEY\n },\n context: this,\n showLoader: true\n }).done($.proxy(function (data) {\n if (typeof targetElement === 'function') {\n targetElement(data.content, {text: record['title']});\n } else if (targetElement.is('textarea')) {\n this.insertAtCursor(targetElement.get(0), data.content);\n targetElement.focus();\n $(targetElement).trigger('change');\n } else {\n targetElement.val(data.content)\n .data('size', data.size)\n .data('mime-type', data.type)\n .trigger('change');\n }\n }, this));\n window.MediabrowserUtility.closeDialog();\n\n if (typeof targetElement !== 'function') {\n targetElement.focus();\n $(targetElement).trigger('change');\n }\n },\n\n /**\n * Insert image to target instance.\n *\n * @param {Object} element\n * @param {*} value\n */\n insertAtCursor: function (element, value) {\n var sel, startPos, endPos, scrollTop;\n\n if ('selection' in document) {\n //For browsers like Internet Explorer\n element.focus();\n sel = document.selection.createRange();\n sel.text = value;\n element.focus();\n } else if (element.selectionStart || element.selectionStart == '0') { //eslint-disable-line eqeqeq\n //For browsers like Firefox and Webkit based\n startPos = element.selectionStart;\n endPos = element.selectionEnd;\n scrollTop = element.scrollTop;\n element.value = element.value.substring(0, startPos) + value +\n element.value.substring(startPos, endPos) + element.value.substring(endPos, element.value.length);\n element.focus();\n element.selectionStart = startPos + value.length;\n element.selectionEnd = startPos + value.length + element.value.substring(startPos, endPos).length;\n element.scrollTop = scrollTop;\n } else {\n element.value += value;\n element.focus();\n }\n },\n\n /**\n * Return opener Window object if it exists, not closed and editor is active\n *\n * @param {String} targetElementId\n * return {Object|null}\n */\n getMediaBrowserOpener: function (targetElementId) {\n if (!_.isUndefined(wysiwyg) && wysiwyg.get(targetElementId) && !_.isUndefined(tinyMceEditors)) {\n return tinyMceEditors.get(targetElementId).getMediaBrowserOpener();\n }\n\n return null;\n },\n\n /**\n * Get target element\n *\n * @param {String} targetElementId\n * @returns {*|n.fn.init|jQuery|HTMLElement}\n */\n getTargetElement: function (targetElementId) {\n\n if (!_.isUndefined(wysiwyg) && wysiwyg.get(targetElementId)) {\n return this.getMediaBrowserOpener(targetElementId) || window;\n }\n\n return $('#' + targetElementId);\n }\n };\n});\n","Magento_MediaGalleryUi/js/action/deleteImages.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'mage/url',\n 'Magento_MediaGalleryUi/js/grid/messages',\n 'Magento_Ui/js/modal/confirm',\n 'mage/translate'\n], function ($, _, urlBuilder, messages, confirmation, $t) {\n 'use strict';\n\n return function (ids, deleteUrl, confirmationContent) {\n var deferred = $.Deferred(),\n title = $t('Delete assets'),\n cancelText = $t('Cancel'),\n deleteImageText = $t('Delete');\n\n /**\n * Send deletion request with redords ids\n *\n * @param {Array} recordIds\n * @param {String} serviceUrl\n */\n function sendRequest(recordIds, serviceUrl) {\n\n $.ajax({\n type: 'POST',\n url: serviceUrl,\n dataType: 'json',\n showLoader: true,\n data: {\n 'form_key': window.FORM_KEY,\n 'ids': recordIds\n },\n context: this,\n\n /**\n * Success handler for deleting image\n *\n * @param {Object} response\n */\n success: function (response) {\n var message = !_.isUndefined(response.message) ? response.message : null;\n\n if (!response.success) {\n message = message || $t('There was an error on attempt to delete the images.');\n $(window).trigger('fileDeleted.enhancedMediaGallery', {\n reload: false,\n message: message,\n code: 'error'\n });\n\n deferred.reject(message);\n }\n\n message = message || $t('You have successfully removed the images.');\n $(window).trigger('fileDeleted.enhancedMediaGallery', {\n reload: true,\n message: message,\n code: 'success'\n });\n deferred.resolve(message);\n },\n\n /**\n * Error handler for deleting image\n *\n * @param {Object} response\n */\n error: function (response) {\n var message;\n\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = $t('There was an error on attempt to delete the image.');\n } else {\n message = response.responseJSON.message;\n }\n\n $(window).trigger('fileDeleted.enhancedMediaGallery', {\n reload: false,\n message: message,\n code: 'error'\n });\n deferred.reject(message);\n }\n });\n }\n\n confirmation({\n title: title,\n modalClass: 'media-gallery-delete-image-action',\n content: confirmationContent,\n buttons: [\n {\n text: cancelText,\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal\n */\n click: function () {\n this.closeModal();\n deferred.resolve({\n status: 'canceled'\n });\n }\n },\n {\n text: deleteImageText,\n class: 'action-primary action-accept',\n\n /**\n * Delete Image and close modal\n */\n click: function () {\n sendRequest(ids, deleteUrl);\n this.closeModal();\n }\n }\n ]\n });\n\n return deferred.promise();\n };\n});\n","Magento_MediaGalleryUi/js/action/saveDetails.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'mage/translate'\n], function ($, $t) {\n 'use strict';\n\n return function (saveImageDetailsUrl, data) {\n var deferred = $.Deferred(),\n message;\n\n $.ajax({\n type: 'POST',\n url: saveImageDetailsUrl,\n dataType: 'json',\n showLoader: true,\n data: data,\n\n /**\n * Resolve with image details if success, reject with response message otherwise\n *\n * @param {Object} response\n */\n success: function (response) {\n if (response.success) {\n deferred.resolve(response.message);\n\n return;\n }\n\n deferred.reject(response.message);\n },\n\n /**\n * Extract the message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = $t('Could not save image details.');\n } else {\n message = response.responseJSON.message;\n }\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_MediaGalleryUi/js/action/getDetails.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'mage/translate'\n], function ($, $t) {\n 'use strict';\n\n return function (imageDetailsUrl, imageIds) {\n var deferred = $.Deferred(),\n message;\n\n $.ajax({\n type: 'GET',\n url: imageDetailsUrl,\n dataType: 'json',\n showLoader: true,\n data: {\n 'ids': imageIds\n },\n context: this,\n\n /**\n * Resolve with image details if success, reject with response message othervise\n *\n * @param {Object} response\n */\n success: function (response) {\n if (response.success) {\n deferred.resolve(response.imageDetails);\n\n return;\n }\n\n deferred.reject(response.message);\n },\n\n /**\n * Extract the message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = $t('Could not retrieve image details.');\n } else {\n message = response.responseJSON.message;\n }\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_MediaGalleryUi/js/action/deleteImageWithDetailConfirmation.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'Magento_MediaGalleryUi/js/action/getDetails',\n 'Magento_MediaGalleryUi/js/action/deleteImages',\n 'mage/translate'\n], function ($, _, getDetails, deleteImages, $t) {\n 'use strict';\n\n return {\n\n /**\n * Get information about image use\n *\n * @param {Array} recordsIds\n * @param {String} imageDetailsUrl\n * @param {String} deleteImageUrl\n */\n deleteImageAction: function (recordsIds, imageDetailsUrl, deleteImageUrl) {\n var confirmationContent = $t('%1Are you sure you want to delete \"%2\" image(s)?')\n .replace('%2', Object.keys(recordsIds).length),\n deferred = $.Deferred();\n\n getDetails(imageDetailsUrl, recordsIds).then(function (images) {\n confirmationContent = confirmationContent.replace(\n '%1',\n this.getRecordRelatedContentMessage(images) + ' '\n );\n }.bind(this)).fail(function () {\n confirmationContent = confirmationContent.replace('%1', '');\n }).always(function () {\n deleteImages(recordsIds, deleteImageUrl, confirmationContent).then(function (status) {\n deferred.resolve(status);\n }).fail(function (error) {\n deferred.reject(error);\n });\n });\n\n return deferred.promise();\n },\n\n /**\n * Get information about image use\n *\n * @param {Object|String} images\n * @return {String}\n */\n getRecordRelatedContentMessage: function (images) {\n var usedInMessage = $t('The selected assets are used in the content of the following entities: '),\n usedIn = {};\n\n $.each(images, function (key, image) {\n $.each(image.details, function (sectionIndex, section) {\n if (section.title === 'Used In' && _.isObject(section) && !_.isEmpty(section.value)) {\n $.each(section.value, function (entityTypeIndex, entityTypeData) {\n usedIn[entityTypeData.name] = entityTypeData.name in usedIn ?\n usedIn[entityTypeData.name] + entityTypeData.number :\n entityTypeData.number;\n });\n }\n });\n });\n\n if (_.isEmpty(usedIn)) {\n return '';\n }\n\n return usedInMessage + this.usedInObjectToString(usedIn);\n },\n\n /**\n * Fromats usedIn object to string\n *\n * @param {Object} usedIn\n * @return {String}\n */\n usedInObjectToString: function (usedIn) {\n var entities = [];\n\n $.each(usedIn, function (entityName, number) {\n entities.push(entityName + '(' + number + ')');\n });\n\n return entities.join(', ') + '.';\n }\n };\n});\n","Magento_MediaGalleryUi/js/directory/directoryTree.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/* global Base64 */\ndefine([\n 'jquery',\n 'uiComponent',\n 'uiLayout',\n 'underscore',\n 'Magento_MediaGalleryUi/js/directory/actions/createDirectory',\n 'jquery/jstree/jquery.jstree',\n 'Magento_Ui/js/lib/view/utils/async',\n 'Magento_MediaGalleryUi/js/directory/directories'\n], function ($, Component, layout, _, createDirectory) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n allowedActions: [],\n filterChipsProvider: 'componentType = filters, ns = ${ $.ns }',\n bookmarkProvider: 'componentType = bookmark, ns = ${ $.ns }',\n directoryTreeSelector: '#media-gallery-directory-tree',\n getDirectoryTreeUrl: 'media_gallery/directories/gettree',\n createDirectoryUrl: 'media_gallery/directories/create',\n deleteDirectoryUrl: 'media_gallery/directories/delete',\n jsTreeReloaded: null,\n modules: {\n bookmarks: '${ $.bookmarkProvider }',\n directories: '${ $.name }_directories',\n filterChips: '${ $.filterChipsProvider }'\n },\n listens: {\n '${ $.provider }:params.filters.path': 'updateSelectedDirectory'\n },\n viewConfig: [{\n component: 'Magento_MediaGalleryUi/js/directory/directories',\n name: '${ $.name }_directories',\n allowedActions: '${ $.allowedActions }'\n }]\n },\n\n /**\n * Initializes media gallery directories component.\n *\n * @returns {Sticky} Chainable.\n */\n initialize: function () {\n this._super().observe(['activeNode']).initView();\n\n $.async(\n this.directoryTreeSelector,\n this,\n function () {\n this.initJsTreeEvents();\n this.renderDirectoryTree().then(function () {\n this.initEvents();\n }.bind(this));\n }.bind(this)\n );\n\n return this;\n },\n\n /**\n * Render directory tree component.\n */\n renderDirectoryTree: function () {\n return this.getJsonTree().then(function (data) {\n this.createFolderIfNotExists(data).then(function (isFolderCreated) {\n if (isFolderCreated) {\n this.getJsonTree().then(function (newData) {\n this.createTree(newData);\n }.bind(this));\n } else {\n this.createTree(data);\n }\n }.bind(this));\n }.bind(this));\n },\n\n /**\n * Set jstree reloaded\n *\n * @param {Boolean} value\n */\n setJsTreeReloaded: function (value) {\n this.jsTreeReloaded = value;\n },\n\n /**\n * Create folder by provided current_tree_path param\n *\n * @param {Array} directories\n */\n createFolderIfNotExists: function (directories) {\n var requestedDirectory = this.getRequestedDirectory(),\n deferred = $.Deferred(),\n pathArray;\n\n if (_.isNull(requestedDirectory)) {\n deferred.resolve(false);\n\n return deferred.promise();\n }\n\n if (this.isDirectoryExist(directories, requestedDirectory)) {\n deferred.resolve(false);\n\n return deferred.promise();\n }\n\n pathArray = this.convertPathToPathsArray(requestedDirectory);\n\n $.each(pathArray, function (i, val) {\n if (this.isDirectoryExist(directories, val)) {\n pathArray.splice(i, 1);\n }\n }.bind(this));\n\n createDirectory(\n this.createDirectoryUrl,\n pathArray\n ).then(function () {\n deferred.resolve(true);\n });\n\n return deferred.promise();\n },\n\n /**\n * Verify if directory exists in array\n *\n * @param {Array} directories\n * @param {String} directoryId\n */\n isDirectoryExist: function (directories, directoryId) {\n var found = false;\n\n /**\n * Recursive search in array\n *\n * @param {Array} data\n * @param {String} id\n */\n function recurse(data, id) {\n var i;\n\n for (i = 0; i < data.length; i++) {\n if (data[i].id === id) {\n found = data[i];\n break;\n } else if (data[i].children && data[i].children.length) {\n recurse(data[i].children, id);\n }\n }\n }\n\n recurse(directories, directoryId);\n\n return found;\n },\n\n /**\n * Convert path string to path array e.g 'path1/path2' -> ['path1', 'path1/path2']\n *\n * @param {String} path\n */\n convertPathToPathsArray: function (path) {\n var pathsArray = [],\n pathString = '',\n paths = path.split('/');\n\n $.each(paths, function (i, val) {\n pathString += i >= 1 ? val : val + '/';\n pathsArray.push(i >= 1 ? pathString : val);\n });\n\n return pathsArray;\n },\n\n /**\n * Initialize child components\n *\n * @returns {Object}\n */\n initView: function () {\n layout(this.viewConfig);\n\n return this;\n },\n\n /**\n * Wait for condition then call provided callback\n */\n waitForCondition: function (condition, callback) {\n if (condition()) {\n setTimeout(function () {\n this.waitForCondition(condition, callback);\n }.bind(this), 100);\n } else {\n callback();\n }\n },\n\n /**\n * Remove ability to multiple select on nodes\n */\n disableMultiselectBehavior: function () {\n $.jstree.defaults.core.multiple = false;\n },\n\n /**\n * Handle jstree events\n */\n initEvents: function () {\n this.disableMultiselectBehavior();\n\n $(window).on('reload.MediaGallery', function () {\n this.getJsonTree().then(function (data) {\n this.createFolderIfNotExists(data).then(function (isCreated) {\n if (isCreated) {\n this.renderDirectoryTree().then(function () {\n this.setJsTreeReloaded(true);\n this.initJsTreeEvents();\n }.bind(this));\n } else {\n this.updateSelectedDirectory();\n }\n }.bind(this));\n }.bind(this));\n }.bind(this));\n },\n\n /**\n * Fire event for jstree component\n */\n initJsTreeEvents: function () {\n $(this.directoryTreeSelector).on('select_node.jstree', function (element, data) {\n this.setActiveNodeFilter(data.node.id);\n this.setJsTreeReloaded(false);\n }.bind(this));\n\n $(this.directoryTreeSelector).on('loaded.jstree', function () {\n this.updateSelectedDirectory();\n }.bind(this));\n },\n\n /**\n * Verify directory filter on init event, select folder per directory filter state\n */\n updateSelectedDirectory: function () {\n var currentFilterPath = this.filterChips().filters.path,\n requestedDirectory = this.getRequestedDirectory(),\n currentTreePath;\n\n if (_.isUndefined(currentFilterPath)) {\n this.clearFiltersHandle();\n\n return;\n }\n\n if (!_.isUndefined(this.bookmarks())) {\n if (!_.size(this.bookmarks().getViewData(this.bookmarks().defaultIndex))) {\n setTimeout(function () {\n this.updateSelectedDirectory();\n }.bind(this), 500);\n\n return;\n }\n }\n currentTreePath = this.isFilterApplied(currentFilterPath) || _.isNull(requestedDirectory) ?\n currentFilterPath : requestedDirectory;\n\n if (this.folderExistsInTree(currentTreePath)) {\n this.locateNode(currentTreePath);\n } else {\n this.selectStorageRoot();\n }\n },\n\n /**\n * Verify if directory exists in folder tree\n *\n * @param {String} path\n */\n folderExistsInTree: function (path) {\n if (!_.isUndefined(path)) {\n return $(this.directoryTreeSelector).jstree('get_node', path);\n }\n\n return false;\n },\n\n /**\n * Get requested directory from MediabrowserUtility\n *\n * @returns {String|null}\n */\n getRequestedDirectory: function () {\n return !_.isUndefined(window.MediabrowserUtility) && window.MediabrowserUtility.pathId !== '' ?\n Base64.idDecode(window.MediabrowserUtility.pathId) : null;\n },\n\n /**\n * Check if need to select directory by filters state\n *\n * @param {String} currentFilterPath\n */\n isFilterApplied: function (currentFilterPath) {\n return !_.isUndefined(currentFilterPath) && currentFilterPath !== '';\n },\n\n /**\n * Locate and higlight node in jstree by path id.\n *\n * @param {String} path\n */\n locateNode: function (path) {\n if ($(this.directoryTreeSelector).jstree('is_selected', path)) {\n return;\n }\n $(this.directoryTreeSelector).jstree('deselect_node',\n $(this.directoryTreeSelector).jstree('get_selected')\n );\n $(this.directoryTreeSelector).jstree('open_node', path);\n $(this.directoryTreeSelector).jstree('select_node', path, true);\n\n },\n\n /**\n * Clear filters\n */\n clearFiltersHandle: function () {\n $(this.directoryTreeSelector).jstree('deselect_all');\n this.activeNode(null);\n this.directories().setInActive();\n },\n\n /**\n * Set active node filter, or deselect if the same node clicked\n *\n * @param {String} nodePath\n */\n setActiveNodeFilter: function (nodePath) {\n if (this.activeNode() === nodePath && !this.jsTreeReloaded) {\n this.selectStorageRoot();\n } else {\n this.selectFolder(nodePath);\n }\n },\n\n /**\n * Remove folders selection -> select storage root\n */\n selectStorageRoot: function () {\n var filters = {},\n applied = this.filterChips().get('applied');\n\n $(this.directoryTreeSelector).jstree('deselect_all');\n\n filters = $.extend(true, filters, applied);\n delete filters.path;\n this.filterChips().set('applied', filters);\n this.activeNode(null);\n this.waitForCondition(\n function () {\n return _.isUndefined(this.directories());\n }.bind(this),\n function () {\n this.directories().setInActive();\n }.bind(this)\n );\n },\n\n /**\n * Set selected folder\n *\n * @param {String} path\n */\n selectFolder: function (path) {\n this.activeNode(path);\n\n this.waitForCondition(\n function () {\n return _.isUndefined(this.directories());\n }.bind(this),\n function () {\n this.directories().setActive(path);\n }.bind(this)\n );\n\n this.applyFilter(path);\n },\n\n /**\n * Remove active node from directory tree, and select next\n */\n removeNode: function () {\n $(this.directoryTreeSelector).jstree('delete_node',\n $(this.directoryTreeSelector).jstree('get_selected')\n );\n },\n\n /**\n * Apply folder filter by path\n *\n * @param {String} path\n */\n applyFilter: function (path) {\n var filters = {},\n applied = this.filterChips().get('applied');\n\n filters = $.extend(true, filters, applied);\n filters.path = path;\n this.filterChips().set('applied', filters);\n },\n\n /**\n * Reload jstree and update jstree events\n */\n reloadJsTree: function () {\n var deferred = $.Deferred();\n\n this.getJsonTree().then(function (data) {\n $(this.directoryTreeSelector).jstree(true).settings.core.data = data;\n $(this.directoryTreeSelector).jstree(true).refresh(false, true);\n this.setJsTreeReloaded(true);\n deferred.resolve();\n }.bind(this));\n\n return deferred.promise();\n },\n\n /**\n * Get json data for jstree\n */\n getJsonTree: function () {\n var deferred = $.Deferred();\n\n $.ajax({\n url: this.getDirectoryTreeUrl,\n type: 'GET',\n dataType: 'json',\n\n /**\n * Success handler for request\n *\n * @param {Object} data\n */\n success: function (data) {\n deferred.resolve(data);\n },\n\n /**\n * Error handler for request\n *\n * @param {Object} jqXHR\n * @param {String} textStatus\n */\n error: function (jqXHR, textStatus) {\n deferred.reject();\n throw textStatus;\n }\n });\n\n return deferred.promise();\n },\n\n /**\n * Initialize directory tree\n *\n * @param {Array} data\n */\n createTree: function (data) {\n // jscs:disable requireCamelCaseOrUpperCaseIdentifiers\n $(this.directoryTreeSelector).jstree({\n plugins: [],\n checkbox: {\n three_state: false,\n cascade: ''\n },\n core: {\n data: data,\n check_callback: true,\n themes: {\n dots: false\n }\n }\n });\n // jscs:enable requireCamelCaseOrUpperCaseIdentifiers\n }\n });\n});\n","Magento_MediaGalleryUi/js/directory/directories.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.g\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'uiComponent',\n 'Magento_Ui/js/modal/confirm',\n 'Magento_Ui/js/modal/alert',\n 'underscore',\n 'Magento_Ui/js/modal/prompt',\n 'Magento_MediaGalleryUi/js/directory/actions/createDirectory',\n 'Magento_MediaGalleryUi/js/directory/actions/deleteDirectory',\n 'mage/translate',\n 'validation'\n], function ($, Component, confirm, uiAlert, _, prompt, createDirectory, deleteDirectory, $t) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n allowedActions: [],\n directoryTreeSelector: '#media-gallery-directory-tree',\n deleteButtonSelector: '#delete_folder',\n createFolderButtonSelector: '#create_folder',\n messageDelay: 5,\n selectedFolder: null,\n messagesName: 'media_gallery_listing.media_gallery_listing.messages',\n modules: {\n directoryTree: '${ $.parentName }.media_gallery_directories',\n messages: '${ $.messagesName }'\n }\n },\n\n /**\n * Initializes media gallery directories component.\n *\n * @returns {Sticky} Chainable.\n */\n initialize: function () {\n this._super().observe(['selectedFolder']);\n this._addValidation();\n this.initEvents();\n\n return this;\n },\n\n /**\n * Initialize directories events\n */\n initEvents: function () {\n $(this.deleteButtonSelector).on('delete_folder', function () {\n this.deleteFolder();\n }.bind(this));\n\n $(this.createFolderButtonSelector).on('create_folder', function () {\n this.createFolder();\n }.bind(this));\n },\n\n /**\n * Show confirmation popup and create folder based on user input\n */\n createFolder: function () {\n this.getPrompt({\n title: $t('New Folder Name:'),\n content: '',\n actions: {\n /**\n * Confirm action\n */\n confirm: function (folderName) {\n createDirectory(\n this.directoryTree().createDirectoryUrl,\n [this.getNewFolderPath(folderName)]\n ).then(function () {\n this.directoryTree().reloadJsTree().then(function () {\n this.directoryTree().locateNode(this.getNewFolderPath(folderName));\n }.bind(this));\n }.bind(this)).fail(function (error) {\n uiAlert({\n content: error\n });\n });\n }.bind(this)\n },\n buttons: [{\n text: $t('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal\n */\n click: function () {\n this.closeModal();\n }\n }, {\n text: $t('Confirm'),\n class: 'action-primary action-accept'\n }]\n });\n },\n\n /**\n * Return configured path for folder creation.\n *\n * @param {String} folderName\n * @returns {String}\n */\n getNewFolderPath: function (folderName) {\n if (_.isUndefined(this.selectedFolder()) || _.isNull(this.selectedFolder())) {\n return folderName;\n }\n\n return this.selectedFolder() + '/' + folderName;\n },\n\n /**\n * Return configured prompt with input field\n */\n getPrompt: function (data) {\n prompt({\n title: $t(data.title),\n content: $t(data.content),\n modalClass: 'media-gallery-folder-prompt',\n validation: true,\n validationRules: ['required-entry', 'validate-filename'],\n attributesField: {\n name: 'folder_name',\n 'data-validate': '{required:true, validate-filename}',\n maxlength: '128'\n },\n attributesForm: {\n novalidate: 'novalidate',\n action: ''\n },\n context: this,\n actions: data.actions,\n buttons: data.buttons\n });\n },\n\n /**\n * Confirmation popup for delete folder action.\n */\n deleteFolder: function () {\n confirm({\n title: $t('Are you sure you want to delete this folder?'),\n modalClass: 'delete-folder-confirmation-popup',\n content: $t('The following folder is going to be deleted: %1')\n .replace('%1', this.selectedFolder()),\n actions: {\n\n /**\n * Delete folder on button click\n */\n confirm: function () {\n deleteDirectory(\n this.directoryTree().deleteDirectoryUrl,\n this.selectedFolder()\n ).then(function () {\n this.directoryTree().removeNode();\n this.directoryTree().selectStorageRoot();\n $(window).trigger('folderDeleted.enhancedMediaGallery');\n }.bind(this)).fail(function (error) {\n uiAlert({\n content: error\n });\n });\n }.bind(this)\n }\n });\n },\n\n /**\n * Set inactive all nodes, adds disable state to Delete Folder Button\n */\n setInActive: function () {\n this.selectedFolder(null);\n $(this.deleteButtonSelector).attr('disabled', true).addClass('disabled');\n },\n\n /**\n * Set active node, remove disable state from Delete Forlder button\n *\n * @param {String} folderId\n */\n setActive: function (folderId) {\n if (!this.allowedActions.includes('delete_folder')) {\n return;\n }\n\n this.selectedFolder(folderId);\n $(this.deleteButtonSelector).prop('disabled', false).removeClass('disabled');\n },\n\n /**\n * @private\n */\n _addValidation: function () {\n $.validator.addMethod(\n 'validate-filename', function (value) {\n return $.mage.isEmptyNoTrim(value) || /^[a-z0-9\\-\\_]+$/si.test(value);\n },\n $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9), underscore (_) or hyphen (-) in this field. No spaces or other characters are allowed.')); //eslint-disable-line max-len\n }\n });\n});\n","Magento_MediaGalleryUi/js/directory/actions/deleteDirectory.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'mage/translate'\n], function ($, $t) {\n 'use strict';\n\n return function (deleteFolderUrl, path) {\n var deferred = $.Deferred(),\n message;\n\n $.ajax({\n type: 'POST',\n url: deleteFolderUrl,\n dataType: 'json',\n showLoader: true,\n data: {\n path: path\n },\n context: this,\n\n /**\n * Resolve if delete folder success, reject with response message othervise\n *\n * @param {Object} response\n */\n success: function (response) {\n if (response.success) {\n deferred.resolve(response.message);\n\n return;\n }\n\n deferred.reject(response.message);\n },\n\n /**\n * Extract the message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = $t('Could not delete the directory.');\n } else {\n message = response.responseJSON.message;\n }\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_MediaGalleryUi/js/directory/actions/createDirectory.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'mage/translate'\n], function ($, $t) {\n 'use strict';\n\n return function (createFolderUrl, paths) {\n var deferred = $.Deferred(),\n message,\n data = {\n paths: paths\n };\n\n $.ajax({\n type: 'POST',\n url: createFolderUrl,\n dataType: 'json',\n showLoader: true,\n data: data,\n context: this,\n\n /**\n * Resolve if success, reject with response message othervise\n *\n * @param {Object} response\n */\n success: function (response) {\n if (response.success) {\n deferred.resolve(response.message);\n\n return;\n }\n\n deferred.reject(response.message);\n },\n\n /**\n * Extract the message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = $t('Could not create the directory.');\n } else {\n message = response.responseJSON.message;\n }\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_MediaGalleryUi/js/image/image-details.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'underscore',\n 'uiComponent',\n 'Magento_MediaGalleryUi/js/action/getDetails'\n], function ($, _, Component, getDetails) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_MediaGalleryUi/image/image-details',\n modalSelector: '',\n modalWindowSelector: '',\n imageDetailsUrl: '/media_gallery/image/details',\n images: [],\n tagListLimit: 7,\n showAllTags: false,\n image: null,\n modules: {\n mediaGridMessages: '${ $.mediaGridMessages }'\n }\n },\n\n /**\n * Init observable variables\n *\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'image',\n 'showAllTags'\n ]);\n\n return this;\n },\n\n /**\n * Show image details by ID\n *\n * @param {String} imageId\n */\n showImageDetailsById: function (imageId) {\n if (_.isUndefined(this.images[imageId])) {\n getDetails(this.imageDetailsUrl, [imageId]).then(function (imageDetails) {\n this.images[imageId] = imageDetails[imageId];\n this.image(this.images[imageId]);\n this.openImageDetailsModal();\n }.bind(this)).fail(function (error) {\n this.addMediaGridMessage('error', error);\n }.bind(this));\n\n return;\n }\n\n if (this.image() && this.image().id === imageId) {\n this.openImageDetailsModal();\n\n return;\n }\n\n this.image(this.images[imageId]);\n this.openImageDetailsModal();\n },\n\n /**\n * Open image details popup\n */\n openImageDetailsModal: function () {\n var modalElement = $(this.modalSelector);\n\n if (!modalElement.length || _.isUndefined(modalElement.modal)) {\n return;\n }\n\n this.showAllTags(false);\n modalElement.modal('openModal');\n },\n\n /**\n * Close image details popup\n */\n closeImageDetailsModal: function () {\n var modalElement = $(this.modalSelector);\n\n if (!modalElement.length || _.isUndefined(modalElement.modal)) {\n return;\n }\n\n modalElement.modal('closeModal');\n },\n\n /**\n * Add media grid message\n *\n * @param {String} code\n * @param {String} message\n */\n addMediaGridMessage: function (code, message) {\n this.mediaGridMessages().add(code, message);\n this.mediaGridMessages().scheduleCleanup();\n },\n\n /**\n * Get tag text\n *\n * @param {String} tagText\n * @param {Number} tagIndex\n * @return {String}\n */\n getTagText: function (tagText, tagIndex) {\n return tagText + (this.image().tags.length - 1 === tagIndex ? '' : ',');\n },\n\n /**\n * Show all image tags\n */\n showMoreImageTags: function () {\n this.showAllTags(true);\n },\n\n /**\n * Is value an object\n *\n * @param {*} value\n * @returns {Boolean}\n */\n isArray: function (value) {\n return _.isArray(value);\n },\n\n /**\n * Is value not empty\n *\n * @param {*} value\n * @returns {Boolean}\n */\n notEmpty: function (value) {\n return value.length > 0;\n },\n\n /**\n * Get name and number text for used in link\n *\n * @param {Object} item\n * @returns {String}\n */\n getUsedInText: function (item) {\n return item.name + '(' + item.number + ')';\n },\n\n /**\n * Get filter url\n *\n * @param {String} link\n */\n getFilterUrl: function (link) {\n return link + '?filters[asset_id]=[' + this.image().id + ']';\n },\n\n /**\n * Check if details modal is active\n * @return {Boolean}\n */\n isActive: function () {\n return $(this.modalWindowSelector).hasClass('_show');\n },\n\n /**\n * Remove image details\n *\n * @param {String} id\n */\n removeCached: function (id) {\n delete this.images[id];\n }\n });\n});\n","Magento_MediaGalleryUi/js/image/image-edit.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'underscore',\n 'uiComponent',\n 'uiLayout',\n 'Magento_Ui/js/lib/key-codes',\n 'Magento_MediaGalleryUi/js/action/getDetails',\n 'mage/validation'\n], function ($, _, Component, layout, keyCodes, getDetails) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_MediaGalleryUi/image/image-edit',\n modalSelector: '.media-gallery-edit-image-details-modal',\n imageEditDetailsUrl: '/media_gallery/image/details',\n saveDetailsUrl: '/media_gallery/image/saveDetails',\n images: [],\n image: null,\n keywordOptions: [],\n selectedKeywords: [],\n newKeyword: '',\n newKeywordSelector: '#keyword',\n modules: {\n mediaGridMessages: '${ $.mediaGridMessages }',\n keywordsSelect: '${ $.name }_keywords'\n },\n viewConfig: [\n {\n component: 'Magento_Ui/js/form/element/ui-select',\n name: '${ $.name }_keywords',\n template: 'ui/grid/filters/elements/ui-select',\n disableLabel: true\n }\n ],\n exports: {\n keywordOptions: '${ $.name }_keywords:options'\n },\n links: {\n selectedKeywords: '${ $.name }_keywords:value'\n }\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super().initView();\n\n return this;\n },\n\n /**\n * Add a new keyword to select\n */\n addKeyword: function () {\n var options = this.keywordOptions(),\n selected = this.selectedKeywords(),\n newKeywordField = $(this.newKeywordSelector);\n\n newKeywordField.validation();\n\n if (!newKeywordField.validation('isValid') || this.newKeyword() === '') {\n return;\n }\n\n options.push(this.getOptionForKeyword(this.newKeyword()));\n selected.push(this.newKeyword());\n this.newKeyword('');\n\n this.keywordOptions(options);\n this.selectedKeywords(selected);\n },\n\n /**\n * Create an option object based on keyword string\n *\n * @param {String} keyword\n * @returns {Object}\n */\n getOptionForKeyword: function (keyword) {\n return {\n 'is_active': 1,\n level: 1,\n value: keyword,\n label: keyword\n };\n },\n\n /**\n * Convert array of keywords to options format\n *\n * @param {Array} tags\n */\n setKeywordOptions: function (tags) {\n var options = [];\n\n tags.forEach(function (tag) {\n options.push(this.getOptionForKeyword(tag));\n }.bind(this));\n\n this.keywordOptions(options);\n this.selectedKeywords(tags);\n },\n\n /**\n * Initialize child components\n *\n * @returns {Object}\n */\n initView: function () {\n layout(this.viewConfig);\n\n return this;\n },\n\n /**\n * Init observable variables\n *\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'image',\n 'keywordOptions',\n 'selectedKeywords',\n 'newKeyword'\n ]);\n\n return this;\n },\n\n /**\n * Get image details by ID\n *\n * @param {String} imageId\n */\n showEditDetailsPanel: function (imageId) {\n if (_.isUndefined(this.images[imageId])) {\n getDetails(this.imageEditDetailsUrl, [imageId]).then(function (imageDetails) {\n this.images[imageId] = imageDetails[imageId];\n this.image(this.images[imageId]);\n this.openEditImageDetailsModal();\n }.bind(this)).fail(function (error) {\n this.addMediaGridMessage('error', error);\n }.bind(this));\n\n return;\n }\n\n if (this.image() && this.image().id === imageId) {\n this.openEditImageDetailsModal();\n\n return;\n }\n\n this.image(this.images[imageId]);\n this.openEditImageDetailsModal();\n },\n\n /**\n * Open edit image details popup\n */\n openEditImageDetailsModal: function () {\n var modalElement = $(this.modalSelector);\n\n if (!modalElement.length || _.isUndefined(modalElement.modal)) {\n return;\n }\n\n this.setKeywordOptions(this.image().tags);\n this.newKeyword('');\n\n modalElement.modal('openModal');\n },\n\n /**\n * Close image details popup\n */\n closeImageDetailsModal: function () {\n var modalElement = $(this.modalSelector);\n\n if (!modalElement.length || _.isUndefined(modalElement.modal)) {\n return;\n }\n\n modalElement.modal('closeModal');\n },\n\n /**\n * Add media grid message\n *\n * @param {String} code\n * @param {String} message\n */\n addMediaGridMessage: function (code, message) {\n this.mediaGridMessages().add(code, message);\n this.mediaGridMessages().scheduleCleanup();\n },\n\n /**\n * Handle Enter key event to save image details\n *\n * @param {Object} data\n * @param {jQuery.Event} event\n * @returns {Boolean}\n */\n handleEnterKey: function (data, event) {\n var modalElement = $(this.modalSelector),\n key = keyCodes[event.keyCode];\n\n if (key === 'enterKey') {\n event.preventDefault();\n modalElement.find('.page-action-buttons button.save').trigger('click');\n }\n\n return true;\n },\n\n /**\n * Remove cached image details in edit form\n *\n * @param {String} id\n */\n removeCached: function (id) {\n delete this.images[id];\n }\n });\n});\n","Magento_MediaGalleryUi/js/image/image-actions.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'underscore',\n 'uiElement',\n 'Magento_MediaGalleryUi/js/action/deleteImageWithDetailConfirmation',\n 'Magento_MediaGalleryUi/js/grid/columns/image/insertImageAction',\n 'Magento_MediaGalleryUi/js/action/saveDetails',\n 'mage/validation'\n], function ($, _, Element, deleteImageWithDetailConfirmation, addSelected, saveDetails) {\n 'use strict';\n\n return Element.extend({\n defaults: {\n modalSelector: '',\n modalWindowSelector: '',\n mediaGalleryImageDetailsName: 'mediaGalleryImageDetails',\n mediaGalleryEditDetailsName: 'mediaGalleryEditDetails',\n template: 'Magento_MediaGalleryUi/image/actions',\n modules: {\n imageModel: '${ $.imageModelName }',\n mediaGalleryImageDetails: '${ $.mediaGalleryImageDetailsName }',\n mediaGalleryEditDetails: '${ $.mediaGalleryEditDetailsName }'\n }\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super();\n $(window).on('fileDeleted.enhancedMediaGallery', this.closeViewDetailsModal.bind(this));\n\n return this;\n },\n\n /**\n * Close the images details modal\n */\n closeModal: function () {\n var modalElement = $(this.modalSelector),\n modalWindow = $(this.modalWindowSelector);\n\n if (!modalWindow.hasClass('_show') || !modalElement.length || _.isUndefined(modalElement.modal)) {\n return;\n }\n\n this.mediaGalleryEditDetails().keywordsSelect().cacheOptions.plain = [];\n modalElement.modal('closeModal');\n },\n\n /**\n * Opens the image edit panel\n */\n editImageAction: function () {\n var record = this.imageModel().getSelected().id;\n\n this.mediaGalleryEditDetails().showEditDetailsPanel(record);\n },\n\n /**\n * Delete image action\n */\n deleteImageAction: function () {\n var imageDetailsUrl = this.mediaGalleryImageDetails().imageDetailsUrl,\n deleteImageUrl = this.imageModel().deleteImageUrl;\n\n deleteImageWithDetailConfirmation.deleteImageAction(\n [this.imageModel().getSelected().id],\n imageDetailsUrl,\n deleteImageUrl\n );\n },\n\n /**\n * Save image details action\n */\n saveImageDetailsAction: function () {\n var saveDetailsUrl = this.mediaGalleryEditDetails().saveDetailsUrl,\n modalElement = $(this.modalSelector),\n form = modalElement.find('#image-edit-details-form'),\n imageId = this.imageModel().getSelected().id,\n keywords = this.mediaGalleryEditDetails().selectedKeywords(),\n imageDetails = this.mediaGalleryImageDetails(),\n imageEditDetails = this.mediaGalleryEditDetails();\n\n if (form.validation('isValid')) {\n saveDetails(\n saveDetailsUrl,\n [form.serialize(), $.param({\n 'keywords': keywords\n })].join('&')\n ).then(function () {\n this.closeModal();\n this.imageModel().reloadGrid();\n imageDetails.removeCached(imageId);\n imageEditDetails.removeCached(imageId);\n\n if (imageDetails.isActive()) {\n imageDetails.showImageDetailsById(imageId);\n }\n }.bind(this));\n }\n },\n\n /**\n * Add Image\n */\n addImage: function () {\n addSelected.insertImage(\n this.imageModel().getSelected(),\n {\n onInsertUrl: this.imageModel().onInsertUrl,\n storeId: this.imageModel().storeId\n }\n );\n this.closeModal();\n },\n\n /**\n * Close view details modal after confirm deleting image\n */\n closeViewDetailsModal: function () {\n this.closeModal();\n }\n });\n});\n","Magento_LoginAsCustomerAssistance/js/not-allowed-popup.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiComponent',\n 'Magento_Ui/js/modal/confirm',\n 'mage/translate'\n], function (Component, confirm, $t) {\n\n 'use strict';\n\n return Component.extend({\n /**\n * Initialize Component\n */\n initialize: function () {\n var self = this,\n content;\n\n this._super();\n\n content = '<div class=\"message message-warning\">' + self.content + '</div>';\n\n /**\n * Not Allowed popup\n *\n * @returns {Boolean}\n */\n window.lacNotAllowedPopup = function () {\n confirm({\n title: self.title,\n content: content,\n modalClass: 'confirm lac-confirm',\n buttons: [\n {\n text: $t('Close'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Click handler.\n */\n click: function (event) {\n this.closeModal(event);\n }\n }\n ]\n });\n\n return false;\n };\n }\n });\n});\n","Magento_ReleaseNotification/js/modal/component.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/modal-component',\n 'Magento_Ui/js/modal/alert',\n 'mage/translate'\n], function ($, Modal, alert, $t) {\n 'use strict';\n\n return Modal.extend({\n defaults: {\n imports: {\n logAction: '${ $.provider }:data.logAction'\n }\n },\n\n /**\n * Error handler.\n *\n * @param {Object} xhr - request result.\n */\n onError: function (xhr) {\n if (xhr.statusText === 'abort') {\n return;\n }\n\n alert({\n content: xhr.message || $t('An error occurred while logging process.')\n });\n },\n\n /**\n * Log release notes show\n */\n logReleaseNotesShow: function () {\n var self = this,\n data = {\n 'form_key': window.FORM_KEY\n };\n\n $.ajax({\n type: 'POST',\n url: this.logAction,\n data: data,\n showLoader: true\n }).done(function (xhr) {\n if (xhr.error) {\n self.onError(xhr);\n }\n }).fail(this.onError);\n },\n\n /**\n * Close release notes\n */\n closeReleaseNotes: function () {\n this.logReleaseNotesShow();\n this.closeModal();\n }\n });\n});\n","Magento_AdobeStockAdminUi/js/connection.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'ko',\n 'uiComponent',\n 'jquery'\n], function (ko, Component, $) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_AdobeStockAdminUi/connection',\n connectionFailedMessage: 'Connection test failed.',\n emptyApiKeyMessage: 'Please fill the \"API Key (Client ID)\" field for a connection test',\n apiKeyInputId: 'system_adobe_stock_integration_api_key',\n url: '',\n success: false,\n message: '',\n visible: false\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'success',\n 'message',\n 'visible'\n ]);\n\n return this;\n },\n\n /**\n * @override\n */\n initialize: function () {\n this._super();\n this.messageClass = ko.computed(function () {\n return 'message-validation message message-' + (this.success() ? 'success' : 'error');\n }, this);\n\n if (!this.success()) {\n this.showMessage(false, this.connectionFailedMessage);\n }\n },\n\n /**\n * @param {bool} success\n * @param {String} message\n */\n showMessage: function (success, message) {\n this.message(message);\n this.success(success);\n this.visible(true);\n },\n\n /**\n * Send request to server to test connection to Adobe Stock API and display the result\n */\n testConnection: function () {\n var apiKey = document.getElementById(this.apiKeyInputId).value;\n\n if (apiKey.length === 0) {\n this.showMessage(false, this.emptyApiKeyMessage);\n\n return;\n }\n\n this.visible(false);\n\n $.ajax({\n type: 'POST',\n url: this.url,\n dataType: 'json',\n data: {\n 'api_key': apiKey\n },\n success: function (response) {\n this.showMessage(response.success === true, response.message);\n }.bind(this),\n error: function () {\n this.showMessage(false, this.connectionFailedMessage);\n }.bind(this)\n });\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/signIn.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_AdobeIms/js/signIn',\n 'Magento_AdobeIms/js/action/authorization',\n 'Magento_Ui/js/modal/confirm'\n], function ($, signIn, auth, confirm) {\n 'use strict';\n\n return signIn.extend({\n\n defaults: {\n userQuota: {},\n // eslint-disable-next-line max-len\n dataProvider: 'name = adobe_stock_images_listing.adobe_stock_images_listing_data_source, ns = adobe_stock_images_listing',\n // eslint-disable-next-line max-len\n previewProvider: 'name = adobe_stock_images_listing.adobe_stock_images_listing.adobe_stock_images_columns.preview, ns = adobe_stock_images_listing',\n quotaUrl: 'adobe_stock/license/quota',\n modules: {\n source: '${ $.dataProvider }',\n preview: '${ $.previewProvider }'\n }\n },\n\n /**\n * @inheritdoc\n */\n initObservable: function () {\n this._super().observe(['userQuota']);\n\n return this;\n },\n\n /**\n * Login to Adobe\n *\n * @return {*}\n */\n login: function () {\n var deferred = $.Deferred();\n\n if (this.user().isAuthorized) {\n return deferred.resolve();\n }\n auth(this.loginConfig)\n .then(function (response) {\n this.loadUserProfile();\n deferred.resolve(response);\n }.bind(this))\n .fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n },\n\n /**\n * Login action with popup on error..\n */\n loginClick: function () {\n this.login().fail(function (error) {\n this.showLoginErrorPopup(error);\n }.bind(this));\n },\n\n /**\n * Show popup that user failed to login.\n */\n showLoginErrorPopup: function (error) {\n confirm({\n title: $.mage.__('Couldn\\'t log you in'),\n content: error,\n buttons: [{\n text: $.mage.__('Ok'),\n class: 'action-primary action-accept'\n }],\n actions: {\n\n /**\n * Close modal\n */\n confirm: function (event) {\n this.closeModal(event);\n }\n }\n });\n },\n\n /**\n * Logout from adobe account\n */\n logout: function () {\n $.ajax({\n type: 'POST',\n url: this.logoutUrl,\n data: {\n 'form_key': window.FORM_KEY\n },\n dataType: 'json',\n context: this,\n showLoader: true,\n success: function () {\n this.user({\n isAuthorized: false,\n name: '',\n email: '',\n image: this.defaultProfileImage\n });\n }.bind(this),\n\n /**\n * @param {Object} response\n * @returns {String}\n */\n error: function (response) {\n return response.message;\n }\n });\n },\n\n /**\n * Retrieves full user quota.\n */\n getUserQuota: function () {\n $.ajax({\n type: 'GET',\n url: this.quotaUrl,\n dataType: 'json',\n context: this,\n\n /**\n * @param {Object} response\n * @returns void\n */\n success: function (response) {\n this.userQuota(response.result);\n },\n\n /**\n * @param {Object} response\n * @returns {String}\n */\n error: function (response) {\n return response.message;\n }\n });\n },\n\n /**\n * @inheritdoc\n */\n loadUserProfile: function () {\n $.ajax({\n type: 'GET',\n url: this.profileUrl,\n dataType: 'json',\n context: this,\n\n /**\n * @param {Object} response\n * @returns void\n */\n success: function (response) {\n this.user({\n isAuthorized: true,\n name: response.result.name,\n email: response.result.email,\n image: response.result.image\n });\n this.getUserQuota();\n },\n\n /**\n * @param {Object} response\n * @returns {String}\n */\n error: function (response) {\n return response.message;\n }\n });\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/path-utility.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([], function () {\n 'use strict';\n\n return {\n /**\n * Extracts image name from its path\n *\n * @param {String} path\n * @returns {String}\n */\n getImageNameFromPath: function (path) {\n var filePathArray = path.split('/'),\n imageIndex = filePathArray.length - 1;\n\n return filePathArray[imageIndex].substring(0, filePathArray[imageIndex].lastIndexOf('.'));\n },\n\n /**\n * Generate meaningful name image file,\n * allow only alphanumerics, dashes, and underscores\n *\n * @param {String} title\n * @param {Number} id\n * @return string\n */\n generateImageName: function (title, id) {\n var fileName = title.substring(0, 32)\n .replace(/[^a-zA-Z0-9_]/g, '-')\n .replace(/-{2,}/g, '-')\n .toLowerCase();\n\n /* If the filename does not contain latin chars, use ID as a filename */\n return fileName === '-' ? id : fileName;\n },\n\n /**\n * Get image file extension\n *\n * @param {String} contentType\n * @return string\n */\n getImageExtension: function (contentType) {\n return contentType.match(/[^/]{1,4}$/);\n },\n\n /**\n * Create path\n *\n * @param {String} directoryPath\n * @param {String} fileName\n * @param {String} contentType\n * @returns {String}\n */\n buildPath: function (directoryPath, fileName, contentType) {\n return directoryPath + '/' + fileName + '.' + this.getImageExtension(contentType);\n }\n };\n});\n","Magento_AdobeStockImageAdminUi/js/media-gallery.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/* global Base64 */\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/confirm'\n], function ($, confirm) {\n 'use strict';\n\n return {\n jsTreeRootFolderId: 'root',\n jsTreeFolderNameMaxLength: 20,\n\n /**\n * Locate downloaded image in media browser\n *\n * @param {String} path\n */\n locate: function (path) {\n var imageFolder = this.selectFolder(path),\n imageFilename = path.substring(path.lastIndexOf('/') + 1),\n locatedImage;\n\n if (imageFolder.length) {\n locatedImage = $('div[data-row=\"file\"]:has(img[alt=\\\"' + imageFilename + '\\\"])');\n\n return locatedImage.length ? locatedImage : false;\n }\n\n $.ajaxSetup({\n async: true\n });\n },\n\n /**\n * Select folder\n *\n * @param {String} path\n */\n selectFolder: function (path) {\n var imageFolder,\n pathId,\n imagePath = path.replace(/^\\/+/, ''),\n folderPathParts = imagePath.split('/').slice(0, -1);\n\n $.ajaxSetup({\n async: false\n });\n\n if (folderPathParts.length > 1) {\n this.openFolderTree(folderPathParts);\n }\n\n pathId = Base64.idEncode(folderPathParts.join('/'));\n imageFolder = $('.jstree li[data-id=\"' + pathId + '\"]').children('a');\n\n if (!imageFolder.length) {\n imageFolder = $('.jstree li[data-id=\"' + this.jsTreeRootFolderId + '\"]')\n .children('a');\n }\n\n if (imageFolder.length) {\n imageFolder[0].click();\n }\n\n return imageFolder;\n },\n\n /**\n * Show popup that image cannot be located\n */\n notLocated: function () {\n confirm({\n title: $.mage.__('The image cannot be located'),\n content: $.mage.__('We cannot find this image in the media gallery.'),\n buttons: [{\n text: $.mage.__('Ok'),\n class: 'action-primary',\n attr: {},\n\n /**\n * Close modal on button click\n */\n click: function (event) {\n this.closeModal(event);\n }\n }]\n });\n },\n\n /**\n * Open folder Tree\n *\n * @param {Array} folderPathParts\n */\n openFolderTree: function (folderPathParts) {\n var i,\n pathId,\n openFolderButton,\n folderPath = '';\n\n for (i = 0; i < folderPathParts.length - 1; i++) {\n if (folderPath === '') {\n folderPath = folderPathParts[i];\n } else {\n folderPath = folderPath + '/' + folderPathParts[i];\n }\n pathId = Base64.idEncode(folderPath);\n openFolderButton = $('.jstree li[data-id=\"' + pathId + '\"].jstree-closed').children('.jstree-icon');\n\n if (openFolderButton.length) {\n openFolderButton.click();\n }\n }\n }\n };\n});\n","Magento_AdobeStockImageAdminUi/js/panel.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiElement',\n 'jquery',\n 'mage/translate'\n], function (Element, $, $t) {\n 'use strict';\n\n return Element.extend({\n defaults: {\n containerId: '#adobe-stock-images-search-modal',\n masonryComponentPath: 'adobe_stock_images_listing.adobe_stock_images_listing.adobe_stock_images_columns',\n dataSourcePath: 'adobe_stock_images_listing.adobe_stock_images_listing_data_source',\n modules: {\n masonry: '${ $.masonryComponentPath }',\n source: '${ $.dataSourcePath }'\n }\n },\n\n /**\n * Init component\n *\n * @return {exports}\n */\n initialize: function () {\n this._super();\n\n $(this.containerId).modal({\n type: 'slide',\n buttons: [],\n modalClass: 'adobe-stock-modal',\n title: $t('Adobe Stock')\n }).on('openModal', function () {\n this.masonry().setLayoutStylesWhenLoaded();\n }.bind(this));\n\n try {\n $(this.containerId).applyBindings();\n } catch (e) {\n //already bounded\n }\n\n $(window).on('fileDeleted.mediabrowser', this.reloadGrid.bind(this));\n\n return this;\n },\n\n /**\n * Update listing data\n */\n reloadGrid: function () {\n this.source().set('params.t', Date.now());\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/confirmation/license.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/prompt',\n 'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'\n], function ($, prompt, adobePromptContentTmpl) {\n 'use strict';\n\n return function (recordTitle, quotaMessage, isPreviewDownloaded, proposedfileName, fileExtension) {\n var confirmationContent = $.mage.__('License \"' + recordTitle + '\"'),\n deferred = $.Deferred(),\n displayFieldName = !isPreviewDownloaded ? '<b>' + $.mage.__('File Name') + '</b>' : '',\n content = '<p>' + confirmationContent + '</p><p><b>' + quotaMessage + '</b></p><br>' + displayFieldName,\n data = {\n 'title': $.mage.__('License Adobe Stock Images?'),\n 'content': content,\n 'visible': !isPreviewDownloaded,\n 'actions': {\n /**\n * Confirm action\n *\n * @param {String} fileName\n */\n confirm: function (fileName) {\n deferred.resolve(fileName);\n }\n },\n 'buttons': [{\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal\n */\n click: function () {\n this.closeModal();\n deferred.reject();\n }\n }, {\n text: $.mage.__('Confirm'),\n class: 'action-primary action-accept'\n }]\n\n };\n\n prompt({\n title: data.title,\n content: data.content,\n value: proposedfileName,\n imageExtension: fileExtension,\n visible: data.visible,\n promptContentTmpl: adobePromptContentTmpl,\n modalClass: 'adobe-stock-save-preview-prompt',\n validation: true,\n promptField: '[data-role=\"adobe-stock-image-name-field\"]',\n validationRules: ['required-entry', 'validate-image-name'],\n attributesForm: {\n novalidate: 'novalidate',\n action: '',\n onkeydown: 'return event.key != \\'Enter\\';'\n },\n attributesField: {\n name: 'name',\n 'data-validate': '{required:true}',\n maxlength: '128'\n },\n context: this,\n actions: data.actions,\n buttons: data.buttons\n });\n\n if (!data.visible) {\n $('.adobe-stock-save-preview-prompt').trigger('focus');\n }\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/confirmation/save.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/prompt',\n 'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'\n], function ($, prompt, adobePromptContentTmpl) {\n 'use strict';\n\n return function (proposedfileName, fileExtension) {\n var deferred = $.Deferred(),\n data = {\n 'title': $.mage.__('Save Preview'),\n 'content': $.mage.__('File Name'),\n 'visible': true,\n 'actions': {\n /**\n * Resolve with the specified file name\n *\n * @param {String} specifiedFileName\n */\n confirm: function (specifiedFileName) {\n deferred.resolve(specifiedFileName);\n }\n },\n 'buttons': [{\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal on button click\n */\n click: function () {\n this.closeModal();\n deferred.reject();\n }\n }, {\n text: $.mage.__('Confirm'),\n class: 'action-primary action-accept'\n }]\n\n };\n\n prompt({\n title: data.title,\n content: data.content,\n value: proposedfileName,\n imageExtension: fileExtension,\n visible: data.visible,\n promptContentTmpl: adobePromptContentTmpl,\n modalClass: 'adobe-stock-save-preview-prompt',\n validation: true,\n promptField: '[data-role=\"adobe-stock-image-name-field\"]',\n validationRules: ['required-entry', 'validate-image-name'],\n attributesForm: {\n novalidate: 'novalidate',\n action: '',\n onkeydown: 'return event.key != \\'Enter\\';'\n },\n attributesField: {\n name: 'name',\n 'data-validate': '{required:true}',\n maxlength: '128'\n },\n context: this,\n actions: data.actions,\n buttons: data.buttons\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/confirmation/buyCredits.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/confirm'\n], function ($, confirm) {\n 'use strict';\n\n return function (buyCreditsUrl, recordTitle, quotaMessage) {\n var confirmationContent = $.mage.__('License \"' + recordTitle + '\"'),\n content = '<p>' + confirmationContent + '</p><p><b>' + quotaMessage + '</b></p><br>';\n\n confirm({\n title: $.mage.__('License Adobe Stock Images?'),\n content: content,\n buttons: [{\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal\n */\n click: function () {\n this.closeModal();\n }\n },{\n text: $.mage.__('Buy Credits'),\n class: 'action-primary action-accept',\n\n /**\n * Close modal\n */\n click: function () {\n window.open(buyCreditsUrl);\n this.closeModal();\n }\n }]\n });\n };\n});\n","Magento_AdobeStockImageAdminUi/js/confirmation/saveLicensed.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/prompt',\n 'text!Magento_AdobeStockImageAdminUi/template/modal/adobe-modal-prompt-content.html'\n], function ($, prompt, adobePromptContentTmpl) {\n 'use strict';\n\n return function (proposedfileName, fileExtension) {\n var deferred = $.Deferred(),\n data = {\n 'title': $.mage.__('Save'),\n 'content': $.mage.__('File Name'),\n 'visible': true,\n 'actions': {\n /**\n * Resolve with the specified file name\n *\n * @param {String} fileName\n */\n confirm: function (fileName) {\n deferred.resolve(fileName);\n }\n },\n 'buttons': [\n {\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Close modal on button click\n */\n click: function () {\n this.closeModal();\n deferred.reject();\n }\n },\n {\n text: $.mage.__('Confirm'),\n class: 'action-primary action-accept'\n }\n ]\n };\n\n prompt({\n title: data.title,\n content: data.content,\n value: proposedfileName,\n imageExtension: fileExtension,\n visible: data.visible,\n promptContentTmpl: adobePromptContentTmpl,\n modalClass: 'adobe-stock-save-preview-prompt',\n validation: true,\n promptField: '[data-role=\"adobe-stock-image-name-field\"]',\n validationRules: ['required-entry', 'validate-image-name'],\n attributesForm: {\n novalidate: 'novalidate',\n action: '',\n onkeydown: 'return event.key != \\'Enter\\';'\n },\n attributesField: {\n name: 'name',\n 'data-validate': '{required:true}',\n maxlength: '128'\n },\n context: this,\n actions: data.actions,\n buttons: data.buttons\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/validation/validate-image-name.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'mage/translate',\n 'jquery/validate'\n], function ($, $t) {\n 'use strict';\n\n $.validator.addMethod(\n 'validate-image-name', function (value) {\n return /^[a-zA-Z0-9\\-\\_]+$/i.test(value);\n\n }, $t('Please name the file using only letters, numbers, underscores and dashes'));\n});\n","Magento_AdobeStockImageAdminUi/js/action/getLicenseStatus.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n return function (requestUrl, ids) {\n var deferred = $.Deferred();\n\n $.ajax({\n type: 'GET',\n url: requestUrl + '?ids=' + ids.join(','),\n data: {\n 'form_key': window.FORM_KEY\n },\n showLoader: true,\n dataType: 'json',\n\n /**\n * Resolve with the response result\n *\n * @param {Object} response\n */\n success: function (response) {\n deferred.resolve(response.result);\n },\n\n /**\n * Reject with the message from response\n *\n * @param {Object} response\n */\n error: function (response) {\n var message = response.message;\n\n if (response.status === 403) {\n message = $.mage.__('Your admin role does not have permissions to license an image');\n }\n\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/action/save.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n return function (requestUrl, adobeAssetId, destinationPath) {\n var deferred = $.Deferred();\n\n $.ajax({\n type: 'POST',\n url: requestUrl,\n dataType: 'json',\n showLoader: true,\n data: {\n 'media_id': adobeAssetId,\n 'destination_path': destinationPath\n },\n\n /**\n * Resolve on success\n */\n success: function () {\n deferred.resolve();\n },\n\n /**\n * Extract the error message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n var message;\n\n if (typeof response.responseJSON === 'undefined' ||\n typeof response.responseJSON.message === 'undefined'\n ) {\n message = 'Could not save the asset!';\n } else {\n message = response.responseJSON.message;\n }\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/action/saveLicensed.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_AdobeStockImageAdminUi/js/action/save',\n 'Magento_AdobeStockImageAdminUi/js/confirmation/saveLicensed',\n 'Magento_AdobeStockImageAdminUi/js/path-utility'\n], function ($, saveAction, saveLicensedConfirmation, pathUtility) {\n 'use strict';\n\n return function (requestUrl, id, title, path, contentType, directoryPath) {\n var imageName = '',\n destinationPath,\n deferred = $.Deferred();\n\n if (path !== '') {\n imageName = pathUtility.getImageNameFromPath(path);\n destinationPath = pathUtility.buildPath(directoryPath, imageName, contentType);\n saveAction(\n requestUrl,\n id,\n destinationPath\n ).then(function () {\n deferred.resolve(destinationPath);\n }).fail(function (message) {\n deferred.reject(message);\n });\n\n return deferred.promise();\n }\n\n saveLicensedConfirmation(\n pathUtility.generateImageName(title, id),\n pathUtility.getImageExtension(contentType)\n ).then(function (fileName) {\n destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);\n saveAction(\n requestUrl,\n id,\n destinationPath\n ).then(function () {\n deferred.resolve(destinationPath);\n }).fail(function (message) {\n deferred.reject(message);\n });\n }).fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/action/licenseAndSave.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_AdobeStockImageAdminUi/js/action/save',\n 'Magento_AdobeStockImageAdminUi/js/confirmation/license',\n 'Magento_AdobeStockImageAdminUi/js/path-utility'\n], function ($, saveAction, licenseConfirmation, pathUtility) {\n 'use strict';\n\n return function (\n requestUrl,\n id,\n title,\n path,\n contentType,\n isDownloaded,\n quotaMessage,\n directoryPath\n ) {\n var deferred = $.Deferred(),\n destinationPath;\n\n licenseConfirmation(\n title,\n quotaMessage,\n isDownloaded,\n pathUtility.generateImageName(title, id),\n pathUtility.getImageExtension(contentType)\n ).then(function (fileName) {\n\n if (typeof fileName === 'undefined') {\n fileName = pathUtility.getImageNameFromPath(path);\n }\n\n destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);\n\n saveAction(\n requestUrl,\n id,\n destinationPath\n ).then(function () {\n deferred.resolve(destinationPath);\n }).fail(function (message) {\n deferred.reject(message);\n });\n }).fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/action/savePreview.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_AdobeStockImageAdminUi/js/action/save',\n 'Magento_AdobeStockImageAdminUi/js/confirmation/save',\n 'Magento_AdobeStockImageAdminUi/js/path-utility'\n], function ($, saveAction, saveConfirmation, pathUtility) {\n 'use strict';\n\n return function (requestUrl, id, title, contentType, directoryPath) {\n var deferred = $.Deferred(),\n destinationPath;\n\n saveConfirmation(\n pathUtility.generateImageName(title, id),\n pathUtility.getImageExtension(contentType)\n ).then(function (fileName) {\n destinationPath = pathUtility.buildPath(directoryPath, fileName, contentType);\n\n saveAction(\n requestUrl,\n id,\n destinationPath\n ).then(function () {\n deferred.resolve(destinationPath);\n }).fail(function (error) {\n deferred.reject(error);\n });\n }).fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/action/confirmQuota.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n return function (requestUrl, adobeAssetId) {\n var deferred = $.Deferred();\n\n $.ajax({\n type: 'GET',\n url: requestUrl,\n dataType: 'json',\n data: {\n 'media_id': adobeAssetId\n },\n showLoader: true,\n\n /**\n * Extract the data from the response and resolve\n *\n * @param {Object} response\n */\n success: function (response) {\n deferred.resolve({\n canLicense: response.result.canLicense,\n message: response.result.message\n });\n },\n\n /**\n * Extract the error message and reject\n *\n * @param {Object} response\n */\n error: function (response) {\n var message = response.JSON ? response.JSON.message\n : $.mage.__('Could not fetch licensing information.');\n\n if (response.status === 403) {\n message = $.mage.__('Your admin role does not have permissions to license an image');\n }\n\n deferred.reject(message);\n }\n });\n\n return deferred.promise();\n };\n});\n","Magento_AdobeStockImageAdminUi/js/components/images-grid-sizes.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'Magento_Ui/js/grid/paging/sizes',\n 'underscore'\n], function (Sizes, _) {\n 'use strict';\n\n return Sizes.extend({\n defaults: {\n value: 32,\n minSize: 1,\n maxSize: 64\n },\n\n exports: {\n value: '${ $.provider }:params.paging.page',\n options: '${ $.provider }:params.paging.options'\n },\n\n sizes: {\n '32': {\n value: 32,\n label: 32\n },\n '48': {\n value: 48,\n label: 48\n },\n '64': {\n value: 64,\n label: 64\n }\n },\n\n /**\n * @inheritdoc\n */\n updateArray: function () {\n if (_.isUndefined(this.options)) {\n this.options = this.sizes;\n }\n\n return this._super();\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/components/grid/column/overlay.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'Magento_Ui/js/grid/columns/overlay',\n 'Magento_AdobeStockImageAdminUi/js/action/getLicenseStatus'\n], function ($, _, overlay, getLicenseStatus) {\n 'use strict';\n\n return overlay.extend({\n defaults: {\n // eslint-disable-next-line max-len\n provider: 'name = adobe_stock_images_listing.adobe_stock_images_listing_data_source, ns = adobe_stock_images_listing',\n loginProvider: 'name = adobe-login, ns = adobe-login',\n getImagesUrl: 'adobe_stock/license/getlist',\n licensed: {},\n modules: {\n login: '${ $.loginProvider }'\n },\n listens: {\n '${ $.provider }:data.items': 'handleItemsUpdate',\n '${ $.loginProvider }:user': 'handleUserUpdate'\n },\n imports: {\n rows: '${ $.provider }:data.items'\n }\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'licensed'\n ]);\n\n return this;\n },\n\n /**\n * Updates the licensed data when items data is updated.\n *\n * @param {Array} items\n */\n handleItemsUpdate: function (items) {\n var ids = this.getIds(items);\n\n this.updateLicensed(ids);\n },\n\n /**\n * Updates the licensed data when user data is updated.\n */\n handleUserUpdate: function () {\n var ids = this.getIds(this.rows);\n\n this.updateLicensed(ids);\n },\n\n /**\n * Set Licensed images data.\n *\n * @param {Array} ids\n */\n updateLicensed: function (ids) {\n if (!this.isUserAuthorized() || ids.length === 0) {\n this.licensed({});\n\n return;\n }\n\n getLicenseStatus(this.getImagesUrl, ids).then(function (licensed) {\n this.licensed(licensed);\n }.bind(this));\n },\n\n /**\n * Checks if user is logged in and authorized\n *\n * @returns {Boolean}\n */\n isUserAuthorized: function () {\n return !_.isUndefined(this.login()) && this.login().user().isAuthorized;\n },\n\n /**\n * Get all ids from items array\n *\n * @param {Array} items\n * @returns {Number[]}\n */\n getIds: function (items) {\n var ids = [];\n\n items.forEach(function (record) {\n ids.push(record.id);\n });\n\n return ids;\n },\n\n /**\n * Returns top displacement of overlay according to image height\n *\n * @param {Object} record - Data to be preprocessed.\n * @returns {Object}\n */\n getStyles: function (record) {\n var height = record.styles().height.replace('px', '') - 40;\n\n return {\n top: height + 'px'\n };\n },\n\n /**\n * If overlay should be visible\n *\n * @param {Object} row\n * @returns {Boolean}\n */\n isVisible: function (row) {\n return this.licensed()[row.id];\n },\n\n /**\n * Get overlay label\n *\n * @param {Object} row\n * @returns {String}\n */\n getLabel: function (row) {\n return this.licensed()[row.id] ? 'Licensed' : '';\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/components/grid/column/image-preview.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'uiLayout',\n 'Magento_Ui/js/grid/columns/image-preview'\n], function ($, layout, imagePreview) {\n 'use strict';\n\n return imagePreview.extend({\n defaults: {\n downloadImagePreviewUrl: 'adobe_stock/preview/download',\n licenseAndDownloadUrl: 'adobe_stock/license/license',\n saveLicensedAndDownloadUrl: 'adobe_stock/license/saveLicensed',\n confirmationUrl: 'adobe_stock/license/confirmation',\n relatedImagesUrl: 'adobe_stock/preview/relatedimages',\n buyCreditsUrl: 'https://stock.adobe.com/',\n mediaGallerySelector: '.media-gallery-modal:has(#search_adobe_stock)',\n adobeStockModalSelector: '.adobe-search-images-modal',\n activeMediaGallerySelector: 'aside.modal-slide.adobe-stock-modal._show',\n modules: {\n keywords: '${ $.name }_keywords',\n related: '${ $.name }_related',\n actions: '${ $.name }_actions'\n },\n viewConfig: [\n {\n component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/keywords',\n name: '${ $.name }_keywords'\n },\n {\n component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/related',\n name: '${ $.name }_related'\n },\n {\n component: 'Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/actions',\n name: '${ $.name }_actions',\n provider: '${ $.provider }',\n mediaGallery: '${ $.mediaGalleryComponent }',\n mediaGalleryName: '${ $.mediaGalleryName }',\n mediaGalleryProvider: '${ $.mediaGalleryProvider }',\n mediaGallerySortBy: '${ $.mediaGallerySortBy }',\n mediaGallerySearchInput: '${ $.mediaGallerySearchInput }',\n mediaGalleryListingFilters: '${ $.mediaGalleryListingFilters }',\n getMediaGalleryAsset: '${ $.getMediaGalleryAsset }',\n imageEditDetailsUrl: '${ $.imageEditDetailsUrl }',\n listingPaging: '${ $.listingPaging }'\n }\n ],\n listens: {\n '${ $.sortByComponentName }:applied': 'hide'\n }\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super().initView();\n $(window).on('fileDeleted.enhancedMediaGallery', this.reloadAdobeGrid.bind(this));\n $(window).on('folderDeleted.enhancedMediaGallery', this.reloadAdobeGrid.bind(this));\n\n return this;\n },\n\n /**\n * Initialize child components\n *\n * @returns {Object}\n */\n initView: function () {\n layout(this.viewConfig);\n\n return this;\n },\n\n /**\n * Get previous button disabled\n *\n * @param {Object} record\n *\n * @return {Boolean}\n */\n cannotViewPrevious: function (record) {\n return this.related().cannotViewPrevious(record);\n },\n\n /**\n * Get next button disabled\n *\n * @param {Object} record\n *\n * @return {Boolean}\n */\n cannotViewNext: function (record) {\n return this.related().cannotViewNext(record);\n },\n\n /**\n * Return active adobe gallery selector.\n */\n getAdobeModal: function () {\n return $(this.activeMediaGallerySelector).find(this.adobeStockModalSelector);\n },\n\n /**\n * @inheritdoc\n */\n next: function (record) {\n if (this.related().selectedTab()) {\n this.related().nextRelated(record);\n\n return;\n }\n this.keywords().hideAllKeywords();\n this._super(record);\n },\n\n /**\n * @inheritdoc\n */\n prev: function (record) {\n if (this.related().selectedTab()) {\n this.related().prevRelated(record);\n\n return;\n }\n this.keywords().hideAllKeywords();\n this._super(record);\n },\n\n /**\n * @inheritdoc\n */\n show: function (record) {\n this.related().selectedTab(null);\n this.keywords().hideAllKeywords();\n this.displayedRecord(record);\n this._super(record);\n this.related().loadRelatedImages(record);\n },\n\n /**\n * Show related image data in the preview section\n *\n * @param {Object} record\n */\n showRelated: function (record) {\n this.keywords().hideAllKeywords();\n this.displayedRecord(record);\n this.updateHeight();\n },\n\n /**\n * Returns attributes to display under the preview image\n *\n * @returns {*[]}\n */\n getDisplayAttributes: function () {\n if (!this.displayedRecord()) {\n return [];\n }\n\n return [\n {\n name: 'Dimensions',\n value: this.displayedRecord().width + ' x ' + this.displayedRecord().height + ' px'\n },\n {\n name: 'File type',\n value: this.displayedRecord()['content_type'].toUpperCase()\n },\n {\n name: 'Category',\n value: this.displayedRecord().category.name || 'None'\n },\n {\n name: 'File #',\n value: this.displayedRecord().id\n }\n ];\n },\n\n /**\n * Reload Adobe grid after deleting image\n */\n reloadAdobeGrid: function () {\n this.actions().source().reload({\n refresh: true\n });\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/actions.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'uiComponent',\n 'uiRegistry',\n 'jquery',\n 'underscore',\n 'Magento_AdobeStockImageAdminUi/js/action/save',\n 'Magento_AdobeStockImageAdminUi/js/action/savePreview',\n 'Magento_AdobeStockImageAdminUi/js/action/saveLicensed',\n 'Magento_AdobeStockImageAdminUi/js/action/licenseAndSave',\n 'Magento_AdobeStockImageAdminUi/js/action/confirmQuota',\n 'Magento_AdobeStockImageAdminUi/js/media-gallery',\n 'Magento_AdobeStockImageAdminUi/js/confirmation/buyCredits',\n 'Magento_AdobeStockImageAdminUi/js/action/getLicenseStatus',\n 'Magento_Ui/js/modal/alert'\n], function (\n Component,\n uiRegistry,\n $,\n _,\n saveAction,\n savePreviewAction,\n saveLicensedAction,\n licenseAndSaveAction,\n confirmQuotaAction,\n mediaGallery,\n buyCreditsConfirmation,\n getLicenseStatus,\n uiAlert\n) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/actions',\n loginProvider: 'name = adobe-login, ns = adobe-login',\n mediaGallerySelector: '.media-gallery-modal:has(#search_adobe_stock)',\n adobeStockModalSelector: '.adobe-search-images-modal',\n downloadImagePreviewUrl: 'adobe_stock/preview/download',\n licenseAndDownloadUrl: 'adobe_stock/license/license',\n saveLicensedAndDownloadUrl: 'adobe_stock/license/saveLicensed',\n buyCreditsUrl: 'https://stock.adobe.com/',\n messageDelay: 5,\n mediaGallery: '',\n imageItems: [],\n messages: [],\n listens: {\n '${ $.provider }:data.items': 'updateActions'\n },\n modules: {\n login: '${ $.loginProvider }',\n preview: '${ $.parentName }.preview',\n overlay: '${ $.parentName }.overlay',\n source: '${ $.provider }',\n imageDirectory: '${ $.mediaGalleryName }',\n mediaGallerySortBy: '${ $.mediaGallerySortBy }',\n mediaGallerySearchInput: '${ $.mediaGallerySearchInput }',\n mediaGalleryListingFilters: '${ $.mediaGalleryListingFilters }',\n listingPaging: '${ $.listingPaging }'\n },\n imports: {\n imageItems: '${ $.mediaGalleryProvider }:data.items'\n }\n },\n\n /**\n * Init observable variables\n *\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'imageItems',\n 'messages'\n ]);\n\n return this;\n },\n\n /**\n * Update displayed record data on data source update\n */\n updateActions: function () {\n var displayedRecord = this.preview().displayedRecord(),\n updatedDisplayedRecord = this.preview().displayedRecord(),\n records = this.source().data.items,\n index;\n\n if (typeof displayedRecord.id === 'undefined') {\n return;\n }\n\n for (index = 0; index < records.length; index++) {\n if (records[index].id === displayedRecord.id) {\n updatedDisplayedRecord = records[index];\n break;\n }\n }\n\n this.preview().displayedRecord(updatedDisplayedRecord);\n },\n\n /**\n * Returns is_downloaded flag as observable for given record\n *\n * @returns {observable}\n */\n isDownloaded: function () {\n return this.preview().displayedRecord()['is_downloaded'];\n },\n\n /**\n * Is asset licensed in adobe stock in context of currently logged in account\n *\n * @returns {observable}\n */\n isLicensed: function () {\n return this.overlay().licensed()[this.preview().displayedRecord().id] && !this.isLicensedLocally();\n },\n\n /**\n * Is licensed version of asset saved locally\n *\n * @returns {observable}\n */\n isLicensedLocally: function () {\n return this.preview().displayedRecord()['is_licensed_locally'];\n },\n\n /**\n * Locate downloaded image in media browser\n */\n openInMediaGalleryClick: function () {\n this.preview().getAdobeModal().trigger('closeModal');\n\n if (!this.isMediaBrowser()) {\n this.selectImageInNewMediaGalleryBySearch(this.preview().displayedRecord().id);\n } else {\n this.selectDisplayedImageForOldMediaGallery(this.preview().displayedRecord().path);\n }\n },\n\n /**\n * Return adobe stock asset by adobe id\n *\n * @param {String} adobeId\n */\n getAssetDetails: function (adobeId) {\n return $.ajax({\n url: this.getMediaGalleryAsset,\n data: {\n 'adobe_id': adobeId\n },\n context: this,\n showLoader: true\n });\n },\n\n /**\n * Select image in new media gallery via search input\n *\n * @param {String} imageId\n */\n selectImageInNewMediaGalleryBySearch: function (imageId) {\n var path;\n\n this.mediaGalleryListingFilters().clear();\n this.getAssetDetails(imageId).then(function (assetDetails) {\n if (assetDetails.length === 0) {\n return;\n }\n this.mediaGallerySearchInput().apply(assetDetails.title);\n path = assetDetails.path;\n path = path.substring(0, path.lastIndexOf('/'));\n\n if (path !== '') {\n this.imageDirectory().locateNode(path);\n }\n this.selectRecordFromMediaGalleryProvider(assetDetails.path);\n }.bind(this));\n\n },\n\n /**\n * Open recently saved image and go to first page\n */\n openNewestImage: function () {\n this.listingPaging().goFirst();\n this.mediaGallerySortBy().selectDefaultOption();\n },\n\n /**\n * Selects displayed image in media gallery for old gallery\n */\n selectDisplayedImageForOldMediaGallery: function (path) {\n var image = mediaGallery.locate(path);\n\n image ? image.trigger('click') : mediaGallery.notLocated();\n },\n\n /**\n * Select record by image file name\n *\n * @param {String} path\n */\n selectRecordFromMediaGalleryProvider: function (path) {\n var subscription;\n\n subscription = this.imageItems.subscribe(function (items) {\n subscription.dispose();\n items.each(function (item) {\n if (item.path === path) {\n this.selectRecord(item);\n\n return false;\n }\n }.bind(this));\n }.bind(this));\n\n setTimeout(function () {\n subscription.dispose();\n }, 1500);\n },\n\n /**\n * Set the record as selected\n *\n * @param {Object} record\n */\n selectRecord: function (record) {\n uiRegistry.get('name =' + this.mediaGallery).select(record);\n },\n\n /**\n * Save preview click handler\n */\n savePreviewClick: function () {\n var record = this.preview().displayedRecord();\n\n savePreviewAction(\n this.preview().downloadImagePreviewUrl,\n record.id,\n record.title,\n record['content_type'],\n this.getDestinationDirectoryPath()\n ).then(function (destinationPath) {\n this.updateDownloadedDisplayedRecord(destinationPath);\n this.reloadGrid().done(function () {\n this.openInMediaGalleryClick();\n }.bind(this));\n }.bind(this)).fail(function (error) {\n if (error) {\n this.showErrorMessage(error);\n }\n }.bind(this));\n },\n\n /**\n * Update displayed record after downloading\n *\n * @param {String} path\n */\n updateDownloadedDisplayedRecord: function (path) {\n var record = this.preview().displayedRecord();\n\n record['is_downloaded'] = 1;\n\n if (record.path === '') {\n record.path = path;\n }\n\n this.preview().displayedRecord(record);\n },\n\n /**\n * Update displayed record after licensing\n *\n * @param {String} path\n */\n updateLicensedDisplayedRecord: function (path) {\n var record = this.preview().displayedRecord();\n\n record['is_downloaded'] = 1;\n\n if (record.path === '') {\n record.path = path;\n }\n\n record['is_licensed'] = 1;\n record['is_licensed_locally'] = 1;\n\n this.preview().displayedRecord(record);\n },\n\n /**\n * Get image destination path\n *\n * @param {String} fileName\n * @param {String} contentType\n * @returns {String}\n */\n getDestinationPath: function (fileName, contentType) {\n return this.getDestinationDirectoryPath() + '/' + fileName + '.' + this.getImageExtension(contentType);\n },\n\n /**\n * Get destination directory path\n *\n * @returns {String}\n */\n getDestinationDirectoryPath: function () {\n var activeNodePath,\n activeNode;\n\n if (this.isMediaBrowser()) {\n activeNode = this.getMageMediaBrowserData().activeNode;\n\n activeNodePath = _.isUndefined(activeNode.original.path) ? '' : activeNode.original.path;\n } else {\n activeNodePath = this.imageDirectory().activeNode() || '';\n }\n\n return activeNodePath;\n },\n\n /**\n * Reload grid\n *\n * @returns {*}\n */\n reloadGrid: function () {\n var provider,\n dataStorage;\n\n if (this.isMediaBrowser()) {\n return this.getMageMediaBrowserData().reload();\n }\n\n provider = uiRegistry.get('index = media_gallery_listing_data_source'),\n dataStorage = provider.storage();\n\n dataStorage.clearRequests();\n\n return provider.reload();\n },\n\n /**\n * Get data for media browser\n *\n * @returns {Undefined|Object}\n */\n getMageMediaBrowserData: function () {\n return $(this.preview().mediaGallerySelector).data('mageMediabrowser');\n },\n\n /**\n * Is the media browser used in the content of the grid\n *\n * @returns {Boolean}\n */\n isMediaBrowser: function () {\n return typeof this.getMageMediaBrowserData() !== 'undefined';\n },\n\n /**\n * Generate meaningful name image file,\n * allow only alphanumerics, dashes, and underscores\n *\n * @param {String} title\n * @param {Number} id\n * @return string\n */\n generateImageName: function (title, id) {\n var fileName = title.substring(0, 32)\n .replace(/[^a-zA-Z0-9_]/g, '-')\n .replace(/-{2,}/g, '-')\n .toLowerCase();\n\n /* If the filename does not contain latin chars, use ID as a filename */\n return fileName === '-' ? id : fileName;\n },\n\n /**\n * Get image file extension\n *\n * @param {String} contentType\n * @return string\n */\n getImageExtension: function (contentType) {\n return contentType.match(/[^/]{1,4}$/);\n },\n\n /**\n * Get messages\n *\n * @return {Array}\n */\n getMessages: function () {\n return this.messages();\n },\n\n /**\n * License click handler\n */\n licenseClick: function () {\n var record = this.preview().displayedRecord();\n\n this.licenseProcess(\n record.id,\n record.title,\n record.path,\n record['content_type'],\n this.isDownloaded()\n ).then(function (destinationPath) {\n this.updateLicensedDisplayedRecord(destinationPath);\n this.login().getUserQuota();\n this.reloadGrid().done(function () {\n this.openInMediaGalleryClick();\n }.bind(this));\n }.bind(this)).fail(function (error) {\n if (error) {\n uiAlert({\n content: error\n });\n }\n });\n },\n\n /**\n * Process of license\n *\n * @param {Number} id\n * @param {String} title\n * @param {String} path\n * @param {String} contentType\n * @param {Boolean} isDownloaded\n * @return {window.Promise}\n */\n licenseProcess: function (id, title, path, contentType, isDownloaded) {\n var deferred = $.Deferred();\n\n this.login().login()\n .then(function () {\n getLicenseStatus(\n this.overlay().getImagesUrl,\n [id]\n ).then(function (licensedInfo) {\n var isLicensed = licensedInfo[id] || false;\n\n if (isLicensed) {\n saveLicensedAction(\n this.preview().saveLicensedAndDownloadUrl,\n id,\n title,\n path,\n contentType,\n this.getDestinationDirectoryPath()\n ).then(function (destinationPath) {\n deferred.resolve(destinationPath);\n }).fail(function (error) {\n deferred.reject(error);\n });\n } else {\n confirmQuotaAction(this.preview().confirmationUrl, id).then(function (data) {\n if (data.canLicense === false) {\n buyCreditsConfirmation(\n this.preview().buyCreditsUrl,\n title,\n data.message\n );\n } else {\n licenseAndSaveAction(\n this.preview().licenseAndDownloadUrl,\n id,\n title,\n path,\n contentType,\n isDownloaded,\n data.message,\n this.getDestinationDirectoryPath()\n ).then(function (destinationPath) {\n deferred.resolve(destinationPath);\n }).fail(function (error) {\n deferred.reject(error);\n });\n }\n }.bind(this)).fail(function (error) {\n deferred.reject(error);\n });\n }\n }.bind(this)).fail(function (error) {\n deferred.reject(error);\n });\n }.bind(this)).fail(function (error) {\n deferred.reject(error);\n });\n\n return deferred.promise();\n },\n\n /**\n * Save licensed click handler\n */\n saveLicensedClick: function () {\n var record = this.preview().displayedRecord();\n\n if (!this.login().user().isAuthorized) {\n return;\n }\n\n if (!this.isLicensed()) {\n return;\n }\n\n saveLicensedAction(\n this.preview().saveLicensedAndDownloadUrl,\n record.id,\n record.title,\n record.path,\n record['content_type'],\n this.getDestinationDirectoryPath()\n ).then(function (destinationPath) {\n this.updateLicensedDisplayedRecord(destinationPath);\n this.login().getUserQuota();\n this.reloadGrid().done(function () {\n this.openInMediaGalleryClick();\n }.bind(this));\n }.bind(this)).fail(function (error) {\n if (error) {\n uiAlert({\n content: error\n });\n }\n });\n },\n\n /**\n * Returns license button title depending on the existing saved preview\n *\n * @returns {String}\n */\n getLicenseButtonTitle: function () {\n return this.isDownloaded() ? $.mage.__('License') : $.mage.__('License and Save');\n },\n\n /**\n * Extracts image name from its path\n *\n * @param {String} path\n * @returns {String}\n */\n getImageNameFromPath: function (path) {\n var filePathArray = path.split('/'),\n imageIndex = filePathArray.length - 1;\n\n return filePathArray[imageIndex].substring(0, filePathArray[imageIndex].lastIndexOf('.'));\n },\n\n /**\n * Show error message and schedule cleanup\n *\n * @param {String} message\n */\n showErrorMessage: function (message) {\n this.messages.push({\n code: 'error',\n messageUnsanitizedHtml: message\n });\n this.messagesCleanup();\n },\n\n /**\n * Messages cleanup\n */\n messagesCleanup: function () {\n // eslint-disable-next-line no-unused-vars\n var timerId;\n\n // eslint-disable-next-line no-unused-vars\n timerId = setTimeout(function () {\n clearTimeout(timerId);\n this.messages.removeAll();\n }.bind(this), Number(this.messageDelay) * 1000);\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/related.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'uiComponent',\n 'underscore',\n 'jquery'\n], function (Component, _, $) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/related',\n filterChipsProvider: 'componentType = filters, ns = ${ $.ns }',\n filterBookmarksSelector: '.admin__data-grid-action-bookmarks',\n tabImagesLimit: 4,\n tabsContainerId: '#adobe-stock-tabs',\n serieFilterValue: '',\n modelFilterValue: '',\n selectedTab: null,\n loader: false,\n relatedImages: {\n series: {},\n model: {}\n },\n statefull: {\n serieFilterValue: true,\n modelFilterValue: true\n },\n modules: {\n chips: '${ $.chipsProvider }',\n filterChips: '${ $.filterChipsProvider }',\n preview: '${ $.parentName }.preview'\n },\n exports: {\n serieFilterValue: '${ $.provider }:params.filters.serie_id',\n modelFilterValue: '${ $.provider }:params.filters.model_id'\n }\n },\n\n /**\n * Initializes related component.\n */\n initialize: function () {\n this._super();\n\n this.filterChips().updateActive();\n\n return this;\n },\n\n /**\n * Disable keydown event for related content tabs\n */\n disableTabsKeyDownEvent: function () {\n if ($(this.tabsContainerId + ' li[role=tab]').length === 0) {\n setTimeout(function () {\n this.disableTabsKeyDownEvent();\n }.bind(this), 100);\n } else {\n $(this.tabsContainerId + ' li[role=tab]').off('keydown');\n }\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'serieFilterValue',\n 'modelFilterValue',\n 'selectedTab',\n 'relatedImages',\n 'loader'\n ]);\n\n return this;\n },\n\n /**\n * Check if visible container\n *\n * @param {Object} record\n * @returns boolean\n */\n isVisible: function (record) {\n return this.showSeriesTab(record) && this.showModelTab(record);\n },\n\n /**\n * Get image related image series.s\n *\n * @param {Object} record\n */\n loadRelatedImages: function (record) {\n var series = this.getSeries(record),\n model = this.getModel(record);\n\n if (series && series.length ||\n model && model.length\n ) {\n return;\n }\n $.ajax({\n type: 'GET',\n url: this.preview().relatedImagesUrl,\n dataType: 'json',\n beforeSend: function () {\n this.loader(true);\n }.bind(this),\n data: {\n 'image_id': record.id,\n 'limit': this.tabImagesLimit\n }\n }).done(function (data) {\n var relatedImages = this.relatedImages();\n\n this.loader(false);\n relatedImages.series[record.id] = data.result['same_series'];\n relatedImages.model[record.id] = data.result['same_model'];\n\n this.relatedImages(relatedImages);\n this.preview().updateHeight();\n\n /* Switch to the model tab if the series tab is hidden */\n if (relatedImages.series[record.id].length === 0 && relatedImages.model[record.id].length > 0) {\n // eslint-disable-next-line jquery-no-input-event-shorthand\n $('#adobe-stock-tabs').data().mageTabs.select(1);\n }\n }.bind(this));\n },\n\n /**\n * Returns true if the series tab should be show, false otherwise\n *\n * @param {Object} record\n * @returns boolean\n */\n showSeriesTab: function (record) {\n return typeof this.relatedImages().series[record.id] === 'undefined' ||\n this.relatedImages().series[record.id].length !== 0;\n },\n\n /**\n * Returns true if the model tab should be show, false otherwise\n *\n * @param {Object} record\n * @returns boolean\n */\n showModelTab: function (record) {\n return typeof this.relatedImages().model[record.id] === 'undefined' ||\n this.relatedImages().model[record.id].length !== 0;\n },\n\n /**\n * Returns series to display under the image\n *\n * @param {Object} record\n * @returns {*[]}\n */\n getSeries: function (record) {\n return this.relatedImages().series[record.id] || [];\n },\n\n /**\n * Check if the number of related series image is greater than 4 or not\n *\n * @param {Object} record\n * @returns boolean\n */\n canShowMoreSeriesImages: function (record) {\n return this.getSeries(record).length >= this.tabImagesLimit;\n },\n\n /**\n * Returns model to display under the image\n *\n * @param {Object} record\n * @returns {*[]}\n */\n getModel: function (record) {\n return this.relatedImages().model[record.id] || [];\n },\n\n /**\n * Check if the number of related model image is greater than 4 or not\n *\n * @param {Object} record\n * @returns boolean\n */\n canShowMoreModelImages: function (record) {\n return this.getModel(record).length >= this.tabImagesLimit;\n },\n\n /**\n * Filter images from serie_id\n *\n * @param {Object} record\n */\n seeMoreFromSeries: function (record) {\n if (this.isSerieFilterApplied(record)) {\n this.scrollToFilter();\n\n return;\n }\n this.serieFilterValue(record.id);\n this.applyFilter('serie_id', record.id.toString());\n },\n\n /**\n * Filter images from serie_id\n *\n * @param {Object} record\n */\n seeMoreFromModel: function (record) {\n if (this.isModelFilterApplied(record)) {\n this.scrollToFilter();\n\n return;\n }\n this.modelFilterValue(record.id);\n this.applyFilter('model_id', record.id.toString());\n },\n\n /**\n * Apply series or model id filter and scroll to top of the page\n *\n * @param {String} typeId\n * @param {String} recordId\n */\n applyFilter: function (typeId, recordId) {\n var data = {};\n\n data[typeId] = recordId;\n\n this.filterChips().clear();\n this.filterChips().setData(data, true);\n this.filterChips().apply();\n\n this.scrollToFilter();\n },\n\n /**\n * Checks if the filter is applied\n *\n * @param {Object} record\n * @returns {Boolean}\n */\n isSerieFilterApplied: function (record) {\n return this.filterChips().get('applied')['serie_id'] === record.id.toString();\n },\n\n /**\n * Checks if the filter is applied\n *\n * @param {Object} record\n * @returns {Boolean}\n */\n isModelFilterApplied: function (record) {\n return this.filterChips().get('applied')['model_id'] === record.id.toString();\n },\n\n /**\n * Scrolls user window to the filter bookmarks\n */\n scrollToFilter: function () {\n $(this.preview().adobeStockModalSelector + ' ' + this.filterBookmarksSelector).get(0).scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest'\n });\n },\n\n /**\n * Next related image preview\n *\n * @param {Object} record\n */\n nextRelated: function (record) {\n var relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record),\n nextRelatedIndex = _.findLastIndex(\n relatedList,\n {\n id: this.preview().displayedRecord().id\n }\n ) + 1,\n nextRelated = relatedList[nextRelatedIndex];\n\n if (typeof nextRelated === 'undefined') {\n return;\n }\n\n this.switchImagePreviewToRelatedImage(nextRelated);\n },\n\n /**\n * Previous related preview\n *\n * @param {Object} record\n */\n prevRelated: function (record) {\n var relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record),\n prevRelatedIndex = _.findLastIndex(\n relatedList,\n {\n id: this.preview().displayedRecord().id\n }\n ) - 1,\n prevRelated = relatedList[prevRelatedIndex];\n\n if (typeof prevRelated === 'undefined') {\n return;\n }\n\n this.switchImagePreviewToRelatedImage(prevRelated);\n },\n\n /**\n * Get previous button disabled\n *\n * @param {Object} record\n *\n * @return {Boolean}\n */\n cannotViewPrevious: function (record) {\n var relatedList, prevRelatedIndex, prevRelated;\n\n if (!this.selectedTab()) {\n return false;\n }\n relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record);\n prevRelatedIndex = _.findLastIndex(\n relatedList,\n {\n id: this.preview().displayedRecord().id\n }\n ) - 1;\n prevRelated = relatedList[prevRelatedIndex];\n\n return typeof prevRelated === 'undefined';\n },\n\n /**\n * Get next button disabled\n *\n * @param {Object} record\n *\n * @return {Boolean}\n */\n cannotViewNext: function (record) {\n var relatedList, nextRelatedIndex, nextRelated;\n\n if (!this.selectedTab()) {\n return false;\n }\n relatedList = this.selectedTab() === 'series' ? this.getSeries(record) : this.getModel(record);\n nextRelatedIndex = _.findLastIndex(\n relatedList,\n {\n id: this.preview().displayedRecord().id\n }\n ) + 1;\n nextRelated = relatedList[nextRelatedIndex];\n\n return typeof nextRelated === 'undefined';\n },\n\n /**\n * Switch image preview to related image\n *\n * @param {Object|null} relatedImage\n */\n switchImagePreviewToRelatedImage: function (relatedImage) {\n if (!relatedImage) {\n this.selectedTab(null);\n\n return;\n }\n\n if (this.preview().displayedRecord().id === relatedImage.id) {\n return;\n }\n\n this.preview().showRelated(relatedImage);\n },\n\n /**\n * Switch image preview to series image\n *\n * @param {Object} record\n */\n switchImagePreviewToSeriesImage: function (record) {\n this.selectedTab('series');\n this.switchImagePreviewToRelatedImage(record);\n },\n\n /**\n * Switch image preview to model image\n *\n * @param {Object} record\n */\n switchImagePreviewToModelImage: function (record) {\n this.selectedTab('model');\n this.switchImagePreviewToRelatedImage(record);\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/components/grid/column/preview/keywords.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'uiComponent',\n 'underscore'\n], function (Component, _) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'Magento_AdobeStockImageAdminUi/grid/column/preview/keywords',\n chipsProvider: 'componentType = filtersChips, ns = ${ $.ns }',\n defaultKeywordsLimit: 5,\n keywordsLimit: 5,\n canViewMoreKeywords: true,\n modules: {\n chips: '${ $.chipsProvider }',\n preview: '${ $.parentName }.preview'\n }\n },\n\n /**\n * Init observable variables\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'keywordsLimit',\n 'canViewMoreKeywords'\n ]);\n\n return this;\n },\n\n /**\n * Returns keywords to display under the attributes image\n *\n * @returns {*[]}\n */\n getKeywords: function (record) {\n return record.keywords;\n },\n\n /**\n * Returns keywords limit to show no of keywords\n */\n getKeywordsLimit: function () {\n return this.keywordsLimit();\n },\n\n /**\n * Show all the related keywords\n */\n viewAllKeywords: function (record) {\n this.keywordsLimit(record.keywords.length);\n this.canViewMoreKeywords(false);\n this.preview().updateHeight();\n this.preview().scrollToPreview();\n },\n\n /**\n * Hide all the related keywords\n */\n hideAllKeywords: function () {\n this.keywordsLimit(this.defaultKeywordsLimit);\n this.canViewMoreKeywords(true);\n },\n\n /**\n * Drop all filters and initiate search on keyword click event\n */\n searchByKeyWord: function (keyword) {\n _.invoke(this.chips().elems(), 'clear');\n _.invoke(this.chips().elems(), 'apply', keyword);\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/mediaGallery/grid/columns/licenseImage.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'Magento_MediaGalleryUi/js/grid/columns/image'\n], function (Image) {\n 'use strict';\n\n return Image.extend({\n defaults: {\n viewConfig: [\n {\n component: 'Magento_AdobeStockImageAdminUi/js/mediaGallery/grid/columns/image/licenseActions',\n name: '${ $.name }_actions',\n imageModelName: '${ $.name }',\n imageDetailsUrl: '${ $.imageDetailsurl }',\n imageComponent: '${ $.imageComponent }'\n }\n ]\n }\n });\n});\n","Magento_AdobeStockImageAdminUi/js/mediaGallery/grid/columns/image/licenseActions.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'Magento_MediaGalleryUi/js/grid/columns/image/actions',\n 'Magento_MediaGalleryUi/js/action/getDetails',\n 'mage/translate'\n], function ($, _, Action, getDetails) {\n 'use strict';\n\n return Action.extend({\n defaults: {\n template: 'Magento_AdobeStockImageAdminUi/mediaGallery/grid/columns/image/licenseActions',\n licenseAction: {\n name: 'license',\n title: $.mage.__('License'),\n handler: 'licenseImageAction'\n },\n modules: {\n image: '${ $.imageComponent }'\n }\n },\n\n /**\n * Initialize the component\n *\n * @returns {Object}\n */\n initialize: function () {\n this._super();\n this.actionsList.push(this.licenseAction);\n\n return this;\n },\n\n /**\n * Init observable variables\n *\n * @return {Object}\n */\n initObservable: function () {\n this._super()\n .observe([\n 'visible'\n ]);\n\n return this;\n },\n\n /**\n * License image\n *\n * @param {Object} record\n */\n licenseImageAction: function (record) {\n this.getImageRecord(record.id);\n },\n\n /**\n * Check if image licensed\n *\n * @param {Object} record\n * @param {Object} name\n */\n isVisible: function (record, name) {\n if (name === this.licenseAction.name) {\n if (_.isUndefined(record.overlay) || record.overlay === '') {\n return false;\n }\n\n return true;\n }\n\n return true;\n },\n\n /**\n * Get image record and start license process\n *\n * @param {Number} imageId\n */\n getImageRecord: function (imageId) {\n getDetails(this.imageDetailsUrl, [imageId]).then(function (imageDetails) {\n var id = imageDetails[imageId]['adobe_stock'][0].value;\n\n this.image().actions().licenseProcess(\n id,\n imageDetails[imageId].title,\n imageDetails[imageId].path,\n imageDetails[imageId]['content_type'],\n true\n ).then(function () {\n this.image().actions().login().getUserQuota();\n this.imageModel().reloadGrid();\n this.imageModel().addMessage('success', $.mage.__('The image has been licensed.'));\n }.bind(this)).fail(function (error) {\n if (error) {\n this.imageModel().addMessage('error', error);\n }\n }.bind(this));\n }.bind(this)).fail(function (message) {\n this.imageModel().addMessage('error', message);\n }.bind(this));\n }\n });\n});\n","Magento_PageBuilderAdminAnalytics/js/page-builder/event-builder.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine(['underscore'], function (_) {\n 'use strict';\n\n return {\n\n /**\n * Sets up event attributes and action depending on name and args\n *\n * @param {String} name\n * @param {Array} args\n */\n\n build: function (name, args) {\n var action = '',\n eventAttributes = {},\n event;\n\n if (_.isUndefined(args)) {\n return;\n }\n\n switch (name) {\n case 'contentType:duplicateAfter':\n action = 'duplicate';\n break;\n\n case 'contentType:removeAfter':\n action = 'remove';\n break;\n\n case 'contentType:createAfter':\n action = 'create';\n break;\n\n case 'contentType:editBefore':\n action = 'edit';\n break;\n\n case 'contentType:visibilityAfter':\n action = args.visibility ? 'show' : 'hide';\n break;\n\n default:\n break;\n }\n\n if (!_.isUndefined(args.contentType)) {\n eventAttributes = args.contentType.config;\n } else if (!_.isUndefined(args.originalContentType)) {\n eventAttributes = args.originalContentType.config;\n }\n\n if (action !== '' && !_.isEmpty(eventAttributes)) {\n event = {\n element: eventAttributes.label,\n type: eventAttributes.name,\n action: action,\n widget: {\n name: eventAttributes.form,\n type: eventAttributes['menu_section']\n },\n feature: 'page-builder-tracker'\n };\n }\n\n return event;\n }\n };\n});\n","Magento_PageBuilderAdminAnalytics/js/page-builder/events-mixin.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine(['underscore', 'Magento_PageBuilderAdminAnalytics/js/page-builder/event-builder'],\n function (_, EventBuilder) {\n 'use strict';\n\n return function (target) {\n var originalTarget = target.trigger,\n isAdminAnalyticsEnabled,\n event,\n hasPageBuilderBeenUsed = false,\n delayedPush;\n\n /**\n * Invokes custom code to track information regarding Page Builder usage\n *\n * @param {String} name\n * @param {Array} args\n */\n\n target.trigger = function (name, args) {\n originalTarget.apply(originalTarget, [name, args]);\n isAdminAnalyticsEnabled =\n !_.isUndefined(window.digitalData) &&\n !_.isUndefined(window._satellite);\n\n if (!hasPageBuilderBeenUsed && name.indexOf('stage:fullScreenModeChangeAfter') !== -1 &&\n args.fullScreen && isAdminAnalyticsEnabled\n ) {\n hasPageBuilderBeenUsed = true;\n window.digitalData.page.url = window.location.href;\n window.digitalData.page.attributes = {\n editedWithPageBuilder: 'true'\n };\n window._satellite.track('page');\n }\n\n event = EventBuilder.build(name, args);\n\n if (isAdminAnalyticsEnabled && !_.isUndefined(window.digitalData.event) && !_.isUndefined(event)) {\n delayedPush = setInterval(function (object) {\n if (_.isArray(window.digitalData.event)) {\n window.digitalData.event.push(object);\n window._satellite.track('event');\n clearInterval(delayedPush);\n }\n }, 500, event);\n }\n };\n\n return target;\n };\n });\n","Magento_AdminAnalytics/js/modal/component.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'underscore',\n 'jquery',\n 'Magento_Ui/js/modal/modal-component',\n 'uiRegistry',\n 'analyticsPopupConfig'\n],\n function (_, $, Modal, registry, analyticsPopupConfig) {\n 'use strict';\n\n return Modal.extend(\n {\n defaults: {\n imports: {\n enableLogAction: '${ $.provider }:data.enableLogAction',\n disableLogAction: '${ $.provider }:data.disableLogAction'\n },\n options: {},\n notificationWindow: null\n },\n\n /**\n * Initializes modal on opened function\n */\n initModal: function () {\n this.options.opened = this.onOpened.bind(this);\n this._super();\n },\n\n /**\n * Configure ESC and TAB so user can't leave modal\n * without selecting an option\n *\n * @returns {Object} Chainable.\n */\n initModalEvents: function () {\n this._super();\n //Don't allow ESC key to close modal\n this.options.keyEventHandlers.escapeKey = this.handleEscKey.bind(this);\n //Restrict tab action to the modal\n this.options.keyEventHandlers.tabKey = this.handleTabKey.bind(this);\n\n return this;\n },\n\n /**\n * Once the modal is opened it hides the X\n */\n onOpened: function () {\n $('.modal-header button.action-close').attr('disabled', true).hide();\n\n this.focusableElements = $(this.rootSelector).find('a[href], button:enabled');\n this.firstFocusableElement = this.focusableElements[0];\n this.lastFocusableElement = this.focusableElements[this.focusableElements.length - 1];\n this.firstFocusableElement.focus();\n },\n\n /**\n * Changes admin usage setting to yes\n */\n enableAdminUsage: function () {\n var data = {\n 'form_key': window.FORM_KEY\n };\n\n $.ajax(\n {\n type: 'POST',\n url: this.enableLogAction,\n data: data,\n showLoader: true\n }\n ).done(\n function (xhr) {\n if (xhr.error) {\n self.onError(xhr);\n }\n }\n ).fail(this.onError);\n this.openReleasePopup();\n this.closeModal();\n },\n\n /**\n * Changes admin usage setting to no\n */\n disableAdminUsage: function () {\n var data = {\n 'form_key': window.FORM_KEY\n };\n\n $.ajax(\n {\n type: 'POST',\n url: this.disableLogAction,\n data: data,\n showLoader: true\n }\n ).done(\n function (xhr) {\n if (xhr.error) {\n self.onError(xhr);\n }\n }\n ).fail(this.onError);\n this.openReleasePopup();\n this.closeModal();\n },\n\n /**\n * Allows admin usage popup to be shown first and then new release notification\n */\n openReleasePopup: function () {\n var notificationModalSelector = 'release_notification.release_notification.notification_modal_1';\n\n if (analyticsPopupConfig.releaseVisible) {\n registry.get(notificationModalSelector).initializeContentAfterAnalytics();\n }\n },\n\n /**\n * Handle Tab and Shift+Tab key event\n *\n * Keep the tab actions restricted to the popup modal\n * so the user must select an option to dismiss the modal\n */\n handleTabKey: function (event) {\n var modal = this,\n KEY_TAB = 9;\n\n /**\n * Handle Shift+Tab to tab backwards\n */\n function handleBackwardTab() {\n if (document.activeElement === modal.firstFocusableElement ||\n document.activeElement === $(modal.rootSelector)[0]\n ) {\n event.preventDefault();\n modal.lastFocusableElement.focus();\n }\n }\n\n /**\n * Handle Tab forward\n */\n function handleForwardTab() {\n if (document.activeElement === modal.lastFocusableElement) {\n event.preventDefault();\n modal.firstFocusableElement.focus();\n }\n }\n\n switch (event.keyCode) {\n case KEY_TAB:\n if (modal.focusableElements.length === 1) {\n event.preventDefault();\n break;\n }\n\n if (event.shiftKey) {\n handleBackwardTab();\n break;\n }\n handleForwardTab();\n break;\n default:\n break;\n }\n },\n\n /**\n * Handle Esc key\n *\n * Esc key should not close modal\n */\n handleEscKey: function (event) {\n event.preventDefault();\n }\n }\n );\n }\n);\n","Magento_AdminAnalytics/js/release-notification/modal/component-mixin.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine(['jquery', 'analyticsPopupConfig'], function ($, analyticsPopupConfig) {\n 'use strict';\n\n var deferred = $.Deferred(),\n\n mixin = {\n /**\n * Initializes content only if its visible\n */\n initializeContent: function () {\n var initializeContent = this._super.bind(this);\n\n if (!analyticsPopupConfig.analyticsVisible) {\n initializeContent();\n } else {\n deferred.then(function () {\n initializeContent();\n });\n }\n },\n\n /**\n * Initializes release notification content after admin analytics\n */\n initializeContentAfterAnalytics: function () {\n deferred.resolve();\n }\n };\n\n return function (target) {\n return target.extend(mixin);\n };\n});\n\n","Magento_AdminNotification/toolbar_entry.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * @api\n */\ndefine([\n 'jquery',\n 'jquery/ui',\n 'domReady!'\n], function ($) {\n 'use strict';\n\n /**\n * Mark notification as read via AJAX call.\n *\n * @param {String} notificationId\n */\n var markNotificationAsRead = function (notificationId) {\n var requestUrl = $('.notifications-wrapper .admin__action-dropdown-menu').attr('data-mark-as-read-url');\n\n $.ajax({\n url: requestUrl,\n type: 'POST',\n dataType: 'json',\n data: {\n id: notificationId\n },\n showLoader: false\n });\n },\n notificationCount = $('.notifications-wrapper').attr('data-notification-count'),\n\n /**\n * Remove notification from the list.\n *\n * @param {jQuery} notificationEntry\n */\n removeNotificationFromList = function (notificationEntry) {\n var notificationIcon, actionElement;\n\n notificationEntry.remove();\n notificationCount--;\n $('.notifications-wrapper').attr('data-notification-count', notificationCount);\n\n if (notificationCount == 0) {// eslint-disable-line eqeqeq\n // Change appearance of the bubble and its behavior when the last notification is removed\n $('.notifications-wrapper .admin__action-dropdown-menu').remove();\n notificationIcon = $('.notifications-wrapper .notifications-icon');\n notificationIcon.removeAttr('data-toggle');\n notificationIcon.off('click.dropdown');\n $('.notifications-action .notifications-counter').text('').hide();\n } else {\n // Change top counter only for allowable range\n if (notificationCount <= 99) {\n $('.notifications-action .notifications-counter').text(notificationCount);\n }\n $('.notifications-entry-last .notifications-counter').text(notificationCount);\n // Modify caption of the 'See All' link\n actionElement = $('.notifications-wrapper .admin__action-dropdown-menu .last .action-more');\n actionElement.text(actionElement.text().replace(/\\d+/, notificationCount));\n }\n },\n\n /**\n * Show notification details.\n *\n * @param {jQuery} notificationEntry\n */\n showNotificationDetails = function (notificationEntry) {\n var notificationDescription = notificationEntry.find('.notifications-entry-description'),\n notificationDescriptionEnd = notificationEntry.find('.notifications-entry-description-end');\n\n if (notificationDescriptionEnd.length > 0) {\n notificationDescriptionEnd.addClass('_show');\n }\n\n if (notificationDescription.hasClass('_cutted')) {\n notificationDescription.removeClass('_cutted');\n }\n };\n\n // Show notification description when corresponding item is clicked\n $('.notifications-wrapper .admin__action-dropdown-menu .notifications-entry').on(\n 'click.showNotification',\n function (event) {\n // hide notification dropdown\n $('.notifications-wrapper .notifications-icon').trigger('click.dropdown');\n\n showNotificationDetails($(this));\n event.stopPropagation();\n }\n );\n\n // Remove corresponding notification from the list and mark it as read\n $('.notifications-close').on('click.removeNotification', function (event) {\n var notificationEntry = $(this).closest('.notifications-entry'),\n notificationId = notificationEntry.attr('data-notification-id');\n\n markNotificationAsRead(notificationId);\n removeNotificationFromList(notificationEntry);\n\n // Checking for last unread notification to hide dropdown\n if (notificationCount == 0) {// eslint-disable-line eqeqeq\n $('.notifications-wrapper').removeClass('active')\n .find('.notifications-action')\n .removeAttr('data-toggle')\n .off('click.dropdown');\n }\n event.stopPropagation();\n });\n\n // Hide notifications bubble\n if (notificationCount == 0) {// eslint-disable-line eqeqeq\n $('.notifications-action .notifications-counter').hide();\n } else {\n $('.notifications-action .notifications-counter').show();\n }\n});\n","Magento_AdminNotification/system/notification.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * @api\n */\ndefine([\n 'jquery',\n 'mage/template',\n 'jquery/ui',\n 'Magento_Ui/js/modal/modal'\n], function ($, mageTemplate) {\n 'use strict';\n\n $.widget('mage.systemMessageDialog', $.mage.modal, {\n options: {\n modalClass: 'modal-system-messages',\n systemMessageTemplate:\n '<% _.each(data.items, function(item) { %>' +\n '<li class=\"message message-warning' +\n '<% if (item.severity == 1) { %>error<% } else { %>warning<% } %>\">' +\n '<%= item.text %>' +\n '</li>' +\n '<% }); %>'\n },\n\n /** @inheritdoc */\n _create: function () {\n this.options.title = $('#message-system-all').attr('title');\n this._super();\n },\n\n /** @inheritdoc */\n openModal: function (severity) {\n var superMethod = $.proxy(this._super, this);\n\n $.ajax({\n url: this.options.ajaxUrl,\n type: 'GET',\n data: {\n severity: severity\n }\n }).done($.proxy(function (data) {\n var tmpl = mageTemplate(this.options.systemMessageTemplate, {\n data: {\n items: data\n }\n });\n\n tmpl = $(tmpl);\n\n this.element.html(\n $('<ul></ul>', {\n 'class': 'message-system-list'\n }).append(tmpl)\n ).trigger('contentUpdated');\n\n superMethod();\n }, this));\n\n return this;\n },\n\n /** @inheritdoc */\n closeModal: function () {\n this._super();\n }\n });\n\n $(function () {\n $('#system_messages .message-system-short .error').on('click', function () {\n $('#message-system-all').systemMessageDialog('openModal', 1);\n });\n\n $('#system_messages .message-system-short .warning').on('click', function () {\n $('#message-system-all').systemMessageDialog('openModal', 2);\n });\n });\n\n return $.mage.systemMessageDialog;\n});\n","Magento_AdminNotification/js/system/messages/popup.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/modal'\n], function ($, modal) {\n 'use strict';\n\n return function (data, element) {\n\n if (modal.modal) {\n modal.modal.html($(element).html());\n } else {\n modal.modal = $(element).modal({\n modalClass: data.class,\n type: 'popup',\n buttons: []\n });\n }\n\n modal.modal.modal('openModal');\n };\n});\n","Magento_AdminNotification/js/grid/listing.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * @api\n */\ndefine([\n 'Magento_Ui/js/grid/listing',\n 'Magento_Ui/js/lib/spinner',\n 'jquery'\n], function (Listing, loader, $) {\n 'use strict';\n\n return Listing.extend({\n defaults: {\n imports: {\n totalRecords: '${ $.provider }:data.totalRecords'\n },\n selectors: {\n collapsible: '.message-system-collapsible',\n messages: '.message-system'\n }\n },\n\n /** @inheritdoc */\n initObservable: function () {\n this._super()\n .track({\n totalRecords: 0\n });\n\n return this;\n },\n\n /** @inheritdoc */\n showLoader: function () {\n if (!this.source.firstLoad) {\n this.fixLoaderHeight();\n this._super();\n }\n },\n\n /**\n * Calculates loader height\n *\n * @param {Boolean} [closed]\n */\n fixLoaderHeight: function (closed) {\n var $messagesBlock = $(this.selectors.messages),\n $collapsibleBlock = $(this.selectors.collapsible),\n resultHeight = 0;\n\n if ($messagesBlock.length) {\n resultHeight += $messagesBlock.outerHeight();\n }\n\n if ($collapsibleBlock.length && $collapsibleBlock.is(':visible') && !closed) {\n resultHeight += $collapsibleBlock.outerHeight();\n }\n\n loader.get(this.name).height(resultHeight);\n }\n });\n});\n","Magento_AdminNotification/js/grid/columns/message.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * @api\n */\ndefine([\n 'Magento_Ui/js/grid/columns/column',\n 'underscore'\n], function (Column, _) {\n 'use strict';\n\n return Column.extend({\n defaults: {\n bodyTmpl: 'Magento_AdminNotification/grid/cells/message',\n messageIndex: 'text',\n fieldClass: {\n message: true,\n 'message-warning': false,\n 'message-progress': false,\n 'message-success': false,\n 'message-error': false\n },\n statusMap: {\n 0: 'info',\n 1: 'progress',\n 2: 'success',\n 3: 'error'\n }\n },\n\n /** @inheritdoc */\n getLabel: function (record) {\n return record[this.messageIndex];\n },\n\n /**\n * Proxy to getLabel function with UnsanitizedHtml suffix\n *\n * @param {Object} record\n * @returns {String}\n */\n getLabelUnsanitizedHtml: function (record) {\n return this.getLabel(record);\n },\n\n /** @inheritdoc */\n getFieldClass: function ($row) {\n var status = this.statusMap[$row.status] || 'warning',\n result = {};\n\n result['message-' + status] = true;\n result = _.extend({}, this.fieldClass, result);\n\n return result;\n }\n });\n});\n","Magento_CurrencySymbol/js/symbols-form.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'mage/mage'\n], function ($) {\n 'use strict';\n\n return function (config, element) {\n $(element)\n .mage('form')\n .mage('validation');\n\n /**\n * Toggle the field to use the default value\n *\n * @param {String} code\n * @param {String} value\n */\n function toggleUseDefault(code, value) {\n var checkbox = $('#custom_currency_symbol_inherit' + code),\n input = $('#custom_currency_symbol' + code);\n\n if (checkbox.is(':checked')) {\n input.val(value);\n input.prop('disabled', true);\n } else {\n input.prop('disabled', false);\n }\n }\n\n window.toggleUseDefault = toggleUseDefault;\n };\n});\n","Magento_LoginAsCustomerAdminUi/js/confirmation-popup.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'uiComponent',\n 'Magento_Ui/js/modal/confirm',\n 'jquery',\n 'ko',\n 'mage/translate',\n 'mage/template',\n 'underscore',\n 'Magento_Ui/js/modal/alert',\n 'text!Magento_LoginAsCustomerAdminUi/template/confirmation-popup/store-view-ptions.html'\n], function (Component, confirm, $, ko, $t, template, _, alert, selectTpl) {\n\n 'use strict';\n\n return Component.extend({\n /**\n * Initialize Component\n */\n initialize: function () {\n var self = this,\n content;\n\n this._super();\n\n content = '<div class=\"message message-warning\">' + self.content + '</div>';\n\n if (self.showStoreViewOptions) {\n content = template(\n selectTpl,\n {\n data: {\n showStoreViewOptions: self.showStoreViewOptions,\n storeViewOptions: self.storeViewOptions,\n label: $t('Store')\n }\n }) + content;\n }\n\n /**\n * Confirmation popup\n *\n * @param {String} url\n * @returns {Boolean}\n */\n window.lacConfirmationPopup = function (url) {\n confirm({\n title: self.title,\n content: content,\n modalClass: 'confirm lac-confirm',\n actions: {\n /**\n * Confirm action.\n */\n confirm: function () {\n var storeId = $('#lac-confirmation-popup-store-id').val(),\n formKey = $('input[name=\"form_key\"]').val(),\n params = {};\n\n // jscs:disable requireCamelCaseOrUpperCaseIdentifiers\n if (storeId) {\n params.store_id = storeId;\n }\n\n if (formKey) {\n params.form_key = formKey;\n }\n // jscs:enable requireCamelCaseOrUpperCaseIdentifiers\n\n $.ajax({\n url: url,\n type: 'POST',\n dataType: 'json',\n data: params,\n showLoader: true,\n\n /**\n * Open redirect URL in new window, or show messages if they are present\n *\n * @param {Object} data\n */\n success: function (data) {\n var messages = data.messages || [];\n\n if (data.message) {\n messages.push(data.message);\n }\n\n if (data.redirectUrl) {\n window.open(data.redirectUrl);\n } else if (messages.length) {\n messages = messages.map(function (message) {\n return _.escape(message);\n });\n\n alert({\n content: messages.join('<br>')\n });\n }\n },\n\n /**\n * Show XHR response text\n *\n * @param {Object} jqXHR\n */\n error: function (jqXHR) {\n alert({\n content: _.escape(jqXHR.responseText)\n });\n }\n });\n }\n },\n buttons: [{\n text: $t('Cancel'),\n class: 'action-secondary action-dismiss',\n\n /**\n * Click handler.\n */\n click: function (event) {\n this.closeModal(event);\n }\n }, {\n text: $t('Login as Customer'),\n class: 'action-primary action-accept',\n\n /**\n * Click handler.\n */\n click: function (event) {\n this.closeModal(event, true);\n }\n }]\n });\n\n return false;\n };\n }\n });\n});\n","Magento_Marketplace/default.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n return function (configFromPage) {\n var url = configFromPage.url;\n\n $.ajax({\n method: 'GET',\n url: url\n }).done(function (data) {\n $('div[data-role=partners-block]').html(data);\n });\n };\n});\n","Magento_ProductVideo/js/new-video-dialog.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'underscore',\n 'jquery/ui',\n 'Magento_Ui/js/modal/modal',\n 'mage/translate',\n 'mage/backend/tree-suggest',\n 'mage/backend/validation',\n 'Magento_ProductVideo/js/get-video-information'\n], function ($, _) {\n 'use strict';\n\n $.widget('mage.createVideoPlayer', {\n options: {\n videoId: '',\n videoProvider: '',\n container: '.video-player-container',\n videoClass: 'product-video',\n reset: false,\n useYoutubeNocookie: false,\n metaData: {\n DOM: {\n title: '.video-information.title span',\n uploaded: '.video-information.uploaded span',\n uploader: '.video-information.uploader span',\n duration: '.video-information.duration span',\n all: '.video-information span',\n wrapper: '.video-information'\n },\n data: {\n title: '',\n uploaded: '',\n uploader: '',\n uploaderUrl: '',\n duration: ''\n }\n }\n },\n\n _FINISH_CREATE_VIDEO_TRIGGER: 'finish_create_video',\n\n _FINISH_UPDATE_VIDEO_TRIGGER: 'finish_update_video',\n\n /**\n * @private\n */\n _init: function () {\n if (this.options.reset) {\n this.reset();\n } else {\n this.update();\n }\n\n this.element.on('reset', $.proxy(this.reset, this));\n\n },\n\n /**\n * @returns {Boolean}\n */\n update: function () {\n var checkVideoID =\n this.element.find(this.options.container).find('.' + this.options.videoClass).data('code'),\n eventVideoData = {\n oldVideoId: checkVideoID ? checkVideoID.toString() : checkVideoID,\n newVideoId: this.options.videoId ? this.options.videoId.toString() : this.options.videoId\n };\n\n if (checkVideoID && checkVideoID !== this.options.videoId) {\n this._doUpdate();\n this.element.trigger(this._FINISH_UPDATE_VIDEO_TRIGGER, eventVideoData);\n } else if (checkVideoID && checkVideoID === this.options.videoId) {\n return false;\n } else if (!checkVideoID) {\n this._doUpdate();\n this.element.trigger(this._FINISH_CREATE_VIDEO_TRIGGER, eventVideoData);\n }\n\n },\n\n /**\n * @private\n */\n _doUpdate: function () {\n var uploaderLinkUrl,\n uploaderLink;\n\n this.reset();\n this.element.find(this.options.container).append(\n '<div class=\"' +\n this.options.videoClass +\n '\" data-type=\"' +\n this.options.videoProvider +\n '\" data-code=\"' +\n this.options.videoId +\n '\" data-youtubenocookie=\"' +\n this.options.useYoutubeNocookie +\n '\" data-width=\"100%\" data-height=\"100%\"></div>'\n );\n this.element.find(this.options.metaData.DOM.wrapper).show();\n this.element.find(this.options.metaData.DOM.title).text(this.options.metaData.data.title);\n this.element.find(this.options.metaData.DOM.uploaded).text(this.options.metaData.data.uploaded);\n this.element.find(this.options.metaData.DOM.duration).text(this.options.metaData.data.duration);\n\n if (this.options.videoProvider === 'youtube') {\n uploaderLinkUrl = 'https://youtube.com/channel/' + this.options.metaData.data.uploaderUrl;\n } else if (this.options.videoProvider === 'vimeo') {\n uploaderLinkUrl = this.options.metaData.data.uploaderUrl;\n }\n uploaderLink = document.createElement('a');\n uploaderLink.setAttribute('href', uploaderLinkUrl);\n uploaderLink.setAttribute('target', '_blank');\n uploaderLink.innerText = this.options.metaData.data.uploader;\n this.element.find(this.options.metaData.DOM.uploader)[0].appendChild(uploaderLink);\n this.element.find('.' + this.options.videoClass).productVideoLoader();\n\n },\n\n /**\n * Reset\n */\n reset: function () {\n this.element.find(this.options.container).find('.' + this.options.videoClass).remove();\n this.element.find(this.options.metaData.DOM.wrapper).hide();\n this.element.find(this.options.metaData.DOM.all).text('');\n\n }\n });\n\n $.widget('mage.updateInputFields', {\n options: {\n reset: false,\n DOM: {\n urlField: 'input[name=\"video_url\"]',\n titleField: 'input[name=\"video_title\"]',\n fileField: '#file_name',\n descriptionField: 'textarea[name=\"video_description\"]',\n thumbnailLocation: '.field-new_video_screenshot_preview .admin__field-control'\n },\n data: {\n url: '',\n title: '',\n description: '',\n thumbnail: ''\n }\n },\n\n /**\n * @private\n */\n _init: function () {\n if (this.options.reset) {\n this.reset();\n } else {\n this.update();\n }\n },\n\n /**\n * Update\n */\n update: function () {\n $(this.options.DOM.titleField).val(this.options.data.title);\n $(this.options.DOM.descriptionField).val(this.options.data.description);\n },\n\n /**\n * Reset\n */\n reset: function () {\n $(this.options.DOM.fileField).val('');\n $(this.options.DOM.urlField).val('');\n $(this.options.DOM.titleField).val('');\n $(this.options.DOM.descriptionField).val('');\n }\n });\n\n /**\n */\n $.widget('mage.newVideoDialog', {\n\n _previewImage: null,\n\n clickedElement: '',\n\n _images: {},\n\n _imageTypes: [\n '.jpeg',\n '.pjpeg',\n '.jpeg',\n '.jpg',\n '.pjpeg',\n '.png',\n '.gif'\n ],\n\n _imageProductGalleryWrapperSelector: '#image-container',\n\n _videoPreviewInputSelector: '#new_video_screenshot',\n\n _videoPreviewRemoteSelector: '',\n\n _videoDisableinputSelector: '#new_video_disabled',\n\n _videoPreviewImagePointer: '#new_video_screenshot_preview',\n\n _videoFormSelector: '#new_video_form',\n\n _itemIdSelector: '#item_id',\n\n _videoUrlSelector: '[name=\"video_url\"]',\n\n _videoImageFilenameselector: '#file_name',\n\n _videoUrlWidget: null,\n\n _videoInformationBtnSelector: '[name=\"new_video_get\"]',\n\n _editVideoBtnSelector: '.image',\n\n _deleteGalleryVideoSelector: '[data-role=delete-button]',\n\n _deleteGalleryVideoSelectorBtn: null,\n\n _videoInformationGetBtn: null,\n\n _videoInformationGetUrlField: null,\n\n _videoInformationGetEditBtn: null,\n\n _isEditPage: false,\n\n _onlyVideoPlayer: false,\n\n _tempPreviewImageData: null,\n\n _videoPlayerSelector: '.mage-new-video-dialog',\n\n _videoRequestComplete: null,\n\n _gallery: null,\n\n /**\n * Bind events\n * @private\n */\n _bind: function () {\n var events = {\n 'setImage': '_onSetImage'\n };\n\n this._on(events);\n\n this._videoUrlWidget = this.element.find(this._videoUrlSelector).videoData({\n youtubeKey: this.options.youTubeApiKey,\n eventSource: 'focusout'\n });\n\n this._videoInformationGetBtn = this.element.find(this._videoInformationBtnSelector);\n this._videoInformationGetUrlField = this.element.find(this._videoUrlSelector);\n this._videoInformationGetEditBtn = this._gallery.find(this._editVideoBtnSelector);\n\n this._videoInformationGetBtn.on('click', $.proxy(this._onGetVideoInformationClick, this));\n this._videoInformationGetUrlField.on('focusout', $.proxy(this._onGetVideoInformationFocusOut, this));\n\n this._videoUrlWidget.on('updated_video_information', $.proxy(this._onGetVideoInformationSuccess, this));\n this._videoUrlWidget.on('error_updated_information', $.proxy(this._onGetVideoInformationError, this));\n this._videoUrlWidget.on(\n 'request_video_information',\n $.proxy(this._onGetVideoInformationStartRequest, this)\n );\n },\n\n /**\n * Fired when user click on button \"Get video information\"\n * @private\n */\n _onGetVideoInformationClick: function () {\n var videoForm = this.element.find(this._videoFormSelector);\n\n videoForm.validation();\n\n if (this.element.find(this._videoUrlSelector).valid()) {\n this._onlyVideoPlayer = false;\n this._isEditPage = false;\n this._videoUrlWidget.trigger('update_video_information');\n }\n },\n\n /**\n * Fired when user do focus out from url field\n * @private\n */\n _onGetVideoInformationFocusOut: function () {\n this._videoUrlWidget.trigger('update_video_information');\n },\n\n /**\n * @private\n */\n _onGetVideoInformationStartRequest: function () {\n var videoForm = this.element.find(this._videoFormSelector);\n\n try {\n videoForm.validation('clearError');\n } catch (e) {\n // Do nothing\n }\n\n this._videoRequestComplete = false;\n },\n\n /**\n * Fired when user click Edit Video button\n * @private\n */\n _onGetVideoInformationEditClick: function () {\n this._onlyVideoPlayer = true;\n this._isEditPage = true;\n this._videoUrlWidget.trigger('update_video_information');\n },\n\n /**\n * Fired when successfully received information about the video.\n * @param {Object} e\n * @param {Object} data\n * @private\n */\n _onGetVideoInformationSuccess: function (e, data) {\n var self = this;\n\n self.element.on('finish_update_video finish_create_video', $.proxy(function (element, playerData) {\n if (!self._onlyVideoPlayer ||\n !self._isEditPage && playerData.oldVideoId !== playerData.newVideoId ||\n playerData.oldVideoId && playerData.oldVideoId !== playerData.newVideoId\n ) {\n self.element.updateInputFields({\n reset: false,\n data: {\n title: data.title,\n description: data.description\n }\n });\n this._loadRemotePreview(data.thumbnail);\n }\n self._onlyVideoPlayer = true;\n }, this))\n .createVideoPlayer({\n videoId: data.videoId,\n videoProvider: data.videoProvider,\n useYoutubeNocookie: data.useYoutubeNocookie,\n reset: false,\n metaData: {\n DOM: {\n title: '.video-information.title span',\n uploaded: '.video-information.uploaded span',\n uploader: '.video-information.uploader span',\n duration: '.video-information.duration span',\n all: '.video-information span',\n wrapper: '.video-information'\n },\n data: {\n title: data.title,\n uploaded: data.uploaded,\n uploader: data.channel,\n duration: data.duration,\n uploaderUrl: data.channelId\n }\n }\n })\n .off('finish_update_video finish_create_video');\n\n this._videoRequestComplete = true;\n },\n\n /**\n * Load preview from youtube/vimeo\n * @param {String} sourceUrl\n * @private\n */\n _loadRemotePreview: function (sourceUrl) {\n var url = this.options.saveRemoteVideoUrl,\n self = this;\n\n this._getPreviewImage().attr('src', sourceUrl).hide();\n this._blockActionButtons(true, true);\n $.ajax({\n url: url,\n data: 'remote_image=' + sourceUrl,\n type: 'post',\n success: $.proxy(function (result) {\n this._tempPreviewImageData = result;\n this._getPreviewImage().attr('src', sourceUrl).show();\n this._blockActionButtons(false, true);\n }, self)\n });\n },\n\n /**\n * Fired when receiving information about the video ended with error\n * @private\n */\n _onGetVideoInformationError: function () {\n },\n\n /**\n * Remove \".tmp\"\n * @param {String} name\n * @returns {*}\n * @private\n */\n __prepareFilename: function (name) {\n var tmppost = '.tmp';\n\n if (!name) {\n return name;\n }\n\n if (name.endsWith(tmppost)) {\n name = name.slice(0, name.length - tmppost.length);\n }\n\n return name;\n },\n\n /**\n * Set image data\n * @param {String} file\n * @param {Object} imageData\n * @private\n */\n _setImage: function (file, imageData) {\n file = this.__prepareFilename(file);\n this._images[file] = imageData;\n this._gallery.trigger('addItem', imageData);\n this.element.trigger('setImage', imageData);\n this._addVideoClass(imageData.url);\n },\n\n /**\n * Get image data\n *\n * @param {String} file\n * @returns {*}\n * @private\n */\n _getImage: function (file) {\n file = this.__prepareFilename(file);\n\n return this._images[file];\n },\n\n /**\n * Replace image (update)\n * @param {String} oldFile\n * @param {String} newFile\n * @param {Object} imageData\n * @private\n */\n _replaceImage: function (oldFile, newFile, imageData) {\n var tmpNewFile = newFile,\n tmpOldImage,\n newImageId,\n oldNewFilePosition,\n fc,\n suff,\n searchsuff,\n key,\n oldValIdElem;\n\n oldFile = this.__prepareFilename(oldFile);\n newFile = this.__prepareFilename(newFile);\n tmpOldImage = this._images[oldFile];\n\n if (newFile === oldFile) {\n this._images[newFile] = imageData;\n this.saveImageRoles(imageData);\n this._updateVisibility(imageData);\n this._updateImageTitle(imageData);\n\n return null;\n }\n\n this._removeImage(oldFile);\n this._setImage(newFile, imageData);\n\n if (!oldFile || !imageData.oldFile) {\n return null;\n }\n\n newImageId = this.findElementId(tmpNewFile);\n fc = this.element.find(this._itemIdSelector).val();\n\n suff = 'product[media_gallery][images]' + fc;\n\n searchsuff = 'input[name=\"' + suff + '[value_id]\"]';\n key = this._gallery.find(searchsuff).val();\n\n if (!key) {\n return null;\n }\n\n oldValIdElem = document.createElement('input');\n this._gallery.find('form[data-form=\"edit-product\"]').append(oldValIdElem);\n $(oldValIdElem).attr({\n type: 'hidden',\n name: 'product[media_gallery][images][' + newImageId + '][save_data_from]'\n }).val(key);\n\n oldNewFilePosition = parseInt(tmpOldImage.position, 10);\n imageData.position = oldNewFilePosition;\n\n this._gallery.trigger('setPosition', {\n imageData: imageData,\n position: oldNewFilePosition\n });\n },\n\n /**\n * Remove image data\n * @param {String} file\n * @private\n */\n _removeImage: function (file) {\n var imageData = this._getImage(file);\n\n if (!imageData) {\n return null;\n }\n\n this._gallery.trigger('removeItem', imageData);\n this.element.trigger('removeImage', imageData);\n delete this._images[file];\n },\n\n /**\n * Fired when image setted\n * @param {Event} event\n * @param {Object} imageData\n * @private\n */\n _onSetImage: function (event, imageData) {\n this.saveImageRoles(imageData);\n },\n\n /**\n *\n * Wrap _uploadFile\n * @param {String} file\n * @param {String} oldFile\n * @param {Function} callback\n * @private\n */\n _uploadImage: function (file, oldFile, callback) {\n var url = this.options.saveVideoUrl,\n data = {\n files: file,\n url: url\n };\n\n this._blockActionButtons(true, true);\n this._uploadFile(data, $.proxy(function (result) {\n this._onImageLoaded(result, file, oldFile, callback);\n this._blockActionButtons(false);\n }, this));\n\n },\n\n /**\n * @param {String} result\n * @param {String} file\n * @param {String} oldFile\n * @param {Function} callback\n * @private\n */\n _onImageLoaded: function (result, file, oldFile, callback) {\n var data;\n\n try {\n data = JSON.parse(result);\n } catch (e) {\n data = result;\n }\n\n if (this.element.find('#video_url').parent().find('.image-upload-error').length > 0) {\n this.element.find('.image-upload-error').remove();\n }\n\n if (data.errorcode || data.error) {\n this.element.find('#video_url').parent().append('<div class=\"image-upload-error\">' +\n '<div class=\"image-upload-error-cross\"></div><span>' + data.error + '</span></div>');\n\n return;\n }\n $.each(this.element.find(this._videoFormSelector).serializeArray(), function (i, field) {\n data[field.name] = field.value;\n });\n data.disabled = this.element.find(this._videoDisableinputSelector).prop('checked') ? 1 : 0;\n data['media_type'] = 'external-video';\n data.oldFile = oldFile;\n\n oldFile ?\n this._replaceImage(oldFile, data.file, data) :\n this._setImage(data.file, data);\n callback.call(0, data);\n },\n\n /**\n * File uploader\n * @private\n */\n _uploadFile: function (data, callback) {\n var fu = this.element.find(this._videoPreviewInputSelector),\n tmpInput = document.createElement('input'),\n fileUploader = null;\n\n $(tmpInput).attr({\n 'name': fu.attr('name'),\n 'value': fu.val(),\n 'type': 'file',\n 'data-ui-ud': fu.attr('data-ui-ud')\n }).css('display', 'none');\n fu.parent().append(tmpInput);\n fileUploader = $(tmpInput).fileupload();\n fileUploader.fileupload('send', data).done(function (result, textStatus, jqXHR) {\n tmpInput.remove();\n callback.call(null, result, textStatus, jqXHR);\n });\n },\n\n /**\n * Update style\n * @param {String} url\n * @private\n */\n _addVideoClass: function (url) {\n var classVideo = 'video-item';\n\n this._gallery.find('img[src=\"' + url + '\"]').addClass(classVideo);\n },\n\n /**\n * Build widget\n * @private\n */\n _create: function () {\n var imgs = _.values(this.element.closest(this.options.videoSelector).data('images')) || [],\n widget,\n uploader,\n tmp,\n i;\n\n this._gallery = this.element.closest(this.options.videoSelector);\n\n for (i = 0; i < imgs.length; i++) {\n tmp = imgs[i];\n this._images[tmp.file] = tmp;\n\n if (tmp['media_type'] === 'external-video') {\n tmp.subclass = 'video-item';\n this._addVideoClass(tmp.url);\n }\n }\n\n this._gallery.on('openDialog', $.proxy(this._onOpenDialog, this));\n this._bind();\n this.createVideoItemIcons();\n widget = this;\n uploader = this.element.find(this._videoPreviewInputSelector);\n uploader.on('change', this._onImageInputChange.bind(this));\n uploader.attr('accept', this._imageTypes.join(','));\n\n this.element.modal({\n type: 'slide',\n //appendTo: this._gallery,\n modalClass: 'mage-new-video-dialog form-inline',\n title: $.mage.__('New Video'),\n buttons: [\n {\n text: $.mage.__('Save'),\n class: 'action-primary video-create-button',\n click: $.proxy(widget._onCreate, widget)\n },\n {\n text: $.mage.__('Cancel'),\n class: 'video-cancel-button',\n click: $.proxy(widget._onCancel, widget)\n },\n {\n text: $.mage.__('Delete'),\n class: 'video-delete-button',\n click: $.proxy(widget._onDelete, widget)\n },\n {\n text: $.mage.__('Save'),\n class: 'action-primary video-edit',\n click: $.proxy(widget._onUpdate, widget)\n }\n ],\n\n /**\n * @returns {null}\n */\n opened: function () {\n var roles,\n file,\n modalTitleElement,\n imageData,\n modal = widget.element.closest('.mage-new-video-dialog');\n\n widget.element.find('#video_url').focus();\n roles = widget.element.find('.video_image_role');\n roles.prop('disabled', false);\n file = widget.element.find('#file_name').val();\n widget._onGetVideoInformationEditClick();\n modalTitleElement = modal.find('.modal-title');\n\n if (!file) {\n widget._blockActionButtons(true);\n\n modal.find('.video-delete-button').hide();\n modal.find('.video-edit').hide();\n modal.find('.video-create-button').show();\n roles.prop('checked', widget._gallery.find('.image.item:not(.removed)').length < 1);\n modalTitleElement.text($.mage.__('New Video'));\n widget._isEditPage = false;\n\n return null;\n }\n widget._blockActionButtons(false);\n modalTitleElement.text($.mage.__('Edit Video'));\n widget._isEditPage = true;\n imageData = widget._getImage(file);\n\n if (!imageData) {\n imageData = {\n url: _.find(widget._gallery.find('.product-image'), function (image) {\n return image.src.indexOf(file) > -1;\n }).src\n };\n }\n\n widget._onPreview(null, imageData.url, false);\n },\n\n /**\n * Closed\n */\n closed: function () {\n widget._onClose();\n widget.createVideoItemIcons();\n }\n });\n this.toggleButtons();\n },\n\n /**\n * @param {String} status\n * @private\n */\n _blockActionButtons: function (status) {\n this.element\n .closest('.mage-new-video-dialog')\n .find('.page-actions-buttons button.video-create-button, .page-actions-buttons button.video-edit')\n .attr('disabled', status);\n },\n\n /**\n * Check form\n * @param {Function} callback\n */\n isValid: function (callback) {\n var videoForm = this.element.find(this._videoFormSelector),\n videoLoaded = true;\n\n this._blockActionButtons(true);\n\n this._videoUrlWidget.trigger('validate_video_url', $.proxy(function () {\n\n videoForm.mage('validation', {\n\n /**\n * @param {jQuery} error\n * @param {jQuery} element\n */\n errorPlacement: function (error, element) {\n error.insertAfter(element);\n }\n }).on('highlight.validate', function () {\n $(this).validation('option');\n });\n\n videoForm.validation();\n\n if (this._videoRequestComplete === false) {\n videoLoaded = false;\n }\n\n callback(videoForm.valid() && videoLoaded);\n }, this));\n\n this._blockActionButtons(false);\n },\n\n /**\n * Create video item icons\n */\n createVideoItemIcons: function () {\n var $imageWidget = this._gallery.find('.product-image.video-item'),\n $productGalleryWrapper = $(this._imageProductGalleryWrapperSelector).find('.product-image.video-item');\n\n $imageWidget.parent().addClass('video-item');\n $productGalleryWrapper.parent().addClass('video-item');\n $imageWidget.removeClass('video-item');\n $productGalleryWrapper.removeClass('video-item');\n $('.video-item .action-delete').attr('title', $.mage.__('Delete video'));\n $('.video-item .action-delete span').html($.mage.__('Delete video'));\n },\n\n /**\n * Fired when click on create video\n * @private\n */\n _onCreate: function () {\n var nvs = this.element.find(this._videoPreviewInputSelector),\n file = nvs.get(0),\n reqClass = 'required-entry _required';\n\n if (file && file.files && file.files.length) {\n file = file.files[0];\n } else {\n file = null;\n }\n\n if (!file && !this._tempPreviewImageData) {\n nvs.addClass(reqClass);\n }\n\n this.isValid($.proxy(\n function (videoValidStatus) {\n\n if (!videoValidStatus) {\n return;\n }\n\n if (this._tempPreviewImageData) {\n this._onImageLoaded(this._tempPreviewImageData, null, null, $.proxy(this.close, this));\n } else {\n this._uploadImage(file, null, $.proxy(function () {\n this.close();\n }, this));\n }\n\n nvs.removeClass(reqClass);\n },\n this\n ));\n },\n\n /**\n * Fired when click on update video\n * @private\n */\n _onUpdate: function () {\n var inputFile, itemId, _inputSelector, mediaFields, imageData, flagChecked, fileName, callback;\n\n this.isValid($.proxy(\n function (videoValidStatus) {\n\n if (!videoValidStatus) {\n return;\n }\n\n imageData = this.imageData || {};\n inputFile = this.element.find(this._videoPreviewInputSelector);\n itemId = this.element.find(this._itemIdSelector).val();\n itemId = itemId.slice(1, itemId.length - 1);\n _inputSelector = '[name*=\"[' + itemId + ']\"]';\n mediaFields = this._gallery.find('input' + _inputSelector);\n $.each(mediaFields, function (i, el) {\n var elName = el.name,\n start = elName.indexOf(itemId) + itemId.length + 2,\n fieldName = elName.substring(start, el.name.length - 1),\n _field = this.element.find('#' + fieldName),\n _tmp;\n\n if (_field.length > 0) {\n _tmp = _inputSelector.slice(0, _inputSelector.length - 2) + '[' + fieldName + ']\"]';\n this._gallery.find(_tmp).val(_field.val());\n imageData[fieldName] = _field.val();\n }\n }.bind(this));\n flagChecked = this.element.find(this._videoDisableinputSelector).prop('checked') ? 1 : 0;\n this._gallery.find('input[name*=\"' + itemId + '][disabled]\"]').val(flagChecked);\n this._gallery.find(_inputSelector).siblings('.image-fade').css(\n 'visibility',\n flagChecked ? 'visible' : 'hidden'\n );\n imageData.disabled = flagChecked;\n\n if (this._tempPreviewImageData) {\n this._onImageLoaded(\n this._tempPreviewImageData,\n null,\n imageData.file,\n $.proxy(this.close, this)\n );\n\n return;\n }\n fileName = inputFile.get(0).files;\n\n if (!fileName || !fileName.length) {\n fileName = null;\n }\n inputFile.replaceWith(inputFile);\n\n callback = $.proxy(function () {\n this.close();\n }, this);\n\n if (fileName) {\n this._uploadImage(fileName, imageData.file, callback);\n } else {\n this._replaceImage(imageData.file, imageData.file, imageData);\n callback(0, imageData);\n }\n },\n this\n ));\n },\n\n /**\n * Delegates call to producwt gallery to update video visibility.\n *\n * @param {Object} imageData\n */\n _updateVisibility: function (imageData) {\n this._gallery.trigger('updateVisibility', {\n disabled: imageData.disabled,\n imageData: imageData\n });\n },\n\n /**\n * Delegates call to product gallery to update video title.\n *\n * @param {Object} imageData\n */\n _updateImageTitle: function (imageData) {\n this._gallery.trigger('updateImageTitle', {\n imageData: imageData\n });\n },\n\n /**\n * Fired when clicked on cancel\n * @private\n */\n _onCancel: function () {\n this.close();\n },\n\n /**\n * Fired when clicked on delete\n * @private\n */\n _onDelete: function () {\n var filename = this.element.find(this._videoImageFilenameselector).val();\n\n this._removeImage(filename);\n this.close();\n },\n\n /**\n * @param {String} file\n * @param {Function} callback\n * @private\n */\n _readPreviewLocal: function (file, callback) {\n var fr = new FileReader;\n\n if (!window.FileReader) {\n return;\n }\n\n /**\n * On load end\n */\n fr.onloadend = function () {\n callback(fr.result);\n };\n fr.readAsDataURL(file);\n },\n\n /**\n * Image file input handler\n * @private\n */\n _onImageInputChange: function () {\n var jFile = this.element.find(this._videoPreviewInputSelector),\n file = jFile[0],\n val = jFile.val(),\n prev = this._getPreviewImage(),\n ext = '.' + val.split('.').pop();\n\n if (!val) {\n return;\n }\n ext = ext ? ext.toLowerCase() : '';\n\n if (\n ext.length < 2 ||\n this._imageTypes.indexOf(ext.toLowerCase()) === -1 || !file.files || !file.files.length\n ) {\n prev.remove();\n this._previewImage = null;\n jFile.val('');\n\n return;\n } // end if\n file = file.files[0];\n this._tempPreviewImageData = null;\n this._onPreview(null, file, true);\n },\n\n /**\n * Change Preview\n * @param {String} error\n * @param {String} src\n * @param {Boolean} local\n * @private\n */\n _onPreview: function (error, src, local) {\n var img, renderImage;\n\n img = this._getPreviewImage();\n\n /**\n * Callback\n * @param {String} source\n */\n renderImage = function (source) {\n img.attr({\n 'src': source\n }).show();\n };\n\n if (error) {\n return;\n }\n\n if (!local) {\n renderImage(src);\n } else {\n this._readPreviewLocal(src, renderImage);\n }\n },\n\n /**\n *\n * Return preview image imstance\n * @returns {null}\n * @private\n */\n _getPreviewImage: function () {\n\n if (!this._previewImage) {\n this._previewImage = $(document.createElement('img')).css({\n 'width': '100%',\n 'display': 'none',\n 'src': ''\n });\n $(this._previewImage).insertAfter(this.element.find(this._videoPreviewImagePointer));\n $(this._previewImage).attr('data-role', 'video_preview_image');\n }\n\n return this._previewImage;\n },\n\n /**\n * Close slideout dialog\n */\n close: function () {\n this.element.modal('closeModal');\n },\n\n /**\n * Close dialog wrap\n * @private\n */\n _onClose: function () {\n var newVideoForm;\n\n this._isEditPage = true;\n this.imageData = null;\n\n if (this._previewImage) {\n this._previewImage.remove();\n this._previewImage = null;\n }\n this._tempPreviewImageData = null;\n this.element.trigger('reset');\n newVideoForm = this.element.find(this._videoFormSelector);\n\n $(newVideoForm).find('input[type=\"hidden\"][name!=\"form_key\"]').val('');\n this._gallery.find(\n 'input[name*=\"' + this.element.find(this._itemIdSelector).val() + '\"]'\n ).parent().removeClass('active');\n\n try {\n newVideoForm.validation('clearError');\n } catch (e) {\n\n }\n newVideoForm.trigger('reset');\n },\n\n /**\n * Find element by fileName\n * @param {String} file\n */\n findElementId: function (file) {\n var elem = this._gallery.find('.image.item').find('input[value=\"' + file + '\"]');\n\n if (!elem.length) {\n return null;\n }\n\n return $(elem).attr('name').replace('product[media_gallery][images][', '').replace('][file]', '');\n },\n\n /**\n * Save image roles\n * @param {Object} imageData\n */\n saveImageRoles: function (imageData) {\n var data = imageData.file,\n self = this,\n containers;\n\n if (data && data.length > 0) {\n containers = this._gallery.find('.image-placeholder').siblings('input');\n $.each(containers, function (i, el) {\n var start = el.name.indexOf('[') + 1,\n end = el.name.indexOf(']'),\n imageType = el.name.substring(start, end),\n imageCheckbox = self.element.find(\n self._videoFormSelector + ' input[value=\"' + imageType + '\"]'\n );\n\n self._changeRole(imageType, imageCheckbox.prop('checked'), imageData);\n });\n }\n },\n\n /**\n * Change image role\n * @param {String} imageType - role name\n * @param {bool} isEnabled - role active status\n * @param {Object} imageData - image data object\n * @private\n */\n _changeRole: function (imageType, isEnabled, imageData) {\n var needCheked = true;\n\n if (!isEnabled) {\n needCheked = this._gallery.find('input[name=\"product[' + imageType + ']\"]').val() === imageData.file;\n }\n\n if (!needCheked) {\n return null;\n }\n\n this._gallery.trigger('setImageType', {\n type: imageType,\n imageData: isEnabled ? imageData : null\n });\n },\n\n /**\n * On open dialog\n * @param {Object} e\n * @param {Object} imageData\n * @private\n */\n _onOpenDialog: function (e, imageData) {\n var formFields, flagChecked, file,\n modal = this.element.closest('.mage-new-video-dialog');\n\n if (imageData['media_type'] === 'external-video') {\n this.imageData = imageData;\n modal.find('.video-create-button').hide();\n modal.find('.video-delete-button').show();\n modal.find('.video-edit').show();\n modal.createVideoPlayer({\n reset: true\n }).createVideoPlayer('reset');\n\n formFields = modal.find(this._videoFormSelector).find('.edited-data');\n\n $.each(formFields, function (i, field) {\n $(field).val(imageData[field.name]);\n });\n\n flagChecked = imageData.disabled > 0;\n modal.find(this._videoDisableinputSelector).prop('checked', flagChecked);\n\n file = modal.find('#file_name').val(imageData.file);\n\n $.each(modal.find('.video_image_role'), function () {\n $(this).prop('checked', false).prop('disabled', false);\n });\n\n $.each(this._gallery.find('.image-placeholder').siblings('input:hidden'), function () {\n var start, end, imageRole;\n\n if ($(this).val() === file.val()) {\n start = this.name.indexOf('[') + 1;\n end = this.name.length - 1;\n imageRole = this.name.substring(start, end);\n modal.find('#new_video_form input[value=\"' + imageRole + '\"]').prop('checked', true);\n }\n });\n }\n\n },\n\n /**\n * Toggle buttons\n */\n toggleButtons: function () {\n var self = this,\n modal = this.element.closest('.mage-new-video-dialog');\n\n modal.find('.video-placeholder, .add-video-button-container > button').click(function () {\n modal.find('.video-create-button').show();\n modal.find('.video-delete-button').hide();\n modal.find('.video-edit').hide();\n modal.createVideoPlayer({\n reset: true\n }).createVideoPlayer('reset').updateInputFields({\n reset: true\n }).updateInputFields('reset');\n });\n this._gallery.on('click', '.item.video-item', function () {\n modal.find('.video-create-button').hide();\n modal.find('.video-delete-button').show();\n modal.find('.video-edit').show();\n modal.find('.mage-new-video-dialog').createVideoPlayer({\n reset: true\n }).createVideoPlayer('reset');\n });\n this._gallery.on('click', '.item.video-item:not(.removed)', function () {\n var flagChecked,\n file,\n formFields = modal.find('.edited-data'),\n container = $(this);\n\n $.each(formFields, function (i, field) {\n $(field).val(container.find('input[name*=\"' + field.name + '\"]').val());\n });\n\n flagChecked = container.find('input[name*=\"disabled\"]').val() > 0;\n self._gallery.find(self._videoDisableinputSelector).prop('checked', flagChecked);\n\n file = self._gallery.find('#file_name').val(container.find('input[name*=\"file\"]').val());\n\n $.each(self._gallery.find('.video_image_role'), function () {\n $(this).prop('checked', false).prop('disabled', false);\n });\n\n $.each(self._gallery.find('.image-placeholder').siblings('input:hidden'), function () {\n var start, end, imageRole;\n\n if ($(this).val() !== file.val()) {\n return null;\n }\n\n start = this.name.indexOf('[') + 1;\n end = this.name.length - 1;\n imageRole = this.name.substring(start, end);\n self._gallery.find('input[value=\"' + imageRole + '\"]').prop('checked', true);\n });\n });\n }\n });\n\n $('#group-fields-image-management > legend > span').text($.mage.__('Images and Videos'));\n\n return $.mage.newVideoDialog;\n});\n","Magento_ProductVideo/js/video-modal.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'productGallery',\n 'jquery/ui',\n 'Magento_Ui/js/modal/modal',\n 'mage/translate',\n 'mage/backend/tree-suggest',\n 'mage/backend/validation',\n 'newVideoDialog'\n], function ($, productGallery) {\n 'use strict';\n\n $.widget('mage.productGallery', productGallery, {\n\n /**\n * Bind events\n * @private\n */\n _bind: function () {\n var events = {},\n itemId;\n\n this._super();\n\n /**\n * Add item_id value to opened modal\n * @param {Object} event\n */\n events['click ' + this.options.imageSelector] = function (event) {\n if (!$(event.currentTarget).is('.ui-sortable-helper')) {\n itemId = $(event.currentTarget).find('input')[0].name.match(/\\[([^\\]]*)\\]/g)[2];\n this.videoDialog.find('#item_id').val(itemId);\n }\n };\n this._on(events);\n this.element.prev().find('[data-role=\"add-video-button\"]').on('click', this.showModal.bind(this));\n this.element.on('openDialog', '.gallery.ui-sortable', $.proxy(this._onOpenDialog, this));\n },\n\n /**\n * @private\n */\n _create: function () {\n this._super();\n this.videoDialog = this.element.find('#new-video');\n this.videoDialog.mage('newVideoDialog', this.videoDialog.data('modalInfo'));\n },\n\n /**\n * Open dialog for external video\n * @private\n */\n _onOpenDialog: function (e, imageData) {\n\n if (imageData['media_type'] !== 'external-video') {\n this._superApply(arguments);\n } else {\n this.showModal();\n }\n },\n\n /**\n * Fired on trigger \"openModal\"\n */\n showModal: function () {\n this.videoDialog.modal('openModal');\n }\n });\n\n return $.mage.productGallery;\n});\n","Magento_ProductVideo/js/get-video-information.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/alert',\n 'jquery/ui',\n 'mage/translate'\n], function ($, alert) {\n 'use strict';\n\n var videoRegister = {\n _register: {},\n\n /**\n * Checks, if api is already registered\n *\n * @param {String} api\n * @returns {bool}\n */\n isRegistered: function (api) {\n return this._register[api] !== undefined;\n },\n\n /**\n * Checks, if api is loaded\n *\n * @param {String} api\n * @returns {bool}\n */\n isLoaded: function (api) {\n return this._register[api] !== undefined && this._register[api] === true;\n },\n\n /**\n * Register new video api\n * @param {String} api\n * @param {bool} loaded\n */\n register: function (api, loaded) {\n loaded = loaded || false;\n this._register[api] = loaded;\n }\n };\n\n $.widget('mage.productVideoLoader', {\n\n /**\n * @private\n */\n _create: function () {\n switch (this.element.data('type')) {\n case 'youtube':\n this.element.videoYoutube();\n this._player = this.element.data('mageVideoYoutube');\n break;\n\n case 'vimeo':\n this.element.videoVimeo();\n this._player = this.element.data('mageVideoVimeo');\n break;\n default:\n throw {\n name: $.mage.__('Video Error'),\n message: $.mage.__('Unknown video type'),\n\n /**\n * Return string\n */\n toString: function () {\n return this.name + ': ' + this.message;\n }\n };\n }\n },\n\n /**\n * Initializes variables\n * @private\n */\n _initialize: function () {\n this._params = this.element.data('params') || {};\n this._code = this.element.data('code');\n this._width = this.element.data('width');\n this._height = this.element.data('height');\n this._autoplay = !!this.element.data('autoplay');\n this._playing = this._autoplay || false;\n this.useYoutubeNocookie = this.element.data('youtubenocookie') || false;\n\n this._responsive = this.element.data('responsive') !== false;\n\n if (this._responsive === true) {\n this.element.addClass('responsive');\n }\n\n this._calculateRatio();\n },\n\n /**\n * Abstract play command\n */\n play: function () {\n this._player.play();\n },\n\n /**\n * Abstract pause command\n */\n pause: function () {\n this._player.pause();\n },\n\n /**\n * Abstract stop command\n */\n stop: function () {\n this._player.stop();\n },\n\n /**\n * Abstract playing command\n */\n playing: function () {\n return this._player.playing();\n },\n\n /**\n * Abstract destroying command\n */\n destroy: function () {\n if (this._player) {\n this._player.destroy();\n }\n },\n\n /**\n * Calculates ratio for responsive videos\n * @private\n */\n _calculateRatio: function () {\n if (!this._responsive) {\n return;\n }\n this.element.css('paddingBottom', this._height / this._width * 100 + '%');\n }\n });\n\n $.widget('mage.videoYoutube', $.mage.productVideoLoader, {\n\n /**\n * Initialization of the Youtube widget\n * @private\n */\n _create: function () {\n var self = this;\n\n this._initialize();\n\n this.element.append('<div></div>');\n\n this._on(window, {\n\n /**\n * Youtube state check\n * @private\n */\n 'youtubeapiready': function () {\n var host = 'https://www.youtube.com';\n\n if (self.useYoutubeNocookie) {\n host = 'https://www.youtube-nocookie.com';\n }\n\n if (self._player !== undefined) {\n return;\n }\n\n if (self._autoplay) {\n self._params.autoplay = 1;\n }\n self._params.rel = 0;\n\n self._player = new window.YT.Player(self.element.children(':first')[0], {\n height: self._height,\n width: self._width,\n videoId: self._code,\n playerVars: self._params,\n host: host,\n events: {\n\n /**\n * @private\n */\n 'onReady': function onPlayerReady() {\n self._player.getDuration();\n },\n\n /**\n * State change flag init\n */\n onStateChange: function (data) {\n switch (window.parseInt(data.data, 10)) {\n case 1:\n self._playing = true;\n break;\n default:\n self._playing = false;\n break;\n }\n\n self._trigger('statechange', {}, data);\n }\n }\n\n });\n }\n });\n\n this._loadApi();\n },\n\n /**\n * Loads Youtube API and triggers event, when loaded\n * @private\n */\n _loadApi: function () {\n var element,\n scriptTag;\n\n if (videoRegister.isRegistered('youtube')) {\n if (videoRegister.isLoaded('youtube')) {\n $(window).trigger('youtubeapiready');\n }\n\n return;\n }\n videoRegister.register('youtube');\n\n element = document.createElement('script');\n scriptTag = document.getElementsByTagName('script')[0];\n\n element.async = true;\n element.src = 'https://www.youtube.com/iframe_api';\n scriptTag.parentNode.insertBefore(element, scriptTag);\n\n /**\n * Trigger youtube api ready event\n */\n window.onYouTubeIframeAPIReady = function () {\n $(window).trigger('youtubeapiready');\n videoRegister.register('youtube', true);\n };\n },\n\n /**\n * Play command for Youtube\n */\n play: function () {\n this._player.playVideo();\n this._playing = true;\n },\n\n /**\n * Pause command for Youtube\n */\n pause: function () {\n this._player.pauseVideo();\n this._playing = false;\n },\n\n /**\n * Stop command for Youtube\n */\n stop: function () {\n this._player.stopVideo();\n this._playing = false;\n },\n\n /**\n * Playing command for Youtube\n */\n playing: function () {\n return this._playing;\n },\n\n /**\n * stops and unloads player\n * @private\n */\n destroy: function () {\n if (this._player) {\n this.stop();\n this._player.destroy();\n this._player = undefined;\n }\n }\n });\n\n $.widget('mage.videoVimeo', $.mage.productVideoLoader, {\n\n /**\n * Initialize the Vimeo widget\n * @private\n */\n _create: function () {\n var timestamp,\n src,\n additionalParams;\n\n this._initialize();\n timestamp = new Date().getTime();\n\n if (this._autoplay) {\n additionalParams += '&autoplay=1';\n }\n\n src = 'https://player.vimeo.com/video/' +\n this._code + '?api=1&player_id=vimeo' +\n this._code +\n timestamp +\n additionalParams;\n this.element.append(\n $('<iframe></iframe>')\n .attr('frameborder', 0)\n .attr('id', 'vimeo' + this._code + timestamp)\n .attr('width', this._width)\n .attr('height', this._height)\n .attr('src', src)\n );\n\n }\n });\n\n $.widget('mage.videoData', {\n options: {\n youtubeKey: '',\n eventSource: '' //where is data going from - focus out or click on button\n },\n\n _REQUEST_VIDEO_INFORMATION_TRIGGER: 'request_video_information',\n\n _UPDATE_VIDEO_INFORMATION_TRIGGER: 'updated_video_information',\n\n _START_UPDATE_INFORMATION_TRIGGER: 'update_video_information',\n\n _ERROR_UPDATE_INFORMATION_TRIGGER: 'error_updated_information',\n\n _FINISH_UPDATE_INFORMATION_TRIGGER: 'finish_update_information',\n\n _VIDEO_URL_VALIDATE_TRIGGER: 'validate_video_url',\n\n _videoInformation: null,\n\n _currentVideoUrl: null,\n\n /**\n * @private\n */\n _init: function () {\n this.element.on(this._START_UPDATE_INFORMATION_TRIGGER, $.proxy(this._onRequestHandler, this));\n this.element.on(this._ERROR_UPDATE_INFORMATION_TRIGGER, $.proxy(this._onVideoInvalid, this));\n this.element.on(this._FINISH_UPDATE_INFORMATION_TRIGGER, $.proxy(\n function () {\n this._currentVideoUrl = null;\n }, this\n ));\n this.element.on(this._VIDEO_URL_VALIDATE_TRIGGER, $.proxy(this._onUrlValidateHandler, this));\n },\n\n /**\n * @private\n */\n _onUrlValidateHandler: function (event, callback, forceVideo) {\n var url = this.element.val(),\n videoInfo;\n\n videoInfo = this._validateURL(url, forceVideo);\n\n if (videoInfo) {\n callback();\n } else {\n this._onRequestError($.mage.__('Invalid video url'));\n }\n },\n\n /**\n * @private\n */\n _onRequestHandler: function () {\n var url = this.element.val(),\n self = this,\n videoInfo,\n type,\n id,\n googleapisUrl;\n\n if (this._currentVideoUrl === url) {\n return;\n }\n\n this._currentVideoUrl = url;\n\n this.element.trigger(this._REQUEST_VIDEO_INFORMATION_TRIGGER, {\n url: url\n });\n\n if (!url) {\n return;\n }\n\n videoInfo = this._validateURL(url);\n\n if (!videoInfo) {\n this._onRequestError($.mage.__('Invalid video url'));\n\n return;\n }\n\n /**\n *\n * @param {Object} data\n * @private\n */\n function _onYouTubeLoaded(data) {\n var tmp,\n uploadedFormatted,\n respData,\n createErrorMessage;\n\n /**\n * Create errors message\n *\n * @returns {String}\n */\n createErrorMessage = function () {\n var error = data.error,\n errors = error.errors,\n i,\n errLength = errors.length,\n tmpError,\n errReason,\n errorsMessage = [];\n\n for (i = 0; i < errLength; i++) {\n tmpError = errors[i];\n errReason = tmpError.reason;\n\n if (['keyInvalid'].indexOf(errReason) !== -1) {\n errorsMessage.push($.mage.__('Youtube API key is invalid'));\n\n break;\n }\n\n errorsMessage.push(tmpError.message);\n }\n\n return $.mage.__('Video cant be shown due to the following reason: ') +\n $.unique(errorsMessage).join(', ');\n };\n\n if (data.error && [400, 402, 403].indexOf(data.error.code) !== -1) {\n this._onRequestError(createErrorMessage());\n\n return;\n }\n\n if (!data.items || data.items.length < 1) {\n this._onRequestError($.mage.__('Video not found'));\n\n return;\n }\n\n tmp = data.items[0];\n uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\\..+/g, '');\n respData = {\n duration: this._formatYoutubeDuration(tmp.contentDetails.duration),\n channel: tmp.snippet.channelTitle,\n channelId: tmp.snippet.channelId,\n uploaded: uploadedFormatted,\n title: tmp.snippet.localized.title,\n description: tmp.snippet.description,\n thumbnail: tmp.snippet.thumbnails.high.url,\n videoId: videoInfo.id,\n videoProvider: videoInfo.type,\n useYoutubeNocookie: videoInfo.useYoutubeNocookie\n };\n this._videoInformation = respData;\n this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);\n this.element.trigger(this._FINISH_UPDATE_INFORMATION_TRIGGER, true);\n }\n\n /**\n * @private\n */\n function _onVimeoLoaded(data) {\n var tmp,\n respData,\n videoDescription = '';\n\n if (!data) {\n this._onRequestError($.mage.__('Video not found'));\n\n return null;\n }\n tmp = data;\n\n if (tmp.description !== null) {\n videoDescription = tmp.description;\n }\n\n if (tmp.duration == null) {\n this._onRequestError(\n $.mage.__('Because of its privacy settings, this video cannot be played here.')\n );\n } else {\n respData = {\n duration: this._formatVimeoDuration(tmp.duration),\n channel: tmp['author_name'],\n channelId: tmp['author_url'],\n uploaded: tmp['upload_date'],\n title: tmp.title,\n description: videoDescription.replace(/( |<([^>]+)>)/ig, ''),\n thumbnail: tmp['thumbnail_url'],\n videoId: videoInfo.id,\n videoProvider: videoInfo.type\n };\n this._videoInformation = respData;\n this.element.trigger(this._UPDATE_VIDEO_INFORMATION_TRIGGER, respData);\n this.element.trigger(this._FINISH_UPDATE_INFORMATION_TRIGGER, true);\n }\n }\n\n type = videoInfo.type;\n id = videoInfo.id;\n\n if (type === 'youtube') {\n googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' +\n id +\n '&part=snippet,contentDetails&key=' +\n this.options.youtubeKey + '&alt=json&callback=?';\n $.getJSON(googleapisUrl,\n {\n format: 'json'\n },\n $.proxy(_onYouTubeLoaded, self)\n ).fail(\n function () {\n self._onRequestError('Video not found');\n }\n );\n } else if (type === 'vimeo') {\n $.ajax({\n url: 'https://vimeo.com/api/oembed.json',\n dataType: 'jsonp',\n data: {\n format: 'json',\n url: 'https://vimeo.com/' + id\n },\n timeout: 5000,\n success: $.proxy(_onVimeoLoaded, self),\n\n /**\n * @private\n */\n error: function () {\n self._onRequestError($.mage.__('Video not found'));\n }\n });\n }\n },\n\n /**\n * @private\n */\n _onVideoInvalid: function (event, data) {\n this._videoInformation = null;\n this.element.val('');\n alert({\n content: 'Error: \"' + data + '\"'\n });\n },\n\n /**\n * @private\n */\n _onRequestError: function (error) {\n this.element.trigger(this._ERROR_UPDATE_INFORMATION_TRIGGER, error);\n this.element.trigger(this._FINISH_UPDATE_INFORMATION_TRIGGER, false);\n this._currentVideoUrl = null;\n },\n\n /**\n * @private\n */\n _formatYoutubeDuration: function (duration) {\n var match = duration.match(/PT(\\d+H)?(\\d+M)?(\\d+S)?/),\n hours = parseInt(match[1], 10) || 0,\n minutes = parseInt(match[2], 10) || 0,\n seconds = parseInt(match[3], 10) || 0;\n\n return this._formatVimeoDuration(hours * 3600 + minutes * 60 + seconds);\n },\n\n /**\n * @private\n */\n _formatVimeoDuration: function (seconds) {\n return new Date(seconds * 1000).toUTCString().match(/(\\d\\d:\\d\\d:\\d\\d)/)[0];\n },\n\n /**\n * @private\n */\n _parseHref: function (href) {\n var a = document.createElement('a');\n\n a.href = href;\n\n return a;\n },\n\n /**\n * @private\n */\n _validateURL: function (href, forceVideo) {\n var id,\n type,\n ampersandPosition,\n vimeoRegex,\n useYoutubeNocookie = false;\n\n if (typeof href !== 'string') {\n return href;\n }\n href = this._parseHref(href);\n\n if (href.host.match(/youtube\\.com/) && href.search) {\n\n id = href.search.split('v=')[1];\n\n if (id) {\n ampersandPosition = id.indexOf('&');\n type = 'youtube';\n }\n\n if (id && ampersandPosition !== -1) {\n id = id.substring(0, ampersandPosition);\n }\n\n } else if (href.host.match(/youtube\\.com|youtu\\.be|youtube-nocookie.com/)) {\n id = href.pathname.replace(/^\\/(embed\\/|v\\/)?/, '').replace(/\\/.*/, '');\n type = 'youtube';\n\n if (href.host.match(/youtube-nocookie.com/)) {\n useYoutubeNocookie = true;\n }\n } else if (href.host.match(/vimeo\\.com/)) {\n type = 'vimeo';\n vimeoRegex = new RegExp(['https?:\\\\/\\\\/(?:www\\\\.|player\\\\.)?vimeo.com\\\\/(?:channels\\\\/(?:\\\\w+\\\\/)',\n '?|groups\\\\/([^\\\\/]*)\\\\/videos\\\\/|album\\\\/(\\\\d+)\\\\/video\\\\/|video\\\\/|)(\\\\d+)(?:$|\\\\/|\\\\?)'\n ].join(''));\n\n if (href.href.match(vimeoRegex) != null) {\n id = href.href.match(vimeoRegex)[3];\n }\n }\n\n if ((!id || !type) && forceVideo) {\n id = href.href;\n type = 'custom';\n }\n\n return id ? {\n id: id, type: type, s: href.search.replace(/^\\?/, ''), useYoutubeNocookie: useYoutubeNocookie\n } : false;\n }\n });\n });\n","Magento_Sitemap/js/form-submit-loader.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n return function (data, element) {\n\n $(element).on('save', function () {\n if ($(this).valid()) {\n $('body').trigger('processStart');\n }\n });\n };\n});\n","Amasty_MWishlist/js/product/grid/cell/salable-quantity.js":"define([\n 'Magento_Ui/js/grid/columns/column'\n], function (Column) {\n 'use strict';\n\n return Column.extend({\n defaults: {\n bodyTmpl: 'Amasty_MWishlist/product/grid/cell/salable-quantity.html'\n },\n\n /**\n * Get salable quantity data (stock name and salable qty)\n *\n * @param {Object} record - Record object\n * @returns {Array} Result array\n */\n getSalableQuantityData: function (record) {\n return record[this.index] ? record[this.index] : [];\n }\n });\n});\n","Magefan_Blog/js/post-gallery.js":"/**\n * Copyright \u00a9 Magefan ([email protected]). All rights reserved.\n * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement).\n *\n * Glory to Ukraine! Glory to the heroes!\n */\n\n/*jshint jquery:true*/\ndefine([\n 'jquery',\n 'underscore',\n 'mage/template',\n 'uiRegistry',\n 'productGallery',\n 'jquery-ui-modules/core',\n 'jquery-ui-modules/widget',\n 'baseImage'\n], function ($, _, mageTemplate, registry, productGallery) {\n 'use strict';\n\n $.widget('mage.productGallery', $.mage.productGallery, {\n _showDialog: function (imageData) {}\n });\n\n return $.mage.productGallery;\n});\n","Magefan_Blog/js/jquery.tagsinput.js":"/*\n\n\tjQuery Tags Input Plugin 1.3.3\n\n\tCopyright (c) 2011 XOXCO, Inc\n\n\tDocumentation for this plugin lives here:\n\thttp://xoxco.com/clickable/jquery-tags-input\n\n\tLicensed under the MIT license:\n\thttp://www.opensource.org/licenses/mit-license.php\n\n\[email protected]\n\n*/\n\n(function($) {\n\n\tvar delimiter = new Array();\n\tvar tags_callbacks = new Array();\n\t$.fn.doAutosize = function(o){\n\t var minWidth = $(this).data('minwidth'),\n\t maxWidth = $(this).data('maxwidth'),\n\t val = '',\n\t input = $(this),\n\t testSubject = $('#'+$(this).data('tester_id'));\n\n\t if (val === (val = input.val())) {return;}\n\n\t // Enter new content into testSubject\n\t var escaped = val.replace(/&/g, '&').replace(/\\s/g,' ').replace(/</g, '<').replace(/>/g, '>');\n\t testSubject.html(escaped);\n\t // Calculate new width + whether to change\n\t var testerWidth = testSubject.width(),\n\t newWidth = (testerWidth + o.comfortZone) >= minWidth ? testerWidth + o.comfortZone : minWidth,\n\t currentWidth = input.width(),\n\t isValidWidthChange = (newWidth < currentWidth && newWidth >= minWidth)\n\t || (newWidth > minWidth && newWidth < maxWidth);\n\n\t // Animate width\n\t if (isValidWidthChange) {\n\t input.width(newWidth);\n\t }\n\n\n };\n $.fn.resetAutosize = function(options){\n // alert(JSON.stringify(options));\n var minWidth = $(this).data('minwidth') || options.minInputWidth || $(this).width(),\n maxWidth = $(this).data('maxwidth') || options.maxInputWidth || ($(this).closest('.tagsinput').width() - options.inputPadding),\n val = '',\n input = $(this),\n testSubject = $('<tester/>').css({\n position: 'absolute',\n top: -9999,\n left: -9999,\n width: 'auto',\n fontSize: input.css('fontSize'),\n fontFamily: input.css('fontFamily'),\n fontWeight: input.css('fontWeight'),\n letterSpacing: input.css('letterSpacing'),\n whiteSpace: 'nowrap'\n }),\n testerId = $(this).attr('id')+'_autosize_tester';\n if(! $('#'+testerId).length > 0){\n testSubject.attr('id', testerId);\n testSubject.appendTo('body');\n }\n\n input.data('minwidth', minWidth);\n input.data('maxwidth', maxWidth);\n input.data('tester_id', testerId);\n input.css('width', minWidth);\n };\n\n\t$.fn.addTag = function(value,options) {\n\t\t\toptions = jQuery.extend({focus:false,callback:true},options);\n\t\t\tthis.each(function() {\n\t\t\t\tvar id = $(this).attr('id');\n\n\t\t\t\tvar tagslist = $(this).val().split(delimiter[id]);\n\t\t\t\tif (tagslist[0] == '') {\n\t\t\t\t\ttagslist = new Array();\n\t\t\t\t}\n\n\t\t\t\tvalue = jQuery.trim(value);\n\n\t\t\t\tif (options.unique) {\n\t\t\t\t\tvar skipTag = $(this).tagExist(value);\n\t\t\t\t\tif(skipTag == true) {\n\t\t\t\t\t //Marks fake input as not_valid to let styling it\n \t\t\t\t $('#'+id+'_tag').addClass('not_valid');\n \t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar skipTag = false;\n\t\t\t\t}\n\n\t\t\t\tif (value !='' && skipTag != true) {\n $('<span>').addClass('tag').append(\n $('<span>').text(value).append(' '),\n $('<a>', {\n href : '#',\n title : 'Removing tag',\n text : 'x'\n }).click(function () {\n return $('#' + id).removeTag(escape(value));\n })\n ).insertBefore('#' + id + '_addTag');\n\n\t\t\t\t\ttagslist.push(value);\n\n\t\t\t\t\t$('#'+id+'_tag').val('');\n\t\t\t\t\tif (options.focus) {\n\t\t\t\t\t\t$('#'+id+'_tag').focus();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$('#'+id+'_tag').blur();\n\t\t\t\t\t}\n\n\t\t\t\t\t$.fn.tagsInput.updateTagsField(this,tagslist);\n\n\t\t\t\t\tif (options.callback && tags_callbacks[id] && tags_callbacks[id]['onAddTag']) {\n\t\t\t\t\t\tvar f = tags_callbacks[id]['onAddTag'];\n\t\t\t\t\t\tf.call(this, value);\n\t\t\t\t\t}\n\t\t\t\t\tif(tags_callbacks[id] && tags_callbacks[id]['onChange'])\n\t\t\t\t\t{\n\t\t\t\t\t\tvar i = tagslist.length;\n\t\t\t\t\t\tvar f = tags_callbacks[id]['onChange'];\n\t\t\t\t\t\tf.call(this, $(this), tagslist[i-1]);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t});\n\n\t\t\treturn false;\n\t\t};\n\n\t$.fn.removeTag = function(value) {\n\t\t\tvalue = unescape(value);\n\t\t\tthis.each(function() {\n\t\t\t\tvar id = $(this).attr('id');\n\n\t\t\t\tvar old = $(this).val().split(delimiter[id]);\n\n\t\t\t\t$('#'+id+'_tagsinput .tag').remove();\n\t\t\t\tstr = '';\n\t\t\t\tfor (i=0; i< old.length; i++) {\n\t\t\t\t\tif (old[i]!=value) {\n\t\t\t\t\t\tstr = str + delimiter[id] +old[i];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$.fn.tagsInput.importTags(this,str);\n\n\t\t\t\tif (tags_callbacks[id] && tags_callbacks[id]['onRemoveTag']) {\n\t\t\t\t\tvar f = tags_callbacks[id]['onRemoveTag'];\n\t\t\t\t\tf.call(this, value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn false;\n\t\t};\n\n\t$.fn.tagExist = function(val) {\n\t\tvar id = $(this).attr('id');\n\t\tvar tagslist = $(this).val().split(delimiter[id]);\n\t\treturn (jQuery.inArray(val, tagslist) >= 0); //true when tag exists, false when not\n\t};\n\n // clear all existing tags and import new ones from a string\n $.fn.importTags = function(str) {\n var id = $(this).attr('id');\n $('#'+id+'_tagsinput .tag').remove();\n $.fn.tagsInput.importTags(this,str);\n }\n\n\t$.fn.tagsInput = function(options) {\n var settings = jQuery.extend({\n interactive:true,\n defaultText:'add a tag',\n minChars:0,\n width:'300px',\n height:'100px',\n autocomplete: {selectFirst: false },\n hide:true,\n delimiter: ',',\n unique:true,\n removeWithBackspace:true,\n placeholderColor:'#666666',\n autosize: true,\n comfortZone: 20,\n inputPadding: 6*2\n },options);\n\n \tvar uniqueIdCounter = 0;\n\n\t\tthis.each(function() {\n // If we have already initialized the field, do not do it again\n if (typeof $(this).attr('data-tagsinput-init') !== 'undefined') {\n return;\n }\n\n // Mark the field as having been initialized\n $(this).attr('data-tagsinput-init', true);\n\n\t\t\tif (settings.hide) {\n\t\t\t\t$(this).hide();\n\t\t\t}\n\t\t\tvar id = $(this).attr('id');\n\t\t\tif (!id || delimiter[$(this).attr('id')]) {\n\t\t\t\tid = $(this).attr('id', 'tags' + new Date().getTime() + (uniqueIdCounter++)).attr('id');\n\t\t\t}\n\n\t\t\tvar data = jQuery.extend({\n\t\t\t\tpid:id,\n\t\t\t\treal_input: '#'+id,\n\t\t\t\tholder: '#'+id+'_tagsinput',\n\t\t\t\tinput_wrapper: '#'+id+'_addTag',\n\t\t\t\tfake_input: '#'+id+'_tag'\n\t\t\t},settings);\n\n\t\t\tdelimiter[id] = data.delimiter;\n\n\t\t\tif (settings.onAddTag || settings.onRemoveTag || settings.onChange) {\n\t\t\t\ttags_callbacks[id] = new Array();\n\t\t\t\ttags_callbacks[id]['onAddTag'] = settings.onAddTag;\n\t\t\t\ttags_callbacks[id]['onRemoveTag'] = settings.onRemoveTag;\n\t\t\t\ttags_callbacks[id]['onChange'] = settings.onChange;\n\t\t\t}\n\n\t\t\tvar markup = '<div id=\"'+id+'_tagsinput\" class=\"tagsinput\"><div id=\"'+id+'_addTag\">';\n\n\t\t\tif (settings.interactive) {\n\t\t\t\tmarkup = markup + '<input id=\"'+id+'_tag\" value=\"\" data-default=\"'+settings.defaultText+'\" />';\n\t\t\t}\n\n\t\t\tmarkup = markup + '</div><div class=\"tags_clear\"></div></div>';\n\n\t\t\t$(markup).insertAfter(this);\n\n\t\t\t$(data.holder).css('width',settings.width);\n\t\t\t$(data.holder).css('min-height',settings.height);\n\t\t\t$(data.holder).css('height',settings.height);\n\n\t\t\tif ($(data.real_input).val()!='') {\n\t\t\t\t$.fn.tagsInput.importTags($(data.real_input),$(data.real_input).val());\n\t\t\t}\n\t\t\tif (settings.interactive) {\n\t\t\t\t$(data.fake_input).val($(data.fake_input).attr('data-default'));\n\t\t\t\t$(data.fake_input).css('color',settings.placeholderColor);\n\t\t $(data.fake_input).resetAutosize(settings);\n\n\t\t\t\t$(data.holder).bind('click',data,function(event) {\n\t\t\t\t\t$(event.data.fake_input).focus();\n\t\t\t\t});\n\n\t\t\t\t$(data.fake_input).bind('focus',data,function(event) {\n\t\t\t\t\tif ($(event.data.fake_input).val()==$(event.data.fake_input).attr('data-default')) {\n\t\t\t\t\t\t$(event.data.fake_input).val('');\n\t\t\t\t\t}\n\t\t\t\t\t$(event.data.fake_input).css('color','#000000');\n\t\t\t\t});\n\n\t\t\t\tif (settings.autocomplete_url != undefined) {\n\t\t\t\t\tautocomplete_options = {source: settings.autocomplete_url};\n\t\t\t\t\tfor (attrname in settings.autocomplete) {\n\t\t\t\t\t\tautocomplete_options[attrname] = settings.autocomplete[attrname];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (jQuery.Autocompleter !== undefined) {\n\t\t\t\t\t\t$(data.fake_input).autocomplete(settings.autocomplete_url, settings.autocomplete);\n\t\t\t\t\t\t$(data.fake_input).bind('result',data,function(event,data,formatted) {\n\t\t\t\t\t\t\tif (data) {\n\t\t\t\t\t\t\t\t$('#'+id).addTag(data[0] + \"\",{focus:true,unique:(settings.unique)});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t \t});\n\t\t\t\t\t} else if (jQuery.ui.autocomplete !== undefined) {\n\t\t\t\t\t\t$(data.fake_input).autocomplete(autocomplete_options);\n\t\t\t\t\t\t$(data.fake_input).bind('autocompleteselect',data,function(event,ui) {\n\t\t\t\t\t\t\t$(event.data.real_input).addTag(ui.item.value,{focus:true,unique:(settings.unique)});\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\n\t\t\t\t} else {\n\t\t\t\t\t\t// if a user tabs out of the field, create a new tag\n\t\t\t\t\t\t// this is only available if autocomplete is not used.\n\t\t\t\t\t\t$(data.fake_input).bind('blur',data,function(event) {\n\t\t\t\t\t\t\tvar d = $(this).attr('data-default');\n\t\t\t\t\t\t\tif ($(event.data.fake_input).val()!='' && $(event.data.fake_input).val()!=d) {\n\t\t\t\t\t\t\t\tif( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )\n\t\t\t\t\t\t\t\t\t$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t$(event.data.fake_input).val($(event.data.fake_input).attr('data-default'));\n\t\t\t\t\t\t\t\t$(event.data.fake_input).css('color',settings.placeholderColor);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t});\n\n\t\t\t\t}\n\t\t\t\t// if user types a default delimiter like comma,semicolon and then create a new tag\n\t\t\t\t$(data.fake_input).bind('keypress',data,function(event) {\n\t\t\t\t\tif (_checkDelimiter(event)) {\n\t\t\t\t\t event.preventDefault();\n\t\t\t\t\t\tif( (event.data.minChars <= $(event.data.fake_input).val().length) && (!event.data.maxChars || (event.data.maxChars >= $(event.data.fake_input).val().length)) )\n\t\t\t\t\t\t\t$(event.data.real_input).addTag($(event.data.fake_input).val(),{focus:true,unique:(settings.unique)});\n\t\t\t\t\t \t$(event.data.fake_input).resetAutosize(settings);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (event.data.autosize) {\n\t\t\t $(event.data.fake_input).doAutosize(settings);\n\n \t\t\t}\n\t\t\t\t});\n\t\t\t\t//Delete last tag on backspace\n\t\t\t\t// data.removeWithBackspace && $(data.fake_input).bind('keydown', function(event)\n\t\t\t\t// {\n\t\t\t\t// \tif(event.keyCode == 8 && $(this).val() == '')\n\t\t\t\t// \t{\n\t\t\t\t// \t\t event.preventDefault();\n\t\t\t\t// \t\t var last_tag = $(this).closest('.tagsinput').find('.tag:last').text();\n\t\t\t\t// \t\t var id = $(this).attr('id').replace(/_tag$/, '');\n\t\t\t\t// \t\t last_tag = last_tag.replace(/[\\s]+x$/, '');\n\t\t\t\t// \t\t $('#' + id).removeTag(escape(last_tag));\n\t\t\t\t// \t\t $(this).trigger('focus');\n\t\t\t\t// \t}\n\t\t\t\t// });\n\t\t\t\t// $(data.fake_input).blur();\n\n\t\t\t\t//Removes the not_valid class when user changes the value of the fake input\n\t\t\t\tif(data.unique) {\n\t\t\t\t $(data.fake_input).keydown(function(event){\n\t\t\t\t if(event.keyCode == 8 || String.fromCharCode(event.which).match(/\\w+|[\u00e1\u00e9\u00ed\u00f3\u00fa\u00c1\u00c9\u00cd\u00d3\u00da\u00f1\u00d1,/]+/)) {\n\t\t\t\t $(this).removeClass('not_valid');\n\t\t\t\t }\n\t\t\t\t });\n\t\t\t\t}\n\t\t\t} // if settings.interactive\n\t\t});\n\n\t\treturn this;\n\n\t};\n\n\t$.fn.tagsInput.updateTagsField = function(obj,tagslist) {\n\t\tvar id = $(obj).attr('id');\n\t\t$(obj).val(tagslist.join(delimiter[id]));\n\t};\n\n\t$.fn.tagsInput.importTags = function(obj,val) {\n\t\t$(obj).val('');\n\t\tvar id = $(obj).attr('id');\n\t\tvar tags = val.split(delimiter[id]);\n\t\tfor (i=0; i<tags.length; i++) {\n\t\t\t$(obj).addTag(tags[i],{focus:false,callback:false});\n\t\t}\n\t\tif(tags_callbacks[id] && tags_callbacks[id]['onChange'])\n\t\t{\n\t\t\tvar f = tags_callbacks[id]['onChange'];\n\t\t\tf.call(obj, obj, tags[i]);\n\t\t}\n\t};\n\n /**\n * check delimiter Array\n * @param event\n * @returns {boolean}\n * @private\n */\n var _checkDelimiter = function(event){\n var found = false;\n if (event.which == 13) {\n return true;\n }\n\n if (typeof event.data.delimiter === 'string') {\n if (event.which == event.data.delimiter.charCodeAt(0)) {\n found = true;\n }\n } else {\n $.each(event.data.delimiter, function(index, delimiter) {\n if (event.which == delimiter.charCodeAt(0)) {\n found = true;\n }\n });\n }\n\n return found;\n }\n})(jQuery);\n","Magefan_Blog/js/components/new-category.js":"/**\n * Copyright \u00a9 Magefan ([email protected]). All rights reserved.\n * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement).\n *\n * Glory to Ukraine! Glory to the heroes!\n */\n\ndefine([\n 'Magefan_Blog/js/components/new-tag'\n], function (Select) {\n 'use strict';\n\n return Select.extend({\n\n /**\n * Normalize option object.\n *\n * @param {Object} data - Option object.\n * @returns {Object}\n */\n parseData: function (data) {\n return {\n 'is_active': data.model['is_active'],\n level: data.model['level'],\n value: data.model['category_id'],\n label: data.model['title'],\n parent: data.model['parent_id']\n };\n }\n });\n});\n","Magefan_Blog/js/components/new-tag.js":"/**\n * Copyright \u00a9 Magefan ([email protected]). All rights reserved.\n * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement).\n *\n * Glory to Ukraine! Glory to the heroes!\n */\n\ndefine([\n 'underscore',\n 'Magento_Ui/js/form/element/ui-select'\n], function (_, Select) {\n 'use strict';\n\n function flatten(a, s, cr)\n {\n var i = 0, c;\n a = _.compact(a);\n cr = cr || [];\n for (i; i < a.length; i++) {\n cr.push(a[i]);\n if (a[i].hasOwnProperty(s)) {\n c = a[i][s];\n delete a[i][s];\n flatten.call(this, c, s, cr);\n }\n }\n return cr;\n }\n\n return Select.extend({\n\n /**\n * Parse data and set it to options.\n *\n * @param {Object} data - Response data object.\n * @returns {Object}\n */\n setParsed: function (data) {\n var option = this.parseData(data),\n copyOptionsTree\n if (data.error) {\n return this;\n }\n\n this.options([]);\n if (!option.parent) {\n this.cacheOptions.tree.push(option);\n copyOptionsTree = JSON.parse(JSON.stringify(this.cacheOptions.tree));\n this.cacheOptions.plain = flatten(copyOptionsTree, this.separator);\n this.options(this.cacheOptions.tree);\n } else {\n this.setOption(option);\n }\n this.set('newOption', option);\n },\n\n /**\n * Normalize option object.\n *\n * @param {Object} data - Option object.\n * @returns {Object}\n */\n parseData: function (data) {\n return {\n 'is_active': \"1\",\n level: 0,\n value: data.model['tag_id'],\n label: data.model['title'],\n parent: 0\n };\n }\n });\n});\n","Magefan_Blog/js/form/element/link.js":"/**\n * Copyright \u00a9 Magefan ([email protected]). All rights reserved.\n * Please visit Magefan.com for license details (https://magefan.com/end-user-license-agreement).\n *\n * Glory to Ukraine! Glory to the heroes!\n */\n\ndefine([\n 'Magento_Ui/js/form/element/abstract'\n], function (AbstractElement) {\n 'use strict';\n\n return AbstractElement.extend({\n defaults: {\n elementTmpl: 'Magefan_Blog/form/element/link'\n },\n\n initialize: function () {\n this._super();\n\n var value = this.value();\n this.url = value.url;\n this.title = value.title;\n this.text = value.text;\n },\n\n });\n});","Xtento_StockImport/js/profile.js":"window.xtSaveHiddenData = function(mapperId, rowId, field, value, empty) {\n if (typeof ace !== 'undefined') {\n value = editor.getSession().getValue();\n }\n if (empty) {\n value = \"\";\n }\n inputName = mapperId + '[' + rowId + '][' + field + ']';\n if ($(inputName)) {\n $(inputName).value = value;\n } else {\n $(mapperId + '_additional_config').insert({'after': '<input type=\"hidden\" id=\"' + inputName + '\" name=\"' + inputName + '\" value=\"' + quoteAttribute(value) + '\"/>'});\n }\n Windows.closeAll();\n};\n\nfunction quoteAttribute(s, preserveCR) {\n preserveCR = preserveCR ? ' ' : '\\n';\n return ('' + s)/* Forces the conversion to string. */\n .replace(/&/g, '&')/* This MUST be the 1st replacement. */\n .replace(/'/g, ''')/* The 4 other predefined entities, required. */\n .replace(/\"/g, '"')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n /*\n You may add other replacements here for HTML only\n (but it's not necessary).\n Or for XML, only if the named entities are defined in its DTD.\n */\n .replace(/\\r\\n/g, preserveCR)/* Must be before the next replacement. */\n .replace(/[\\r\\n]/g, preserveCR);\n}","Xtento_StockImport/js/ace/theme-eclipse.min.js":"define(\"ace/theme/eclipse\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssText='.ace-eclipse .ace_gutter {background: #ebebeb;border-right: 1px solid rgb(159, 159, 159);color: rgb(136, 136, 136);}.ace-eclipse .ace_print-margin {width: 1px;background: #ebebeb;}.ace-eclipse {background-color: #FFFFFF;color: black;}.ace-eclipse .ace_fold {background-color: rgb(60, 76, 114);}.ace-eclipse .ace_cursor {color: black;}.ace-eclipse .ace_storage,.ace-eclipse .ace_keyword,.ace-eclipse .ace_variable {color: rgb(127, 0, 85);}.ace-eclipse .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-eclipse .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-eclipse .ace_function {color: rgb(60, 76, 114);}.ace-eclipse .ace_string {color: rgb(42, 0, 255);}.ace-eclipse .ace_comment {color: rgb(113, 150, 130);}.ace-eclipse .ace_comment.ace_doc {color: rgb(63, 95, 191);}.ace-eclipse .ace_comment.ace_doc.ace_tag {color: rgb(127, 159, 191);}.ace-eclipse .ace_constant.ace_numeric {color: darkblue;}.ace-eclipse .ace_tag {color: rgb(25, 118, 116);}.ace-eclipse .ace_type {color: rgb(127, 0, 127);}.ace-eclipse .ace_xml-pe {color: rgb(104, 104, 91);}.ace-eclipse .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-eclipse .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-eclipse .ace_meta.ace_tag {color:rgb(25, 118, 116);}.ace-eclipse .ace_invisible {color: #ddd;}.ace-eclipse .ace_entity.ace_other.ace_attribute-name {color:rgb(127, 0, 127);}.ace-eclipse .ace_marker-layer .ace_step {background: rgb(255, 255, 0);}.ace-eclipse .ace_active-line {background: rgb(232, 242, 254);}.ace-eclipse .ace_gutter-active-line {background-color : #DADADA;}.ace-eclipse .ace_marker-layer .ace_selected-word {border: 1px solid rgb(181, 213, 255);}.ace-eclipse .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.cssClass=\"ace-eclipse\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}); (function() {\n window.require([\"ace/theme/eclipse\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","Xtento_StockImport/js/ace/ace.min.js":"(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE=\"\",e=function(){return this}();!e&&typeof window!=\"undefined\"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!=\"undefined\")return;var t=function(e,n,r){if(typeof e!=\"string\"){t.original?t.original.apply(this,arguments):(console.error(\"dropping module because define wasn't a string.\"),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t==\"string\"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)===\"[object Array]\"){var o=[];for(var u=0,a=t.length;u<a;++u){var f=s(e,t[u]);if(f==undefined&&r.original)return;o.push(f)}return n&&n.apply(null,o)||!0}},r=function(e,t){var i=n(\"\",e,t);return i==undefined&&r.original?r.original.apply(this,arguments):i},i=function(e,t){if(t.indexOf(\"!\")!==-1){var n=t.split(\"!\");return i(e,n[0])+\"!\"+i(e,n[1])}if(t.charAt(0)==\".\"){var r=e.split(\"/\").slice(0,-1).join(\"/\");t=r+\"/\"+t;while(t.indexOf(\".\")!==-1&&s!=t){var s=t;t=t.replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return t},s=function(e,r){r=i(e,r);var s=t.modules[r];if(!s){s=t.payloads[r];if(typeof s==\"function\"){var o={},u={id:r,uri:\"\",exports:o,packaged:!0},a=function(e,t){return n(r,e,t)},f=s(a,o,u);o=f||u.exports,t.modules[r]=o,delete t.payloads[r]}s=t.modules[r]=o||s}return s};o(ACE_NAMESPACE)})(),define(\"ace/lib/regexp\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function o(e){return(e.global?\"g\":\"\")+(e.ignoreCase?\"i\":\"\")+(e.multiline?\"m\":\"\")+(e.extended?\"x\":\"\")+(e.sticky?\"y\":\"\")}function u(e,t,n){if(Array.prototype.indexOf)return e.indexOf(t,n);for(var r=n||0;r<e.length;r++)if(e[r]===t)return r;return-1}var r={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},i=r.exec.call(/()??/,\"\")[1]===undefined,s=function(){var e=/^/g;return r.test.call(e,\"\"),!e.lastIndex}();if(s&&i)return;RegExp.prototype.exec=function(e){var t=r.exec.apply(this,arguments),n,a;if(typeof e==\"string\"&&t){!i&&t.length>1&&u(t,\"\")>-1&&(a=RegExp(this.source,r.replace.call(o(this),\"g\",\"\")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;e<arguments.length-2;e++)arguments[e]===undefined&&(t[e]=undefined)}));if(this._xregexp&&this._xregexp.captureNames)for(var f=1;f<t.length;f++)n=this._xregexp.captureNames[f-1],n&&(t[n]=t[f]);!s&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),define(\"ace/lib/es5-shim\",[\"require\",\"exports\",\"module\"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}}),define(\"ace/lib/fixoldbrowsers\",[\"require\",\"exports\",\"module\",\"ace/lib/regexp\",\"ace/lib/es5-shim\"],function(e,t,n){\"use strict\";e(\"./regexp\"),e(\"./es5-shim\"),typeof Element!=\"undefined\"&&!Element.prototype.remove&&Object.defineProperty(Element.prototype,\"remove\",{enumerable:!1,writable:!0,configurable:!0,value:function(){this.parentNode&&this.parentNode.removeChild(this)}})}),define(\"ace/lib/useragent\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.OS={LINUX:\"LINUX\",MAC:\"MAC\",WINDOWS:\"WINDOWS\"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS};if(typeof navigator!=\"object\")return;var r=(navigator.platform.match(/mac|win|linux/i)||[\"other\"])[0].toLowerCase(),i=navigator.userAgent;t.isWin=r==\"win\",t.isMac=r==\"mac\",t.isLinux=r==\"linux\",t.isIE=navigator.appName==\"Microsoft Internet Explorer\"||navigator.appName.indexOf(\"MSAppHost\")>=0?parseFloat((i.match(/(?:MSIE |Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\\/[0-9]+[\\.0-9]+;.*rv:)([0-9]+[\\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=i.match(/ Gecko\\/\\d+/),t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)==\"[object Opera]\",t.isWebKit=parseFloat(i.split(\"WebKit/\")[1])||undefined,t.isChrome=parseFloat(i.split(\" Chrome/\")[1])||undefined,t.isEdge=parseFloat(i.split(\" Edge/\")[1])||undefined,t.isAIR=i.indexOf(\"AdobeAIR\")>=0,t.isIPad=i.indexOf(\"iPad\")>=0,t.isAndroid=i.indexOf(\"Android\")>=0,t.isChromeOS=i.indexOf(\" CrOS \")>=0,t.isIOS=/iPad|iPhone|iPod/.test(i)&&!window.MSStream,t.isIOS&&(t.isMac=!0),t.isMobile=t.isIPad||t.isAndroid}),define(\"ace/lib/dom\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./useragent\"),i=\"http://www.w3.org/1999/xhtml\";t.buildDom=function o(e,t,n){if(typeof e==\"string\"&&e){var r=document.createTextNode(e);return t&&t.appendChild(r),r}if(!Array.isArray(e))return e;if(typeof e[0]!=\"string\"||!e[0]){var i=[];for(var s=0;s<e.length;s++){var u=o(e[s],t,n);u&&i.push(u)}return i}var a=document.createElement(e[0]),f=e[1],l=1;f&&typeof f==\"object\"&&!Array.isArray(f)&&(l=2);for(var s=l;s<e.length;s++)o(e[s],a,n);return l==2&&Object.keys(f).forEach(function(e){var t=f[e];e===\"class\"?a.className=Array.isArray(t)?t.join(\" \"):t:typeof t==\"function\"||e==\"value\"?a[e]=t:e===\"ref\"?n&&(n[t]=a):t!=null&&a.setAttribute(e,t)}),t&&t.appendChild(a),a},t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName(\"head\")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||i,e):document.createElement(e)},t.removeChildren=function(e){e.innerHTML=\"\"},t.createTextNode=function(e,t){var n=t?t.ownerDocument:document;return n.createTextNode(e)},t.createFragment=function(e){var t=e?e.ownerDocument:document;return t.createDocumentFragment()},t.hasCssClass=function(e,t){var n=(e.className+\"\").split(/\\s+/g);return n.indexOf(t)!==-1},t.addCssClass=function(e,n){t.hasCssClass(e,n)||(e.className+=\" \"+n)},t.removeCssClass=function(e,t){var n=e.className.split(/\\s+/g);for(;;){var r=n.indexOf(t);if(r==-1)break;n.splice(r,1)}e.className=n.join(\" \")},t.toggleCssClass=function(e,t){var n=e.className.split(/\\s+/g),r=!0;for(;;){var i=n.indexOf(t);if(i==-1)break;r=!1,n.splice(i,1)}return r&&n.push(t),e.className=n.join(\" \"),r},t.setCssClass=function(e,n,r){r?t.addCssClass(e,n):t.removeCssClass(e,n)},t.hasCssString=function(e,t){var n=0,r;t=t||document;if(r=t.querySelectorAll(\"style\"))while(n<r.length)if(r[n++].id===e)return!0},t.importCssString=function(n,r,i){var s=i;if(!i||!i.getRootNode)s=document;else{s=i.getRootNode();if(!s||s==i)s=document}var o=s.ownerDocument||s;if(r&&t.hasCssString(r,s))return null;r&&(n+=\"\\n/*# sourceURL=ace/css/\"+r+\" */\");var u=t.createElement(\"style\");u.appendChild(o.createTextNode(n)),r&&(u.id=r),s==o&&(s=t.getDocumentHead(o)),s.insertBefore(u,s.firstChild)},t.importCssStylsheet=function(e,n){t.buildDom([\"link\",{rel:\"stylesheet\",href:e}],t.getDocumentHead(n))},t.scrollbarWidth=function(e){var n=t.createElement(\"ace_inner\");n.style.width=\"100%\",n.style.minWidth=\"0px\",n.style.height=\"200px\",n.style.display=\"block\";var r=t.createElement(\"ace_outer\"),i=r.style;i.position=\"absolute\",i.left=\"-10000px\",i.overflow=\"hidden\",i.width=\"200px\",i.minWidth=\"0px\",i.height=\"150px\",i.display=\"block\",r.appendChild(n);var s=e.documentElement;s.appendChild(r);var o=n.offsetWidth;i.overflow=\"scroll\";var u=n.offsetWidth;return o==u&&(u=r.clientWidth),s.removeChild(r),o-u},typeof document==\"undefined\"&&(t.importCssString=function(){}),t.computedStyle=function(e,t){return window.getComputedStyle(e,\"\")||{}},t.setStyle=function(e,t,n){e[t]!==n&&(e[t]=n)},t.HAS_CSS_ANIMATION=!1,t.HAS_CSS_TRANSFORMS=!1,t.HI_DPI=r.isWin?typeof window!=\"undefined\"&&window.devicePixelRatio>=1.5:!0;if(typeof document!=\"undefined\"){var s=document.createElement(\"div\");t.HI_DPI&&s.style.transform!==undefined&&(t.HAS_CSS_TRANSFORMS=!0),!r.isEdge&&typeof s.style.animationName!=\"undefined\"&&(t.HAS_CSS_ANIMATION=!0),s=null}t.HAS_CSS_TRANSFORMS?t.translate=function(e,t,n){e.style.transform=\"translate(\"+Math.round(t)+\"px, \"+Math.round(n)+\"px)\"}:t.translate=function(e,t,n){e.style.top=Math.round(n)+\"px\",e.style.left=Math.round(t)+\"px\"}}),define(\"ace/lib/oop\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/keys\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./oop\"),i=function(){var e={MODIFIER_KEYS:{16:\"Shift\",17:\"Ctrl\",18:\"Alt\",224:\"Meta\"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,\"super\":8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:\"Backspace\",9:\"Tab\",13:\"Return\",19:\"Pause\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"Print\",45:\"Insert\",46:\"Delete\",96:\"Numpad0\",97:\"Numpad1\",98:\"Numpad2\",99:\"Numpad3\",100:\"Numpad4\",101:\"Numpad5\",102:\"Numpad6\",103:\"Numpad7\",104:\"Numpad8\",105:\"Numpad9\",\"-13\":\"NumpadEnter\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"Numlock\",145:\"Scrolllock\"},PRINTABLE_KEYS:{32:\" \",48:\"0\",49:\"1\",50:\"2\",51:\"3\",52:\"4\",53:\"5\",54:\"6\",55:\"7\",56:\"8\",57:\"9\",59:\";\",61:\"=\",65:\"a\",66:\"b\",67:\"c\",68:\"d\",69:\"e\",70:\"f\",71:\"g\",72:\"h\",73:\"i\",74:\"j\",75:\"k\",76:\"l\",77:\"m\",78:\"n\",79:\"o\",80:\"p\",81:\"q\",82:\"r\",83:\"s\",84:\"t\",85:\"u\",86:\"v\",87:\"w\",88:\"x\",89:\"y\",90:\"z\",107:\"+\",109:\"-\",110:\".\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",111:\"/\",106:\"*\"}},t,n;for(n in e.FUNCTION_KEYS)t=e.FUNCTION_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);for(n in e.PRINTABLE_KEYS)t=e.PRINTABLE_KEYS[n].toLowerCase(),e[t]=parseInt(n,10);return r.mixin(e,e.MODIFIER_KEYS),r.mixin(e,e.PRINTABLE_KEYS),r.mixin(e,e.FUNCTION_KEYS),e.enter=e[\"return\"],e.escape=e.esc,e.del=e[\"delete\"],e[173]=\"-\",function(){var t=[\"cmd\",\"ctrl\",\"alt\",\"shift\"];for(var n=Math.pow(2,t.length);n--;)e.KEY_MODS[n]=t.filter(function(t){return n&e.KEY_MODS[t]}).join(\"-\")+\"-\"}(),e.KEY_MODS[0]=\"\",e.KEY_MODS[-1]=\"input-\",e}();r.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return typeof t!=\"string\"&&(t=String.fromCharCode(e)),t.toLowerCase()}}),define(\"ace/lib/event\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function a(e,t,n){var a=u(t);if(!i.isMac&&s){t.getModifierState&&(t.getModifierState(\"OS\")||t.getModifierState(\"Win\"))&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f=\"location\"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f=\"location\"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null)}var r=e(\"./keys\"),i=e(\"./useragent\"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent(\"on\"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent(\"on\"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type==\"dblclick\"?0:e.type==\"contextmenu\"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,\"mousemove\",n,!0),t.removeListener(document,\"mouseup\",i,!0),t.removeListener(document,\"dragstart\",i,!0)}return t.addListener(document,\"mousemove\",n,!0),t.addListener(document,\"mouseup\",i,!0),t.addListener(document,\"dragstart\",i,!0),i},t.addTouchMoveListener=function(e,n){var r,i;t.addListener(e,\"touchstart\",function(e){var t=e.touches,n=t[0];r=n.clientX,i=n.clientY}),t.addListener(e,\"touchmove\",function(e){var t=e.touches;if(t.length>1)return;var s=t[0];e.wheelX=r-s.clientX,e.wheelY=i-s.clientY,r=s.clientX,i=s.clientY,n(e)})},t.addMouseWheelListener=function(e,n){\"onmousewheel\"in e?t.addListener(e,\"mousewheel\",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):\"onwheel\"in e?t.addListener(e,\"wheel\",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,\"DOMMouseScroll\",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s](\"mousedown\",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s](\"mousedown\",e),r[s](l[o],e)}var o=0,u,a,f,l={2:\"dblclick\",3:\"tripleclick\",4:\"quadclick\"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,\"mousedown\",c),i.isOldIE&&t.addListener(e,\"dblclick\",h)})};var u=!i.isMac||!i.isOpera||\"KeyboardEvent\"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!(\"KeyboardEvent\"in window)){var o=null;r(e,\"keydown\",function(e){o=e.keyCode}),r(e,\"keypress\",function(e){return a(n,e,o)})}else{var u=null;r(e,\"keydown\",function(e){s[e.keyCode]=(s[e.keyCode]||0)+1;var t=a(n,e,e.keyCode);return u=e.defaultPrevented,t}),r(e,\"keypress\",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,\"keyup\",function(e){s[e.keyCode]=null}),s||(f(),r(window,\"focus\",f))}};if(typeof window==\"object\"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r=\"zero-timeout-message-\"+l++,i=function(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,\"message\",i),e())};t.addListener(n,\"message\",i),n.postMessage(r,\"*\")}}t.$idleBlocked=!1,t.onIdle=function(e,n){return setTimeout(function r(){t.$idleBlocked?setTimeout(r,100):e()},n)},t.$idleBlockId=null,t.blockIdle=function(e){t.$idleBlockId&&clearTimeout(t.$idleBlockId),t.$idleBlocked=!0,t.$idleBlockId=setTimeout(function(){t.$idleBlocked=!1},e||100)},t.nextFrame=typeof window==\"object\"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),define(\"ace/range\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/lib/lang\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/'/g,\"'\").replace(/</g,\"<\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/keyboard/textinput\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/keys\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"../lib/dom\"),o=e(\"../lib/lang\"),u=i.isChrome<18,a=i.isIE,f=i.isChrome>63,l=400,c=e(\"../lib/keys\"),h=c.KEY_MODS,p=i.isIOS,d=p?/\\s/:/\\n/,v=function(e,t){function W(){x=!0,n.blur(),n.focus(),x=!1}function V(e){e.keyCode==27&&n.value.length<n.selectionStart&&(g||(T=n.value),N=C=-1,A()),X()}function J(){clearTimeout($),$=setTimeout(function(){b&&(n.style.cssText=b,b=\"\"),t.renderer.$keepTextAreaAtCursor==null&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},0)}function Q(e,t,n){var r=null,i=!1;n.addEventListener(\"keydown\",function(e){r&&clearTimeout(r),i=!0},!0),n.addEventListener(\"keyup\",function(e){r=setTimeout(function(){i=!1},100)},!0);var s=function(e){if(document.activeElement!==n)return;if(i||g)return;if(v)return;var r=n.selectionStart,s=n.selectionEnd,o=null,u=0;console.log(r,s);if(r==0)o=c.up;else if(r==1)o=c.home;else if(s>C&&T[s]==\"\\n\")o=c.end;else if(r<N&&T[r-1]==\" \")o=c.left,u=h.option;else if(r<N||r==N&&C!=N&&r==s)o=c.left;else if(s>C&&T.slice(0,s).split(\"\\n\").length>2)o=c.down;else if(s>C&&T[s-1]==\" \")o=c.right,u=h.option;else if(s>C||s==C&&C!=N&&r==s)o=c.right;r!==s&&(u|=h.shift),o&&(t.onCommandKey(null,u,o),N=r,C=s,A(\"\"))};document.addEventListener(\"selectionchange\",s),t.on(\"destroy\",function(){document.removeEventListener(\"selectionchange\",s)})}var n=s.createElement(\"textarea\");n.className=\"ace_text-input\",n.setAttribute(\"wrap\",\"off\"),n.setAttribute(\"autocorrect\",\"off\"),n.setAttribute(\"autocapitalize\",\"off\"),n.setAttribute(\"spellcheck\",!1),n.style.opacity=\"0\",e.insertBefore(n,e.firstChild);var v=!1,m=!1,g=!1,y=!1,b=\"\",w=!0,E=!1;i.isMobile||(n.style.fontSize=\"1px\");var S=!1,x=!1,T=\"\",N=0,C=0;try{var k=document.activeElement===n}catch(L){}r.addListener(n,\"blur\",function(e){if(x)return;t.onBlur(e),k=!1}),r.addListener(n,\"focus\",function(e){if(x)return;k=!0;if(i.isEdge)try{if(!document.hasFocus())return}catch(e){}t.onFocus(e),i.isEdge?setTimeout(A):A()}),this.$focusScroll=!1,this.focus=function(){if(b||f||this.$focusScroll==\"browser\")return n.focus({preventScroll:!0});var e=n.style.top;n.style.position=\"fixed\",n.style.top=\"0px\";try{var t=n.getBoundingClientRect().top!=0}catch(r){return}var i=[];if(t){var s=n.parentElement;while(s&&s.nodeType==1)i.push(s),s.setAttribute(\"ace_nocontext\",!0),!s.parentElement&&s.getRootNode?s=s.getRootNode().host:s=s.parentElement}n.focus({preventScroll:!0}),t&&i.forEach(function(e){e.removeAttribute(\"ace_nocontext\")}),setTimeout(function(){n.style.position=\"\",n.style.top==\"0px\"&&(n.style.top=e)},0)},this.blur=function(){n.blur()},this.isFocused=function(){return k},t.on(\"beforeEndOperation\",function(){if(t.curOp&&t.curOp.command.name==\"insertstring\")return;g&&(T=n.value=\"\",z()),A()});var A=p?function(e){if(!k||v&&!e)return;e||(e=\"\");var r=\"\\n ab\"+e+\"cde fg\\n\";r!=n.value&&(n.value=T=r);var i=4,s=4+(e.length||(t.selection.isEmpty()?0:1));(N!=i||C!=s)&&n.setSelectionRange(i,s),N=i,C=s}:function(){if(g||y)return;if(!k&&!D)return;g=!0;var e=t.selection,r=e.getRange(),i=e.cursor.row,s=r.start.column,o=r.end.column,u=t.session.getLine(i);if(r.start.row!=i){var a=t.session.getLine(i-1);s=r.start.row<i-1?0:s,o+=a.length+1,u=a+\"\\n\"+u}else if(r.end.row!=i){var f=t.session.getLine(i+1);o=r.end.row>i+1?f.length:o,o+=u.length+1,u=u+\"\\n\"+f}u.length>l&&(s<l&&o<l?u=u.slice(0,l):(u=\"\\n\",s=0,o=1));var c=u+\"\\n\\n\";c!=T&&(n.value=T=c,N=C=c.length),D&&(N=n.selectionStart,C=n.selectionEnd);if(C!=o||N!=s||n.selectionEnd!=C)try{n.setSelectionRange(s,o),N=s,C=o}catch(h){}g=!1};k&&t.onFocus();var O=function(e){return e.selectionStart===0&&e.selectionEnd>=T.length&&e.value===T&&T&&e.selectionEnd!==C},M=function(e){if(g)return;v?v=!1:O(n)&&(t.selectAll(),A())},_=null;this.setInputHandler=function(e){_=e},this.getInputHandler=function(){return _};var D=!1,P=function(e,r){D&&(D=!1);if(m)return A(),e&&t.onPaste(e),m=!1,\"\";var i=n.selectionStart,s=n.selectionEnd,o=N,u=T.length-C,a=e,f=e.length-i,l=e.length-s,c=0;while(o>0&&T[c]==e[c])c++,o--;a=a.slice(c),c=1;while(u>0&&T.length-c>N-1&&T[T.length-c]==e[e.length-c])c++,u--;return f-=c-1,l-=c-1,a=a.slice(0,a.length-c+1),!r&&f==a.length&&!o&&!u&&!l?\"\":(y=!0,a&&!o&&!u&&!f&&!l||S?t.onTextInput(a):t.onTextInput(a,{extendLeft:o,extendRight:u,restoreStart:f,restoreEnd:l}),y=!1,T=e,N=i,C=s,a)},H=function(e){if(g)return U();var t=n.value,r=P(t,!0);(t.length>l+100||d.test(r))&&A()},B=function(e,t,n){var r=e.clipboardData||window.clipboardData;if(!r||u)return;var i=a||n?\"Text\":\"text/plain\";try{return t?r.setData(i,t)!==!1:r.getData(i)}catch(e){if(!n)return B(e,t,!0)}},j=function(e,i){var s=t.getCopyText();if(!s)return r.preventDefault(e);B(e,s)?(p&&(A(s),v=s,setTimeout(function(){v=!1},10)),i?t.onCut():t.onCopy(),r.preventDefault(e)):(v=!0,n.value=s,n.select(),setTimeout(function(){v=!1,A(),i?t.onCut():t.onCopy()}))},F=function(e){j(e,!0)},I=function(e){j(e,!1)},q=function(e){var s=B(e);typeof s==\"string\"?(s&&t.onPaste(s,e),i.isIE&&setTimeout(A),r.preventDefault(e)):(n.value=\"\",m=!0)};r.addCommandKeyListener(n,t.onCommandKey.bind(t)),r.addListener(n,\"select\",M),r.addListener(n,\"input\",H),r.addListener(n,\"cut\",F),r.addListener(n,\"copy\",I),r.addListener(n,\"paste\",q),(!(\"oncut\"in n)||!(\"oncopy\"in n)||!(\"onpaste\"in n))&&r.addListener(e,\"keydown\",function(e){if(i.isMac&&!e.metaKey||!e.ctrlKey)return;switch(e.keyCode){case 67:I(e);break;case 86:q(e);break;case 88:F(e)}});var R=function(e){if(g||!t.onCompositionStart||t.$readOnly)return;g={};if(S)return;setTimeout(U,0),t.on(\"mousedown\",W);var r=t.getSelectionRange();r.end.row=r.start.row,r.end.column=r.start.column,g.markerRange=r,g.selectionStart=N,t.onCompositionStart(g),g.useTextareaForIME?(n.value=\"\",T=\"\",N=0,C=0):(n.msGetInputContext&&(g.context=n.msGetInputContext()),n.getInputContext&&(g.context=n.getInputContext()))},U=function(){if(!g||!t.onCompositionUpdate||t.$readOnly)return;if(S)return W();if(g.useTextareaForIME)t.onCompositionUpdate(n.value);else{var e=n.value;P(e),g.markerRange&&(g.context&&(g.markerRange.start.column=g.selectionStart=g.context.compositionStartOffset),g.markerRange.end.column=g.markerRange.start.column+C-g.selectionStart)}},z=function(e){if(!t.onCompositionEnd||t.$readOnly)return;g=!1,t.onCompositionEnd(),t.off(\"mousedown\",W),e&&H()},X=o.delayedCall(U,50).schedule.bind(null,null);r.addListener(n,\"compositionstart\",R),r.addListener(n,\"compositionupdate\",U),r.addListener(n,\"keyup\",V),r.addListener(n,\"keydown\",X),r.addListener(n,\"compositionend\",z),this.getElement=function(){return n},this.setCommandMode=function(e){S=e,n.readOnly=!1},this.setReadOnly=function(e){S||(n.readOnly=e)},this.setCopyWithEmptySelection=function(e){E=e},this.onContextMenu=function(e){D=!0,A(),t._emit(\"nativecontextmenu\",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,o){b||(b=n.style.cssText),n.style.cssText=(o?\"z-index:100000;\":\"\")+(i.isIE?\"opacity:0.1;\":\"\")+\"text-indent: -\"+(N+C)*t.renderer.characterWidth*.5+\"px;\";var u=t.container.getBoundingClientRect(),a=s.computedStyle(t.container),f=u.top+(parseInt(a.borderTopWidth)||0),l=u.left+(parseInt(u.borderLeftWidth)||0),c=u.bottom-f-n.clientHeight-2,h=function(e){n.style.left=e.clientX-l-2+\"px\",n.style.top=Math.min(e.clientY-f-2,c)+\"px\"};h(e);if(e.type!=\"mousedown\")return;t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout($),i.isWin&&r.capture(t.container,h,J)},this.onContextMenuClose=J;var $,K=function(e){t.textInput.onContextMenu(e),J()};r.addListener(n,\"mouseup\",K),r.addListener(n,\"mousedown\",function(e){e.preventDefault(),J()}),r.addListener(t.renderer.scroller,\"contextmenu\",K),r.addListener(n,\"contextmenu\",K),p&&Q(e,t,n)};t.TextInput=v}),define(\"ace/mouse/default_handlers\",[\"require\",\"exports\",\"module\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler(\"mousedown\",this.onMouseDown.bind(e)),t.setDefaultHandler(\"dblclick\",this.onDoubleClick.bind(e)),t.setDefaultHandler(\"tripleclick\",this.onTripleClick.bind(e)),t.setDefaultHandler(\"quadclick\",this.onQuadClick.bind(e)),t.setDefaultHandler(\"mousewheel\",this.onMouseWheel.bind(e)),t.setDefaultHandler(\"touchmove\",this.onTouchMove.bind(e));var n=[\"select\",\"startSelect\",\"selectEnd\",\"selectAllEnd\",\"selectByWordsEnd\",\"selectByLinesEnd\",\"dragWait\",\"dragWaitEnd\",\"focusWait\"];n.forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,\"getLineRange\"),e.selectByWords=this.extendSelectionBy.bind(e,\"getWordRange\")}function u(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}function a(e,t){if(e.start.row==e.end.row)var n=2*t.column-e.start.column-e.end.column;else if(e.start.row==e.end.row-1&&!e.start.column&&!e.end.column)var n=t.column-4;else var n=2*t.row-e.start.row-e.end.row;return n<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}var r=e(\"../lib/useragent\"),i=0,s=550;(function(){this.onMouseDown=function(e){var t=e.inSelection(),n=e.getDocumentPosition();this.mousedownEvent=e;var i=this.editor,s=e.getButton();if(s!==0){var o=i.getSelectionRange(),u=o.isEmpty();(u||s==1)&&i.selection.moveToPosition(n),s==2&&(i.textInput.onContextMenu(e.domEvent),r.isMozilla||e.preventDefault());return}this.mousedownEvent.time=Date.now();if(t&&!i.isFocused()){i.focus();if(this.$focusTimeout&&!this.$clickSelection&&!i.inMultiSelectMode){this.setState(\"focusWait\"),this.captureMouse(e);return}}return this.captureMouse(e),this.startSelect(n,e.domEvent._clicks>1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;if(!this.mousedownEvent)return;this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle(\"ace_selecting\"),this.setState(\"select\")},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=a(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=a(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle(\"ace_selecting\"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=u(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>i||t-this.mousedownEvent.time>this.$focusTimeout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState(\"select\")):(i=n.selection.getWordRange(t.row,t.column),this.setState(\"selectByWords\")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState(\"selectByLines\");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState(\"selectAll\")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=this.editor;this.$lastScroll||(this.$lastScroll={t:0,vx:0,vy:0,allowed:0});var n=this.$lastScroll,r=e.domEvent.timeStamp,i=r-n.t,o=i?e.wheelX/i:n.vx,u=i?e.wheelY/i:n.vy;i<s&&(o=(o+n.vx)/2,u=(u+n.vy)/2);var a=Math.abs(o/u),f=!1;a>=1&&t.renderer.isScrollableBy(e.wheelX*e.speed,0)&&(f=!0),a<=1&&t.renderer.isScrollableBy(0,e.wheelY*e.speed)&&(f=!0);if(f)n.allowed=r;else if(r-n.allowed<s){var l=Math.abs(o)<=1.5*Math.abs(n.vx)&&Math.abs(u)<=1.5*Math.abs(n.vy);l?(f=!0,n.allowed=r):n.allowed=0}n.t=r,n.vx=o,n.vy=u;if(f)return t.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){this.editor._emit(\"mousewheel\",e)}}).call(o.prototype),t.DefaultHandlers=o}),define(\"ace/tooltip\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\");(function(){this.$init=function(){return this.$element=i.createElement(\"div\"),this.$element.className=\"ace_tooltip\",this.$element.style.display=\"none\",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){this.getElement().textContent=e},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+\"px\",this.getElement().style.top=t+\"px\"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display=\"block\",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display=\"none\",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth},this.destroy=function(){this.isOpen=!1,this.$element&&this.$element.parentNode&&this.$element.parentNode.removeChild(this.$element)}}).call(s.prototype),t.Tooltip=s}),define(\"ace/mouse/default_gutter_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/event\",\"ace/tooltip\"],function(e,t,n){\"use strict\";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join(\"<br/>\"),i.setHtml(f),i.show(),t._signal(\"showGutterTooltip\",i),t.on(\"mousewheel\",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+\"px\",v.top=d.bottom+\"px\"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t._signal(\"hideGutterTooltip\",i),t.removeEventListener(\"mousewheel\",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler(\"guttermousedown\",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i==\"foldWidgets\")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState(\"selectByLines\"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler(\"guttermousemove\",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,\"ace_fold-widget\"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,\"mouseout\",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on(\"changeSession\",c)}function a(e){o.call(this,e)}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/event\"),o=e(\"../tooltip\").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),define(\"ace/mouse/mouse_event\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),define(\"ace/mouse/dragdrop_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.moveCursorToPosition(e),S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left<a.x.right?-3:2),l/i<=1&&(c.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=c.row,v=e.column!=c.column,m=!n||e.row!=n.row;h||v&&!m?E?r-E>=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,\"ace_selection\",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,\"mousemove\",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.selection.fromOrientedRange(m),t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,\"mousemove\",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e==\"text/plain\"||e==\"Text\"})}function _(e){var t=[\"copy\",\"copymove\",\"all\",\"uninitialized\"],n=[\"move\",\"copymove\",\"linkmove\",\"all\",\"uninitialized\"],r=s.isMac?e.altKey:e.ctrlKey,i=\"uninitialized\";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o=\"none\";return r&&t.indexOf(i)>=0?o=\"copy\":n.indexOf(i)>=0?o=\"move\":t.indexOf(i)>=0&&(o=\"copy\"),o}var t=e.editor,n=r.createElement(\"img\");n.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",s.isOpera&&(n.style.cssText=\"width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;\");var f=[\"dragWait\",\"dragWaitEnd\",\"startDrag\",\"dragReadyEnd\",\"onMouseDrag\"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener(\"mousedown\",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?\"copy\":\"copyMove\",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData(\"Text\",t.session.getTextRange()),w=!0,this.setState(\"drag\")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n==\"move\"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case\"move\":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case\"copy\":m=t.moveText(m,g,!0)}else{var r=n.getData(\"Text\");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,\"dragstart\",this.onDragStart.bind(e)),i.addListener(c,\"dragend\",this.onDragEnd.bind(e)),i.addListener(c,\"dragenter\",this.onDragEnter.bind(e)),i.addListener(c,\"dragover\",this.onDragOver.bind(e)),i.addListener(c,\"dragleave\",this.onDragLeave.bind(e)),i.addListener(c,\"drop\",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e(\"../lib/dom\"),i=e(\"../lib/event\"),s=e(\"../lib/useragent\"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle(\"ace_dragging\"),this.editor.renderer.setCursorStyle(\"\"),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle(\"ace_dragging\");var n=s.isWin?\"default\":\"move\";e.renderer.setCursorStyle(n),this.setState(\"dragReady\")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state==\"dragReady\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state===\"dragWait\"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;\"unselectable\"in o&&(o.unselectable=\"on\");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState(\"dragWait\")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),define(\"ace/lib/net\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"./dom\");t.get=function(e,t){var n=new XMLHttpRequest;n.open(\"GET\",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement(\"script\");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState==\"loaded\"||i.readyState==\"complete\")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement(\"a\");return t.href=e,t.href}}),define(\"ace/lib/event_emitter\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/lib/app_config\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"no use strict\";function o(e){typeof console!=\"undefined\"&&console.warn&&console.warn.apply(console,arguments)}function u(e,t){var n=new Error(e);n.data=t,typeof console==\"object\"&&console.error&&console.error(n),setTimeout(function(){throw n})}var r=e(\"./oop\"),i=e(\"./event_emitter\").EventEmitter,s={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};if(!e){var n=this.$options;e=Object.keys(n).filter(function(e){return!n[e].hidden})}else Array.isArray(e)||(t=e,e=Object.keys(t));return e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this[\"$\"+e]===t)return;var n=this.$options[e];if(!n)return o('misspelled option \"'+e+'\"');if(n.forwardTo)return this[n.forwardTo]&&this[n.forwardTo].setOption(e,t);n.handlesSet||(this[\"$\"+e]=t),n&&n.set&&n.set.call(this,t)},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this[\"$\"+e]:o('misspelled option \"'+e+'\"')}},a=function(){this.$defaultOptions={}};(function(){r.implement(this,i),this.defineOptions=function(e,t,n){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(n).forEach(function(t){var r=n[t];typeof r==\"string\"&&(r={forwardTo:r}),r.name||(r.name=t),e.$options[r.name]=r,\"initialValue\"in r&&(e[\"$\"+r.name]=r.initialValue)}),r.implement(e,s),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var n=e.$options[t];\"value\"in n&&e.setOption(t,n.value)})},this.setDefaultValue=function(e,t,n){var r=this.$defaultOptions[e]||(this.$defaultOptions[e]={});r[t]&&(r.forwardTo?this.setDefaultValue(r.forwardTo,t,n):r[t].value=n)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(n){this.setDefaultValue(e,n,t[n])},this)},this.warn=o,this.reportError=u}).call(a.prototype),t.AppConfig=a}),define(\"ace/config\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/app_config\"],function(e,t,n){\"no use strict\";function l(r){if(!u||!u.document)return;a.packaged=r||e.packaged||n.packaged||u.define&&define.packaged;var i={},s=\"\",o=document.currentScript||document._currentScript,f=o&&o.ownerDocument||document,l=f.getElementsByTagName(\"script\");for(var h=0;h<l.length;h++){var p=l[h],d=p.src||p.getAttribute(\"src\");if(!d)continue;var v=p.attributes;for(var m=0,g=v.length;m<g;m++){var y=v[m];y.name.indexOf(\"data-ace-\")===0&&(i[c(y.name.replace(/^data-ace-/,\"\"))]=y.value)}var b=d.match(/^(.*)\\/ace(\\-\\w+)?\\.js(\\?|$)/);b&&(s=b[1])}s&&(i.base=i.base||s,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base;for(var w in i)typeof i[w]!=\"undefined\"&&t.set(w,i[w])}function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./lib/net\"),o=e(\"./lib/app_config\").AppConfig;n.exports=t=new o;var u=function(){return this||typeof window!=\"undefined\"&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:\"\",suffix:\".js\",$moduleUrls:{}};t.get=function(e){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error(\"Unknown config key: \"+e);a[e]=t},t.all=function(){return r.copyObject(a)},t.$modes={},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var n=e.split(\"/\");t=t||n[n.length-2]||\"\";var r=t==\"snippets\"?\"/\":\"-\",i=n[n.length-1];if(t==\"worker\"&&r==\"-\"){var s=new RegExp(\"^\"+t+\"[\\\\-_]|[\\\\-_]\"+t+\"$\",\"g\");i=i.replace(s,\"\")}(!i||i==t)&&n.length>1&&(i=n[n.length-2]);var o=a[t+\"Path\"];return o==null?o=a.basePath:r==\"/\"&&(t=r=\"\"),o&&o.slice(-1)!=\"/\"&&(o+=\"/\"),o+t+r+i+this.get(\"suffix\")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit(\"load.module\",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get(\"packaged\"))return a();s.loadScript(t.moduleUrl(n,o),a),f()};var f=function(){!a.basePath&&!a.workerPath&&!a.modePath&&!a.themePath&&!Object.keys(a.$moduleUrls).length&&(console.error(\"Unable to infer path to ace from script src,\",\"use ace.config.set('basePath', 'path') to enable dynamic loading of modes and themes\",\"or with webpack use ace/webpack-resolver\"),f=function(){})};t.init=l}),define(\"ace/mouse/mouse_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/mouse/default_handlers\",\"ace/mouse/default_gutter_handler\",\"ace/mouse/mouse_event\",\"ace/mouse/dragdrop_handler\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"../lib/event\"),i=e(\"../lib/useragent\"),s=e(\"./default_handlers\").DefaultHandlers,o=e(\"./default_gutter_handler\").GutterHandler,u=e(\"./mouse_event\").MouseEvent,a=e(\"./dragdrop_handler\").DragdropHandler,f=e(\"../config\"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,\"click\",this.onMouseEvent.bind(this,\"click\")),r.addListener(u,\"mousemove\",this.onMouseMove.bind(this,\"mousemove\")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,\"onMouseEvent\"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,\"mousewheel\")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,\"touchmove\"));var f=e.renderer.$gutter;r.addListener(f,\"mousedown\",this.onMouseEvent.bind(this,\"guttermousedown\")),r.addListener(f,\"click\",this.onMouseEvent.bind(this,\"gutterclick\")),r.addListener(f,\"dblclick\",this.onMouseEvent.bind(this,\"gutterdblclick\")),r.addListener(f,\"mousemove\",this.onMouseEvent.bind(this,\"guttermousemove\")),r.addListener(u,\"mousedown\",n),r.addListener(f,\"mousedown\",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,\"mousedown\",n),r.addListener(e.renderer.scrollBarH.element,\"mousedown\",n)),e.on(\"mousemove\",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle(\"default\"):s.setCursorStyle(\"\")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor,s=this.editor.renderer;s.$keepTextAreaAtCursor&&(s.$keepTextAreaAtCursor=null);var o=this,a=function(e){if(!e)return;if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new u(e,o.editor),o.$mouseMoved=!0},f=function(e){n.off(\"beforeEndOperation\",c),clearInterval(h),l(),o[o.state+\"End\"]&&o[o.state+\"End\"](e),o.state=\"\",s.$keepTextAreaAtCursor==null&&(s.$keepTextAreaAtCursor=!0,s.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent(\"mouseup\",e),n.endOperation()},l=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type==\"dblclick\")return setTimeout(function(){f(e)});var c=function(e){if(!o.releaseMouse)return;n.curOp.command.name&&n.curOp.selectionChanged&&(o[o.state+\"End\"]&&o[o.state+\"End\"](),o.state=\"\",o.releaseMouse())};n.on(\"beforeEndOperation\",c),n.startOperation({command:{name:\"mouse\"}}),o.$onCaptureMouseMove=a,o.releaseMouse=r.capture(this.editor.container,a,f);var h=setInterval(l,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!=\"contextmenu\")return;this.editor.off(\"nativecontextmenu\",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on(\"nativecontextmenu\",e)}}).call(l.prototype),f.defineOptions(l.prototype,\"mouseHandler\",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimeout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),define(\"ace/mouse/fold_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";function i(e){e.on(\"click\",function(t){var n=t.getDocumentPosition(),i=e.session,s=i.getFoldAt(n.row,n.column,1);s&&(t.getAccelKey()?i.removeFold(s):i.expandFold(s),t.stop());var o=t.domEvent&&t.domEvent.target;o&&r.hasCssClass(o,\"ace_inline_button\")&&r.hasCssClass(o,\"ace_toggle_wrap\")&&(i.setOption(\"wrap\",!0),e.renderer.scrollCursorIntoView())}),e.on(\"gutterclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on(\"gutterdblclick\",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n==\"foldWidgets\"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold(\"...\",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}var r=e(\"../lib/dom\");t.FoldHandler=i}),define(\"ace/keyboard/keybinding\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"../lib/keys\"),i=e(\"../lib/event\"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e==\"function\"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||\"\"}).filter(Boolean).join(\" \")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command==\"null\"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:\"insertstring\"},o=u.exec(\"insertstring\",this.$editor,t)),o&&this.$editor._signal&&this.$editor._signal(\"keyboardActivity\",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),define(\"ace/lib/bidiutil\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function F(e,t,n,r){var i=s?d:p,c=null,h=null,v=null,m=0,g=null,y=null,b=-1,w=null,E=null,T=[];if(!r)for(w=0,r=[];w<n;w++)r[w]=R(e[w]);o=s,u=!1,a=!1,f=!1,l=!1;for(E=0;E<n;E++){c=m,T[E]=h=q(e,r,T,E),m=i[c][h],g=m&240,m&=15,t[E]=v=i[m][5];if(g>0)if(g==16){for(w=b;w<E;w++)t[w]=1;b=-1}else b=-1;y=i[m][6];if(y)b==-1&&(b=E);else if(b>-1){for(w=b;w<E;w++)t[w]=v;b=-1}r[E]==S&&(t[E]=0),o|=v}if(l)for(w=0;w<n;w++)if(r[w]==x){t[w]=s;for(var C=w-1;C>=0;C--){if(r[C]!=N)break;t[C]=s}}}function I(e,t,n){if(o<e)return;if(e==1&&s==m&&!f){n.reverse();return}var r=n.length,i=0,u,a,l,c;while(i<r){if(t[i]>=e){u=i+1;while(u<r&&t[u]>=e)u++;for(a=i,l=u-1;a<l;a++,l--)c=n[a],n[a]=n[l],n[l]=c;i=u}i++}}function q(e,t,n,r){var i=t[r],o,c,h,p;switch(i){case g:case y:u=!1;case E:case w:return i;case b:return u?w:b;case T:return u=!0,a=!0,y;case N:return E;case C:if(r<1||r+1>=t.length||(o=n[r-1])!=b&&o!=w||(c=t[r+1])!=b&&c!=w)return E;return u&&(c=w),c==o?c:E;case k:o=r>0?n[r-1]:S;if(o==b&&r+1<t.length&&t[r+1]==b)return b;return E;case L:if(r>0&&n[r-1]==b)return b;if(u)return E;p=r+1,h=t.length;while(p<h&&t[p]==L)p++;if(p<h&&t[p]==b)return b;return E;case A:h=t.length,p=r+1;while(p<h&&t[p]==A)p++;if(p<h){var d=e[r],v=d>=1425&&d<=2303||d==64286;o=t[p];if(v&&(o==y||o==T))return y}if(r<1||(o=t[r-1])==S)return E;return n[r-1];case S:return u=!1,f=!0,s;case x:return l=!0,E;case O:case M:case D:case P:case _:u=!1;case H:return E}}function R(e){var t=e.charCodeAt(0),n=t>>8;return n==0?t>191?g:B[t]:n==5?/[\\u0591-\\u05f4]/.test(e)?y:g:n==6?/[\\u0610-\\u061a\\u064b-\\u065f\\u06d6-\\u06e4\\u06e7-\\u06ed]/.test(e)?A:/[\\u0660-\\u0669\\u066b-\\u066c]/.test(e)?w:t==1642?L:/[\\u06f0-\\u06f9]/.test(e)?b:T:n==32&&t<=8287?j[t&255]:n==254?t>=65136?T:E:E}function U(e){return e>=\"\\u064b\"&&e<=\"\\u0655\"}var r=[\"\\u0621\",\"\\u0641\"],i=[\"\\u063a\",\"\\u064a\"],s=0,o=0,u=!1,a=!1,f=!1,l=!1,c=!1,h=!1,p=[[0,3,0,1,0,0,0],[0,3,0,1,2,2,0],[0,3,0,17,2,0,1],[0,3,5,5,4,1,0],[0,3,21,21,4,0,1],[0,3,5,5,4,2,0]],d=[[2,0,1,1,0,1,0],[2,0,1,1,0,2,0],[2,0,2,1,3,2,0],[2,0,2,33,3,1,1]],v=0,m=1,g=0,y=1,b=2,w=3,E=4,S=5,x=6,T=7,N=8,C=9,k=10,L=11,A=12,O=13,M=14,_=15,D=16,P=17,H=18,B=[H,H,H,H,H,H,H,H,H,x,S,x,N,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,S,S,S,x,N,E,E,L,L,L,E,E,E,E,E,k,C,k,C,C,b,b,b,b,b,b,b,b,b,b,C,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,E,E,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,g,E,E,E,E,H,H,H,H,H,H,S,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,H,C,E,L,L,L,L,E,E,E,E,g,E,E,H,E,E,L,L,b,b,E,g,E,E,E,b,g,E,E,E,E,E],j=[N,N,N,N,N,N,N,N,N,N,N,H,H,H,g,y,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N,S,O,M,_,D,P,C,L,L,L,L,L,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,C,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,E,N];t.L=g,t.R=y,t.EN=b,t.ON_R=3,t.AN=4,t.R_H=5,t.B=6,t.RLE=7,t.DOT=\"\\u00b7\",t.doBidiReorder=function(e,n,r){if(e.length<2)return{};var i=e.split(\"\"),o=new Array(i.length),u=new Array(i.length),a=[];s=r?m:v,F(i,a,i.length,n);for(var f=0;f<o.length;o[f]=f,f++);I(2,a,o),I(1,a,o);for(var f=0;f<o.length-1;f++)n[f]===w?a[f]=t.AN:a[f]===y&&(n[f]>T&&n[f]<O||n[f]===E||n[f]===H)?a[f]=t.ON_R:f>0&&i[f-1]===\"\\u0644\"&&/\\u0622|\\u0623|\\u0625|\\u0627/.test(i[f])&&(a[f-1]=a[f]=t.R_H,f++);i[i.length-1]===t.DOT&&(a[i.length-1]=t.B),i[0]===\"\\u202b\"&&(a[0]=t.RLE);for(var f=0;f<o.length;f++)u[f]=a[o[f]];return{logicalFromVisual:o,bidiLevels:u}},t.hasBidiCharacters=function(e,t){var n=!1;for(var r=0;r<e.length;r++)t[r]=R(e.charAt(r)),!n&&(t[r]==y||t[r]==T||t[r]==w)&&(n=!0);return n},t.getVisualFromLogicalIdx=function(e,t){for(var n=0;n<t.logicalFromVisual.length;n++)if(t.logicalFromVisual[n]==e)return n;return 0}}),define(\"ace/bidihandler\",[\"require\",\"exports\",\"module\",\"ace/lib/bidiutil\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"./lib/bidiutil\"),i=e(\"./lib/lang\"),s=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac\\u202B]/,o=function(e){this.session=e,this.bidiMap={},this.currentRow=null,this.bidiUtil=r,this.charWidths=[],this.EOL=\"\\u00ac\",this.showInvisibles=!0,this.isRtlDir=!1,this.line=\"\",this.wrapIndent=0,this.EOF=\"\\u00b6\",this.RLE=\"\\u202b\",this.contentWidth=0,this.fontMetrics=null,this.rtlLineOffset=0,this.wrapOffset=0,this.isMoveLeftOperation=!1,this.seenBidi=s.test(e.getValue())};(function(){this.isBidiRow=function(e,t,n){return this.seenBidi?(e!==this.currentRow&&(this.currentRow=e,this.updateRowLine(t,n),this.updateBidiMap()),this.bidiMap.bidiLevels):!1},this.onChange=function(e){this.seenBidi?this.currentRow=null:e.action==\"insert\"&&s.test(e.lines.join(\"\\n\"))&&(this.seenBidi=!0,this.currentRow=null)},this.getDocumentRow=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n=this.session.$getRowCacheIndex(t,this.currentRow);n>=0&&(e=this.session.$docRowCache[n])}return e},this.getSplitIndex=function(){var e=0,t=this.session.$screenRowCache;if(t.length){var n,r=this.session.$getRowCacheIndex(t,this.currentRow);while(this.currentRow-e>0){n=this.session.$getRowCacheIndex(t,this.currentRow-e-1);if(n!==r)break;r=n,e++}}else e=this.currentRow;return e},this.updateRowLine=function(e,t){e===undefined&&(e=this.getDocumentRow());var n=e===this.session.getLength()-1,s=n?this.EOF:this.EOL;this.wrapIndent=0,this.line=this.session.getLine(e),this.isRtlDir=this.line.charAt(0)===this.RLE;if(this.session.$useWrapMode){var o=this.session.$wrapData[e];o&&(t===undefined&&(t=this.getSplitIndex()),t>0&&o.length?(this.wrapIndent=o.indent,this.wrapOffset=this.wrapIndent*this.charWidths[r.L],this.line=t<o.length?this.line.substring(o[t-1],o[t]):this.line.substring(o[o.length-1])):this.line=this.line.substring(0,o[t])),t==o.length&&(this.line+=this.showInvisibles?s:r.DOT)}else this.line+=this.showInvisibles?s:r.DOT;var u=this.session,a=0,f;this.line=this.line.replace(/\\t|[\\u1100-\\u2029, \\u202F-\\uFFE6]/g,function(e,t){return e===\"\t\"||u.isFullWidth(e.charCodeAt(0))?(f=e===\"\t\"?u.getScreenTabSize(t+a):2,a+=f-1,i.stringRepeat(r.DOT,f)):e}),this.isRtlDir&&(this.fontMetrics.$main.innerHTML=this.line.charAt(this.line.length-1)==r.DOT?this.line.substr(0,this.line.length-1):this.line,this.rtlLineOffset=this.contentWidth-this.fontMetrics.$main.getBoundingClientRect().width)},this.updateBidiMap=function(){var e=[];r.hasBidiCharacters(this.line,e)||this.isRtlDir?this.bidiMap=r.doBidiReorder(this.line,e,this.isRtlDir):this.bidiMap={}},this.markAsDirty=function(){this.currentRow=null},this.updateCharacterWidths=function(e){if(this.characterWidth===e.$characterSize.width)return;this.fontMetrics=e;var t=this.characterWidth=e.$characterSize.width,n=e.$measureCharWidth(\"\\u05d4\");this.charWidths[r.L]=this.charWidths[r.EN]=this.charWidths[r.ON_R]=t,this.charWidths[r.R]=this.charWidths[r.AN]=n,this.charWidths[r.R_H]=n*.45,this.charWidths[r.B]=this.charWidths[r.RLE]=0,this.currentRow=null},this.setShowInvisibles=function(e){this.showInvisibles=e,this.currentRow=null},this.setEolChar=function(e){this.EOL=e},this.setContentWidth=function(e){this.contentWidth=e},this.isRtlLine=function(e){return e!=undefined?this.session.getLine(e).charAt(0)==this.RLE:this.isRtlDir},this.setRtlDirection=function(e,t){var n=e.getCursorPosition();for(var r=e.selection.getSelectionAnchor().row;r<=n.row;r++)!t&&e.session.getLine(r).charAt(0)===e.session.$bidiHandler.RLE?e.session.doc.removeInLine(r,0,1):t&&e.session.getLine(r).charAt(0)!==e.session.$bidiHandler.RLE&&e.session.doc.insert({column:0,row:r},e.session.$bidiHandler.RLE)},this.getPosLeft=function(e){e-=this.wrapIndent;var t=this.line.charAt(0)===this.RLE?1:0,n=e>t?this.session.getOverwrite()?e:e-1:t,i=r.getVisualFromLogicalIdx(n,this.bidiMap),s=this.bidiMap.bidiLevels,o=0;!this.session.getOverwrite()&&e<=t&&s[i]%2!==0&&i++;for(var u=0;u<i;u++)o+=this.charWidths[s[u]];return!this.session.getOverwrite()&&e>t&&s[i]%2===0&&(o+=this.charWidths[s[i]]),this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset),this.isRtlDir&&(o+=this.rtlLineOffset),o},this.getSelections=function(e,t){var n=this.bidiMap,r=n.bidiLevels,i,s=[],o=0,u=Math.min(e,t)-this.wrapIndent,a=Math.max(e,t)-this.wrapIndent,f=!1,l=!1,c=0;this.wrapIndent&&(o+=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);for(var h,p=0;p<r.length;p++)h=n.logicalFromVisual[p],i=r[p],f=h>=u&&h<a,f&&!l?c=o:!f&&l&&s.push({left:c,width:o-c}),o+=this.charWidths[i],l=f;f&&p===r.length&&s.push({left:c,width:o-c});if(this.isRtlDir)for(var d=0;d<s.length;d++)s[d].left+=this.rtlLineOffset;return s},this.offsetToCol=function(e){this.isRtlDir&&(e-=this.rtlLineOffset);var t=0,e=Math.max(e,0),n=0,r=0,i=this.bidiMap.bidiLevels,s=this.charWidths[i[r]];this.wrapIndent&&(e-=this.isRtlDir?-1*this.wrapOffset:this.wrapOffset);while(e>n+s/2){n+=s;if(r===i.length-1){s=0;break}s=this.charWidths[i[++r]]}return r>0&&i[r-1]%2!==0&&i[r]%2===0?(e<n&&r--,t=this.bidiMap.logicalFromVisual[r]):r>0&&i[r-1]%2===0&&i[r]%2!==0?t=1+(e>n?this.bidiMap.logicalFromVisual[r]:this.bidiMap.logicalFromVisual[r-1]):this.isRtlDir&&r===i.length-1&&s===0&&i[r-1]%2===0||!this.isRtlDir&&r===0&&i[r]%2!==0?t=1+this.bidiMap.logicalFromVisual[r]:(r>0&&i[r-1]%2!==0&&s!==0&&r--,t=this.bidiMap.logicalFromVisual[r]),t===0&&this.isRtlDir&&t++,t+this.wrapIndent}}).call(o.prototype),t.BidiHandler=o}),define(\"ace/selection\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.cursor=this.lead=this.doc.createAnchor(0,0),this.anchor=this.doc.createAnchor(0,0),this.$silent=!1;var t=this;this.cursor.on(\"change\",function(e){t.$cursorChanged=!0,t.$silent||t._emit(\"changeCursor\"),!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\"),!t.$keepDesiredColumnOnChange&&e.old.column!=e.value.column&&(t.$desiredColumn=null)}),this.anchor.on(\"change\",function(){t.$anchorChanged=!0,!t.$isEmpty&&!t.$silent&&t._emit(\"changeSelection\")})};(function(){r.implement(this,s),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.$isEmpty&&this.anchor.row!=this.cursor.row},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.$isEmpty=!1,this.anchor.setPosition(e,t)},this.getAnchor=this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.$isEmpty?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit(\"changeSelection\"))},this.selectAll=function(){this.$setSelection(0,0,Number.MAX_VALUE,Number.MAX_VALUE)},this.setRange=this.setSelectionRange=function(e,t){var n=t?e.end:e.start,r=t?e.start:e.end;this.$setSelection(n.row,n.column,r.row,r.column)},this.$setSelection=function(e,t,n,r){var i=this.$isEmpty,s=this.inMultiSelectMode;this.$silent=!0,this.$cursorChanged=this.$anchorChanged=!1,this.anchor.setPosition(e,t),this.cursor.setPosition(n,r),this.$isEmpty=!o.comparePoints(this.anchor,this.cursor),this.$silent=!1,this.$cursorChanged&&this._emit(\"changeCursor\"),(this.$cursorChanged||this.$anchorChanged||i!=this.$isEmpty||s)&&this._emit(\"changeSelection\")},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t==\"undefined\"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e==\"number\"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.wouldMoveIntoSoftTab=function(e,t,n){var r=e.column,i=e.column+t;return n<0&&(r=e.column-t,i=e.column),this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(r,i).split(\" \").length-1==t},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.wouldMoveIntoSoftTab(e,n,-1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var n=this.session.getTabSize(),e=this.lead;this.wouldMoveIntoSoftTab(e,n,1)&&!this.session.getNavigateWithinSoftTabs()?this.moveCursorBy(0,n):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,n=this.session.documentToScreenRow(e,t),r=this.session.screenToDocumentPosition(n,0),i=this.session.getDisplayLine(e,null,r.row,r.column),s=i.match(/^\\s*/);s[0].length!=t&&!this.session.$useEmacsStyleLineStart&&(r.column+=s[0].length),this.moveCursorToPosition(r)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var n=this.session.getLine(t.row);if(t.column==n.length){var r=n.search(/\\s+$/);r>0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i){this.moveCursorTo(i.end.row,i.end.column);return}this.session.nonTokenRe.exec(r)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t));if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e<this.doc.getLength()-1&&this.moveCursorWordRight();return}this.session.tokenRe.exec(r)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.moveCursorLongWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1)){this.moveCursorTo(n.start.row,n.start.column);return}var r=this.session.getFoldStringAt(e,t,-1);r==null&&(r=this.doc.getLine(e).substring(0,t));var s=i.stringReverse(r);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(s)&&(t-=this.session.nonTokenRe.lastIndex,s=s.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0);if(t<=0){this.moveCursorTo(e,0),this.moveCursorLeft(),e>0&&this.moveCursorWordLeft();return}this.session.tokenRe.exec(s)&&(t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t=0,n,r=/\\s/,i=this.session.tokenRe;i.lastIndex=0;if(this.session.tokenRe.exec(e))t=this.session.tokenRe.lastIndex;else{while((n=e[t])&&r.test(n))t++;if(t<1){i.lastIndex=0;while((n=e[t])&&!i.test(n)){i.lastIndex=0,t++;if(r.test(n)){if(t>2){t--;break}while((n=e[t])&&r.test(n))t++;if(t>2)break}}}}return i.lastIndex=0,t},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e<s&&/^\\s*$/.test(r));/^\\s+/.test(r)||(r=\"\"),t=0}var o=this.$shortWordEndIndex(r);this.moveCursorTo(e,t+o)},this.moveCursorShortWordLeft=function(){var e=this.lead.row,t=this.lead.column,n;if(n=this.session.getFoldAt(e,t,-1))return this.moveCursorTo(n.start.row,n.start.column);var r=this.session.getLine(e).substring(0,t);if(t===0){do e--,r=this.doc.getLine(e);while(e>0&&/^\\s*$/.test(r));t=r.length,/\\s+$/.test(r)||(r=\"\")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column),r;t===0&&(e!==0&&(this.session.$bidiHandler.isBidiRow(n.row,this.lead.row)?(r=this.session.$bidiHandler.getPosLeft(n.column),n.column=Math.round(r/this.session.$bidiHandler.charWidths[0])):r=n.column*this.session.$bidiHandler.charWidths[0]),this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var i=this.session.screenToDocumentPosition(n.row+e,n.column,r);e!==0&&t===0&&i.row===this.lead.row&&i.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[i.row]&&(i.row>0||e>0)&&i.row++,this.moveCursorTo(i.row,i.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0;var i=this.session.getLine(e);/[\\uDC00-\\uDFFF]/.test(i.charAt(t))&&i.charAt(t-1)&&(this.lead.row==e&&this.lead.column==t+1?t-=1:t+=1),this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),define(\"ace/tokenizer\",[\"require\",\"exports\",\"module\",\"ace/config\"],function(e,t,n){\"use strict\";var r=e(\"./config\"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:\"text\"},o=\"g\",u=[];for(var a=0;a<n.length;a++){var f=n[a];f.defaultToken&&(s.defaultToken=f.defaultToken),f.caseInsensitive&&(o=\"gi\");if(f.regex==null)continue;f.regex instanceof RegExp&&(f.regex=f.regex.toString().slice(1,-1));var l=f.regex,c=(new RegExp(\"(?:(\"+l+\")|(.))\")).exec(\"a\").length-2;Array.isArray(f.token)?f.token.length==1||c==1?f.token=f.token[0]:c-1!=f.token.length?(this.reportError(\"number of classes and regexp groups doesn't match\",{rule:f,groupCount:c-1}),f.token=f.token[0]):(f.tokenArray=f.token,f.token=null,f.onMatch=this.$arrayTokens):typeof f.token==\"function\"&&!f.onMatch&&(c>1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\\\\d/.test(f.regex)?l=f.regex.replace(/\\\\([0-9]+)/g,function(e,t){return\"\\\\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!=\"string\"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push(\"$\")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp(\"(\"+r.join(\")|(\")+\")|($)\",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n==\"string\")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;i<s;i++)t[i]&&(r[r.length]={type:n[i],value:t[i]});return r},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return\"text\";var n=[],r=this.tokenArray;for(var i=0,s=r.length;i<s;i++)t[i+1]&&(n[n.length]={type:r[i],value:t[i+1]});return n},this.removeCapturingGroups=function(e){var t=e.replace(/\\\\.|\\[(?:\\\\.|[^\\\\\\]])*|\\(\\?[:=!]|(\\()/g,function(e,t){return t?\"(?:\":e});return t},this.createSplitterRegexp=function(e,t){if(e.indexOf(\"(?=\")!=-1){var n=0,r=!1,i={};e.replace(/(\\\\.)|(\\((?:\\?[=!])?)|(\\))|([\\[\\]])/g,function(e,t,s,o,u,a){return r?r=u!=\"]\":u?r=!0:o?(n==i.stack&&(i.end=a+1,i.stack=-1),n--):s&&(n++,s.length!=1&&(i.stack=n,i.start=a)),e}),i.end!=null&&/^\\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return e.charAt(0)!=\"^\"&&(e=\"^\"+e),e.charAt(e.length-1)!=\"$\"&&(e+=\"$\"),new RegExp(e,(t||\"\").replace(\"g\",\"\"))},this.getLineTokens=function(e,t){if(t&&typeof t!=\"string\"){var n=t.slice(0);t=n[0],t===\"#tmp\"&&(n.shift(),t=n.shift())}else var n=[];var r=t||\"start\",s=this.states[r];s||(r=\"start\",s=this.states[r]);var o=this.matchMappings[r],u=this.regExps[r];u.lastIndex=0;var a,f=[],l=0,c=0,h={type:null,value:\"\"};while(a=u.exec(e)){var p=o.defaultToken,d=null,v=a[0],m=u.lastIndex;if(m-v.length>l){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;y<a.length-2;y++){if(a[y+1]===undefined)continue;d=s[o[y]],d.onMatch?p=d.onMatch(v,r,n,e):p=d.token,d.next&&(typeof d.next==\"string\"?r=d.next:r=d.next(r,n),s=this.states[r],s||(this.reportError(\"state doesn't exist\",r),r=\"start\",s=this.states[r]),o=this.matchMappings[r],l=m,u=this.regExps[r],u.lastIndex=m),d.consumeLineEnd&&(l=m);break}if(v)if(typeof p==\"string\")!!d&&d.merge===!1||h.type!==p?(h.type&&f.push(h),h={type:p,value:v}):h.value+=v;else if(p){h.type&&f.push(h),h={type:null,value:\"\"};for(var y=0;y<p.length;y++)f.push(p[y])}if(l==e.length)break;l=m;if(c++>i){c>2*e.length&&this.reportError(\"infinite loop with in ace tokenizer\",{startState:t,line:e});while(l<e.length)h.type&&f.push(h),h={value:e.substring(l,l+=2e3),type:\"overflow\"};r=\"start\",n=[];break}}return h.type&&f.push(h),n.length>1&&n[0]!==r&&n.unshift(\"#tmp\",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),define(\"ace/mode/text_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../lib/lang\"),i=function(){this.$rules={start:[{token:\"empty_line\",regex:\"^$\"},{defaultToken:\"text\"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i];if(s.next||s.onMatch)typeof s.next==\"string\"&&s.next.indexOf(t)!==0&&(s.next=t+s.next),s.nextState&&s.nextState.indexOf(t)!==0&&(s.nextState=t+s.nextState)}this.$rules[t+n]=r}},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,n,i,s){var o=typeof e==\"function\"?(new e).getRules():e;if(i)for(var u=0;u<i.length;u++)i[u]=t+i[u];else{i=[];for(var a in o)i.push(t+a)}this.addRules(o,t);if(n){var f=Array.prototype[s?\"push\":\"unshift\"];for(var u=0;u<i.length;u++)f.apply(this.$rules[i[u]],r.deepCopy(n))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return(e!=\"start\"||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||\"start\"};this.normalizeRules=function(){function i(s){var o=r[s];o.processed=!0;for(var u=0;u<o.length;u++){var a=o[u],f=null;Array.isArray(a)&&(f=a,a={}),!a.regex&&a.start&&(a.regex=a.start,a.next||(a.next=[]),a.next.push({defaultToken:a.token},{token:a.token+\".end\",regex:a.end||a.start,next:\"pop\"}),a.token=a.token+\".start\",a.push=!0);var l=a.next||a.push;if(l&&Array.isArray(l)){var c=a.stateName;c||(c=a.token,typeof c!=\"string\"&&(c=c[0]||\"\"),r[c]&&(c+=n++)),r[c]=l,a.next=c,i(c)}else l==\"pop\"&&(a.next=t);a.push&&(a.nextState=a.next||a.push,a.next=e,delete a.push);if(a.rules)for(var h in a.rules)r[h]?r[h].push&&r[h].push.apply(r[h],a.rules[h]):r[h]=a.rules[h];var p=typeof a==\"string\"?a:a.include;p&&(Array.isArray(p)?f=p.map(function(e){return r[e]}):f=r[p]);if(f){var d=[u,1].concat(f);a.noEscape&&(d=d.filter(function(e){return!e.next})),o.splice.apply(o,d),u--}a.keywordMap&&(a.token=this.createKeywordMapper(a.keywordMap,a.defaultToken||\"text\",a.caseInsensitive),delete a.defaultToken)}}var n=0,r=this.$rules;Object.keys(r).forEach(i,this)},this.createKeywordMapper=function(e,t,n,r){var i=Object.create(null);return Object.keys(e).forEach(function(t){var s=e[t];n&&(s=s.toLowerCase());var o=s.split(r||\"|\");for(var u=o.length;u--;)i[o[u]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,n?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),define(\"ace/mode/behaviour\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=function(){this.$behaviours={}};(function(){this.add=function(e,t,n){switch(undefined){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=n},this.addBehaviours=function(e){for(var t in e)for(var n in e[t])this.add(t,n,e[t][n])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if(typeof e==\"function\")var n=(new e).getBehaviours(t);else var n=e.getBehaviours(t);this.addBehaviours(n)},this.getBehaviours=function(e){if(!e)return this.$behaviours;var t={};for(var n=0;n<e.length;n++)this.$behaviours[e[n]]&&(t[e[n]]=this.$behaviours[e[n]]);return t}}).call(r.prototype),t.Behaviour=r}),define(\"ace/token_iterator\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=function(e,t,n){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var r=e.getTokenAt(t,n);this.$tokenIndex=r?r.index:-1};(function(){this.stepBackward=function(){this.$tokenIndex-=1;while(this.$tokenIndex<0){this.$row-=1;if(this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){this.$tokenIndex+=1;var e;while(this.$tokenIndex>=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}},this.getCurrentTokenRange=function(){var e=this.$rowTokens[this.$tokenIndex],t=this.getCurrentTokenColumn();return new r(this.$row,t,this.$row,t+e.value.length)}}).call(i.prototype),t.TokenIterator=i}),define(\"ace/mode/behaviour/cstyle\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),u=[\"text\",\"paren.rparen\",\"punctuation.operator\"],a=[\"text\",\"paren.rparen\",\"punctuation.operator\",\"comment\"],f,l={},c={'\"':'\"',\"'\":\"'\"},h=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:\"\",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:\"\",maybeInsertedLineEnd:\"\"}},p=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},d=function(e){this.add(\"braces\",\"insertion\",function(t,n,r,i,s){var u=r.getCursorPosition(),a=i.doc.getLine(u.row);if(s==\"{\"){h(r);var l=r.getSelectionRange(),c=i.doc.getTextRange(l);if(c!==\"\"&&c!==\"{\"&&r.getWrapBehavioursEnabled())return p(l,c,\"{\",\"}\");if(d.isSaneInsertion(r,i))return/[\\]\\}\\)]/.test(a[u.column])||r.inMultiSelectMode||e&&e.braces?(d.recordAutoInsert(r,i,\"}\"),{text:\"{}\",selection:[1,1]}):(d.recordMaybeInsert(r,i,\"{\"),{text:\"{\",selection:[1,1]})}else if(s==\"}\"){h(r);var v=a.substring(u.column,u.column+1);if(v==\"}\"){var m=i.$findOpeningBracket(\"}\",{column:u.column+1,row:u.row});if(m!==null&&d.isAutoInsertedClosing(u,a,s))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}else{if(s==\"\\n\"||s==\"\\r\\n\"){h(r);var g=\"\";d.isMaybeInsertedClosing(u,a)&&(g=o.stringRepeat(\"}\",f.maybeInsertedBrackets),d.clearMaybeInsertedClosing());var v=a.substring(u.column,u.column+1);if(v===\"}\"){var y=i.findMatchingBracket({row:u.row,column:u.column+1},\"}\");if(!y)return null;var b=this.$getIndent(i.getLine(y.row))}else{if(!g){d.clearMaybeInsertedClosing();return}var b=this.$getIndent(a)}var w=b+i.getTabString();return{text:\"\\n\"+w+\"\\n\"+b+g,selection:[1,w.length,1,w.length]}}d.clearMaybeInsertedClosing()}}),this.add(\"braces\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"{\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u==\"}\")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add(\"parens\",\"insertion\",function(e,t,n,r,i){if(i==\"(\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"(\",\")\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\")\"),{text:\"()\",selection:[1,1]}}else if(i==\")\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\")\"){var l=r.$findOpeningBracket(\")\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"parens\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"(\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\")\")return i.end.column++,i}}),this.add(\"brackets\",\"insertion\",function(e,t,n,r,i){if(i==\"[\"){h(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==\"\"&&n.getWrapBehavioursEnabled())return p(s,o,\"[\",\"]\");if(d.isSaneInsertion(n,r))return d.recordAutoInsert(n,r,\"]\"),{text:\"[]\",selection:[1,1]}}else if(i==\"]\"){h(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==\"]\"){var l=r.$findOpeningBracket(\"]\",{column:u.column+1,row:u.row});if(l!==null&&d.isAutoInsertedClosing(u,a,i))return d.popAutoInsertedClosing(),{text:\"\",selection:[1,1]}}}}),this.add(\"brackets\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s==\"[\"){h(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==\"]\")return i.end.column++,i}}),this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c;if(i.length==1&&s[i]){if(this.lineCommentStart&&this.lineCommentStart.indexOf(i)!=-1)return;h(n);var o=i,u=n.getSelectionRange(),a=r.doc.getTextRange(u);if(a!==\"\"&&(a.length!=1||!s[a])&&n.getWrapBehavioursEnabled())return p(u,a,o,o);if(!a){var f=n.getCursorPosition(),l=r.doc.getLine(f.row),d=l.substring(f.column-1,f.column),v=l.substring(f.column,f.column+1),m=r.getTokenAt(f.row,f.column),g=r.getTokenAt(f.row,f.column+1);if(d==\"\\\\\"&&m&&/escape/.test(m.type))return null;var y=m&&/string|escape/.test(m.type),b=!g||/string|escape/.test(g.type),w;if(v==o)w=y!==b,w&&/string\\.end/.test(g.type)&&(w=!1);else{if(y&&!b)return null;if(y&&b)return null;var E=r.$mode.tokenRe;E.lastIndex=0;var S=E.test(d);E.lastIndex=0;var x=E.test(d);if(S||x)return null;if(v&&!/[\\s;,.})\\]\\\\]/.test(v))return null;w=!0}return{text:w?o+o:\"\",selection:[1,1]}}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.$mode.$quotes||c,o=r.doc.getTextRange(i);if(!i.isMultiLine()&&s.hasOwnProperty(o)){h(n);var u=r.doc.getLine(i.start.row),a=u.substring(i.start.column+1,i.start.column+2);if(a==o)return i.end.column++,i}})};d.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||\"text\",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||\"text\",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||\"text\",a)},d.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},d.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},d.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},d.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},d.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},d.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},d.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(d,i),t.CstyleBehaviour=d}),define(\"ace/unicode\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";var r=[48,9,8,25,5,0,2,25,48,0,11,0,5,0,6,22,2,30,2,457,5,11,15,4,8,0,2,0,18,116,2,1,3,3,9,0,2,2,2,0,2,19,2,82,2,138,2,4,3,155,12,37,3,0,8,38,10,44,2,0,2,1,2,1,2,0,9,26,6,2,30,10,7,61,2,9,5,101,2,7,3,9,2,18,3,0,17,58,3,100,15,53,5,0,6,45,211,57,3,18,2,5,3,11,3,9,2,1,7,6,2,2,2,7,3,1,3,21,2,6,2,0,4,3,3,8,3,1,3,3,9,0,5,1,2,4,3,11,16,2,2,5,5,1,3,21,2,6,2,1,2,1,2,1,3,0,2,4,5,1,3,2,4,0,8,3,2,0,8,15,12,2,2,8,2,2,2,21,2,6,2,1,2,4,3,9,2,2,2,2,3,0,16,3,3,9,18,2,2,7,3,1,3,21,2,6,2,1,2,4,3,8,3,1,3,2,9,1,5,1,2,4,3,9,2,0,17,1,2,5,4,2,2,3,4,1,2,0,2,1,4,1,4,2,4,11,5,4,4,2,2,3,3,0,7,0,15,9,18,2,2,7,2,2,2,22,2,9,2,4,4,7,2,2,2,3,8,1,2,1,7,3,3,9,19,1,2,7,2,2,2,22,2,9,2,4,3,8,2,2,2,3,8,1,8,0,2,3,3,9,19,1,2,7,2,2,2,22,2,15,4,7,2,2,2,3,10,0,9,3,3,9,11,5,3,1,2,17,4,23,2,8,2,0,3,6,4,0,5,5,2,0,2,7,19,1,14,57,6,14,2,9,40,1,2,0,3,1,2,0,3,0,7,3,2,6,2,2,2,0,2,0,3,1,2,12,2,2,3,4,2,0,2,5,3,9,3,1,35,0,24,1,7,9,12,0,2,0,2,0,5,9,2,35,5,19,2,5,5,7,2,35,10,0,58,73,7,77,3,37,11,42,2,0,4,328,2,3,3,6,2,0,2,3,3,40,2,3,3,32,2,3,3,6,2,0,2,3,3,14,2,56,2,3,3,66,5,0,33,15,17,84,13,619,3,16,2,25,6,74,22,12,2,6,12,20,12,19,13,12,2,2,2,1,13,51,3,29,4,0,5,1,3,9,34,2,3,9,7,87,9,42,6,69,11,28,4,11,5,11,11,39,3,4,12,43,5,25,7,10,38,27,5,62,2,28,3,10,7,9,14,0,89,75,5,9,18,8,13,42,4,11,71,55,9,9,4,48,83,2,2,30,14,230,23,280,3,5,3,37,3,5,3,7,2,0,2,0,2,0,2,30,3,52,2,6,2,0,4,2,2,6,4,3,3,5,5,12,6,2,2,6,67,1,20,0,29,0,14,0,17,4,60,12,5,0,4,11,18,0,5,0,3,9,2,0,4,4,7,0,2,0,2,0,2,3,2,10,3,3,6,4,5,0,53,1,2684,46,2,46,2,132,7,6,15,37,11,53,10,0,17,22,10,6,2,6,2,6,2,6,2,6,2,6,2,6,2,6,2,31,48,0,470,1,36,5,2,4,6,1,5,85,3,1,3,2,2,89,2,3,6,40,4,93,18,23,57,15,513,6581,75,20939,53,1164,68,45,3,268,4,27,21,31,3,13,13,1,2,24,9,69,11,1,38,8,3,102,3,1,111,44,25,51,13,68,12,9,7,23,4,0,5,45,3,35,13,28,4,64,15,10,39,54,10,13,3,9,7,22,4,1,5,66,25,2,227,42,2,1,3,9,7,11171,13,22,5,48,8453,301,3,61,3,105,39,6,13,4,6,11,2,12,2,4,2,0,2,1,2,1,2,107,34,362,19,63,3,53,41,11,5,15,17,6,13,1,25,2,33,4,2,134,20,9,8,25,5,0,2,25,12,88,4,5,3,5,3,5,3,2],i=0,s=[];for(var o=0;o<r.length;o+=2)s.push(i+=r[o]),r[o+1]&&s.push(45,i+=r[o+1]);t.wordChars=String.fromCharCode.apply(null,s)}),define(\"ace/mode/text\",[\"require\",\"exports\",\"module\",\"ace/config\",\"ace/tokenizer\",\"ace/mode/text_highlight_rules\",\"ace/mode/behaviour/cstyle\",\"ace/unicode\",\"ace/lib/lang\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../config\"),i=e(\"../tokenizer\").Tokenizer,s=e(\"./text_highlight_rules\").TextHighlightRules,o=e(\"./behaviour/cstyle\").CstyleBehaviour,u=e(\"../unicode\"),a=e(\"../lib/lang\"),f=e(\"../token_iterator\").TokenIterator,l=e(\"../range\").Range,c=function(){this.HighlightRules=s};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp(\"^[\"+u.wordChars+\"\\\\$_]+\",\"g\"),this.nonTokenRe=new RegExp(\"^(?:[^\"+u.wordChars+\"\\\\$_]|\\\\s])+\",\"g\"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new i(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart=\"\",this.blockComment=\"\",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,u=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp(\"^(\\\\s*)(?:\"+a.escapeRegExp(c)+\")\"),d=new RegExp(\"(?:\"+a.escapeRegExp(h)+\")\\\\s*$\"),v=function(e,t){if(g(e,t))return;if(!s||/\\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:u},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i<r.length;i++)if(r[i].type===\"comment\")return!0}}else{if(Array.isArray(this.lineCommentStart))var p=this.lineCommentStart.map(a.escapeRegExp).join(\"|\"),c=this.lineCommentStart[0];else var p=a.escapeRegExp(this.lineCommentStart),c=this.lineCommentStart;p=new RegExp(\"^(\\\\s*)(?:\"+p+\") ?\"),l=t.getUseSoftTabs();var m=function(e,t){var n=e.match(p);if(!n)return;var r=n[1].length,s=n[0].length;!b(e,r,s)&&n[0][s-1]==\" \"&&s--,i.removeInLine(t,r,s)},y=c+\" \",v=function(e,t){if(!s||/\\S/.test(e))b(e,u,u)?i.insertInLine({row:t,column:u},y):i.insertInLine({row:t,column:u},c)},g=function(e,t){return p.test(e)},b=function(e,t,n){var r=0;while(t--&&e.charAt(t)==\" \")r++;if(r%f!=0)return!1;var r=0;while(e.charAt(n++)==\" \")r++;return f>2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\\S/);n!==-1?(n<u&&(u=n),o&&!g(e,t)&&(o=!1)):E>e.length&&(E=e.length)}),u==Infinity&&(u=E,s=!1,o=!1),l&&u%f!=0&&(u=Math.floor(u/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new f(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,a=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new l(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new f(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new l(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);a.start.row==c&&(a.start.column+=h),a.end.row==c&&(a.end.column+=h),t.selection.fromOrientedRange(a)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)if(e[t]){var n=e[t],i=n.prototype.$id,s=r.$modes[i];s||(r.$modes[i]=s=new n),r.$modes[t]||(r.$modes[t]=s),this.$embeds.push(t),this.$modes[t]=s}var o=[\"toggleBlockComment\",\"toggleCommentLines\",\"getNextLineIndent\",\"checkOutdent\",\"autoOutdent\",\"transformAction\",\"getCompletions\"];for(var t=0;t<o.length;t++)(function(e){var n=o[t],r=e[n];e[o[t]]=function(){return this.$delegator(n,arguments,r)}})(this)},this.$delegator=function(e,t,n){var r=t[0];if(typeof r!=\"string\"){if(Array.isArray(r[2])){var i=r[2][r[2].length-1],s=this.$modes[i];if(s)return s[e].apply(s,[r[1]].concat([].slice.call(t,1)))}r=r[0]}for(var o=0;o<this.$embeds.length;o++){if(!this.$modes[this.$embeds[o]])continue;var u=r.split(this.$embeds[o]);if(!u[0]&&u[1]){t[0]=u[1];var s=this.$modes[this.$embeds[o]];return s[e].apply(s,t)}}var a=n.apply(this,t);return n?a:undefined},this.transformAction=function(e,t,n,r,i){if(this.$behaviour){var s=this.$behaviour.getBehaviours();for(var o in s)if(s[o][t]){var u=s[o][t].apply(this,arguments);if(u)return u}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,n=[];for(var r in t){var i=t[r];for(var s=0,o=i.length;s<o;s++)if(typeof i[s].token==\"string\")/keyword|support|storage/.test(i[s].token)&&n.push(i[s].regex);else if(typeof i[s].token==\"object\")for(var u=0,a=i[s].token.length;u<a;u++)if(/keyword|support|storage/.test(i[s].token[u])){var r=i[s].regex.match(/\\(.+?\\)/g)[u];n.push(r.substr(1,r.length-2))}}this.completionKeywords=n}return e?n.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,n,r){var i=this.$keywordList||this.$createKeywordList();return i.map(function(e){return{name:e,value:e,score:0,meta:\"keyword\"}})},this.$id=\"ace/mode/text\"}).call(c.prototype),t.Mode=c}),define(\"ace/apply_delta\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/anchor\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/apply_delta\",\"ace/lib/event_emitter\",\"ace/range\",\"ace/anchor\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/background_tokenizer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var n=this;this.$worker=function(){if(!n.running)return;var e=new Date,t=n.currentLine,r=-1,i=n.doc,s=t;while(n.lines[t])t++;var o=i.getLength(),u=0;n.running=!1;while(t<o){n.$tokenizeRow(t),r=t;do t++;while(n.lines[t]);u++;if(u%5===0&&new Date-e>20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,r==-1&&(r=t),s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal(\"update\",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action==\"remove\")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||\"start\"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+\"\"!=r.state+\"\"?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),define(\"ace/search_highlight\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||\"text\"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+\"\"==e+\"\")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:\"\");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),define(\"ace/edit_session/fold_line\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e(\"../range\").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error(\"Can't add a fold to this FoldLine as it has no connection\");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error(\"Trying to add fold to FoldRow that doesn't have a matching row\");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f<i.length;f++){s=i[f],o=s.range.compareStart(t,n);if(o==-1){e(null,t,n,r,a);return}u=e(null,s.start.row,s.start.column,r,a),u=!u&&e(s.placeholder,s.start.row,s.start.column,r);if(u||o===0)return;a=!s.sameRow,r=s.end.column}e(null,t,n,r,a)},this.getNextFoldTo=function(e,t){var n,r;for(var i=0;i<this.folds.length;i++){n=this.folds[i],r=n.range.compareEnd(e,t);if(r==-1)return{fold:n,kind:\"after\"};if(r===0)return{fold:n,kind:\"inside\"}}return null},this.addRemoveChars=function(e,t,n){var r=this.getNextFoldTo(e,t),i,s;if(r){i=r.fold;if(r.kind==\"inside\"&&i.start.column!=t&&i.start.row!=e)window.console&&window.console.log(e,t,i);else if(i.start.row==e){s=this.folds;var o=s.indexOf(i);o===0&&(this.start.column+=n);for(o;o<s.length;o++){i=s[o],i.start.column+=n;if(!i.sameRow)return;i.end.column+=n}this.end.column+=n}}},this.split=function(e,t){var n=this.getNextFoldTo(e,t);if(!n||n.kind==\"inside\")return null;var r=n.fold,s=this.folds,o=this.foldData,u=s.indexOf(r),a=s[u-1];this.end.row=a.end.row,this.end.column=a.end.column,s=s.splice(u,s.length-u);var f=new i(o,s);return o.splice(o.indexOf(this)+1,0,f),f},this.merge=function(e){var t=e.folds;for(var n=0;n<t.length;n++)this.addFold(t[n]);var r=this.foldData;r.splice(r.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+\": [\"];return this.folds.forEach(function(t){e.push(\" \"+t.toString())}),e.push(\"]\"),e.join(\"\\n\")},this.idxToPosition=function(e){var t=0;for(var n=0;n<this.folds.length;n++){var r=this.folds[n];e-=r.start.column-t;if(e<0)return{row:r.start.row,column:r.start.column+e};e-=r.placeholder.length;if(e<0)return r.start;t=r.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),define(\"ace/range_list\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=r.comparePoints,s=function(){this.ranges=[]};(function(){this.comparePoints=i,this.pointIndex=function(e,t,n){var r=this.ranges;for(var s=n||0;s<r.length;s++){var o=r[s],u=i(e,o.end);if(u>0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s<t.length;s++){r=n,n=t[s];var o=i(r.end,n.start);if(o<0)continue;if(o==0&&!r.isEmpty()&&!n.isEmpty())continue;i(r.end,n.end)<0&&(r.end.row=n.end.row,r.end.column=n.end.column),t.splice(s,1),e.push(n),n=r,s--}return this.ranges=t,e},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.row<e)return[];var r=this.pointIndex({row:e,column:0});r<0&&(r=-r-1);var i=this.pointIndex({row:t,column:0},r);i<0&&(i=-i-1);var s=[];for(var o=r;o<i;o++)s.push(n[o]);return s},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on(\"change\",this.onChange)},this.detach=function(){if(!this.session)return;this.session.removeListener(\"change\",this.onChange),this.session=null},this.$onChange=function(e){var t=e.start,n=e.end,r=t.row,i=n.row,s=this.ranges;for(var o=0,u=s.length;o<u;o++){var a=s[o];if(a.end.row>=r)break}if(e.action==\"insert\"){var f=i-r,l=-t.column+n.column;for(;o<u;o++){var a=s[o];if(a.start.row>r)break;a.start.row==r&&a.start.column>=t.column&&(a.start.column!=t.column||!this.$insertRight)&&(a.start.column+=l,a.start.row+=f);if(a.end.row==r&&a.end.column>=t.column){if(a.end.column==t.column&&this.$insertRight)continue;a.end.column==t.column&&l>0&&o<u-1&&a.end.column>a.start.column&&a.end.column==s[o+1].start.column&&(a.end.column-=l),a.end.column+=l,a.end.row+=f}}}else{var f=r-i,l=t.column-n.column;for(;o<u;o++){var a=s[o];if(a.start.row>i)break;if(a.end.row<i&&(r<a.end.row||r==a.end.row&&t.column<a.end.column))a.end.row=r,a.end.column=t.column;else if(a.end.row==i)if(a.end.column<=n.column){if(f||a.end.column>t.column)a.end.column=t.column,a.end.row=t.row}else a.end.column+=l,a.end.row+=f;else a.end.row>i&&(a.end.row+=f);if(a.start.row<i&&(r<a.start.row||r==a.start.row&&t.column<a.start.column))a.start.row=r,a.start.column=t.column;else if(a.start.row==i)if(a.start.column<=n.column){if(f||a.start.column>t.column)a.start.column=t.column,a.start.row=t.row}else a.start.column+=l,a.start.row+=f;else a.start.row>i&&(a.start.row+=f)}}if(f!=0&&o<u)for(;o<u;o++){var a=s[o];a.start.row+=f,a.end.row+=f}}}).call(s.prototype),t.RangeList=s}),define(\"ace/edit_session/fold\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/range_list\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";function u(e,t){e.row-=t.row,e.row==0&&(e.column-=t.column)}function a(e,t){u(e.start,t),u(e.end,t)}function f(e,t){e.row==0&&(e.column+=t.column),e.row+=t.row}function l(e,t){f(e.start,t),f(e.end,t)}var r=e(\"../range\").Range,i=e(\"../range_list\").RangeList,s=e(\"../lib/oop\"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};s.inherits(o,i),function(){this.toString=function(){return'\"'+this.placeholder+'\" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(this.range.isEqual(e))return;if(!this.range.containsRange(e))throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);a(e,this.start);var t=e.start.row,n=e.start.column;for(var r=0,i=-1;r<this.subFolds.length;r++){i=this.subFolds[r].range.compare(t,n);if(i!=1)break}var s=this.subFolds[r];if(i==0)return s.addSubFold(e);var t=e.range.end.row,n=e.range.end.column;for(var o=r,i=-1;o<this.subFolds.length;o++){i=this.subFolds[o].range.compare(t,n);if(i!=1)break}var u=this.subFolds[o];if(i==0)throw new Error(\"A fold can't intersect already existing fold\"+e.range+this.range);var f=this.subFolds.splice(r,o-r,e);return e.setFoldLine(this.foldLine),e},this.restoreRange=function(e){return l(e,this.start)}}.call(o.prototype)}),define(\"ace/edit_session/folding\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/edit_session/fold_line\",\"ace/edit_session/fold\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function u(){this.getFoldAt=function(e,t,n){var r=this.getFoldLine(e);if(!r)return null;var i=r.folds;for(var s=0;s<i.length;s++){var o=i[s];if(o.range.contains(e,t)){if(n==1&&o.range.isEnd(e,t))continue;if(n==-1&&o.range.isStart(e,t))continue;return o}}},this.getFoldsInRange=function(e){var t=e.start,n=e.end,r=this.$foldData,i=[];t.column+=1,n.column-=1;for(var s=0;s<r.length;s++){var o=r[s].range.compareRange(e);if(o==2)continue;if(o==-2)break;var u=r[s].folds;for(var a=0;a<u.length;a++){var f=u[a];o=f.range.compareRange(e);if(o==-2)break;if(o==2)continue;if(o==42)break;i.push(f)}}return t.column-=1,n.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else var t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){var e=[],t=this.$foldData;for(var n=0;n<t.length;n++)for(var r=0;r<t[n].folds.length;r++)e.push(t[n].folds[r]);return e},this.getFoldStringAt=function(e,t,n,r){r=r||this.getFoldLine(e);if(!r)return null;var i={end:{column:0}},s,o;for(var u=0;u<r.folds.length;u++){o=r.folds[u];var a=o.range.compareEnd(e,t);if(a==-1){s=this.getLine(o.start.row).substring(i.end.column,o.start.column);break}if(a===0)return null;i=o}return s||(s=this.getLine(o.start.row).substring(i.end.column)),n==-1?s.substring(0,t-i.end.column):n==1?s.substring(t-i.end.column):s},this.getFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r<n.length;r++){var i=n[r];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i<n.length;i++){var s=n[i],o=s.end.row,u=s.start.row;if(o>=t){u<t&&(u>=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u<f||u==f&&a<=l-2){var c=this.getFoldAt(u,a,1),h=this.getFoldAt(f,l,-1);if(c&&h==c)return c.addSubFold(o);c&&!c.range.isStart(u,a)&&this.removeFold(c),h&&!h.range.isEnd(f,l)&&this.removeFold(h);var p=this.getFoldsInRange(o.range);p.length>0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d<n.length;d++){var v=n[d];if(f==v.start.row){v.addFold(o),r=!0;break}if(u==v.end.row){v.addFold(o),r=!0;if(!o.sameRow){var m=n[d+1];if(m&&m.start.row==f){v.merge(m);break}}break}if(f<=v.start.row)break}return r||(v=this.$addFoldLine(new i(this.$foldData,o))),this.$useWrapMode?this.$updateWrapData(v.start.row,v.start.row):this.$updateRowLengthCache(v.start.row,v.start.row),this.$modified=!0,this._signal(\"changeFold\",{data:o,action:\"add\"}),o}throw new Error(\"The range has to be at least 2 characters width\")},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,n=t.start.row,r=t.end.row,i=this.$foldData,s=t.folds;if(s.length==1)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))s.pop(),t.end.row=s[s.length-1].end.row,t.end.column=s[s.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))s.shift(),t.start.row=s[0].start.row,t.start.column=s[0].start.column;else if(e.sameRow)s.splice(s.indexOf(e),1);else{var o=t.split(e.start.row,e.start.column);s=o.folds,s.shift(),o.start.row=s[0].start.row,o.start.column=s[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(n,r):this.$updateRowLengthCache(n,r)),this.$modified=!0,this._signal(\"changeFold\",{data:e,action:\"remove\"})},this.removeFolds=function(e){var t=[];for(var n=0;n<e.length;n++)t.push(e[n]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e==\"number\"?n=new r(e,0,e,this.getLine(e).length):\"row\"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o=\"\";return e.walk(function(e,t,n,u){if(t<r)return;if(t==r){if(n<i)return;u=Math.max(i,u)}e!=null?o+=e:o+=s.getLine(t).substring(u,n)},t,n),o},this.getDisplayLine=function(e,t,n,r){var i=this.getFoldLine(e);if(!i){var s;return s=this.doc.getLine(e),s.substring(r||0,t||s.length)}return this.getFoldDisplayLine(i,e,t,n,r)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var n=t.folds.map(function(e){return e.clone()});return new i(e,n)}),e},this.toggleFold=function(e){var t=this.selection,n=t.getRange(),r,i;if(n.isEmpty()){var s=n.start;r=this.getFoldAt(s.row,s.column);if(r){this.expandFold(r);return}(i=this.findMatchingBracket(s))?n.comparePoint(i)==1?n.end=i:(n.start=i,n.start.column++,n.end.column--):(i=this.findMatchingBracket({row:s.row,column:s.column+1}))?(n.comparePoint(i)==1?n.end=i:n.start=i,n.start.column++):n=this.getCommentFoldRange(s.row,s.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length){this.expandFolds(o);return}o.length==1&&(r=o[0])}r||(r=this.getFoldAt(n.start.row,n.start.column));if(r&&r.range.toString()==n.toString()){this.expandFold(r);return}var u=\"...\";if(!n.isMultiLine()){u=this.getTextRange(n);if(u.length<4)return;u=u.trim().substring(0,2)+\"..\"}this.addFold(u,n)},this.getCommentFoldRange=function(e,t,n){var i=new o(this,e,t),s=i.getCurrentToken(),u=s.type;if(s&&/^comment|string/.test(u)){u=u.match(/comment|string/)[0],u==\"comment\"&&(u+=\"|doc-start\");var a=new RegExp(u),f=new r;if(n!=1){do s=i.stepBackward();while(s&&a.test(s.type));i.stepForward()}f.start.row=i.getCurrentTokenRow(),f.start.column=i.getCurrentTokenColumn()+2,i=new o(this,e,t);if(n!=-1){var l=-1;do{s=i.stepForward();if(l==-1){var c=this.getState(i.$row);a.test(c)||(l=i.$row)}else if(i.$row>l)break}while(s&&a.test(s.type));s=i.stepBackward()}else s=i.getCurrentToken();return f.end.row=i.getCurrentTokenRow(),f.end.column=i.getCurrentTokenColumn()+s.value.length-2,f}},this.foldAll=function(e,t,n){n==undefined&&(n=1e5);var r=this.foldWidgets;if(!r)return;t=t||this.getLength(),e=e||0;for(var i=e;i<t;i++){r[i]==null&&(r[i]=this.getFoldWidget(i));if(r[i]!=\"start\")continue;var s=this.getFoldWidgetRange(i);if(s&&s.isMultiLine()&&s.end.row<=t&&s.start.row>=e){i=s.end.row;try{var o=this.addFold(\"...\",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle=\"markbegin\",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error(\"invalid fold style: \"+e+\"[\"+Object.keys(this.$foldStyles).join(\", \")+\"]\");if(this.$foldStyle==e)return;this.$foldStyle=e,e==\"manual\"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off(\"change\",this.$updateFoldWidgets),this.off(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets),this._signal(\"changeAnnotation\");if(!e||this.$foldStyle==\"manual\"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on(\"change\",this.$updateFoldWidgets),this.on(\"tokenizerUpdate\",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s==\"start\"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=\" ace_invalid\")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n===\"end\"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s)return t.children||t.all?this.removeFold(s):this.expandFold(s),s;var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range))return this.removeFold(s),s}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold(\"...\",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold(\"...\",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action==\"remove\")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e(\"../range\").Range,i=e(\"./fold_line\").FoldLine,s=e(\"./fold\").Fold,o=e(\"../token_iterator\").TokenIterator;t.Folding=u}),define(\"ace/edit_session/bracket_match\",[\"require\",\"exports\",\"module\",\"ace/token_iterator\",\"ace/range\"],function(e,t,n){\"use strict\";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n==\"\")return null;var r=n.match(/([\\(\\[\\{])|([\\)\\]\\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\\(\\[\\{])|([\\)\\]\\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={\")\":\"(\",\"(\":\")\",\"]\":\"[\",\"[\":\"]\",\"{\":\"}\",\"}\":\"{\"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"rparen\",\".paren\").replace(/\\b(?:end)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp(\"(\\\\.?\"+u.type.replace(\".\",\"\\\\.\").replace(\"lparen\",\".paren\").replace(/\\b(?:start|begin)\\b/,\"(?:start|begin|end)\")+\")+\"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a<l){var c=f.charAt(a);if(c==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else c==e&&(s+=1);a+=1}do u=o.stepForward();while(u&&!n.test(u.type));if(u==null)break;a=0}return null}}var r=e(\"../token_iterator\").TokenIterator,i=e(\"../range\").Range;t.BracketMatch=s}),define(\"ace/edit_session\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/bidihandler\",\"ace/config\",\"ace/lib/event_emitter\",\"ace/selection\",\"ace/mode/text\",\"ace/range\",\"ace/document\",\"ace/background_tokenizer\",\"ace/search_highlight\",\"ace/edit_session/folding\",\"ace/edit_session/bracket_match\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/lang\"),s=e(\"./bidihandler\").BidiHandler,o=e(\"./config\"),u=e(\"./lib/event_emitter\").EventEmitter,a=e(\"./selection\").Selection,f=e(\"./mode/text\").Mode,l=e(\"./range\").Range,c=e(\"./document\").Document,h=e(\"./background_tokenizer\").BackgroundTokenizer,p=e(\"./search_highlight\").SearchHighlight,d=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id=\"session\"+ ++d.$uid,this.$foldData.toString=function(){return this.join(\"\\n\")},this.on(\"changeFold\",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this);if(typeof e!=\"object\"||!e.getLine)e=new c(e);this.setDocument(e),this.selection=new a(this),this.$bidiHandler=new s(this),o.resetOptions(this),this.setMode(t),o._signal(\"session\",this)};d.$uid=0,function(){function m(e){return e<4352?!1:e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,u),this.setDocument=function(e){this.doc&&this.doc.removeListener(\"change\",this.$onChange),this.doc=e,e.on(\"change\",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t<s))return i;r=i-1}}return n-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$bidiHandler.onChange(e),this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);!this.$fromUndo&&this.$undoManager&&(t&&t.length&&(this.$undoManager.add({action:\"removeFolds\",folds:t},this.mergeUndoDeltas),this.mergeUndoDeltas=!0),this.$undoManager.add(e,this.mergeUndoDeltas),this.mergeUndoDeltas=!0,this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal(\"change\",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var n=this.bgTokenizer.getTokens(e),r,i=0;if(t==null){var s=n.length-1;i=this.getLine(e).length}else for(var s=0;s<n.length;s++){i+=n[s].value.length;if(i>=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;e.addSession(this),this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.mergeUndoDeltas=!1},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}else this.$syncInformUndoManager=function(){}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){},add:function(){},addSelection:function(){},startNewGroup:function(){},addSession:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(\" \",this.getTabSize()):\"\t\"},this.setUseSoftTabs=function(e){this.setOption(\"useSoftTabs\",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption(\"tabSize\",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.setNavigateWithinSoftTabs=function(e){this.setOption(\"navigateWithinSoftTabs\",e)},this.getNavigateWithinSoftTabs=function(){return this.$navigateWithinSoftTabs},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption(\"overwrite\",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=\"\"),this.$decorations[e]+=\" \"+t,this._signal(\"changeBreakpoint\",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||\"\").replace(\" \"+t,\"\"),this._signal(\"changeBreakpoint\",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]=\"ace_breakpoint\";this._signal(\"changeBreakpoint\",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal(\"changeBreakpoint\",{})},this.setBreakpoint=function(e,t){t===undefined&&(t=\"ace_breakpoint\"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal(\"changeBreakpoint\",{})},this.addMarker=function(e,t,n,r){var i=this.$markerId++,s={range:e,type:n||\"line\",renderer:typeof n==\"function\"?n:null,clazz:t,inFront:!!r,id:i};return r?(this.$frontMarkers[i]=s,this._signal(\"changeFrontMarker\")):(this.$backMarkers[i]=s,this._signal(\"changeBackMarker\")),i},this.addDynamicMarker=function(e,t){if(!e.update)return;var n=this.$markerId++;return e.id=n,e.inFront=!!t,t?(this.$frontMarkers[n]=e,this._signal(\"changeFrontMarker\")):(this.$backMarkers[n]=e,this._signal(\"changeBackMarker\")),e},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(!t)return;var n=t.inFront?this.$frontMarkers:this.$backMarkers;delete n[e],this._signal(t.inFront?\"changeFrontMarker\":\"changeBackMarker\")},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new p(null,\"ace_selected-word\",\"text\");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,n,r){typeof t!=\"number\"&&(n=t,t=e),n||(n=\"ace_step\");var i=new l(e,0,t,Infinity);return i.id=this.addMarker(i,n,\"fullLine\",r),i},this.setAnnotations=function(e){this.$annotations=e,this._signal(\"changeAnnotation\",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r?\\n)/m);t?this.$autoNewLine=t[1]:this.$autoNewLine=\"\\n\"},this.getWordRange=function(e,t){var n=this.getLine(e),r=!1;t>0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\\s+$/.test(n.slice(t-1,t+1)))var i=/\\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(o<n.length&&n.charAt(o).match(i))o++;return new l(e,s,e,o)},this.getAWordRange=function(e,t){var n=this.getWordRange(e,t),r=this.getLine(n.end.row);while(r.charAt(n.end.column).match(/[ \\t]/))n.end.column+=1;return n},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption(\"useWorker\",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal(\"tokenizerUpdate\",e)},this.$modes=o.$modes,this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&typeof e==\"object\"){if(e.getTokenizer)return this.$onChangeMode(e);var n=e,r=n.path}else r=e||\"ace/mode/text\";this.$modes[\"ace/mode/text\"]||(this.$modes[\"ace/mode/text\"]=new f);if(this.$modes[r]&&!n){this.$onChangeMode(this.$modes[r]),t&&t();return}this.$modeId=r,o.loadModule([\"mode\",r],function(e){if(this.$modeId!==r)return t&&t();this.$modes[r]&&!n?this.$onChangeMode(this.$modes[r]):e&&e.Mode&&(e=new e.Mode(n),n||(this.$modes[r]=e,e.$id=r),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes[\"ace/mode/text\"],!0)},this.$onChangeMode=function(e,t){t||(this.$modeId=e.$id);if(this.$mode===e)return;this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var n=e.getTokenizer();if(n.addEventListener!==undefined){var r=this.onReloadTokenizer.bind(this);n.addEventListener(\"update\",r)}if(!this.bgTokenizer){this.bgTokenizer=new h(n);var i=this;this.bgTokenizer.addEventListener(\"update\",function(e){i._signal(\"tokenizerUpdate\",e)})}else this.bgTokenizer.setTokenizer(n);this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit(\"changeMode\"))},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn(\"Could not load worker\",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){if(this.$scrollTop===e||isNaN(e))return;this.$scrollTop=e,this._signal(\"changeScrollTop\",e)},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){if(this.$scrollLeft===e||isNaN(e))return;this.$scrollLeft=e,this._signal(\"changeScrollLeft\",e)},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(this.lineWidgetsWidth!=null)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;a<u;a++){if(a>o){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=e.length-1;n!=-1;n--){var r=e[n];r.action==\"insert\"||r.action==\"remove\"?this.doc.revertDelta(r):r.folds&&this.addFolds(r.folds)}!t&&this.$undoSelect&&(e.selectionBefore?this.selection.fromJSON(e.selectionBefore):this.selection.setRange(this.$getUndoSelection(e,!0))),this.$fromUndo=!1},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;for(var n=0;n<e.length;n++){var r=e[n];(r.action==\"insert\"||r.action==\"remove\")&&this.doc.applyDelta(r)}!t&&this.$undoSelect&&(e.selectionAfter?this.selection.fromJSON(e.selectionAfter):this.selection.setRange(this.$getUndoSelection(e,!1))),this.$fromUndo=!1},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t){function n(e){return t?e.action!==\"insert\":e.action===\"insert\"}var r,i,s;for(var o=0;o<e.length;o++){var u=e[o];if(!u.start)continue;if(!r){n(u)?(r=l.fromPoints(u.start,u.end),s=!0):(r=l.fromPoints(u.start,u.start),s=!1);continue}n(u)?(i=u.start,r.compare(i.row,i.column)==-1&&r.setStart(i),i=u.end,r.compare(i.row,i.column)==1&&r.setEnd(i),s=!0):(i=u.start,r.compare(i.row,i.column)==-1&&(r=l.fromPoints(u.start,u.start)),s=!1)}return r},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,n){var r=this.getTextRange(e),i=this.getFoldsInRange(e),s=l.fromPoints(t,t);if(!n){this.remove(e);var o=e.start.row-e.end.row,u=o?-e.end.column:e.start.column-e.end.column;u&&(s.start.row==e.end.row&&s.start.column>e.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,f=s.start,o=f.row-a.row,u=f.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new l(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o<r;++o)if(s.charAt(o)!=\" \")break;o<r&&s.charAt(o)==\"\t\"?(n.start.column=o,n.end.column=o+1):(n.start.column=0,n.end.column=o),this.remove(n)}},this.$moveLines=function(e,t,n){e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t);if(n<0){var r=this.getRowFoldStart(e+n);if(r<0)return 0;var i=r-e}else if(n>0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new l(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal(\"changeWrapMode\")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$bidiHandler.markAsDirty(),this.$useWrapMode&&this._signal(\"changeWrapMode\")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal(\"changeWrapLimit\")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n===\"remove\"){this[t?\"$wrapData\":\"$rowLengthCache\"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c<f.length;c++){var l=f[c];l.start.row>=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n===\"remove\"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error(\"doc.getLength() and $wrapData.length have to be the same!\"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),o=this.$wrapData,u=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,o){var u;if(e!=null){u=this.$getDisplayTokens(e,a.length),u[0]=n;for(var f=1;f<u.length;f++)u[f]=s}else u=this.$getDisplayTokens(r[t].substring(o,i),a.length);a=a.concat(u)}.bind(this),f.end.row,r[f.end.row].length+1),o[f.start.row]=this.$computeWrapSplits(a,u,i),l=f.end.row+1):(a=this.$getDisplayTokens(r[l]),o[l]=this.$computeWrapSplits(a,u,i),l++)};var e=1,t=2,n=3,s=4,a=9,c=10,d=11,v=12;this.$computeWrapSplits=function(e,r,i){function g(){var t=0;if(m===0)return t;if(p)for(var n=0;n<e.length;n++){var r=e[n];if(r==c)t+=1;else{if(r!=d){if(r==v)continue;break}t+=i}}return h&&p!==!1&&(t+=i),Math.min(t,m)}function y(t){var n=t-f;for(var r=f;r<t;r++){var i=e[r];if(i===12||i===2)n-=1}o.length||(b=g(),o.indent=b),l+=n,o.push(l),f=t}if(e.length==0)return[];var o=[],u=e.length,f=0,l=0,h=this.$wrapAsCode,p=this.$indentedSoftWrap,m=r<=Math.max(2*i,8)||p===!1?0:Math.floor(r/2),b=0;while(u-f>r-b){var w=f+r-b;if(e[w-1]>=c&&e[w]>=c){y(w);continue}if(e[w]==n||e[w]==s){for(w;w!=f-1;w--)if(e[w]==n)break;if(w>f){y(w);continue}w=f+r;for(w;w<e.length;w++)if(e[w]!=s)break;if(w==e.length)break;y(w);continue}var E=Math.max(w-(r-(r>>2)),f-1);while(w>E&&e[w]<n)w--;if(h){while(w>E&&e[w]<n)w--;while(w>E&&e[w]==a)w--}else while(w>E&&e[w]<c)w--;if(w>E){y(++w);continue}w=f+r,e[w]==t&&w--,y(w-b)}return o},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o<n.length;o++){var u=n.charCodeAt(o);if(u==9){s=this.getScreenTabSize(i.length+r),i.push(d);for(var f=1;f<s;f++)i.push(v)}else u==32?i.push(c):u>39&&u<48||u>57&&u<64?i.push(a):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i<e.length;i++){r=e.charCodeAt(i),r==9?n+=this.getScreenTabSize(n):r>=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]<t.column?n.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var n=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(n)},this.getDocumentLastRowColumnPosition=function(e,t){var n=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(n,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:undefined},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t,n){if(e<0)return{row:0,column:0};var r,i=0,s=0,o,u=0,a=0,f=this.$screenRowCache,l=this.$getRowCacheIndex(f,e),c=f.length;if(c&&l>=0)var u=f[l],i=this.$docRowCache[l],h=e>f[c-1];else var h=!c;var p=this.getLength()-1,d=this.getNextFoldLine(i),v=d?d.start.row:Infinity;while(u<=e){a=this.getRowLength(i);if(u+a>e||i>=p)break;u+=a,i++,i>v&&(i=d.end.row+1,d=this.getNextFoldLine(i,d),v=d?d.start.row:Infinity),h&&(this.$docRowCache.push(i),this.$screenRowCache.push(u))}if(d&&d.start.row<=i)r=this.getFoldDisplayLine(d),i=d.start.row;else{if(u+a<=e||i>p)return{row:p,column:this.getLine(p).length};r=this.getLine(i),d=null}var m=0,g=Math.floor(e-u);if(this.$useWrapMode){var y=this.$wrapData[i];y&&(o=y[g],g>0&&y.length&&(m=y.indent,s=y[g-1]||y[y.length-1],r=r.substring(s)))}return n!==undefined&&this.$bidiHandler.isBidiRow(u+g,i,g)&&(t=this.$bidiHandler.offsetToCol(n)),s+=this.$getStringScreenWidth(r,t-m)[1],this.$useWrapMode&&s>=o&&(s=o-1),d?d.idxToPosition(s):{row:i,column:s}},this.documentToScreenPosition=function(e,t){if(typeof t==\"undefined\")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u<e){if(u>=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d=\"\";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;r<n.length;r++)t=n[r],e-=t.end.row-t.start.row}else{var i=this.$wrapData.length,s=0,r=0,t=this.$foldData[r++],o=t?t.start.row:Infinity;while(s<i){var u=this.$wrapData[s];e+=u?u.length+1:1,s++,s>o&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;s<t.length;s++){i=t.charAt(s),i===\"\t\"?r+=this.getScreenTabSize(r):r+=e.getCharacterWidth(i);if(r>n)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()},this.isFullWidth=m}.call(d.prototype),e(\"./edit_session/folding\").Folding.call(d.prototype),e(\"./edit_session/bracket_match\").BracketMatch.call(d.prototype),o.defineOptions(d.prototype,\"session\",{wrap:{set:function(e){!e||e==\"off\"?e=!1:e==\"free\"?e=!0:e==\"printMargin\"?e=-1:typeof e==\"string\"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e==\"number\"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?\"printMargin\":this.getWrapLimitRange().min?this.$wrap:\"free\":\"off\"},handlesSet:!0},wrapMethod:{set:function(e){e=e==\"auto\"?this.$mode.type!=\"text\":e!=\"text\",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0)))},initialValue:\"auto\"},indentedSoftWrap:{set:function(){this.$useWrapMode&&(this.$useWrapMode=!1,this.setUseWrapMode(!0))},initialValue:!0},firstLineNumber:{set:function(){this._signal(\"changeBreakpoint\")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal(\"changeTabSize\")},initialValue:4,handlesSet:!0},navigateWithinSoftTabs:{initialValue:!1},foldStyle:{set:function(e){this.setFoldStyle(e)},handlesSet:!0},overwrite:{set:function(e){this._signal(\"changeOverwrite\")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId},handlesSet:!0}}),t.EditSession=d}),define(\"ace/search\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/lib/oop\",\"ace/range\"],function(e,t,n){\"use strict\";function u(e,t){function n(e){return/\\w/.test(e)||t.regExp?\"\\\\b\":\"\"}return n(e[0])+e+n(e[e.length-1])}var r=e(\"./lib/lang\"),i=e(\"./lib/oop\"),s=e(\"./range\").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i,o){return r=new s(e,n,i,o),n==o&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start)?(r=null,!1):!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;h<a;h++)if(i[c+h].search(u[h])==-1)continue e;var p=i[c],d=i[c+a-1],v=p.length-p.match(u[0])[0].length,m=d.match(u[a-1])[0].length;if(l&&l.end.row===c&&l.end.column>v)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;g<i.length;g++){var y=r.getMatchOffsets(i[g],u);for(var h=0;h<y.length;h++){var b=y[h];o.push(new s(g,b.offset,g,b.offset+b.length))}}if(n){var w=n.start.column,E=n.start.column,g=0,h=o.length-1;while(g<h&&o[g].start.column<w&&o[g].start.row==n.start.row)g++;while(g<h&&o[h].end.column>E&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g<h;g++)o[g].start.row+=n.start.row,o[g].end.row+=n.start.row}return o},this.replace=function(e,t){var n=this.$options,r=this.$assembleRegExp(n);if(n.$isMultiLine)return t;if(!r)return;var i=r.exec(e);if(!i||i[0].length!=e.length)return null;t=e.replace(r,t);if(n.preserveCase){t=t.split(\"\");for(var s=Math.min(e.length,e.length);s--;){var o=e[s];o&&o.toLowerCase()!=o?t[s]=t[s].toUpperCase():t[s]=t[s].toLowerCase()}t=t.join(\"\")}return t},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var n=e.needle;if(!e.needle)return e.re=!1;e.regExp||(n=r.escapeRegExp(n)),e.wholeWord&&(n=u(n,e));var i=e.caseSensitive?\"gm\":\"gmi\";e.$isMultiLine=!t&&/[\\n\\r]/.test(n);if(e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(n,i);try{var s=new RegExp(n,i)}catch(o){s=!1}return e.re=s},this.$assembleMultilineRegExp=function(e,t){var n=e.replace(/\\r\\n|\\r|\\n/g,\"$\\n^\").split(\"\\n\"),r=[];for(var i=0;i<n.length;i++)try{r.push(new RegExp(n[i],t))}catch(s){return!1}return r},this.$matchIterator=function(e,t){var n=this.$assembleRegExp(t);if(!n)return!1;var r=t.backwards==1,i=t.skipCurrent!=0,s=t.range,o=t.start;o||(o=s?s[r?\"end\":\"start\"]:e.selection.getRange()),o.start&&(o=o[i!=r?\"end\":\"start\"]);var u=s?s.start.row:0,a=s?s.end.row:e.getLength()-1;if(r)var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n--;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return;if(t.wrap==0)return;for(n=a,u=o.row;n>=u;n--)if(c(n,Number.MAX_VALUE,e))return};else var f=function(e){var n=o.row;if(c(n,o.column,e))return;for(n+=1;n<=a;n++)if(c(n,0,e))return;if(t.wrap==0)return;for(n=u,a=o.row;n<=a;n++)if(c(n,0,e))return};if(t.$isMultiLine)var l=n.length,c=function(t,i,s){var o=r?t-l+1:t;if(o<0)return;var u=e.getLine(o),a=u.search(n[0]);if(!r&&a<i||a===-1)return;for(var f=1;f<l;f++){u=e.getLine(o+f);if(u.search(n[f])==-1)return}var c=u.match(n[l-1])[0].length;if(r&&c>i)return;if(s(o,a,o+l-1,c))return!0};else if(r)var c=function(t,r,i){var s=e.getLine(t),o=[],u,a=0;n.lastIndex=0;while(u=n.exec(s)){var f=u[0].length;a=u.index;if(!f){if(a>=s.length)break;n.lastIndex=a+=1}if(u.index+f>r)break;o.push(u.index,f)}for(var l=o.length-1;l>=0;l-=2){var c=o[l-1],f=o[l];if(i(t,c,t,c+f))return!0}};else var c=function(t,r,i){var s=e.getLine(t),o,u;n.lastIndex=r;while(u=n.exec(s)){var a=u[0].length;o=u.index;if(i(t,o,t,o+a))return!0;if(!a){n.lastIndex=o+=1;if(o>=s.length)return!1}}};return{forEach:f}}}).call(o.prototype),t.Search=o}),define(\"ace/keyboard/hash_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/keys\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";function o(e,t){this.platform=t||(i.isMac?\"mac\":\"win\"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e(\"../lib/keys\"),i=e(\"../lib/useragent\"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e==\"object\"&&e.bindKey&&e.bindKey.position||(e.isDefault?-100:0)}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e==\"string\"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e==\"object\"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t==\"function\")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split(\"|\").forEach(function(e){var r=\"\";if(e.indexOf(\" \")!=-1){var i=e.split(/\\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?\" \":\"\")+n,this._addCommandToBinding(r,\"chainKeys\")},this),r+=\" \"}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!=\"number\"&&(r=e(n));var o=i[t];for(s=0;s<o.length;s++){var u=o[s],a=e(u);if(a>r)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n==\"string\")return this.bindKey(n,t);typeof n==\"function\"&&(n={exec:n});if(typeof n!=\"object\")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\\-\\+]([\\-\\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]==\"shift\")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!=\"undefined\"&&console.error(\"invalid modifier \"+t[o]+\" in \"+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=\" \"+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o==\"chainKeys\"||o[o.length-1]==\"chainKeys\")return e.$keyChain=e.$keyChain||i,{command:\"null\"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=\"\"}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||\"\"}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),define(\"ace/commands/command_manager\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/keyboard/hash_handler\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../keyboard/hash_handler\").MultiHashHandler,s=e(\"../lib/event_emitter\").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler(\"exec\",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e==\"string\"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;if(this.$checkCommandState!=0&&e.isAvailable&&!e.isAvailable(t))return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit(\"exec\",i),this._signal(\"afterExec\",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit(\"changeStatus\"),this.recording?(this.macro.pop(),this.removeEventListener(\"exec\",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on(\"exec\",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t==\"string\"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!=\"string\"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),define(\"ace/commands/default_commands\",[\"require\",\"exports\",\"module\",\"ace/lib/lang\",\"ace/config\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t){return{win:e,mac:t}}var r=e(\"../lib/lang\"),i=e(\"../config\"),s=e(\"../range\").Range;t.commands=[{name:\"showSettingsMenu\",bindKey:o(\"Ctrl-,\",\"Command-,\"),exec:function(e){i.loadModule(\"ace/ext/settings_menu\",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:\"goToNextError\",bindKey:o(\"Alt-E\",\"F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"goToPreviousError\",bindKey:o(\"Alt-Shift-E\",\"Shift-F4\"),exec:function(e){i.loadModule(\"./ext/error_marker\",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:\"animate\",readOnly:!0},{name:\"selectall\",bindKey:o(\"Ctrl-A\",\"Command-A\"),exec:function(e){e.selectAll()},readOnly:!0},{name:\"centerselection\",bindKey:o(null,\"Ctrl-L\"),exec:function(e){e.centerSelection()},readOnly:!0},{name:\"gotoline\",bindKey:o(\"Ctrl-L\",\"Command-L\"),exec:function(e,t){typeof t!=\"number\"&&(t=parseInt(prompt(\"Enter line number:\"),10)),isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:\"fold\",bindKey:o(\"Alt-L|Ctrl-F1\",\"Command-Alt-L|Command-F1\"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"unfold\",bindKey:o(\"Alt-Shift-L|Ctrl-Shift-F1\",\"Command-Alt-Shift-L|Command-Shift-F1\"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleFoldWidget\",bindKey:o(\"F2\",\"F2\"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"toggleParentFoldWidget\",bindKey:o(\"Alt-F2\",\"Alt-F2\"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"foldall\",bindKey:o(null,\"Ctrl-Command-Option-0\"),exec:function(e){e.session.foldAll()},scrollIntoView:\"center\",readOnly:!0},{name:\"foldOther\",bindKey:o(\"Alt-0\",\"Command-Option-0\"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:\"center\",readOnly:!0},{name:\"unfoldall\",bindKey:o(\"Alt-Shift-0\",\"Command-Option-Shift-0\"),exec:function(e){e.session.unfold()},scrollIntoView:\"center\",readOnly:!0},{name:\"findnext\",bindKey:o(\"Ctrl-K\",\"Command-G\"),exec:function(e){e.findNext()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"findprevious\",bindKey:o(\"Ctrl-Shift-K\",\"Command-Shift-G\"),exec:function(e){e.findPrevious()},multiSelectAction:\"forEach\",scrollIntoView:\"center\",readOnly:!0},{name:\"selectOrFindNext\",bindKey:o(\"Alt-K\",\"Ctrl-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:\"selectOrFindPrevious\",bindKey:o(\"Alt-Shift-K\",\"Ctrl-Shift-G\"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:\"find\",bindKey:o(\"Ctrl-F\",\"Command-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e)})},readOnly:!0},{name:\"overwrite\",bindKey:\"Insert\",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:\"selecttostart\",bindKey:o(\"Ctrl-Shift-Home\",\"Command-Shift-Home|Command-Shift-Up\"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotostart\",bindKey:o(\"Ctrl-Home\",\"Command-Home|Command-Up\"),exec:function(e){e.navigateFileStart()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectup\",bindKey:o(\"Shift-Up\",\"Shift-Up|Ctrl-Shift-P\"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golineup\",bindKey:o(\"Up\",\"Up|Ctrl-P\"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttoend\",bindKey:o(\"Ctrl-Shift-End\",\"Command-Shift-End|Command-Shift-Down\"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"gotoend\",bindKey:o(\"Ctrl-End\",\"Command-End|Command-Down\"),exec:function(e){e.navigateFileEnd()},multiSelectAction:\"forEach\",readOnly:!0,scrollIntoView:\"animate\",aceCommandGroup:\"fileJump\"},{name:\"selectdown\",bindKey:o(\"Shift-Down\",\"Shift-Down|Ctrl-Shift-N\"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"golinedown\",bindKey:o(\"Down\",\"Down|Ctrl-N\"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordleft\",bindKey:o(\"Ctrl-Shift-Left\",\"Option-Shift-Left\"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordleft\",bindKey:o(\"Ctrl-Left\",\"Option-Left\"),exec:function(e){e.navigateWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolinestart\",bindKey:o(\"Alt-Shift-Left\",\"Command-Shift-Left|Ctrl-Shift-A\"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolinestart\",bindKey:o(\"Alt-Left|Home\",\"Command-Left|Home|Ctrl-A\"),exec:function(e){e.navigateLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectleft\",bindKey:o(\"Shift-Left\",\"Shift-Left|Ctrl-Shift-B\"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoleft\",bindKey:o(\"Left\",\"Left|Ctrl-B\"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectwordright\",bindKey:o(\"Ctrl-Shift-Right\",\"Option-Shift-Right\"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotowordright\",bindKey:o(\"Ctrl-Right\",\"Option-Right\"),exec:function(e){e.navigateWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selecttolineend\",bindKey:o(\"Alt-Shift-Right\",\"Command-Shift-Right|Shift-End|Ctrl-Shift-E\"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotolineend\",bindKey:o(\"Alt-Right|End\",\"Command-Right|End|Ctrl-E\"),exec:function(e){e.navigateLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectright\",bindKey:o(\"Shift-Right\",\"Shift-Right\"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"gotoright\",bindKey:o(\"Right\",\"Right|Ctrl-F\"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectpagedown\",bindKey:\"Shift-PageDown\",exec:function(e){e.selectPageDown()},readOnly:!0},{name:\"pagedown\",bindKey:o(null,\"Option-PageDown\"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:\"gotopagedown\",bindKey:o(\"PageDown\",\"PageDown|Ctrl-V\"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:\"selectpageup\",bindKey:\"Shift-PageUp\",exec:function(e){e.selectPageUp()},readOnly:!0},{name:\"pageup\",bindKey:o(null,\"Option-PageUp\"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:\"gotopageup\",bindKey:\"PageUp\",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:\"scrollup\",bindKey:o(\"Ctrl-Up\",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"scrolldown\",bindKey:o(\"Ctrl-Down\",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:\"selectlinestart\",bindKey:\"Shift-Home\",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectlineend\",bindKey:\"Shift-End\",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"togglerecording\",bindKey:o(\"Ctrl-Alt-E\",\"Command-Option-E\"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:\"replaymacro\",bindKey:o(\"Ctrl-Shift-E\",\"Command-Shift-E\"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:\"jumptomatching\",bindKey:o(\"Ctrl-P\",\"Ctrl-P\"),exec:function(e){e.jumpToMatching()},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"selecttomatching\",bindKey:o(\"Ctrl-Shift-P\",\"Ctrl-Shift-P\"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"expandToMatching\",bindKey:o(\"Ctrl-Shift-M\",\"Ctrl-Shift-M\"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:\"forEach\",scrollIntoView:\"animate\",readOnly:!0},{name:\"passKeysToBrowser\",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:\"copy\",exec:function(e){},readOnly:!0},{name:\"cut\",exec:function(e){var t=e.$copyWithEmptySelection&&e.selection.isEmpty(),n=t?e.selection.getLineRange():e.selection.getRange();e._emit(\"cut\",n),n.isEmpty()||e.session.remove(n),e.clearSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"paste\",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:\"cursor\"},{name:\"removeline\",bindKey:o(\"Ctrl-D\",\"Command-D\"),exec:function(e){e.removeLines()},scrollIntoView:\"cursor\",multiSelectAction:\"forEachLine\"},{name:\"duplicateSelection\",bindKey:o(\"Ctrl-Shift-D\",\"Command-Shift-D\"),exec:function(e){e.duplicateSelection()},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"sortlines\",bindKey:o(\"Ctrl-Alt-S\",\"Command-Alt-S\"),exec:function(e){e.sortLines()},scrollIntoView:\"selection\",multiSelectAction:\"forEachLine\"},{name:\"togglecomment\",bindKey:o(\"Ctrl-/\",\"Command-/\"),exec:function(e){e.toggleCommentLines()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"toggleBlockComment\",bindKey:o(\"Ctrl-Shift-/\",\"Command-Shift-/\"),exec:function(e){e.toggleBlockComment()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"modifyNumberUp\",bindKey:o(\"Ctrl-Shift-Up\",\"Alt-Shift-Up\"),exec:function(e){e.modifyNumber(1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"modifyNumberDown\",bindKey:o(\"Ctrl-Shift-Down\",\"Alt-Shift-Down\"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:\"cursor\",multiSelectAction:\"forEach\"},{name:\"replace\",bindKey:o(\"Ctrl-H\",\"Command-Option-F\"),exec:function(e){i.loadModule(\"ace/ext/searchbox\",function(t){t.Search(e,!0)})}},{name:\"undo\",bindKey:o(\"Ctrl-Z\",\"Command-Z\"),exec:function(e){e.undo()}},{name:\"redo\",bindKey:o(\"Ctrl-Shift-Z|Ctrl-Y\",\"Command-Shift-Z|Command-Y\"),exec:function(e){e.redo()}},{name:\"copylinesup\",bindKey:o(\"Alt-Shift-Up\",\"Command-Option-Up\"),exec:function(e){e.copyLinesUp()},scrollIntoView:\"cursor\"},{name:\"movelinesup\",bindKey:o(\"Alt-Up\",\"Option-Up\"),exec:function(e){e.moveLinesUp()},scrollIntoView:\"cursor\"},{name:\"copylinesdown\",bindKey:o(\"Alt-Shift-Down\",\"Command-Option-Down\"),exec:function(e){e.copyLinesDown()},scrollIntoView:\"cursor\"},{name:\"movelinesdown\",bindKey:o(\"Alt-Down\",\"Option-Down\"),exec:function(e){e.moveLinesDown()},scrollIntoView:\"cursor\"},{name:\"del\",bindKey:o(\"Delete\",\"Delete|Ctrl-D|Shift-Delete\"),exec:function(e){e.remove(\"right\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"backspace\",bindKey:o(\"Shift-Backspace|Backspace\",\"Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H\"),exec:function(e){e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"cut_or_delete\",bindKey:o(\"Shift-Delete\",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove(\"left\")},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestart\",bindKey:o(\"Alt-Backspace\",\"Command-Backspace\"),exec:function(e){e.removeToLineStart()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineend\",bindKey:o(\"Alt-Delete\",\"Ctrl-K|Command-Delete\"),exec:function(e){e.removeToLineEnd()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolinestarthard\",bindKey:o(\"Ctrl-Shift-Backspace\",null),exec:function(e){var t=e.selection.getRange();t.start.column=0,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removetolineendhard\",bindKey:o(\"Ctrl-Shift-Delete\",null),exec:function(e){var t=e.selection.getRange();t.end.column=Number.MAX_VALUE,e.session.remove(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordleft\",bindKey:o(\"Ctrl-Backspace\",\"Alt-Backspace|Ctrl-Alt-Backspace\"),exec:function(e){e.removeWordLeft()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"removewordright\",bindKey:o(\"Ctrl-Delete\",\"Alt-Delete\"),exec:function(e){e.removeWordRight()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"outdent\",bindKey:o(\"Shift-Tab\",\"Shift-Tab\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"indent\",bindKey:o(\"Tab\",\"Tab\"),exec:function(e){e.indent()},multiSelectAction:\"forEach\",scrollIntoView:\"selectionPart\"},{name:\"blockoutdent\",bindKey:o(\"Ctrl-[\",\"Ctrl-[\"),exec:function(e){e.blockOutdent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"blockindent\",bindKey:o(\"Ctrl-]\",\"Ctrl-]\"),exec:function(e){e.blockIndent()},multiSelectAction:\"forEachLine\",scrollIntoView:\"selectionPart\"},{name:\"insertstring\",exec:function(e,t){e.insert(t)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"inserttext\",exec:function(e,t){e.insert(r.stringRepeat(t.text||\"\",t.times||1))},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"splitline\",bindKey:o(null,\"Ctrl-O\"),exec:function(e){e.splitLine()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"transposeletters\",bindKey:o(\"Alt-Shift-X\",\"Ctrl-T\"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:\"cursor\"},{name:\"touppercase\",bindKey:o(\"Ctrl-U\",\"Ctrl-U\"),exec:function(e){e.toUpperCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"tolowercase\",bindKey:o(\"Ctrl-Shift-U\",\"Ctrl-Shift-U\"),exec:function(e){e.toLowerCase()},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\"},{name:\"expandtoline\",bindKey:o(\"Ctrl-Shift-L\",\"Command-Shift-L\"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:\"forEach\",scrollIntoView:\"cursor\",readOnly:!0},{name:\"joinlines\",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\\n\\s*/,\" \").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=\" \"+c),f+=c}i.row+1<e.session.doc.getLength()-1&&(f+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new s(n.row,0,i.row+2,0),f),a>0?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:\"forEach\",readOnly:!0},{name:\"invertSelection\",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o<r.length;o++)o==r.length-1&&(r[o].end.row!==t||r[o].end.column!==n)&&i.push(new s(r[o].end.row,r[o].end.column,t,n)),o===0?(r[o].start.row!==0||r[o].start.column!==0)&&i.push(new s(0,0,r[o].start.row,r[o].start.column)):i.push(new s(r[o-1].end.row,r[o-1].end.column,r[o].start.row,r[o].start.column));e.exitMultiSelectMode(),e.clearSelection();for(var o=0;o<i.length;o++)e.selection.addRange(i[o],!1)},readOnly:!0,scrollIntoView:\"none\"}]}),define(\"ace/clipboard\",[\"require\",\"exports\",\"module\"],function(e,t,n){\"use strict\";n.exports={lineMode:!1}}),define(\"ace/editor\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/useragent\",\"ace/keyboard/textinput\",\"ace/mouse/mouse_handler\",\"ace/mouse/fold_handler\",\"ace/keyboard/keybinding\",\"ace/edit_session\",\"ace/search\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/commands/command_manager\",\"ace/commands/default_commands\",\"ace/config\",\"ace/token_iterator\",\"ace/clipboard\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/lang\"),o=e(\"./lib/useragent\"),u=e(\"./keyboard/textinput\").TextInput,a=e(\"./mouse/mouse_handler\").MouseHandler,f=e(\"./mouse/fold_handler\").FoldHandler,l=e(\"./keyboard/keybinding\").KeyBinding,c=e(\"./edit_session\").EditSession,h=e(\"./search\").Search,p=e(\"./range\").Range,d=e(\"./lib/event_emitter\").EventEmitter,v=e(\"./commands/command_manager\").CommandManager,m=e(\"./commands/default_commands\").commands,g=e(\"./config\"),y=e(\"./token_iterator\").TokenIterator,b=e(\"./clipboard\"),w=function(e,t,n){var r=e.getContainerElement();this.container=r,this.renderer=e,this.id=\"editor\"+ ++w.$uid,this.commands=new v(o.isMac?\"mac\":\"win\",m),typeof document==\"object\"&&(this.textInput=new u(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.$mouseHandler=new a(this),new f(this)),this.keyBinding=new l(this),this.$search=(new h).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on(\"exec\",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=s.delayedCall(function(){this._signal(\"input\",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on(\"change\",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||n&&n.session||new c(\"\")),g.resetOptions(this),n&&this.setOptions(n),g._signal(\"editor\",this)};w.$uid=0,function(){r.implement(this,d),this.$initOperationListeners=function(){this.commands.on(\"exec\",this.startOperation.bind(this),!0),this.commands.on(\"afterExec\",this.endOperation.bind(this),!0),this.$opResetTimer=s.delayedCall(this.endOperation.bind(this,!0)),this.on(\"change\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.docChanged=!0}.bind(this),!0),this.on(\"changeSelection\",function(){this.curOp||(this.startOperation(),this.curOp.selectionBefore=this.$lastSel),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp=this.session.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.selectionBefore=this.selection.toJSON()},this.endOperation=function(e){if(this.curOp){if(e&&e.returnValue===!1)return this.curOp=null;if(e==1&&this.curOp.command&&this.curOp.command.name==\"mouse\")return;this._signal(\"beforeEndOperation\");if(!this.curOp)return;var t=this.curOp.command,n=t&&t.scrollIntoView;if(n){switch(n){case\"center-animate\":n=\"animate\";case\"center\":this.renderer.scrollCursorIntoView(null,.5);break;case\"animate\":case\"cursor\":this.renderer.scrollCursorIntoView();break;case\"selectionPart\":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n==\"animate\"&&this.renderer.animateScrolling(this.curOp.scrollTop)}var s=this.selection.toJSON();this.curOp.selectionAfter=s,this.$lastSel=this.selection.toJSON(),this.session.getUndoManager().addSelection(s),this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=[\"backspace\",\"del\",\"insertstring\"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name==\"insertstring\"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\\s/.test(i)||/\\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!=\"always\"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e==\"string\"&&e!=\"ace\"){this.$keybindingId=e;var n=this;g.loadModule([\"keybinding\",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off(\"change\",this.$onDocumentChange),this.session.off(\"changeMode\",this.$onChangeMode),this.session.off(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.session.off(\"changeTabSize\",this.$onChangeTabSize),this.session.off(\"changeWrapLimit\",this.$onChangeWrapLimit),this.session.off(\"changeWrapMode\",this.$onChangeWrapMode),this.session.off(\"changeFold\",this.$onChangeFold),this.session.off(\"changeFrontMarker\",this.$onChangeFrontMarker),this.session.off(\"changeBackMarker\",this.$onChangeBackMarker),this.session.off(\"changeBreakpoint\",this.$onChangeBreakpoint),this.session.off(\"changeAnnotation\",this.$onChangeAnnotation),this.session.off(\"changeOverwrite\",this.$onCursorChange),this.session.off(\"changeScrollTop\",this.$onScrollTopChange),this.session.off(\"changeScrollLeft\",this.$onScrollLeftChange);var n=this.session.getSelection();n.off(\"changeCursor\",this.$onCursorChange),n.off(\"changeSelection\",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on(\"change\",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on(\"changeMode\",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on(\"tokenizerUpdate\",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on(\"changeTabSize\",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on(\"changeWrapLimit\",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on(\"changeWrapMode\",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on(\"changeFold\",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on(\"changeFrontMarker\",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on(\"changeBackMarker\",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on(\"changeBreakpoint\",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on(\"changeAnnotation\",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on(\"changeOverwrite\",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on(\"changeScrollTop\",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on(\"changeScrollLeft\",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on(\"changeCursor\",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on(\"changeSelection\",this.$onSelectionChange),this.onChangeMode(),this.onCursorChange(),this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal(\"changeSession\",{session:e,oldSession:t}),this.curOp=null,t&&t._signal(\"changeEditor\",{oldEditor:this}),e&&e._signal(\"changeEditor\",{editor:this}),e&&e.bgTokenizer&&e.bgTokenizer.scheduleStart()},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption(\"fontSize\")||i.computedStyle(this.container).fontSize},this.setFontSize=function(e){this.setOption(\"fontSize\",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,\"ace_bracket\",\"text\"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf(\"tag-open\")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value==\"<\"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(i&&o>=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf(\"tag-name\")!==-1&&(u.value===\"<\"?o++:u.value===\"</\"&&o--);while(u&&o<=0);r.stepForward()}if(!i){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}var a=r.getCurrentTokenRow(),f=r.getCurrentTokenColumn(),l=new p(a,f,a,f+i.value.length),c=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&c!=undefined&&l.compareRange(c.range)!==0&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),t.$tagHighlight||(t.$tagHighlight=t.addMarker(l,\"ace_bracket\",\"text\"))},50)},this.focus=function(){var e=this;setTimeout(function(){e.isFocused()||e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){if(this.$isFocused)return;this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit(\"focus\",e)},this.onBlur=function(e){if(!this.$isFocused)return;this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit(\"blur\",e)},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,n=e.start.row==e.end.row?e.end.row:Infinity;this.renderer.updateLines(e.start.row,n,t),this._signal(\"change\",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal(\"changeSelection\")},this.$updateHighlightActiveLine=function(){var e=this.getSession(),t;if(this.$highlightActiveLine){if(this.$selectionStyle!=\"line\"||!this.selection.isMultiLine())t=this.getCursorPosition();this.renderer.theme&&this.renderer.theme.$selectionColorConflict&&!this.selection.isEmpty()&&(t=!1),this.renderer.$maxLines&&this.session.getLength()===1&&!(this.renderer.$minLines>1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,\"ace_active-line\",\"screenLine\"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal(\"changeBackMarker\"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,\"ace_selection\",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal(\"changeSelection\")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column,r=t.end.column,i=e.getLine(t.start.row),s=i.substring(n,r);if(s.length>5e3||!/[\\w\\d]/.test(s))return;var o=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s}),u=i.substring(n-1,r+1);if(!o.test(u))return;return o},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit(\"changeMode\",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText(),t=this.session.doc.getNewLineCharacter(),n=!1;if(!e&&this.$copyWithEmptySelection){n=!0;var r=this.selection.getAllRanges();for(var i=0;i<r.length;i++){var s=r[i];if(i&&r[i-1].start.row==s.start.row)continue;e+=this.session.getLine(s.start.row)+t}}var o={text:e};return this._signal(\"copy\",o),b.lineMode=n?o.text:\"\",o.text},this.onCopy=function(){this.commands.exec(\"copy\",this)},this.onCut=function(){this.commands.exec(\"cut\",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec(\"paste\",this,n)},this.$handlePaste=function(e){typeof e==\"string\"&&(e={text:e}),this._signal(\"paste\",e);var t=e.text,n=t==b.lineMode,r=this.session;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)n?r.insert({row:this.selection.lead.row,column:0},t):this.insert(t);else if(n)this.selection.rangeList.ranges.forEach(function(e){r.insert({row:e.start.row,column:0},t)});else{var i=t.split(/\\r\\n|\\r|\\n/),s=this.selection.rangeList.ranges;if(i.length>s.length||i.length<2||!i[1])return this.commands.exec(\"insertstring\",this,t);for(var o=s.length;o--;){var u=s[o];u.isEmpty()||r.remove(u),r.insert(u.start,i[o])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),\"insertion\",this,n,e);s&&(e!==s.text&&(this.inVirtualSelectionMode||(this.session.mergeUndoDeltas=!1,this.mergeNextCommand=!1)),e=s.text)}e==\"\t\"&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()&&e.indexOf(\"\\n\")==-1){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e==\"\\n\"||e==\"\\r\\n\"){var u=n.getLine(i.row);if(i.column>u.search(/\\S|$/)){var a=u.substr(i.column).search(/\\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e,t){if(!t)return this.keyBinding.onTextInput(e);this.startOperation({command:{name:\"insertstring\"}});var n=this.applyComposition.bind(this,e,t);this.selection.rangeCount?this.forEachSelection(n):n(),this.endOperation()},this.applyComposition=function(e,t){if(t.extendLeft||t.extendRight){var n=this.selection.getRange();n.start.column-=t.extendLeft,n.end.column+=t.extendRight,this.selection.setRange(n),!e&&!n.isEmpty()&&this.remove()}(e||!this.selection.isEmpty())&&this.insert(e,!0);if(t.restoreStart||t.restoreEnd){var n=this.selection.getRange();n.start.column-=t.restoreStart,n.end.column-=t.restoreEnd,this.selection.setRange(n)}},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption(\"scrollSpeed\",e)},this.getScrollSpeed=function(){return this.getOption(\"scrollSpeed\")},this.setDragDelay=function(e){this.setOption(\"dragDelay\",e)},this.getDragDelay=function(){return this.getOption(\"dragDelay\")},this.setSelectionStyle=function(e){this.setOption(\"selectionStyle\",e)},this.getSelectionStyle=function(){return this.getOption(\"selectionStyle\")},this.setHighlightActiveLine=function(e){this.setOption(\"highlightActiveLine\",e)},this.getHighlightActiveLine=function(){return this.getOption(\"highlightActiveLine\")},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.setHighlightSelectedWord=function(e){this.setOption(\"highlightSelectedWord\",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption(\"readOnly\",e)},this.getReadOnly=function(){return this.getOption(\"readOnly\")},this.setBehavioursEnabled=function(e){this.setOption(\"behavioursEnabled\",e)},this.getBehavioursEnabled=function(){return this.getOption(\"behavioursEnabled\")},this.setWrapBehavioursEnabled=function(e){this.setOption(\"wrapBehavioursEnabled\",e)},this.getWrapBehavioursEnabled=function(){return this.getOption(\"wrapBehavioursEnabled\")},this.setShowFoldWidgets=function(e){this.setOption(\"showFoldWidgets\",e)},this.getShowFoldWidgets=function(){return this.getOption(\"showFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.remove=function(e){this.selection.isEmpty()&&(e==\"left\"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,\"deletion\",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]==\"\\n\"){var o=n.getLine(t.end.row);/^\\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert(\"\\n\"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;t<n.length?(r=n.charAt(t)+n.charAt(t-1),i=new p(e.row,t-1,e.row,t+1)):(r=n.charAt(t-1)+n.charAt(t-2),i=new p(e.row,t-2,e.row,t)),this.session.replace(i,r),this.session.selection.moveToPosition(i.end)},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),n=this.session.getTextRange(t);this.session.replace(t,n.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(t.start.row<t.end.row){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\\s+$/.test(r)){var n=this.$getSelectedRows();e.indentRows(n.first,n.last,\"\t\");return}}var i=e.getLine(t.start.row),o=t.start,u=e.getTabSize(),a=e.documentToScreenColumn(o.row,o.column);if(this.session.getUseSoftTabs())var f=u-a%u,l=s.stringRepeat(\" \",f);else{var f=a%u;while(i[t.start.column-1]==\" \"&&f)t.start.column--,f--;this.selection.setSelectionRange(t),l=\"\t\"}return this.insert(l)},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,\"\t\")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,n=[];for(var r=e.first;r<=e.last;r++)n.push(t.getLine(r));n.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});var i=new p(0,0,0,0);for(var r=e.first;r<=e.last;r++){var s=t.getLine(r);i.start.row=r,i.end.row=r,i.end.column=s.length,t.replace(i,n[r-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\\-]?[0-9]+(?:\\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex<t){var i=n.exec(r);if(i.index<=t&&i.index+i[0].length>=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(\".\")>=0?s.start+s.value.indexOf(\".\")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&n<o?e*=Math.pow(10,s.end-n-1):e*=Math.pow(10,s.end-n),a+=e,a/=Math.pow(10,u);var f=a.toFixed(u),l=new p(t,s.start,t,s.end);this.session.replace(l,f),this.moveCursorTo(t,Math.max(s.start+1,n+f.length-s.value.length))}}else this.toggleWord()},this.$toggleWordPairs=[[\"first\",\"last\"],[\"true\",\"false\"],[\"yes\",\"no\"],[\"width\",\"height\"],[\"top\",\"bottom\"],[\"right\",\"left\"],[\"on\",\"off\"],[\"x\",\"y\"],[\"get\",\"set\"],[\"max\",\"min\"],[\"horizontal\",\"vertical\"],[\"show\",\"hide\"],[\"add\",\"remove\"],[\"up\",\"down\"],[\"before\",\"after\"],[\"even\",\"odd\"],[\"inside\",\"outside\"],[\"next\",\"previous\"],[\"increase\",\"decrease\"],[\"attach\",\"detach\"],[\"&&\",\"||\"],[\"==\",\"!=\"]],this.toggleWord=function(){var e=this.selection.getCursor().row,t=this.selection.getCursor().column;this.selection.selectWord();var n=this.getSelectedText(),r=this.selection.getWordRange().start.column,i=n.replace(/([a-z]+|[A-Z]+)(?=[A-Z_]|$)/g,\"$1 \").split(/\\s/),o=t-r-1;o<0&&(o=0);var u=0,a=0,f=this;n.match(/[A-Za-z0-9_]+/)&&i.forEach(function(t,i){a=u+t.length,o>=u&&o<=a&&(n=t,f.selection.clearSelection(),f.moveCursorTo(e,u+r),f.selection.selectTo(e,a+r)),u=a});var l=this.$toggleWordPairs,c;for(var h=0;h<l.length;h++){var p=l[h];for(var d=0;d<=1;d++){var v=+!d,m=n.match(new RegExp(\"^\\\\s?_?(\"+s.escapeRegExp(p[d])+\")\\\\s?$\",\"i\"));if(m){var g=n.match(new RegExp(\"([_]|^|\\\\s)(\"+s.escapeRegExp(m[1])+\")($|\\\\s)\",\"g\"));g&&(c=n.replace(new RegExp(s.escapeRegExp(p[d]),\"i\"),function(e){var t=p[v];return e.toUpperCase()==e?t=t.toUpperCase():e.charAt(0).toUpperCase()==e.charAt(0)&&(t=t.substr(0,0)+p[v].charAt(0).toUpperCase()+t.substr(1)),t}),this.insert(c),c=\"\")}}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,n=e.getRange(),r=e.isBackwards();if(n.isEmpty()){var i=n.start.row;t.duplicateLines(i,i)}else{var s=r?n.start:n.end,o=t.insert(s,t.getTextRange(n),!1);n.start=s,n.end=o,e.setSelectionRange(n,r)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,n){return this.session.moveText(e,t,n)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var n,r,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var s=i.toOrientedRange();n=this.$getSelectedRows(s),r=this.session.$moveLines(n.first,n.last,t?0:e),t&&e==-1&&(r=0),s.moveBy(r,0),i.fromOrientedRange(s)}else{var o=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;var u=0,a=0,f=o.length;for(var l=0;l<f;l++){var c=l;o[l].moveBy(u,0),n=this.$getSelectedRows(o[l]);var h=n.first,p=n.last;while(++l<f){a&&o[l].moveBy(a,0);var d=this.$getSelectedRows(o[l]);if(t&&d.first!=p)break;if(!t&&d.first>p+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(e)},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection());var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.selection.selectAll()},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={\")\":\"(\",\"(\":\"(\",\"]\":\"[\",\"[\":\"[\",\"{\":\"{\",\"}\":\"{\"};do{if(s.value.match(/[{}()\\[\\]]/g))for(;f<s.value.length&&!u;f++){if(!c[s.value[f]])continue;l=c[s.value[f]]+\".\"+s.type.replace(\"rparen\",\"lparen\"),isNaN(a[l])&&(a[l]=0);switch(s.value[f]){case\"(\":case\"[\":case\"{\":a[l]++;break;case\")\":case\"]\":case\"}\":a[l]--,a[l]===-1&&(o=\"bracket\",u=!0)}}else s.type.indexOf(\"tag-name\")!==-1&&(isNaN(a[s.value])&&(a[s.value]=0),i.value===\"<\"?a[s.value]++:i.value===\"</\"&&a[s.value]--,a[s.value]===-1&&(o=\"tag\",u=!0));u||(i=s,s=r.stepForward(),f=0)}while(s&&!u);if(!o)return;var h,d;if(o===\"bracket\"){h=this.session.getBracketRange(n);if(!h){h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1,r.getCurrentTokenRow(),r.getCurrentTokenColumn()+f-1),d=h.start;if(t||d.row===n.row&&Math.abs(d.column-n.column)<2)h=this.session.getBracketRange(d)}}else if(o===\"tag\"){if(!s||s.type.indexOf(\"tag-name\")===-1)return;var v=s.value;h=new p(r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2,r.getCurrentTokenRow(),r.getCurrentTokenColumn()-2);if(h.compare(n.row,n.column)===0){u=!1;do s=i,i=r.stepBackward(),i&&(i.type.indexOf(\"tag-close\")!==-1&&h.setEnd(r.getCurrentTokenRow(),r.getCurrentTokenColumn()+1),s.value===v&&s.type.indexOf(\"tag-name\")!==-1&&(i.value===\"<\"?a[v]++:i.value===\"</\"&&a[v]--,a[v]===0&&(u=!0)));while(i&&!u)}s&&s.type.indexOf(\"tag-name\")&&(d=h.start,d.row==n.row&&Math.abs(d.column-n.column)<2&&(d=h.end))}d=h&&h.cursor||d,d&&(e?h&&t?this.selection.setRange(h):h&&h.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(d.row,d.column):this.selection.moveTo(d.row,d.column))},this.gotoLine=function(e,t,n){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,n)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorLeft()}this.clearSelection()},this.navigateRight=function(e){if(!this.selection.isEmpty()){var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}else{e=e||1;while(e--)this.selection.moveCursorRight()}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var n=this.$search.find(this.session),r=0;return n?(this.$tryReplace(n,e)&&(r=1),this.selection.setSelectionRange(n),this.renderer.scrollSelectionIntoView(n.start,n.end),r):r},this.replaceAll=function(e,t){t&&this.$search.set(t);var n=this.$search.findAll(this.session),r=0;if(!n.length)return r;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var s=n.length-1;s>=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e==\"string\"||e instanceof RegExp?t.needle=e:typeof e==\"object\"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.session.unfold(e),this.selection.setSelectionRange(e);var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.session.getUndoManager().undo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.session.getUndoManager().redo(this.session),this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal(\"destroy\",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement(\"div\"));var i=this.$scrollAnchor;i.style.cssText=\"position:absolute\",this.container.insertBefore(i,this.container.firstChild);var s=this.on(\"changeSelection\",function(){r=!0}),o=this.renderer.on(\"beforeRender\",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on(\"afterRender\",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.top<o.height&&s.top+t.top+o.lineHeight>window.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+\"px\",i.style.left=s.left+\"px\",i.style.height=o.lineHeight+\"px\",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off(\"changeSelection\",s),this.renderer.off(\"afterRender\",u),this.renderer.off(\"beforeRender\",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||\"ace\",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!=\"wide\",i.setCssClass(t.element,\"ace_slim-cursors\",/slim/.test(e))}}.call(w.prototype),g.defineOptions(w.prototype,\"editor\",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal(\"changeSelectionStyle\",{data:e})},initialValue:\"line\"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.textInput.setReadOnly(e),this.$resetCursorStyle()},initialValue:!1},copyWithEmptySelection:{set:function(e){this.textInput.setCopyWithEmptySelection(e)},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:[\"ace\",\"slim\",\"smooth\",\"wide\"],initialValue:\"ace\"},mergeUndoDeltas:{values:[!1,!0,\"always\"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.$keybindingId},handlesSet:!0},value:{set:function(e){this.session.setValue(e)},get:function(){return this.getValue()},handlesSet:!0,hidden:!0},session:{set:function(e){this.setSession(e)},get:function(){return this.session},handlesSet:!0,hidden:!0},showLineNumbers:{set:function(e){this.renderer.$gutterLayer.setShowLineNumbers(e),this.renderer.$loop.schedule(this.renderer.CHANGE_GUTTER),e&&this.$relativeLineNumbers?E.attach(this):E.detach(this)},initialValue:!0},relativeLineNumbers:{set:function(e){this.$showLineNumbers&&e?E.attach(this):E.detach(this)}},hScrollBarAlwaysVisible:\"renderer\",vScrollBarAlwaysVisible:\"renderer\",highlightGutterLine:\"renderer\",animatedScroll:\"renderer\",showInvisibles:\"renderer\",showPrintMargin:\"renderer\",printMarginColumn:\"renderer\",printMargin:\"renderer\",fadeFoldWidgets:\"renderer\",showFoldWidgets:\"renderer\",displayIndentGuides:\"renderer\",showGutter:\"renderer\",fontSize:\"renderer\",fontFamily:\"renderer\",maxLines:\"renderer\",minLines:\"renderer\",scrollPastEnd:\"renderer\",fixedWidthGutter:\"renderer\",theme:\"renderer\",hasCssTransforms:\"renderer\",maxPixelHeight:\"renderer\",useTextareaForIME:\"renderer\",scrollSpeed:\"$mouseHandler\",dragDelay:\"$mouseHandler\",dragEnabled:\"$mouseHandler\",focusTimeout:\"$mouseHandler\",tooltipFollowsMouse:\"$mouseHandler\",firstLineNumber:\"session\",overwrite:\"session\",newLineMode:\"session\",useWorker:\"session\",useSoftTabs:\"session\",navigateWithinSoftTabs:\"session\",tabSize:\"session\",wrap:\"session\",indentedSoftWrap:\"session\",foldStyle:\"session\",mode:\"session\"});var E={getText:function(e,t){return(Math.abs(e.selection.lead.row-t)||t+1+(t<9?\"\\u00b7\":\"\"))+\"\"},getWidth:function(e,t,n){return Math.max(t.toString().length,(n.lastRow+1).toString().length,2)*n.characterWidth},update:function(e,t){t.renderer.$loop.schedule(t.renderer.CHANGE_GUTTER)},attach:function(e){e.renderer.$gutterLayer.$renderer=this,e.on(\"changeSelection\",this.update),this.update(null,e)},detach:function(e){e.renderer.$gutterLayer.$renderer==this&&(e.renderer.$gutterLayer.$renderer=null),e.off(\"changeSelection\",this.update),this.update(null,e)}};t.Editor=w}),define(\"ace/undomanager\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";function i(e,t){for(var n=t;n--;){var r=e[n];if(r&&!r[0].ignore){while(n<t-1){var i=d(e[n],e[n+1]);e[n]=i[0],e[n+1]=i[1],n++}return!0}}}function a(e){var t=e.action==\"insert\",n=e.start,r=e.end,i=(r.row-n.row)*(t?1:-1),s=(r.column-n.column)*(t?1:-1);t&&(r=n);for(var o in this.marks){var a=this.marks[o],f=u(a,n);if(f<0)continue;if(f===0&&t){if(a.bias!=1){a.bias==-1;continue}f=1}var l=t?f:u(a,r);if(l>0){a.row+=i,a.column+=a.row==r.row?s:0;continue}!t&&l<=0&&(a.row=n.row,a.column=n.column,l===0&&(a.bias=1))}}function f(e){return{row:e.row,column:e.column}}function l(e){return{start:f(e.start),end:f(e.end),action:e.action,lines:e.lines.slice()}}function c(e){e=e||this;if(Array.isArray(e))return e.map(c).join(\"\\n\");var t=\"\";e.action?(t=e.action==\"insert\"?\"+\":\"-\",t+=\"[\"+e.lines+\"]\"):e.value&&(Array.isArray(e.value)?t=e.value.map(h).join(\"\\n\"):t=h(e.value)),e.start&&(t+=h(e));if(e.id||e.rev)t+=\"\t(\"+(e.id||e.rev)+\")\";return t}function h(e){return e.start.row+\":\"+e.start.column+\"=>\"+e.end.row+\":\"+e.end.column}function p(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}else if(!n&&r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.start,e.start)<=0))return null;m(e,t,1)}else if(!n&&!r)if(o(t.start,e.start)>=0)m(t,e,1);else{if(!(o(t.end,e.start)<=0))return null;m(e,t,-1)}return[t,e]}function d(e,t){for(var n=e.length;n--;)for(var r=0;r<t.length;r++)if(!p(e[n],t[r])){while(n<e.length){while(r--)p(t[r],e[n]);r=t.length,n++}return[e,t]}return e.selectionBefore=t.selectionBefore=e.selectionAfter=t.selectionAfter=null,[t,e]}function v(e,t){var n=e.action==\"insert\",r=t.action==\"insert\";if(n&&r)o(e.start,t.start)<0?m(t,e,1):m(e,t,1);else if(n&&!r)o(e.start,t.end)>=0?m(e,t,-1):o(e.start,t.start)<=0?m(t,e,1):(m(e,s.fromPoints(t.start,e.start),-1),m(t,e,1));else if(!n&&r)o(t.start,e.end)>=0?m(t,e,-1):o(t.start,e.start)<=0?m(e,t,1):(m(t,s.fromPoints(e.start,t.start),-1),m(e,t,1));else if(!n&&!r)if(o(t.start,e.end)>=0)m(t,e,-1);else{if(!(o(t.end,e.start)<=0)){var i,u;return o(e.start,t.start)<0&&(i=e,e=y(e,t.start)),o(e.end,t.end)>0&&(u=y(e,t.end)),g(t.end,e.start,e.end,-1),u&&!i&&(e.lines=u.lines,e.start=u.start,e.end=u.end,u=e),[t,i,u].filter(Boolean)}m(e,t,-1)}return[t,e]}function m(e,t,n){g(e.start,t.start,t.end,n),g(e.end,t.start,t.end,n)}function g(e,t,n,r){e.row==(r==1?t:n).row&&(e.column+=r*(n.column-t.column)),e.row+=r*(n.row-t.row)}function y(e,t){var n=e.lines,r=e.end;e.end=f(t);var i=e.end.row-e.start.row,s=n.splice(i,n.length),o=i?t.column:t.column-e.start.column;n.push(s[0].substring(0,o)),s[0]=s[0].substr(o);var u={start:f(t),end:r,lines:s,action:e.action};return u}function b(e,t){t=l(t);for(var n=e.length;n--;){var r=e[n];for(var i=0;i<r.length;i++){var s=r[i],o=v(s,t);t=o[0],o.length!=2&&(o[2]?(r.splice(i+1,1,o[1],o[2]),i++):o[1]||(r.splice(i,1),i--))}r.length||e.splice(n,1)}return e}function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];for(var i=0;i<r.length;i++)b(e,r[i])}}var r=function(){this.$maxRev=0,this.$fromUndo=!1,this.reset()};(function(){this.addSession=function(e){this.$session=e},this.add=function(e,t,n){if(this.$fromUndo)return;if(e==this.$lastDelta)return;if(t===!1||!this.lastDeltas)this.lastDeltas=[],this.$undoStack.push(this.lastDeltas),e.id=this.$rev=++this.$maxRev;if(e.action==\"remove\"||e.action==\"insert\")this.$lastDelta=e;this.lastDeltas.push(e)},this.addSelection=function(e,t){this.selections.push({value:e,rev:t||this.$rev})},this.startNewGroup=function(){return this.lastDeltas=null,this.$rev},this.markIgnored=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack;for(var r=n.length;r--;){var i=n[r][0];if(i.id<=e)break;i.id<t&&(i.ignore=!0)}this.lastDeltas=null},this.getSelection=function(e,t){var n=this.selections;for(var r=n.length;r--;){var i=n[r];if(i.rev<e)return t&&(i=n[r+1]),i}},this.getRevision=function(){return this.$rev},this.getDeltas=function(e,t){t==null&&(t=this.$rev+1);var n=this.$undoStack,r=null,i=0;for(var s=n.length;s--;){var o=n[s][0];o.id<t&&!r&&(r=s+1);if(o.id<=e){i=s+1;break}}return n.slice(i,r)},this.getChangedRanges=function(e,t){t==null&&(t=this.$rev+1)},this.getChangedLines=function(e,t){t==null&&(t=this.$rev+1)},this.undo=function(e,t){this.lastDeltas=null;var n=this.$undoStack;if(!i(n,n.length))return;e||(e=this.$session),this.$redoStackBaseRev!==this.$rev&&this.$redoStack.length&&(this.$redoStack=[]),this.$fromUndo=!0;var r=n.pop(),s=null;return r&&r.length&&(s=e.undoChanges(r,t),this.$redoStack.push(r),this.$syncRev()),this.$fromUndo=!1,s},this.redo=function(e,t){this.lastDeltas=null,e||(e=this.$session),this.$fromUndo=!0;if(this.$redoStackBaseRev!=this.$rev){var n=this.getDeltas(this.$redoStackBaseRev,this.$rev+1);w(this.$redoStack,n),this.$redoStackBaseRev=this.$rev,this.$redoStack.forEach(function(e){e[0].id=++this.$maxRev},this)}var r=this.$redoStack.pop(),i=null;return r&&(i=e.redoChanges(r,t),this.$undoStack.push(r),this.$syncRev()),this.$fromUndo=!1,i},this.$syncRev=function(){var e=this.$undoStack,t=e[e.length-1],n=t&&t[0].id||0;this.$redoStackBaseRev=n,this.$rev=n},this.reset=function(){this.lastDeltas=null,this.$lastDelta=null,this.$undoStack=[],this.$redoStack=[],this.$rev=0,this.mark=0,this.$redoStackBaseRev=this.$rev,this.selections=[]},this.canUndo=function(){return this.$undoStack.length>0},this.canRedo=function(){return this.$redoStack.length>0},this.bookmark=function(e){e==undefined&&(e=this.$rev),this.mark=e},this.isAtBookmark=function(){return this.$rev===this.mark},this.toJSON=function(){},this.fromJSON=function(){},this.hasUndo=this.canUndo,this.hasRedo=this.canRedo,this.isClean=this.isAtBookmark,this.markClean=this.bookmark,this.$prettyPrint=function(e){return e?c(e):c(this.$undoStack)+\"\\n---\\n\"+c(this.$redoStack)}}).call(r.prototype);var s=e(\"./range\").Range,o=s.comparePoints,u=s.comparePoints;t.UndoManager=r}),define(\"ace/layer/lines\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e,t){this.element=e,this.canvasHeight=t||5e5,this.element.style.height=this.canvasHeight*2+\"px\",this.cells=[],this.cellCache=[],this.$offsetCoefficient=0};(function(){this.moveContainer=function(e){r.translate(this.element,0,-(e.firstRowScreen*e.lineHeight%this.canvasHeight)-e.offset*this.$offsetCoefficient)},this.pageChanged=function(e,t){return Math.floor(e.firstRowScreen*e.lineHeight/this.canvasHeight)!==Math.floor(t.firstRowScreen*t.lineHeight/this.canvasHeight)},this.computeLineTop=function(e,t,n){var r=t.firstRowScreen*t.lineHeight,i=Math.floor(r/this.canvasHeight),s=n.documentToScreenRow(e,0)*t.lineHeight;return s-i*this.canvasHeight},this.computeLineHeight=function(e,t,n){return t.lineHeight*n.getRowLength(e)},this.getLength=function(){return this.cells.length},this.get=function(e){return this.cells[e]},this.shift=function(){this.$cacheCell(this.cells.shift())},this.pop=function(){this.$cacheCell(this.cells.pop())},this.push=function(e){if(Array.isArray(e)){this.cells.push.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.appendChild(t)}else this.cells.push(e),this.element.appendChild(e.element)},this.unshift=function(e){if(Array.isArray(e)){this.cells.unshift.apply(this.cells,e);var t=r.createFragment(this.element);for(var n=0;n<e.length;n++)t.appendChild(e[n].element);this.element.firstChild?this.element.insertBefore(t,this.element.firstChild):this.element.appendChild(t)}else this.cells.unshift(e),this.element.insertAdjacentElement(\"afterbegin\",e.element)},this.last=function(){return this.cells.length?this.cells[this.cells.length-1]:null},this.$cacheCell=function(e){if(!e)return;e.element.remove(),this.cellCache.push(e)},this.createCell=function(e,t,n,i){var s=this.cellCache.pop();if(!s){var o=r.createElement(\"div\");i&&i(o),this.element.appendChild(o),s={element:o,text:\"\",row:e}}return s.row=e,s}}).call(i.prototype),t.Lines=i}),define(\"ace/layer/gutter\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/lib/event_emitter\",\"ace/layer/lines\"],function(e,t,n){\"use strict\";function f(e){var t=document.createTextNode(\"\");e.appendChild(t);var n=r.createElement(\"span\");return e.appendChild(n),e}var r=e(\"../lib/dom\"),i=e(\"../lib/oop\"),s=e(\"../lib/lang\"),o=e(\"../lib/event_emitter\").EventEmitter,u=e(\"./lines\").Lines,a=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_gutter-layer\",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$lines=new u(this.element),this.$lines.$offsetCoefficient=1};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener(\"change\",this.$updateAnnotations),this.session=e,e&&e.on(\"change\",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.addGutterDecoration\"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn(\"deprecated use session.removeGutterDecoration\"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var n=e[t],r=n.row,i=this.$annotations[r];i||(i=this.$annotations[r]={text:[]});var o=n.text;o=o?s.escapeHTML(o):n.html||\"\",i.text.indexOf(o)===-1&&i.text.push(o);var u=n.type;u==\"error\"?i.className=\" ace_error\":u==\"warning\"&&i.className!=\" ace_error\"?i.className=\" ace_warning\":u==\"info\"&&!i.className&&(i.className=\" ace_info\")}},this.$updateAnnotations=function(e){if(!this.$annotations.length)return;var t=e.start.row,n=e.end.row-t;if(n!==0)if(e.action==\"remove\")this.$annotations.splice(t,n+1,null);else{var r=new Array(n+1);r.unshift(t,1),this.$annotations.splice.apply(this.$annotations,r)}},this.update=function(e){this.config=e;var t=this.session,n=e.firstRow,r=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1);this.oldLastRow=r,this.config=e,this.$lines.moveContainer(e),this.$updateCursorRow();var i=t.getNextFoldLine(n),s=i?i.start.row:Infinity,o=null,u=-1,a=n;for(;;){a>s&&(a=i.end.row+1,i=t.getNextFoldLine(a,i),s=i?i.start.row:Infinity);if(a>r){while(this.$lines.getLength()>u+1)this.$lines.pop();break}o=this.$lines.get(++u),o?o.row=a:(o=this.$lines.createCell(a,e,this.session,f),this.$lines.push(o)),this.$renderCell(o,e,i,a),a++}this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$updateGutterWidth=function(e){var t=this.session,n=t.gutterRenderer||this.$renderer,r=t.$firstLineNumber,i=this.$lines.last()?this.$lines.last().text:\"\";if(this.$fixedWidth||t.$useWrapMode)i=t.getLength()+r-1;var s=n?n.getWidth(t,i,e):i.toString().length*e.characterWidth,o=this.$padding||this.$computePadding();s+=o.left+o.right,s!==this.gutterWidth&&!isNaN(s)&&(this.gutterWidth=s,this.element.parentNode.style.width=this.element.style.width=Math.ceil(this.gutterWidth)+\"px\",this._signal(\"changeGutterWidth\",s))},this.$updateCursorRow=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.getCursor();if(this.$cursorRow===e.row)return;this.$cursorRow=e.row},this.updateLineHighlight=function(){if(!this.$highlightGutterLine)return;var e=this.session.selection.cursor.row;this.$cursorRow=e;if(this.$cursorCell&&this.$cursorCell.row==e)return;this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\"));var t=this.$lines.cells;this.$cursorCell=null;for(var n=0;n<t.length;n++){var r=t[n];if(r.row>=this.$cursorRow){if(r.row>this.$cursorRow){var i=this.session.getFoldLine(this.$cursorRow);if(!(n>0&&i&&i.start.row==t[n-1].row))break;r=t[n-1]}r.element.className=\"ace_gutter-active-line \"+r.element.className,this.$cursorCell=r;break}}},this.scrollLines=function(e){var t=this.config;this.config=e,this.$updateCursorRow();if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=Math.min(e.lastRow+e.gutterOffset,this.session.getLength()-1),r=this.oldLastRow;this.oldLastRow=n;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(r>n)for(var i=this.session.getFoldedRowCount(n+1,r);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLines(e,e.firstRow,t.firstRow-1)),n>r&&this.$lines.push(this.$renderLines(e,r+1,n)),this.updateLineHighlight(),this._signal(\"afterRender\"),this.$updateGutterWidth(e)},this.$renderLines=function(e,t,n){var r=[],i=t,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>n)break;var u=this.$lines.createCell(i,e,this.session,f);this.$renderCell(u,e,s,i),r.push(u),i++}return r},this.$renderCell=function(e,t,n,i){var s=e.element,o=this.session,u=s.childNodes[0],a=s.childNodes[1],f=o.$firstLineNumber,l=o.$breakpoints,c=o.$decorations,h=o.gutterRenderer||this.$renderer,p=this.$showFoldWidgets&&o.foldWidgets,d=n?n.start.row:Number.MAX_VALUE,v=\"ace_gutter-cell \";this.$highlightGutterLine&&(i==this.$cursorRow||n&&i<this.$cursorRow&&i>=d&&this.$cursorRow<=n.end.row)&&(v+=\"ace_gutter-active-line \",this.$cursorCell!=e&&(this.$cursorCell&&(this.$cursorCell.element.className=this.$cursorCell.element.className.replace(\"ace_gutter-active-line \",\"\")),this.$cursorCell=e)),l[i]&&(v+=l[i]),c[i]&&(v+=c[i]),this.$annotations[i]&&(v+=this.$annotations[i].className),s.className!=v&&(s.className=v);if(p){var m=p[i];m==null&&(m=p[i]=o.getFoldWidget(i))}if(m){var v=\"ace_fold-widget ace_\"+m;m==\"start\"&&i==d&&i<n.end.row?v+=\" ace_closed\":v+=\" ace_open\",a.className!=v&&(a.className=v);var g=t.lineHeight+\"px\";r.setStyle(a.style,\"height\",g),r.setStyle(a.style,\"display\",\"inline-block\")}else a&&r.setStyle(a.style,\"display\",\"none\");var y=(h?h.getText(o,i):i+f).toString();return y!==u.data&&(u.data=y),r.setStyle(e.element.style,\"height\",this.$lines.computeLineHeight(i,t,o)+\"px\"),r.setStyle(e.element.style,\"top\",this.$lines.computeLineTop(i,t,o)+\"px\"),e.text=y,e},this.$fixedWidth=!1,this.$highlightGutterLine=!0,this.$renderer=\"\",this.setHighlightGutterLine=function(e){this.$highlightGutterLine=e},this.$showLineNumbers=!0,this.$renderer=\"\",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return 0},getText:function(){return\"\"}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?r.addCssClass(this.element,\"ace_folding-enabled\"):r.removeCssClass(this.element,\"ace_folding-enabled\"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=r.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=(parseInt(e.borderLeftWidth)||0)+(parseInt(e.paddingLeft)||0)+1,this.$padding.right=(parseInt(e.borderRightWidth)||0)+(parseInt(e.paddingRight)||0),this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),n=this.element.getBoundingClientRect();if(e.x<t.left+n.left)return\"markers\";if(this.$showFoldWidgets&&e.x>n.right-t.right)return\"foldWidgets\"}}).call(a.prototype),t.Gutter=a}),define(\"ace/layer/marker\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../lib/dom\"),s=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_layer ace_marker-layer\",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.elt=function(e,t){var n=this.i!=-1&&this.element.childNodes[this.i];n?this.i++:(n=document.createElement(\"div\"),this.element.appendChild(n),this.i=-1),n.style.cssText=t,n.className=e},this.update=function(e){if(!e)return;this.config=e,this.i=0;var t;for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type==\"fullLine\"?this.drawFullLineMarker(t,i,r.clazz,e):r.type==\"screenLine\"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type==\"text\"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+\" ace_start\"+\" ace_br15\",e)}if(this.i!=-1)while(this.i<this.element.childElementCount)this.element.removeChild(this.element.lastChild)},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1<f?u.getScreenLastRowColumn(l+1):l==f?0:n.end.column,this.drawSingleLineMarker(t,d,i+(l==a?\" ace_start\":\"\")+\" ace_br\"+e(l==a||l==a+1&&n.start.column,c<h,h>p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||\"\";if(this.session.$bidiHandler.isBidiRow(t.start.row)){var f=t.clone();f.end.row=f.start.row,f.end.column=this.session.getLine(f.start.row).length,this.drawBidiSingleLineMarker(e,f,n+\" ace_br1 ace_start\",r,null,i)}else this.elt(n+\" ace_br1 ace_start\",\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;left:\"+a+\"px;\"+(i||\"\"));if(this.session.$bidiHandler.isBidiRow(t.end.row)){var f=t.clone();f.start.row=f.end.row,f.start.column=0,this.drawBidiSingleLineMarker(e,f,n+\" ace_br12\",r,null,i)}else{u=this.$getTop(t.end.row,r);var l=t.end.column*r.characterWidth;this.elt(n+\" ace_br12\",\"height:\"+o+\"px;\"+\"width:\"+l+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))}o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var c=(t.start.column?1:0)|(t.end.column?0:8);this.elt(n+(c?\" ace_br\"+c:\"\"),\"height:\"+o+\"px;\"+\"right:0;\"+\"top:\"+u+\"px;\"+\"left:\"+s+\"px;\"+(i||\"\"))},this.drawSingleLineMarker=function(e,t,n,r,i,s){if(this.session.$bidiHandler.isBidiRow(t.start.row))return this.drawBidiSingleLineMarker(e,t,n,r,i,s);var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+u+\"px;\"+\"top:\"+a+\"px;\"+\"left:\"+f+\"px;\"+(s||\"\"))},this.drawBidiSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=this.$getTop(t.start.row,r),a=this.$padding,f=this.session.$bidiHandler.getSelections(t.start.column,t.end.column);f.forEach(function(e){this.elt(n,\"height:\"+o+\"px;\"+\"width:\"+e.width+(i||0)+\"px;\"+\"top:\"+u+\"px;\"+\"left:\"+(a+e.left)+\"px;\"+(s||\"\"))},this)},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;this.elt(n,\"height:\"+o+\"px;\"+\"top:\"+s+\"px;\"+\"left:0;right:0;\"+(i||\"\"))}}).call(s.prototype),t.Marker=s}),define(\"ace/layer/text\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/layer/lines\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"./lines\").Lines,u=e(\"../lib/event_emitter\").EventEmitter,a=function(e){this.dom=i,this.element=this.dom.createElement(\"div\"),this.element.className=\"ace_layer ace_text-layer\",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this),this.$lines=new o(this.element)};(function(){r.implement(this,u),this.EOF_CHAR=\"\\u00b6\",this.EOL_CHAR_LF=\"\\u00ac\",this.EOL_CHAR_CRLF=\"\\u00a4\",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR=\"\\u2014\",this.SPACE_CHAR=\"\\u00b7\",this.$padding=0,this.MAX_LINE_LENGTH=1e4,this.$updateEolChar=function(){var e=this.session.doc,t=e.getNewLineCharacter()==\"\\n\"&&e.getNewLineMode()!=\"windows\",n=t?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=n)return this.EOL_CHAR=n,!0},this.setPadding=function(e){this.$padding=e,this.element.style.margin=\"0 \"+e+\"px\"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on(\"changeCharacterSize\",function(e){this._signal(\"changeCharacterSize\",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n<e+1;n++)if(this.showInvisibles){var r=this.dom.createElement(\"span\");r.className=\"ace_invisible ace_invisible_tab\",r.textContent=s.stringRepeat(this.TAB_CHAR,n),t.push(r)}else t.push(this.dom.createTextNode(s.stringRepeat(\" \",n),this.element));if(this.displayIndentGuides){this.$indentGuideRe=/\\s\\S| \\t|\\t |\\s$/;var i=\"ace_indent-guide\",o=\"\",u=\"\";if(this.showInvisibles){i+=\" ace_invisible\",o=\" ace_invisible_space\",u=\" ace_invisible_tab\";var a=s.stringRepeat(this.SPACE_CHAR,this.tabSize),f=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var a=s.stringRepeat(\" \",this.tabSize),f=a;var r=this.dom.createElement(\"span\");r.className=i+o,r.textContent=a,this.$tabStrings[\" \"]=r;var r=this.dom.createElement(\"span\");r.className=i+u,r.textContent=f,this.$tabStrings[\"\t\"]=r}},this.updateLines=function(e,t,n){if(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)return this.update(e);this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;u<r;u++){var a=this.session.getFoldLine(u);if(a){if(a.containsRow(r)){r=a.start.row;break}u=a.end.row}o++}var f=!1,u=r,a=this.session.getNextFoldLine(u),l=a?a.start.row:Infinity;for(;;){u>l&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),l=a?a.start.row:Infinity);if(u>i)break;var c=s[o++];if(c){this.dom.removeChildren(c),this.$renderLine(c,u,u==l?a:!1);var h=e.lineHeight*this.session.getRowLength(u)+\"px\";c.style.height!=h&&(f=!0,c.style.height=h)}u++}if(f)while(o<this.$lines.cells.length){var p=this.$lines.cells[o++];p.element.style.top=this.$lines.computeLineTop(p.row,e,this.session)+\"px\"}},this.scrollLines=function(e){var t=this.config;this.config=e;if(this.$lines.pageChanged(t,e))return this.update(e);this.$lines.moveContainer(e);var n=e.lastRow,r=t?t.lastRow:-1;if(!t||r<e.firstRow)return this.update(e);if(n<t.firstRow)return this.update(e);if(!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);if(t.firstRow<e.firstRow)for(var i=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);i>0;i--)this.$lines.shift();if(t.lastRow>e.lastRow)for(var i=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);i>0;i--)this.$lines.pop();e.firstRow<t.firstRow&&this.$lines.unshift(this.$renderLinesFragment(e,e.firstRow,t.firstRow-1)),e.lastRow>t.lastRow&&this.$lines.push(this.$renderLinesFragment(e,t.lastRow+1,e.lastRow))},this.$renderLinesFragment=function(e,t,n){var r=[],s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=this.$lines.createCell(s,e,this.session),f=a.element;this.dom.removeChildren(f),i.setStyle(f.style,\"height\",this.$lines.computeLineHeight(s,e,this.session)+\"px\"),i.setStyle(f.style,\"top\",this.$lines.computeLineTop(s,e,this.session)+\"px\"),this.$renderLine(f,s,s==u?o:!1),this.$useLineGroups()?f.className=\"ace_line_group\":f.className=\"ace_line\",r.push(a),s++}return r},this.update=function(e){this.$lines.moveContainer(e),this.config=e;var t=e.firstRow,n=e.lastRow,r=this.$lines;while(r.getLength())r.pop();r.push(this.$renderLinesFragment(e,t,n))},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var o=this,u=/(\\t)|( +)|([\\x00-\\x1f\\x80-\\xa0\\xad\\u1680\\u180E\\u2000-\\u200f\\u2028\\u2029\\u202F\\u205F\\uFEFF\\uFFF9-\\uFFFC]+)|(\\u3000)|([\\u1100-\\u115F\\u11A3-\\u11A7\\u11FA-\\u11FF\\u2329-\\u232A\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3001-\\u303E\\u3041-\\u3096\\u3099-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u3190-\\u31BA\\u31C0-\\u31E3\\u31F0-\\u321E\\u3220-\\u3247\\u3250-\\u32FE\\u3300-\\u4DBF\\u4E00-\\uA48C\\uA490-\\uA4C6\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFAFF\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFF01-\\uFF60\\uFFE0-\\uFFE6]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g,a=this.dom.createFragment(this.element),f,l=0;while(f=u.exec(r)){var c=f[1],h=f[2],p=f[3],d=f[4],v=f[5];if(!o.showInvisibles&&h)continue;var m=l!=f.index?r.slice(l,f.index):\"\";l=f.index+f[0].length,m&&a.appendChild(this.dom.createTextNode(m,this.element));if(c){var g=o.session.getScreenTabSize(t+f.index);a.appendChild(o.$tabStrings[g].cloneNode(!0)),t+=g-1}else if(h)if(o.showInvisibles){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space\",y.textContent=s.stringRepeat(o.SPACE_CHAR,h.length),a.appendChild(y)}else a.appendChild(this.com.createTextNode(h,this.element));else if(p){var y=this.dom.createElement(\"span\");y.className=\"ace_invisible ace_invisible_space ace_invalid\",y.textContent=s.stringRepeat(o.SPACE_CHAR,p.length),a.appendChild(y)}else if(d){var b=o.showInvisibles?o.SPACE_CHAR:\"\";t+=1;var y=this.dom.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=o.showInvisibles?\"ace_cjk ace_invisible ace_invisible_space\":\"ace_cjk\",y.textContent=o.showInvisibles?o.SPACE_CHAR:\"\",a.appendChild(y)}else if(v){t+=1;var y=i.createElement(\"span\");y.style.width=o.config.characterWidth*2+\"px\",y.className=\"ace_cjk\",y.textContent=v,a.appendChild(y)}}a.appendChild(this.dom.createTextNode(l?r.slice(l):r,this.element));if(!this.$textToken[n.type]){var w=\"ace_\"+n.type.replace(/\\./g,\" ace_\"),y=this.dom.createElement(\"span\");n.type==\"fold\"&&(y.style.width=n.value.length*this.config.characterWidth+\"px\"),y.className=w,y.appendChild(a),e.appendChild(y)}else e.appendChild(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);if(r<=0||r>=n)return t;if(t[0]==\" \"){r-=r%this.tabSize;var i=r/this.tabSize;for(var s=0;s<i;s++)e.appendChild(this.$tabStrings[\" \"].cloneNode(!0));return t.substr(r)}if(t[0]==\"\t\"){for(var s=0;s<r;s++)e.appendChild(this.$tabStrings[\"\t\"].cloneNode(!0));return t.substr(r)}return t},this.$createLineElement=function(e){var t=this.dom.createElement(\"div\");return t.className=\"ace_line\",t.style.height=this.config.lineHeight+\"px\",t},this.$renderWrappedLine=function(e,t,n){var r=0,i=0,o=n[0],u=0,a=this.$createLineElement();e.appendChild(a);for(var f=0;f<t.length;f++){var l=t[f],c=l.value;if(f==0&&this.displayIndentGuides){r=c.length,c=this.renderIndentGuide(a,c,o);if(!c)continue;r-=c.length}if(r+c.length<o)u=this.$renderToken(a,u,l,c),r+=c.length;else{while(r+c.length>=o)u=this.$renderToken(a,u,l,c.substring(0,o-r)),c=c.substring(o-r),r=o,a=this.$createLineElement(),e.appendChild(a),a.appendChild(this.dom.createTextNode(s.stringRepeat(\"\\u00a0\",n.indent),this.element)),i++,u=0,o=n[i]||Number.MAX_VALUE;c.length!=0&&(r+=c.length,u=this.$renderToken(a,u,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s<t.length;s++){r=t[s],i=r.value;if(n+i.length>this.MAX_LINE_LENGTH)return this.$renderOverflowMessage(e,n,r,i);n=this.$renderToken(e,n,r,i)}},this.$renderOverflowMessage=function(e,t,n,r){this.$renderToken(e,t,n,r.slice(0,this.MAX_LINE_LENGTH-t));var i=this.dom.createElement(\"span\");i.className=\"ace_inline_button ace_keyword ace_toggle_wrap\",i.style.position=\"absolute\",i.style.right=\"0\",i.textContent=\"<click to see more...>\",e.appendChild(i)},this.$renderLine=function(e,t,n){!n&&n!=0&&(n=this.session.getFoldLine(t));if(n)var r=this.$getFoldLineTokens(t,n);else var r=this.session.getTokens(t);var i=e;if(r.length){var s=this.session.getRowSplitData(t);if(s&&s.length){this.$renderWrappedLine(e,r,s);var i=e.lastChild}else{var i=e;this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i)),this.$renderSimpleLine(i,r)}}else this.$useLineGroups()&&(i=this.$createLineElement(),e.appendChild(i));if(this.showInvisibles&&i){n&&(t=n.end.row);var o=this.dom.createElement(\"span\");o.className=\"ace_invisible ace_invisible_eol\",o.textContent=t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,i.appendChild(o)}},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.length<t){s+=e[i].value.length,i++;if(i==e.length)return}if(s!=t){var o=e[i].value.substring(t-s);o.length>n-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(s<n&&i<e.length){var o=e[i].value;o.length+s>n?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:\"fold\",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){}}).call(a.prototype),t.Text=a}),define(\"ace/layer/cursor\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";var r=e(\"../lib/dom\"),i=function(e){this.element=r.createElement(\"div\"),this.element.className=\"ace_layer ace_cursor-layer\",e.appendChild(this.element),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,\"ace_hidden-cursors\"),this.$updateCursors=this.$updateOpacity.bind(this)};(function(){this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)r.setStyle(t[n].style,\"opacity\",e?\"\":\"0\")},this.$startCssAnimation=function(){var e=this.cursors;for(var t=e.length;t--;)e[t].style.animationDuration=this.blinkInterval+\"ms\";setTimeout(function(){r.addCssClass(this.element,\"ace_animate-blinking\")}.bind(this))},this.$stopCssAnimation=function(){r.removeCssClass(this.element,\"ace_animate-blinking\")},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&(this.smoothBlinking=e,r.setCssClass(this.element,\"ace_smooth-blinking\",e),this.$updateCursors(!0),this.restartTimer())},this.addCursor=function(){var e=r.createElement(\"div\");return e.className=\"ace_cursor\",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,\"ace_hidden-cursors\"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.$stopCssAnimation(),this.smoothBlinking&&r.removeCssClass(this.element,\"ace_smooth-blinking\"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible){this.$stopCssAnimation();return}this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,\"ace_smooth-blinking\")}.bind(this));if(r.HAS_CSS_ANIMATION)this.$startCssAnimation();else{var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+(this.session.$bidiHandler.isBidiRow(n.row,e.row)?this.session.$bidiHandler.getPosLeft(n.column):n.column*this.config.characterWidth),i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.isCursorInView=function(e,t){return e.top>=0&&e.top<t.maxHeight},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,i=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,s=t.length;n<s;n++){var o=this.getPixelPosition(t[n].cursor,!0);if((o.top>e.height+e.offset||o.top<0)&&n>1)continue;var u=this.cursors[i++]||this.addCursor(),a=u.style;this.drawCursor?this.drawCursor(u,o,e,t[n],this.session):this.isCursorInView(o,e)?(r.setStyle(a,\"display\",\"block\"),r.translate(u,o.left,o.top),r.setStyle(a,\"width\",Math.round(e.characterWidth)+\"px\"),r.setStyle(a,\"height\",e.lineHeight+\"px\")):r.setStyle(a,\"display\",\"none\")}while(this.cursors.length>i)this.removeCursor();var f=this.session.getOverwrite();this.$setOverwrite(f),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,\"ace_overwrite-cursors\"):r.removeCssClass(this.element,\"ace_overwrite-cursors\"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(i.prototype),t.Cursor=i}),define(\"ace/scrollbar\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/lib/event_emitter\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./lib/event\"),o=e(\"./lib/event_emitter\").EventEmitter,u=32768,a=function(e){this.element=i.createElement(\"div\"),this.element.className=\"ace_scrollbar ace_scrollbar\"+this.classSuffix,this.inner=i.createElement(\"div\"),this.inner.className=\"ace_scrollbar-inner\",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,\"scroll\",this.onScroll.bind(this)),s.addListener(this.element,\"mousedown\",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?\"\":\"none\",this.isVisible=e,this.coeff=1}}).call(a.prototype);var f=function(e,t){a.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+\"px\",this.$minWidth=0};r.inherits(f,a),function(){this.classSuffix=\"-v\",this.onScroll=function(){if(!this.skipEvent){this.scrollTop=this.element.scrollTop;if(this.coeff!=1){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit(\"scroll\",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return Math.max(this.isVisible?this.width:0,this.$minWidth||0)},this.setHeight=function(e){this.element.style.height=e+\"px\"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>u?(this.coeff=u/e,e=u):this.coeff!=1&&(this.coeff=1),this.inner.style.height=e+\"px\"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(f.prototype);var l=function(e,t){a.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+\"px\"};r.inherits(l,a),function(){this.classSuffix=\"-h\",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit(\"scroll\",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+\"px\"},this.setInnerWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollWidth=function(e){this.inner.style.width=e+\"px\"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(l.prototype),t.ScrollBar=f,t.ScrollBarV=f,t.ScrollBarH=l,t.VScrollBar=f,t.HScrollBar=l}),define(\"ace/renderloop\",[\"require\",\"exports\",\"module\",\"ace/lib/event\"],function(e,t,n){\"use strict\";var r=e(\"./lib/event\"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.$recursionLimit=2,this.window=t||window;var n=this;this._flush=function(e){n.pending=!1;var t=n.changes;t&&(r.blockIdle(100),n.changes=0,n.onRender(t));if(n.changes){if(n.$recursionLimit--<0)return;n.schedule()}else n.$recursionLimit=2}};(function(){this.schedule=function(e){this.changes=this.changes|e,this.changes&&!this.pending&&(r.nextFrame(this._flush),this.pending=!0)},this.clear=function(e){var t=this.changes;return this.changes=0,t}}).call(i.prototype),t.RenderLoop=i}),define(\"ace/layer/font_metrics\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/lib/lang\",\"ace/lib/event\",\"ace/lib/useragent\",\"ace/lib/event_emitter\"],function(e,t,n){var r=e(\"../lib/oop\"),i=e(\"../lib/dom\"),s=e(\"../lib/lang\"),o=e(\"../lib/event\"),u=e(\"../lib/useragent\"),a=e(\"../lib/event_emitter\").EventEmitter,f=256,l=typeof ResizeObserver==\"function\",c=200,h=t.FontMetrics=function(e){this.el=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement(\"div\"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),this.$measureNode.innerHTML=s.stringRepeat(\"X\",f),this.$characterSize={width:0,height:0},l?this.$addObserver():this.checkForSizeChanges()};(function(){r.implement(this,a),this.$characterSize={width:0,height:0},this.$setMeasureNodeStyles=function(e,t){e.width=e.height=\"auto\",e.left=e.top=\"0px\",e.visibility=\"hidden\",e.position=\"absolute\",e.whiteSpace=\"pre\",u.isIE<8?e[\"font-family\"]=\"inherit\":e.font=\"inherit\",e.overflow=t?\"hidden\":\"visible\"},this.checkForSizeChanges=function(e){e===undefined&&(e=this.$measureSizes());if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight=\"bold\";var t=this.$measureSizes();this.$measureNode.style.fontWeight=\"\",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit(\"changeCharacterSize\",{data:e})}},this.$addObserver=function(){var e=this;this.$observer=new window.ResizeObserver(function(t){var n=t[0].contentRect;e.checkForSizeChanges({height:n.height,width:n.width/f})}),this.$observer.observe(this.$measureNode)},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer||this.$observer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=o.onIdle(function t(){e.checkForSizeChanges(),o.onIdle(t,500)},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(e){var t={height:(e||this.$measureNode).clientHeight,width:(e||this.$measureNode).clientWidth/f};return t.width===0||t.height===0?null:t},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,f);var t=this.$main.getBoundingClientRect();return t.width/f},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$observer&&this.$observer.disconnect(),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)},this.$getZoom=function e(t){return t?(window.getComputedStyle(t).zoom||1)*e(t.parentElement):1},this.$initTransformMeasureNodes=function(){var e=function(e,t){return[\"div\",{style:\"position: absolute;top:\"+e+\"px;left:\"+t+\"px;\"}]};this.els=i.buildDom([e(0,0),e(c,0),e(0,c),e(c,c)],this.el)},this.transformCoordinates=function(e,t){function r(e,t,n){var r=e[1]*t[0]-e[0]*t[1];return[(-t[1]*n[0]+t[0]*n[1])/r,(+e[1]*n[0]-e[0]*n[1])/r]}function i(e,t){return[e[0]-t[0],e[1]-t[1]]}function s(e,t){return[e[0]+t[0],e[1]+t[1]]}function o(e,t){return[e*t[0],e*t[1]]}function u(e){var t=e.getBoundingClientRect();return[t.left,t.top]}if(e){var n=this.$getZoom(this.el);e=o(1/n,e)}this.els||this.$initTransformMeasureNodes();var a=u(this.els[0]),f=u(this.els[1]),l=u(this.els[2]),h=u(this.els[3]),p=r(i(h,f),i(h,l),i(s(f,l),s(h,a))),d=o(1+p[0],i(f,a)),v=o(1+p[1],i(l,a));if(t){var m=t,g=p[0]*m[0]/c+p[1]*m[1]/c+1,y=s(o(m[0],d),o(m[1],v));return s(o(1/g/c,y),a)}var b=i(e,a),w=r(i(d,o(p[0],b)),i(v,o(p[1],b)),b);return o(c,w)}}).call(h.prototype)}),define(\"ace/virtual_renderer\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/config\",\"ace/layer/gutter\",\"ace/layer/marker\",\"ace/layer/text\",\"ace/layer/cursor\",\"ace/scrollbar\",\"ace/scrollbar\",\"ace/renderloop\",\"ace/layer/font_metrics\",\"ace/lib/event_emitter\",\"ace/lib/useragent\"],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./config\"),o=e(\"./layer/gutter\").Gutter,u=e(\"./layer/marker\").Marker,a=e(\"./layer/text\").Text,f=e(\"./layer/cursor\").Cursor,l=e(\"./scrollbar\").HScrollBar,c=e(\"./scrollbar\").VScrollBar,h=e(\"./renderloop\").RenderLoop,p=e(\"./layer/font_metrics\").FontMetrics,d=e(\"./lib/event_emitter\").EventEmitter,v='.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_editor {position: relative;overflow: hidden;font: 12px/normal \\'Monaco\\', \\'Menlo\\', \\'Ubuntu Mono\\', \\'Consolas\\', \\'source-code-pro\\', monospace;direction: ltr;text-align: left;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;box-sizing: border-box;min-width: 100%;contain: style size layout;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \\'\\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;contain: style size layout;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {position: absolute;top: 0;left: 0;right: 0;padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");}.ace_scrollbar {contain: strict;position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;contain: strict;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: transparent;color: inherit;z-index: 1000;opacity: 1;}.ace_composition_placeholder { color: transparent }.ace_composition_marker { border-bottom: 1px solid;position: absolute;border-radius: 0;margin-top: 1px;}[ace_nocontext=true] {transform: none!important;filter: none!important;perspective: none!important;clip-path: none!important;mask : none!important;contain: none!important;perspective: none!important;mix-blend-mode: initial!important;z-index: auto;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;height: 1000000px;contain: style size layout;}.ace_text-layer {font: inherit !important;position: absolute;height: 1000000px;width: 1000000px;contain: style size layout;}.ace_text-layer > .ace_line, .ace_text-layer > .ace_line_group {contain: style size layout;position: absolute;top: 0;left: 0;right: 0;}.ace_hidpi .ace_text-layer,.ace_hidpi .ace_gutter-layer,.ace_hidpi .ace_content,.ace_hidpi .ace_gutter {contain: strict;will-change: transform;}.ace_hidpi .ace_text-layer > .ace_line, .ace_hidpi .ace_text-layer > .ace_line_group {contain: strict;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {transition: opacity 0.18s;}.ace_animate-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: step-end;animation-name: blink-ace-animate;animation-iteration-count: infinite;}.ace_animate-blinking.ace_smooth-blinking .ace_cursor {animation-duration: 1000ms;animation-timing-function: ease-in-out;animation-name: blink-ace-animate-smooth;}@keyframes blink-ace-animate {from, to { opacity: 1; }60% { opacity: 0; }}@keyframes blink-ace-animate-smooth {from, to { opacity: 1; }45% { opacity: 1; }60% { opacity: 0; }85% { opacity: 0; }}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;box-sizing: border-box;}.ace_line .ace_fold {box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");}.ace_tooltip {background-color: #FFF;background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");}.ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");}.ace_dark .ace_fold-widget.ace_end {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget.ace_closed {background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_inline_button {border: 1px solid lightgray;display: inline-block;margin: -1px 8px;padding: 0 5px;pointer-events: auto;cursor: pointer;}.ace_inline_button:hover {border-color: gray;background: rgba(200,200,200,0.2);display: inline-block;pointer-events: auto;}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}',m=e(\"./lib/useragent\"),g=m.isIE;i.importCssString(v,\"ace_editor.css\");var y=function(e,t){var n=this;this.container=e||i.createElement(\"div\"),i.addCssClass(this.container,\"ace_editor\"),i.HI_DPI&&i.addCssClass(this.container,\"ace_hidpi\"),this.setTheme(t),this.$gutter=i.createElement(\"div\"),this.$gutter.className=\"ace_gutter\",this.container.appendChild(this.$gutter),this.$gutter.setAttribute(\"aria-hidden\",!0),this.scroller=i.createElement(\"div\"),this.scroller.className=\"ace_scroller\",this.container.appendChild(this.scroller),this.content=i.createElement(\"div\"),this.content.className=\"ace_content\",this.scroller.appendChild(this.content),this.$gutterLayer=new o(this.$gutter),this.$gutterLayer.on(\"changeGutterWidth\",this.onGutterResize.bind(this)),this.$markerBack=new u(this.content);var r=this.$textLayer=new a(this.content);this.canvas=r.element,this.$markerFront=new u(this.content),this.$cursorLayer=new f(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new c(this.container,this),this.scrollBarH=new l(this.container,this),this.scrollBarV.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener(\"scroll\",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new p(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener(\"changeCharacterSize\",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal(\"changeCharacterSize\",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.margin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$keepTextAreaAtCursor=!m.isIOS,this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit(\"renderer\",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,d),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle(\"ace_nobold\",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off(\"changeNewLineMode\",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarH.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on(\"changeNewLineMode\",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t};if(this.$changedLines.lastRow<this.layerConfig.firstRow){if(!n)return;this.$changedLines.lastRow=this.layerConfig.lastRow}if(this.$changedLines.firstRow>this.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar(),this.session.$bidiHandler.setEolChar(this.$textLayer.EOL_CHAR)},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var s=0,o=this.$size,u={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};r&&(e||o.height!=r)&&(o.height=r,s|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+\"px\",s|=this.CHANGE_SCROLL);if(n&&(e||o.width!=n)){s|=this.CHANGE_SIZE,o.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,i.setStyle(this.scrollBarH.element.style,\"left\",t+\"px\"),i.setStyle(this.scroller.style,\"left\",t+this.margin.left+\"px\"),o.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()-this.margin.h),i.setStyle(this.$gutter.style,\"left\",this.margin.left+\"px\");var a=this.scrollBarV.getWidth()+\"px\";i.setStyle(this.scrollBarH.element.style,\"right\",a),i.setStyle(this.scroller.style,\"right\",a),i.setStyle(this.scroller.style,\"bottom\",this.scrollBarH.getHeight());if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)s|=this.CHANGE_FULL}return o.$dirty=!n||!r,s&&this._signal(\"resize\",u),s},this.onGutterResize=function(e){var t=this.$showGutter?e:0;t!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,t,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):this.$computeLayerConfig()},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption(\"animatedScroll\",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption(\"showInvisibles\",e),this.session.$bidiHandler.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.getOption(\"showInvisibles\")},this.getDisplayIndentGuides=function(){return this.getOption(\"displayIndentGuides\")},this.setDisplayIndentGuides=function(e){this.setOption(\"displayIndentGuides\",e)},this.setShowPrintMargin=function(e){this.setOption(\"showPrintMargin\",e)},this.getShowPrintMargin=function(){return this.getOption(\"showPrintMargin\")},this.setPrintMarginColumn=function(e){this.setOption(\"printMarginColumn\",e)},this.getPrintMarginColumn=function(){return this.getOption(\"printMarginColumn\")},this.getShowGutter=function(){return this.getOption(\"showGutter\")},this.setShowGutter=function(e){return this.setOption(\"showGutter\",e)},this.getFadeFoldWidgets=function(){return this.getOption(\"fadeFoldWidgets\")},this.setFadeFoldWidgets=function(e){this.setOption(\"fadeFoldWidgets\",e)},this.setHighlightGutterLine=function(e){this.setOption(\"highlightGutterLine\",e)},this.getHighlightGutterLine=function(){return this.getOption(\"highlightGutterLine\")},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement(\"div\");e.className=\"ace_layer ace_print-margin-layer\",this.$printMarginEl=i.createElement(\"div\"),this.$printMarginEl.className=\"ace_print-margin\",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=Math.round(this.characterWidth*this.$printMarginColumn+this.$padding)+\"px\",t.visibility=this.$showPrintMargin?\"visible\":\"hidden\",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){var e=this.textarea.style;if(!this.$keepTextAreaAtCursor){i.translate(this.textarea,-100,0);return}var t=this.$cursorLayer.$pixelPos;if(!t)return;var n=this.$composition;n&&n.markerRange&&(t=this.$cursorLayer.getPixelPosition(n.markerRange.start,!0));var r=this.layerConfig,s=t.top,o=t.left;s-=r.offset;var u=n&&n.useTextareaForIME?this.lineHeight:g?0:1;if(s<0||s>r.height-u){i.translate(this.textarea,0,0);return}var a=1;if(!n)s+=this.lineHeight;else if(n.useTextareaForIME){var f=this.textarea.value;a=this.characterWidth*this.session.$getStringScreenWidth(f)[0],u+=2}else s+=this.lineHeight+2;o-=this.scrollLeft,o>this.$size.scrollerWidth-a&&(o=this.$size.scrollerWidth-a),o+=this.gutterWidth+this.margin.left,i.setStyle(e,\"height\",u+\"px\"),i.setStyle(e,\"width\",a+\"px\"),i.translate(this.textarea,Math.min(o,this.$size.scrollerWidth-a),Math.min(s,this.$size.height-u))},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.setMargin=function(e,t,n,r){var i=this.margin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,this.$updateCachedSize(!0,this.gutterWidth,this.$size.width,this.$size.height),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption(\"hScrollBarAlwaysVisible\",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption(\"vScrollBarAlwaysVisible\",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal(\"beforeRender\"),this.session&&this.session.$bidiHandler&&this.session.$bidiHandler.updateCharacterWidths(this.$fontMetrics);var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig()|this.$loop.clear();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig()|this.$loop.clear())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),i.translate(this.content,-this.scrollLeft,-n.offset);var s=n.width+2*this.$padding+\"px\",o=n.minHeight+\"px\";i.setStyle(this.content.style,\"width\",s),i.setStyle(this.content.style,\"height\",o)}e&this.CHANGE_H_SCROLL&&(i.translate(this.content,-this.scrollLeft,-n.offset),this.scroller.className=this.scrollLeft<=0?\"ace_scroller\":\"ace_scroller ace_scroll-left\");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&(e&this.CHANGE_GUTTER||e&this.CHANGE_LINES?this.$gutterLayer.update(n):this.$gutterLayer.scrollLines(n)),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this._signal(\"afterRender\");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER?this.$showGutter&&this.$gutterLayer.update(n):e&this.CHANGE_CURSOR&&this.$highlightGutterLine&&this.$gutterLayer.updateLineHighlight(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal(\"afterRender\")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&n>this.$maxPixelHeight&&(n=this.$maxPixelHeight);var r=n<=2*this.lineHeight,i=!r&&e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||i!=this.$vScroll){i!=this.$vScroll&&(this.$vScroll=i,this.scrollBarV.setVisible(i));var s=this.container.clientWidth;this.container.style.height=n+\"px\",this.$updateCachedSize(!0,this.$gutterWidth,s,n),this.desiredHeight=n,this._signal(\"autosize\")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=t.scrollerHeight+this.lineHeight,l=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=l;var c=this.scrollMargin;this.session.setScrollTop(Math.max(-c.top,Math.min(this.scrollTop,i-t.scrollerHeight+c.bottom))),this.session.setScrollLeft(Math.max(-c.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+c.right)));var h=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+l<0||this.scrollTop>c.top),p=a!==h;p&&(this.$vScroll=h,this.scrollBarV.setVisible(h));var d=this.scrollTop%this.lineHeight,v=Math.ceil(f/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-d)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),f=t.scrollerHeight+e.getRowLength(g)*w+b,d=this.scrollTop-y*w;var S=0;if(this.layerConfig.width!=s||u)S=this.CHANGE_H_SCROLL;if(u||p)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal(\"scrollbarVisibilityChanged\"),p&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:f,maxHeight:i,offset:d,gutterOffset:w?Math.max(0,Math.ceil((d+t.height-t.scrollerHeight)/w)):0,height:this.$size.scrollerHeight},this.session.$bidiHandler&&this.session.$bidiHandler.setContentWidth(s-this.$padding),S},this.$updateLines=function(){if(!this.$changedLines)return;var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(t<n.firstRow)return;if(t===Infinity){this.$showGutter&&this.$gutterLayer.update(n),this.$textLayer.update(n);return}return this.$textLayer.updateLines(n,e,t),!0},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),this.$textLayer&&e>this.$textLayer.MAX_LINE_LENGTH&&(e=this.$textLayer.MAX_LINE_LENGTH+30),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,n){this.scrollCursorIntoView(e,n),this.scrollCursorIntoView(t,n)},this.scrollCursorIntoView=function(e,t,n){if(this.$size.scrollerHeight===0)return;var r=this.$cursorLayer.getPixelPosition(e),i=r.left,s=r.top,o=n&&n.top||0,u=n&&n.bottom||0,a=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;a+o>s?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-u<s+this.lineHeight&&(t&&a+this.$size.scrollerHeight-u<s-this.lineHeight&&(s+=t*this.$size.scrollerHeight),this.session.setScrollTop(s+this.lineHeight+u-this.$size.scrollerHeight));var f=this.scrollLeft;f>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):f+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):f<=this.$padding&&i-f<this.characterWidth&&this.session.setScrollLeft(0)},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){typeof e==\"number\"&&(e={row:e,column:0});var n=this.$cursorLayer.getPixelPosition(e),r=this.$size.scrollerHeight-this.lineHeight,i=n.top-r*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var n=0,r=this.STEPS,i=[],s=function(e,t,n){return n*(Math.pow(e-1,3)+1)+t};for(n=0;n<r;++n)i.push(s(n/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,n,r){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}),s=i.top;t&&(s-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(s),n!==!1&&this.animateScrolling(o,r)},this.animateScrolling=function(e,t){var n=this.scrollTop;if(!this.$animatedScroll)return;var r=this;if(e==n)return;if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length){e=i[0];if(e==n)return}}var s=r.$calcSteps(e,n);this.$scrollAnimation={from:e,to:n,steps:s},clearInterval(this.$timer),r.session.setScrollTop(s.shift()),r.session.$scrollTop=n,this.$timer=setInterval(function(){s.length?(r.session.setScrollTop(s.shift()),r.session.$scrollTop=n):n!=null?(r.session.$scrollTop=-1,r.session.setScrollTop(n),n=null):(r.$timer=clearInterval(r.$timer),r.$scrollAnimation=null,t&&t())},10)},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){if(t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),u=this.$blockCursor?Math.floor(s):Math.round(s);return{row:o,column:u,side:s-u>0?1:-1,offsetX:i}},this.screenToTextCoordinates=function(e,t){var n;if(this.$hasCssTransforms){n={top:0,left:0};var r=this.$fontMetrics.transformCoordinates([e,t]);e=r[1]-this.gutterWidth-this.margin.left,t=r[0]}else n=this.scroller.getBoundingClientRect();var i=e+this.scrollLeft-n.left-this.$padding,s=i/this.characterWidth,o=this.$blockCursor?Math.floor(s):Math.round(s),u=Math.floor((t+this.scrollTop-n.top)/this.lineHeight);return this.session.screenToDocumentPosition(u,Math.max(o,0),i)},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+(this.session.$bidiHandler.isBidiRow(r.row,e)?this.session.$bidiHandler.getPosLeft(r.column):Math.round(r.column*this.characterWidth)),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,\"ace_focus\")},this.visualizeBlur=function(){i.removeCssClass(this.container,\"ace_focus\")},this.showComposition=function(e){this.$composition=e,e.cssText||(e.cssText=this.textarea.style.cssText,e.keepTextAreaAtCursor=this.$keepTextAreaAtCursor),e.useTextareaForIME=this.$useTextareaForIME,this.$useTextareaForIME?(this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,\"ace_composition\"),this.textarea.style.cssText=\"\",this.$moveTextAreaToCursor(),this.$cursorLayer.element.style.display=\"none\"):e.markerId=this.session.addMarker(e.markerRange,\"ace_composition_marker\",\"text\")},this.setCompositionText=function(e){var t=this.session.selection.cursor;this.addToken(e,\"composition_placeholder\",t.row,t.column),this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;this.$composition.markerId&&this.session.removeMarker(this.$composition.markerId),i.removeCssClass(this.textarea,\"ace_composition\"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null,this.$cursorLayer.element.style.display=\"\"},this.addToken=function(e,t,n,r){var i=this.session;i.bgTokenizer.lines[n]=null;var s={type:t,value:e},o=i.getTokens(n);if(r==null)o.push(s);else{var u=0;for(var a=0;a<o.length;a++){var f=o[a];u+=f.value.length;if(r<=u){var l=f.value.length-(u-r),c=f.value.slice(0,l),h=f.value.slice(l);o.splice(a,1,{type:f.type,value:c},s,{type:f.type,value:h});break}}}this.updateLines(n,n)},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r||!r.cssClass)throw new Error(\"couldn't load module \"+e+\" or it didn't call define\");r.$id&&(n.$themeId=r.$id),i.importCssString(r.cssText,r.cssClass,n.container),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s=\"padding\"in r?r.padding:\"padding\"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,\"ace_dark\",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent(\"themeLoaded\",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent(\"themeChange\",{theme:e});if(!e||typeof e==\"string\"){var r=e||this.$options.theme.initialValue;s.loadModule([\"theme\",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.setMouseCursor=function(e){i.setStyle(this.scroller.style,\"cursor\",e)},this.attachToShadowRoot=function(){i.importCssString(v,\"ace_editor.css\",this.container)},this.destroy=function(){this.$fontMetrics.destroy(),this.$cursorLayer.destroy()}}).call(y.prototype),s.defineOptions(y.prototype,\"renderer\",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e==\"number\"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?\"block\":\"none\",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,\"ace_fade-fold-widgets\",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){this.$gutterLayer.setHighlightGutterLine(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e==\"number\"&&(e+=\"px\"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.$minLines<562949953421311||(this.$minLines=0),this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:\"./theme/textmate\",handlesSet:!0},hasCssTransforms:{},useTextareaForIME:{initialValue:!m.isMobile&&!m.isIE}}),t.VirtualRenderer=y}),define(\"ace/worker/worker_client\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/net\",\"ace/lib/event_emitter\",\"ace/config\"],function(e,t,n){\"use strict\";function u(e){var t=\"importScripts('\"+i.qualifyURL(e)+\"');\";try{return new Blob([t],{type:\"application/javascript\"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob(\"application/javascript\")}}function a(e){if(typeof Worker==\"undefined\")return{postMessage:function(){},terminate:function(){}};var t=u(e),n=window.URL||window.webkitURL,r=n.createObjectURL(t);return new Worker(r)}var r=e(\"../lib/oop\"),i=e(\"../lib/net\"),s=e(\"../lib/event_emitter\").EventEmitter,o=e(\"../config\"),f=function(t,n,r,i,s){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get(\"packaged\")||!e.toUrl)i=i||o.moduleUrl(n,\"worker\");else{var u=this.$normalizePath;i=i||u(e.toUrl(\"ace/worker/worker.js\",null,\"_\"));var f={};t.forEach(function(t){f[t]=u(e.toUrl(t,null,\"_\").replace(/(\\.js)?(\\?.*)?$/,\"\"))})}this.$worker=a(i),s&&this.send(\"importScripts\",s),this.$worker.postMessage({init:!0,tlns:f,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case\"event\":this._signal(t.name,{data:t.data});break;case\"call\":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case\"error\":this.reportError(t.data);break;case\"log\":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal(\"terminate\",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off(\"change\",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{t.data&&t.data.err&&(t.data.err={message:t.data.err.message,stack:t.data.err.stack,code:t.data.err.code}),this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call(\"setValue\",[e.getValue()]),e.on(\"change\",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action==\"insert\"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call(\"setValue\",[this.$doc.getValue()]):this.emit(\"change\",{data:e})}}).call(f.prototype);var l=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:\"call\",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:\"event\",name:e,data:t})},o.loadModule([\"worker\",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};l.prototype=f.prototype,t.UIWorkerClient=l,t.WorkerClient=f,t.createWorker=a}),define(\"ace/placeholder\",[\"require\",\"exports\",\"module\",\"ace/range\",\"ace/lib/event_emitter\",\"ace/lib/oop\"],function(e,t,n){\"use strict\";var r=e(\"./range\").Range,i=e(\"./lib/event_emitter\").EventEmitter,s=e(\"./lib/oop\"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on(\"change\",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on(\"changeCursor\",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row!==t.end.row)return;if(t.start.row!==this.pos.row)return;this.$updating=!0;var n=e.action===\"insert\"?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action===\"insert\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action===\"remove\")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit(\"cursorEnter\",e)):(this.hideOtherMarkers(),this._emit(\"cursorLeave\",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener(\"change\",this.$onUpdate),this.session.selection.removeEventListener(\"changeCursor\",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n<t;n++)e.undo(this.session,!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}).call(o.prototype),t.PlaceHolder=o}),define(\"ace/mouse/multi_select_handler\",[\"require\",\"exports\",\"module\",\"ace/lib/event\",\"ace/lib/useragent\"],function(e,t,n){function s(e,t){return e.row==t.row&&e.column==t.column}function o(e){var t=e.domEvent,n=t.altKey,o=t.shiftKey,u=t.ctrlKey,a=e.getAccelKey(),f=e.getButton();u&&i.isMac&&(f=t.button);if(e.editor.inMultiSelectMode&&f==2){e.editor.textInput.onContextMenu(e.domEvent);return}if(!u&&!n&&!a){f===0&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode();return}if(f!==0)return;var l=e.editor,c=l.selection,h=l.inMultiSelectMode,p=e.getDocumentPosition(),d=c.getCursor(),v=e.inSelection()||c.isEmpty()&&s(p,d),m=e.x,g=e.y,y=function(e){m=e.clientX,g=e.clientY},b=l.session,w=l.renderer.pixelToScreenCoordinates(m,g),E=w,S;if(l.$mouseHandler.$enableJumpToDef)u&&n||a&&n?S=o?\"block\":\"add\":n&&l.$blockSelectEnabled&&(S=\"block\");else if(a&&!n){S=\"add\";if(!h&&o)return}else n&&l.$blockSelectEnabled&&(S=\"block\");S&&i.isMac&&t.ctrlKey&&l.$mouseHandler.cancelContextMenu();if(S==\"add\"){if(!h&&v)return;if(!h){var x=c.toOrientedRange();l.addSelectionMarker(x)}var T=c.rangeList.rangeAtPoint(p);l.inVirtualSelectionMode=!0,o&&(T=null,x=c.ranges[0]||x,l.removeSelectionMarker(x)),l.once(\"mouseup\",function(){var e=c.toOrientedRange();T&&e.isEmpty()&&s(T.cursor,e.cursor)?c.substractPoint(e.cursor):(o?c.substractPoint(x.cursor):x&&(l.removeSelectionMarker(x),c.addRange(x)),c.addRange(e)),l.inVirtualSelectionMode=!1})}else if(S==\"block\"){e.stop(),l.inVirtualSelectionMode=!0;var N,C=[],k=function(){var e=l.renderer.pixelToScreenCoordinates(m,g),t=b.screenToDocumentPosition(e.row,e.column,e.offsetX);if(s(E,e)&&s(t,c.lead))return;E=e,l.selection.moveToPosition(t),l.renderer.scrollCursorIntoView(),l.removeSelectionMarkers(C),C=c.rectangularRangeBlock(E,w),l.$mouseHandler.$clickSelection&&C.length==1&&C[0].isEmpty()&&(C[0]=l.$mouseHandler.$clickSelection.clone()),C.forEach(l.addSelectionMarker,l),l.updateSelectionMarkers()};h&&!a?c.toSingleRange():!h&&a&&(N=c.toOrientedRange(),l.addSelectionMarker(N)),o?w=b.documentToScreenPosition(c.lead):c.moveToPosition(p),E={row:-1,column:-1};var L=function(e){k(),clearInterval(O),l.removeSelectionMarkers(C),C.length||(C=[c.toOrientedRange()]),N&&(l.removeSelectionMarker(N),c.toSingleRange(N));for(var t=0;t<C.length;t++)c.addRange(C[t]);l.inVirtualSelectionMode=!1,l.$mouseHandler.$clickSelection=null},A=k;r.capture(l.container,y,L);var O=setInterval(function(){A()},20);return e.preventDefault()}}var r=e(\"../lib/event\"),i=e(\"../lib/useragent\");t.onMouseDown=o}),define(\"ace/commands/multi_select_commands\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\"],function(e,t,n){t.defaultCommands=[{name:\"addCursorAbove\",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:\"Ctrl-Alt-Up\",mac:\"Ctrl-Alt-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelow\",exec:function(e){e.selectMoreLines(1)},bindKey:{win:\"Ctrl-Alt-Down\",mac:\"Ctrl-Alt-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorAboveSkipCurrent\",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Up\",mac:\"Ctrl-Alt-Shift-Up\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"addCursorBelowSkipCurrent\",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Down\",mac:\"Ctrl-Alt-Shift-Down\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreBefore\",exec:function(e){e.selectMore(-1)},bindKey:{win:\"Ctrl-Alt-Left\",mac:\"Ctrl-Alt-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectMoreAfter\",exec:function(e){e.selectMore(1)},bindKey:{win:\"Ctrl-Alt-Right\",mac:\"Ctrl-Alt-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextBefore\",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Left\",mac:\"Ctrl-Alt-Shift-Left\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"selectNextAfter\",exec:function(e){e.selectMore(1,!0)},bindKey:{win:\"Ctrl-Alt-Shift-Right\",mac:\"Ctrl-Alt-Shift-Right\"},scrollIntoView:\"cursor\",readOnly:!0},{name:\"splitIntoLines\",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:\"Ctrl-Alt-L\",mac:\"Ctrl-Alt-L\"},readOnly:!0},{name:\"alignCursors\",exec:function(e){e.alignCursors()},bindKey:{win:\"Ctrl-Alt-A\",mac:\"Ctrl-Alt-A\"},scrollIntoView:\"cursor\"},{name:\"findAll\",exec:function(e){e.findAll()},bindKey:{win:\"Ctrl-Alt-K\",mac:\"Ctrl-Alt-G\"},scrollIntoView:\"cursor\",readOnly:!0}],t.multiSelectCommands=[{name:\"singleSelection\",bindKey:\"esc\",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:\"cursor\",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var r=e(\"../keyboard/hash_handler\").HashHandler;t.keyboardHandler=new r(t.multiSelectCommands)}),define(\"ace/multi_select\",[\"require\",\"exports\",\"module\",\"ace/range_list\",\"ace/range\",\"ace/selection\",\"ace/mouse/multi_select_handler\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/commands/multi_select_commands\",\"ace/search\",\"ace/edit_session\",\"ace/editor\",\"ace/config\"],function(e,t,n){function h(e,t,n){return c.$options.wrap=!0,c.$options.needle=t,c.$options.backwards=n==-1,c.find(e)}function v(e,t){return e.row==t.row&&e.column==t.column}function m(e){if(e.$multiselectOnSessionChange)return;e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on(\"changeSession\",e.$multiselectOnSessionChange),e.on(\"mousedown\",o),e.commands.addCommands(f.defaultCommands),g(e)}function g(e){function r(t){n&&(e.renderer.setMouseCursor(\"\"),n=!1)}var t=e.textInput.getElement(),n=!1;u.addListener(t,\"keydown\",function(t){var i=t.keyCode==18&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?n||(e.renderer.setMouseCursor(\"crosshair\"),n=!0):n&&r()}),u.addListener(t,\"keyup\",r),u.addListener(t,\"blur\",r)}var r=e(\"./range_list\").RangeList,i=e(\"./range\").Range,s=e(\"./selection\").Selection,o=e(\"./mouse/multi_select_handler\").onMouseDown,u=e(\"./lib/event\"),a=e(\"./lib/lang\"),f=e(\"./commands/multi_select_commands\");t.commands=f.defaultCommands.concat(f.multiSelectCommands);var l=e(\"./search\").Search,c=new l,p=e(\"./edit_session\").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(p.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(!e)return;if(!this.inMultiSelectMode&&this.rangeCount===0){var n=this.toOrientedRange();this.rangeList.add(n),this.rangeList.add(e);if(this.rangeList.ranges.length!=2)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(n),this.$onAddRange(n)}e.cursor||(e.cursor=e.end);var r=this.rangeList.add(e);return this.$onAddRange(e),r.length&&this.$onRemoveRange(r),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal(\"multiSelect\"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length&&this.$onRemoveRange(e)},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal(\"addRange\",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal(\"removeRange\",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal(\"singleSelect\"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c<o;c++)f.push(this.getLineRange(c,!0));l=this.getLineRange(o,!0),l.end.column=n.end.column,f.push(l),f.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.cursor),s=this.session.documentToScreenPosition(this.anchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column<t.column;if(s)var o=e.column,u=t.column,a=e.offsetX,f=t.offsetX;else var o=t.column,u=e.column,a=t.offsetX,f=e.offsetX;var l=e.row<t.row;if(l)var c=e.row,h=t.row;else var c=t.row,h=e.row;o<0&&(o=0),c<0&&(c=0),c==h&&(n=!0);var p;for(var d=c;d<=h;d++){var m=i.fromPoints(this.session.screenToDocumentPosition(d,o,a),this.session.screenToDocumentPosition(d,u,f));if(m.isEmpty()){if(p&&v(m.end,p))break;p=m.end}m.cursor=s?m.start:m.end,r.push(m)}l&&r.reverse();if(!n){var g=r.length-1;while(r[g].isEmpty()&&g>0)g--;if(g>0){var y=0;while(r[y].isEmpty())y++}for(var b=g;b>=y;b--)r[b].isEmpty()&&r.splice(b,1)}return r}}.call(s.prototype);var d=e(\"./editor\").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,\"ace_selection\",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle(\"ace_multiselect\"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle(\"ace_multiselect\"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler(\"exec\",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit(\"changeSelection\")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction==\"forEach\"?r=n.forEachSelection(t,e.args):t.multiSelectAction==\"forEachLine\"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction==\"single\"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges(),u.ranges[0]&&u.fromOrientedRange(u.ranges[0]);var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e=\"\";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r<t.length;r++)n.push(this.session.getTextRange(t[r]));var i=this.session.getDocument().getNewLineCharacter();e=n.join(i),e.length==(n.length-1)*i.length&&(e=\"\")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var n=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var r=t==this.multiSelect.anchor?n.cursor==n.start?n.end:n.start:n.cursor;r.row!=t.row||this.session.$clipPositionToDocument(r.row,r.column).column!=t.column?this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()):this.multiSelect.mergeOverlappingRanges()}},this.findAll=function(e,t,n){t=t||{},t.needle=e||t.needle;if(t.needle==undefined){var r=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(r)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;var s=this.multiSelect;n||s.toSingleRange(i[0]);for(var o=i.length;o--;)s.addRange(i[o],!0);return r&&s.rangeList.rangeAtPoint(r.start)&&s.addRange(r,!0),i.length},this.selectMoreLines=function(e,t){var n=this.selection.toOrientedRange(),r=n.cursor==n.end,s=this.session.documentToScreenPosition(n.cursor);this.selection.$desiredColumn&&(s.column=this.selection.$desiredColumn);var o=this.session.screenToDocumentPosition(s.row+e,s.column);if(!n.isEmpty())var u=this.session.documentToScreenPosition(r?n.end:n.start),a=this.session.screenToDocumentPosition(u.row+e,u.column);else var a=o;if(r){var f=i.fromPoints(o,a);f.cursor=f.start}else{var f=i.fromPoints(a,o);f.cursor=f.end}f.desiredColumn=s.column;if(!this.selection.inMultiSelectMode)this.selection.addRange(n);else if(t)var l=n.cursor;this.selection.addRange(f),l&&this.selection.substractPoint(l)},this.transposeSelections=function(e){var t=this.session,n=t.multiSelect,r=n.ranges;for(var i=r.length;i--;){var s=r[i];if(s.isEmpty()){var o=t.getWordRange(s.start.row,s.start.column);s.start.row=o.start.row,s.start.column=o.start.column,s.end.row=o.end.row,s.end.column=o.end.column}}n.mergeOverlappingRanges();var u=[];for(var i=r.length;i--;){var s=r[i];u.unshift(t.getTextRange(s))}e<0?u.unshift(u.pop()):u.push(u.shift());for(var i=r.length;i--;){var s=r[i],o=s.clone();t.replace(s,u[i]),s.start.row=o.start.row,s.start.column=o.start.column}n.fromOrientedRange(n.ranges[0])},this.selectMore=function(e,t,n){var r=this.session,i=r.multiSelect,s=i.toOrientedRange();if(s.isEmpty()){s=r.getWordRange(s.start.row,s.start.column),s.cursor=e==-1?s.start:s.end,this.multiSelect.addRange(s);if(n)return}var o=r.getTextRange(s),u=h(r,o,e);u&&(u.cursor=e==-1?u.start:u.end,this.session.unfold(u),this.multiSelect.addRange(u),this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(s.cursor)},this.alignCursors=function(){var e=this.session,t=e.multiSelect,n=t.ranges,r=-1,s=n.filter(function(e){if(e.cursor.row==r)return!0;r=e.cursor.row});if(!n.length||s.length==n.length-1){var o=this.selection.getRange(),u=o.start.row,f=o.end.row,l=u==f;if(l){var c=this.session.getLength(),h;do h=this.session.getLine(f);while(/[=:]/.test(h)&&++f<c);do h=this.session.getLine(u);while(/[=:]/.test(h)&&--u>0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join(\"\\n\")+\"\\n\"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),i<v&&(v=i),i});n.forEach(function(t,n){var r=t.cursor,s=d-r.column,o=m[n]-v;s>o?e.insert(r,a.stringRepeat(\" \",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(\" \",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\\s+/,\"$1 \"):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\\s*)(.*?)(\\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),s<t[2].length&&(s=t[2].length),o>t[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off(\"addRange\",this.$onAddRange),n.multiSelect.off(\"removeRange\",this.$onRemoveRange),n.multiSelect.off(\"multiSelect\",this.$onMultiSelect),n.multiSelect.off(\"singleSelect\",this.$onSingleSelect),n.multiSelect.lead.off(\"change\",this.$checkMultiselectChange),n.multiSelect.anchor.off(\"change\",this.$checkMultiselectChange)),t&&(t.multiSelect.on(\"addRange\",this.$onAddRange),t.multiSelect.on(\"removeRange\",this.$onRemoveRange),t.multiSelect.on(\"multiSelect\",this.$onMultiSelect),t.multiSelect.on(\"singleSelect\",this.$onSingleSelect),t.multiSelect.lead.on(\"change\",this.$checkMultiselectChange),t.multiSelect.anchor.on(\"change\",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e(\"./config\").defineOptions(d.prototype,\"editor\",{enableMultiselect:{set:function(e){m(this),e?(this.on(\"changeSession\",this.$multiselectOnSessionChange),this.on(\"mousedown\",o)):(this.off(\"changeSession\",this.$multiselectOnSessionChange),this.off(\"mousedown\",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),define(\"ace/mode/folding/fold_mode\",[\"require\",\"exports\",\"module\",\"ace/range\"],function(e,t,n){\"use strict\";var r=e(\"../../range\").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?\"start\":t==\"markbeginend\"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?\"end\":\"\"},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++t<a){var c=e.getLine(t).search(i);if(c==-1)continue;if(c<=o)break;l=t}if(l>f){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a==\"start\"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),define(\"ace/theme/textmate\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"],function(e,t,n){\"use strict\";t.isDark=!1,t.cssClass=\"ace-tm\",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;}',t.$id=\"ace/theme/textmate\";var r=e(\"../lib/dom\");r.importCssString(t.cssText,t.cssClass)}),define(\"ace/line_widgets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on(\"change\",this.updateOnChange),this.session.on(\"changeFold\",this.updateOnFold),this.session.on(\"changeEditor\",this.$onChangeEditor)}var r=e(\"./lib/oop\"),i=e(\"./lib/dom\"),s=e(\"./range\").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on(\"beforeRender\",this.measureWidgets),e.renderer.on(\"afterRender\",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off(\"beforeRender\",this.measureWidgets),t.renderer.off(\"afterRender\",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action==\"add\";for(var u=i+1;u<s;u++)n[u]&&(n[u].hidden=o);n[s]&&(o?n[i]?n[s].hidden=o:n[i]=n[s]:(n[i]==n[s]&&(n[i]=undefined),n[s].hidden=o))},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(!t)return;var n=e.start.row,r=e.end.row-n;if(r!==0)if(e.action==\"remove\"){var i=t.splice(n+1,r);i.forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var s=new Array(r);s.unshift(n,0),t.splice.apply(t,s),this.$updateRows()}},this.$updateRows=function(){var e=this.session.lineWidgets;if(!e)return;var t=!0;e.forEach(function(e,n){if(e){t=!1,e.row=n;while(e.$oldWidget)e.$oldWidget.row=n,e=e.$oldWidget}}),t&&(this.session.lineWidgets=null)},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var n=this.editor.renderer;e.html&&!e.el&&(e.el=i.createElement(\"div\"),e.el.innerHTML=e.html),e.el&&(i.addCssClass(e.el,\"ace_lineWidgetContainer\"),e.el.style.position=\"absolute\",e.el.style.zIndex=5,n.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),e.pixelHeight==null&&(e.pixelHeight=e.el.offsetHeight),e.rowCount==null&&(e.rowCount=e.pixelHeight/n.layerConfig.lineHeight);var r=this.session.getFoldAt(e.row,0);e.$fold=r;if(r){var s=this.session.lineWidgets;e.row==r.end.row&&!s[r.start.row]?s[r.start.row]=e:e.hidden=!0}return this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,n),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el);if(e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(t){}if(this.session.lineWidgets){var n=this.session.lineWidgets[e.row];if(n==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else while(n){if(n.$oldWidget==e){n.$oldWidget=e.$oldWidget;break}n=n.$oldWidget}}this.session._emit(\"changeFold\",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){var t=this.session.lineWidgets,n=t&&t[e],r=[];while(n)r.push(n),n=n.$oldWidget;return r},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var n=this.session._changedWidgets,r=t.layerConfig;if(!n||!n.length)return;var i=Infinity;for(var s=0;s<n.length;s++){var o=n[s];if(!o||!o.el)continue;if(o.session!=this.session)continue;if(!o._inDocument){if(this.session.lineWidgets[o.row]!=o)continue;o._inDocument=!0,t.container.appendChild(o.el)}o.h=o.el.offsetHeight,o.fixedWidth||(o.w=o.el.offsetWidth,o.screenWidth=Math.ceil(o.w/r.characterWidth));var u=o.h/r.lineHeight;o.coverLine&&(u-=this.session.getRowLineCount(o.row),u<0&&(u=0)),o.rowCount!=u&&(o.rowCount=u,o.row<i&&(i=o.row))}i!=Infinity&&(this.session._emit(\"changeFold\",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]},this.renderWidgets=function(e,t){var n=t.layerConfig,r=this.session.lineWidgets;if(!r)return;var i=Math.min(this.firstRow,n.firstRow),s=Math.max(this.lastRow,n.lastRow,r.length);while(i>0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+\"px\";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+\"px\";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+\"px\",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+\"px\"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+\"px\":u.el.style.right=\"\"}}}).call(o.prototype),t.LineWidgets=o}),define(\"ace/ext/error_marker\",[\"require\",\"exports\",\"module\",\"ace/line_widgets\",\"ace/lib/dom\",\"ace/range\"],function(e,t,n){\"use strict\";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?\"unshift\":\"push\"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e(\"../line_widgets\").LineWidgets,i=e(\"../lib/dom\"),s=e(\"../range\").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type==\"errorMarker\"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!=\"number\"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:[\"Looks good!\"],className:\"ace_ok\"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement(\"div\"),type:\"errorMarker\"},p=h.el.appendChild(i.createElement(\"div\")),d=h.el.appendChild(i.createElement(\"div\"));d.className=\"error_widget_arrow \"+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+\"px\",h.el.className=\"error_widget_wrapper\",p.className=\"error_widget \"+l.className,p.innerHTML=l.text.join(\"<br>\"),p.appendChild(i.createElement(\"div\"));var m=function(e,t,n){if(t===0&&(n===\"esc\"||n===\"return\"))return h.destroy(),{command:\"null\"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off(\"changeSelection\",h.destroy),e.off(\"changeSession\",h.destroy),e.off(\"mouseup\",h.destroy),e.off(\"change\",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on(\"changeSelection\",h.destroy),e.on(\"changeSession\",h.destroy),e.on(\"mouseup\",h.destroy),e.on(\"change\",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(\" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }\",\"\")}),define(\"ace/ace\",[\"require\",\"exports\",\"module\",\"ace/lib/fixoldbrowsers\",\"ace/lib/dom\",\"ace/lib/event\",\"ace/range\",\"ace/editor\",\"ace/edit_session\",\"ace/undomanager\",\"ace/virtual_renderer\",\"ace/worker/worker_client\",\"ace/keyboard/hash_handler\",\"ace/placeholder\",\"ace/multi_select\",\"ace/mode/folding/fold_mode\",\"ace/theme/textmate\",\"ace/ext/error_marker\",\"ace/config\"],function(e,t,n){\"use strict\";e(\"./lib/fixoldbrowsers\");var r=e(\"./lib/dom\"),i=e(\"./lib/event\"),s=e(\"./range\").Range,o=e(\"./editor\").Editor,u=e(\"./edit_session\").EditSession,a=e(\"./undomanager\").UndoManager,f=e(\"./virtual_renderer\").VirtualRenderer;e(\"./worker/worker_client\"),e(\"./keyboard/hash_handler\"),e(\"./placeholder\"),e(\"./multi_select\"),e(\"./mode/folding/fold_mode\"),e(\"./theme/textmate\"),e(\"./ext/error_marker\"),t.config=e(\"./config\"),t.require=e,typeof define==\"function\"&&(t.define=define),t.edit=function(e,n){if(typeof e==\"string\"){var s=e;e=document.getElementById(s);if(!e)throw new Error(\"ace.edit can't find div #\"+s)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var u=\"\";if(e&&/input|textarea/i.test(e.tagName)){var a=e;u=a.value,e=r.createElement(\"pre\"),a.parentNode.replaceChild(e,a)}else e&&(u=e.textContent,e.innerHTML=\"\");var l=t.createEditSession(u),c=new o(new f(e),l,n),h={document:l,editor:c,onResize:c.resize.bind(c,null)};return a&&(h.textarea=a),i.addListener(window,\"resize\",h.onResize),c.on(\"destroy\",function(){i.removeListener(window,\"resize\",h.onResize),h.editor.container.env=null}),c.container.env=c.env=h,c},t.createEditSession=function(e,t){var n=new u(e,t);return n.setUndoManager(new a),n},t.Range=s,t.Editor=o,t.EditSession=u,t.UndoManager=a,t.VirtualRenderer=f,t.version=\"1.4.2\"}); (function() {\n window.require([\"ace/ace\"], function(a) {\n if (a) {\n a.config.init(true);\n a.define = window.define;\n }\n if (!window.ace)\n window.ace = a;\n for (var key in a) if (a.hasOwnProperty(key))\n window.ace[key] = a[key];\n window.ace[\"default\"] = window.ace;\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = window.ace;\n }\n });\n })();\n ","Xtento_StockImport/js/ace/mode-text.min.js":"; (function() {\n window.require([\"ace/mode/text\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","Xtento_StockImport/js/ace/worker-xml.min.js":"\"no use strict\";!function(e){function t(e,t){var n=e,r=\"\";while(n){var i=t[n];if(typeof i==\"string\")return i+r;if(i)return i.location.replace(/\\/*$/,\"/\")+(r||i.main||i.name);if(i===!1)return\"\";var s=n.lastIndexOf(\"/\");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!=\"undefined\"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:\"log\",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:\"error\",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf(\"!\")!==-1){var r=n.split(\"!\");return e.normalizeModule(t,r[0])+\"!\"+e.normalizeModule(t,r[1])}if(n.charAt(0)==\".\"){var i=t.split(\"/\").slice(0,-1).join(\"/\");n=(i?i+\"/\":\"\")+n;while(n.indexOf(\".\")!==-1&&s!=n){var s=n;n=n.replace(/^\\.\\//,\"\").replace(/\\/\\.\\//,\"/\").replace(/[^\\/]+\\/\\.\\.\\//,\"\")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error(\"worker.js require() accepts only (parentId, id) as arguments\");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log(\"unable to load \"+i);var o=t(i,e.require.tlns);return o.slice(-3)!=\".js\"&&(o+=\".js\"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!=\"string\"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!=\"function\"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=[\"require\",\"exports\",\"module\"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.slice(0,r.length).map(function(t){switch(t){case\"require\":return i;case\"exports\":return e.exports;case\"module\":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require(\"ace/lib/event_emitter\").EventEmitter,r=e.require(\"ace/lib/oop\"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:\"call\",id:t,data:e})},this.emit=function(e,t){postMessage({type:\"event\",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error(\"Unknown command:\"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require(\"ace/lib/es5-shim\"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}}(this),define(\"ace/lib/oop\",[],function(e,t,n){\"use strict\";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),define(\"ace/lib/lang\",[],function(e,t,n){\"use strict\";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split(\"\").reverse().join(\"\")},t.stringRepeat=function(e,t){var n=\"\";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\\s\\s*/,i=/\\s\\s*$/;t.stringTrimLeft=function(e){return e.replace(r,\"\")},t.stringTrimRight=function(e){return e.replace(i,\"\")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n<r;n++)e[n]&&typeof e[n]==\"object\"?t[n]=this.copyObject(e[n]):t[n]=e[n];return t},t.deepCopy=function s(e){if(typeof e!=\"object\"||!e)return e;var t;if(Array.isArray(e)){t=[];for(var n=0;n<e.length;n++)t[n]=s(e[n]);return t}if(Object.prototype.toString.call(e)!==\"[object Object]\")return e;t={};for(var n in e)t[n]=s(e[n]);return t},t.arrayToMap=function(e){var t={};for(var n=0;n<e.length;n++)t[e[n]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var n in e)t[n]=e[n];return t},t.arrayRemove=function(e,t){for(var n=0;n<=e.length;n++)t===e[n]&&e.splice(n,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\\]\\/\\\\])/g,\"\\\\$1\")},t.escapeHTML=function(e){return(\"\"+e).replace(/&/g,\"&\").replace(/\"/g,\""\").replace(/'/g,\"'\").replace(/</g,\"<\")},t.getMatchOffsets=function(e,t){var n=[];return e.replace(t,function(e){n.push({offset:arguments[arguments.length-2],length:e.length})}),n},t.deferredCall=function(e){var t=null,n=function(){t=null,e()},r=function(e){return r.cancel(),t=setTimeout(n,e||0),r};return r.schedule=r,r.call=function(){return this.cancel(),e(),r},r.cancel=function(){return clearTimeout(t),t=null,r},r.isPending=function(){return t},r},t.delayedCall=function(e,t){var n=null,r=function(){n=null,e()},i=function(e){n==null&&(n=setTimeout(r,e||t))};return i.delay=function(e){n&&clearTimeout(n),n=setTimeout(r,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){n&&clearTimeout(n),n=null},i.isPending=function(){return n},i}}),define(\"ace/range\",[],function(e,t,n){\"use strict\";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return\"Range: [\"+this.start.row+\"/\"+this.start.column+\"] -> [\"+this.end.row+\"/\"+this.end.column+\"]\"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e==\"object\"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e==\"object\"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?t<this.start.column?-1:t>this.end.column?1:0:e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.row<e)var n={row:e,column:0};if(this.start.row>t)var r={row:t+1,column:0};else if(this.start.row<e)var r={row:e,column:0};return i.fromPoints(r||this.start,n||this.end)},this.extend=function(e,t){var n=this.compare(e,t);if(n==0)return this;if(n==-1)var r={row:e,column:t};else var s={row:e,column:t};return i.fromPoints(r||this.start,s||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return i.fromPoints(this.start,this.end)},this.collapseRows=function(){return this.end.column==0?new i(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new i(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),n=e.documentToScreenPosition(this.end);return new i(t.row,t.column,n.row,n.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(i.prototype),i.fromPoints=function(e,t){return new i(e.row,e.column,t.row,t.column)},i.comparePoints=r,i.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=i}),define(\"ace/apply_delta\",[],function(e,t,n){\"use strict\";function r(e,t){throw console.log(\"Invalid Delta:\",e),\"Invalid Delta: \"+t}function i(e,t){return t.row>=0&&t.row<e.length&&t.column>=0&&t.column<=e[t.row].length}function s(e,t){t.action!=\"insert\"&&t.action!=\"remove\"&&r(t,\"delta.action must be 'insert' or 'remove'\"),t.lines instanceof Array||r(t,\"delta.lines must be an Array\"),(!t.start||!t.end)&&r(t,\"delta.start/end must be an present\");var n=t.start;i(e,t.start)||r(t,\"delta.start must be contained in document\");var s=t.end;t.action==\"remove\"&&!i(e,s)&&r(t,\"delta.end must contained in document for 'remove' actions\");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,\"delta.range must match delta lines\")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||\"\";switch(t.action){case\"insert\":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case\"remove\":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),define(\"ace/lib/event_emitter\",[],function(e,t,n){\"use strict\";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!=\"object\"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o<n.length;o++){n[o](t,this);if(t.propagationStopped)break}if(r&&!t.defaultPrevented)return r(t,this)},r._signal=function(e,t){var n=(this._eventRegistry||{})[e];if(!n)return;n=n.slice();for(var r=0;r<n.length;r++)n[r](t,this)},r.once=function(e,t){var n=this;this.addEventListener(e,function r(){n.removeEventListener(e,r),t.apply(null,arguments)});if(!t)return new Promise(function(e){t=e})},r.setDefaultHandler=function(e,t){var n=this._defaultHandlers;n||(n=this._defaultHandlers={_disabled_:{}});if(n[e]){var r=n[e],i=n._disabled_[e];i||(n._disabled_[e]=i=[]),i.push(r);var s=i.indexOf(t);s!=-1&&i.splice(s,1)}n[e]=t},r.removeDefaultHandler=function(e,t){var n=this._defaultHandlers;if(!n)return;var r=n._disabled_[e];if(n[e]==t)r&&this.setDefaultHandler(e,r.pop());else if(r){var i=r.indexOf(t);i!=-1&&r.splice(i,1)}},r.on=r.addEventListener=function(e,t,n){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];return r||(r=this._eventRegistry[e]=[]),r.indexOf(t)==-1&&r[n?\"unshift\":\"push\"](t),t},r.off=r.removeListener=r.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];if(!n)return;var r=n.indexOf(t);r!==-1&&n.splice(r,1)},r.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=r}),define(\"ace/anchor\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./lib/event_emitter\").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n==\"undefined\"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&r}function t(t,n,r){var i=t.action==\"insert\",s=(i?1:-1)*(t.end.row-t.start.row),o=(i?1:-1)*(t.end.column-t.start.column),u=t.start,a=i?u:t.end;return e(n,u,r)?{row:n.row,column:n.column}:e(a,n,!r)?{row:n.row+s,column:n.column+(n.row==a.row?o:0)}:{row:u.row,column:u.column}}r.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(e){if(e.start.row==e.end.row&&e.start.row!=this.row)return;if(e.start.row>this.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal(\"change\",{old:i,value:r})},this.detach=function(){this.document.removeEventListener(\"change\",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on(\"change\",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),define(\"ace/document\",[],function(e,t,n){\"use strict\";var r=e(\"./lib/oop\"),i=e(\"./apply_delta\").applyDelta,s=e(\"./lib/event_emitter\").EventEmitter,o=e(\"./range\").Range,u=e(\"./anchor\").Anchor,a=function(e){this.$lines=[\"\"],e.length===0?this.$lines=[\"\"]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},\"aaa\".split(/a/).length===0?this.$split=function(e){return e.replace(/\\r\\n|\\r/g,\"\\n\").split(\"\\n\")}:this.$split=function(e){return e.split(/\\r\\n|\\r|\\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\\r\\n|\\r|\\n)/m);this.$autoNewLine=t?t[1]:\"\\n\",this._signal(\"changeNewLineMode\")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case\"windows\":return\"\\r\\n\";case\"unix\":return\"\\n\";default:return this.$autoNewLine||\"\\n\"}},this.$autoNewLine=\"\",this.$newLineMode=\"auto\",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal(\"changeNewLineMode\")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e==\"\\r\\n\"||e==\"\\r\"||e==\"\\n\"},this.getLine=function(e){return this.$lines[e]||\"\"},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||\"\").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn(\"Use of document.insertLines is deprecated. Use the insertFullLines method instead.\"),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn(\"Use of document.removeLines is deprecated. Use the removeFullLines method instead.\"),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn(\"Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead.\"),this.insertMergedLines(e,[\"\",\"\"])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:\"insert\",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e<this.getLength()?(t=t.concat([\"\"]),n=0):(t=[\"\"].concat(t),e--,n=this.$lines[e].length),this.insertMergedLines({row:e,column:n},t)},this.insertMergedLines=function(e,t){var n=this.clippedPos(e.row,e.column),r={row:n.row+t.length-1,column:(t.length==1?n.column:0)+t[t.length-1].length};return this.applyDelta({start:n,end:r,action:\"insert\",lines:t}),this.clonePos(r)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),n=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:n,action:\"remove\",lines:this.getLinesForRange({start:t,end:n})}),this.clonePos(t)},this.removeInLine=function(e,t,n){var r=this.clippedPos(e,t),i=this.clippedPos(e,n);return this.applyDelta({start:r,end:i,action:\"remove\",lines:this.getLinesForRange({start:r,end:i})},!0),this.clonePos(r)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1),t=Math.min(Math.max(0,t),this.getLength()-1);var n=t==this.getLength()-1&&e>0,r=t<this.getLength()-1,i=n?e-1:e,s=n?this.getLine(i).length:0,u=r?t+1:t,a=r?0:this.getLine(u).length,f=new o(i,s,u,a),l=this.$lines.slice(e,t+1);return this.applyDelta({start:f.start,end:f.end,action:\"remove\",lines:this.getLinesForRange(f)}),l},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:\"remove\",lines:[\"\",\"\"]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action==\"insert\";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4?this.$splitAndapplyLargeDelta(e,2e4):(i(this.$lines,e,t),this._signal(\"change\",e))},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length-t+1,i=e.start.row,s=e.start.column;for(var o=0,u=0;o<r;o=u){u+=t-1;var a=n.slice(o,u);a.push(\"\"),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}e.lines=n.slice(o),e.start.row=i+o,e.start.column=s,this.applyDelta(e,!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action==\"insert\"?\"remove\":\"insert\",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i<s;i++){e-=n[i].length+r;if(e<0)return{row:i,column:e+n[i].length+r}}return{row:s-1,column:e+n[s-1].length+r}},this.positionToIndex=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length,i=0,s=Math.min(e.row,n.length);for(var o=t||0;o<s;++o)i+=n[o].length+r;return i+e.column}}).call(a.prototype),t.Document=a}),define(\"ace/worker/mirror\",[],function(e,t,n){\"use strict\";var r=e(\"../range\").Range,i=e(\"../document\").Document,s=e(\"../lib/lang\"),o=t.Mirror=function(e){this.sender=e;var t=this.doc=new i(\"\"),n=this.deferredUpdate=s.delayedCall(this.onUpdate.bind(this)),r=this;e.on(\"change\",function(e){var i=e.data;if(i[0].start)t.applyDeltas(i);else for(var s=0;s<i.length;s+=2){if(Array.isArray(i[s+1]))var o={action:\"insert\",start:i[s],lines:i[s+1]};else var o={action:\"remove\",start:i[s],end:i[s+1]};t.applyDelta(o,!0)}if(r.$timeout)return n.schedule(r.$timeout);r.onUpdate()})};(function(){this.$timeout=500,this.setTimeout=function(e){this.$timeout=e},this.setValue=function(e){this.doc.setValue(e),this.deferredUpdate.schedule(this.$timeout)},this.getValue=function(e){this.sender.callback(this.doc.getValue(),e)},this.onUpdate=function(){},this.isPending=function(){return this.deferredUpdate.isPending()}}).call(o.prototype)}),define(\"ace/mode/xml/sax\",[],function(e,t,n){function d(){}function v(e,t,n,r,i){function s(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function o(e){var t=e.slice(1,-1);return t in n?n[t]:t.charAt(0)===\"#\"?s(parseInt(t.substr(1).replace(\"x\",\"0x\"))):(i.error(\"entity not found:\"+e),e)}function u(t){var n=e.substring(v,t).replace(/&#?\\w+;/g,o);h&&a(v),r.characters(n,0,t-v),v=t}function a(t,n){while(t>=l&&(n=c.exec(e)))f=n.index,l=f+n[0].length,h.lineNumber++;h.columnNumber=t-f+1}var f=0,l=0,c=/.+(?:\\r\\n?|\\n)|.*$/g,h=r.locator,p=[{currentNSMap:t}],d={},v=0;for(;;){var E=e.indexOf(\"<\",v);if(E<0){if(!e.substr(v).match(/^\\s*$/)){var N=r.document,C=N.createTextNode(e.substr(v));N.appendChild(C),r.currentElement=C}return}E>v&&u(E);switch(e.charAt(E+1)){case\"/\":var k=e.indexOf(\">\",E+3),L=e.substring(E+2,k),A;if(!(p.length>1)){i.fatalError(\"end tag name not found for: \"+L);break}A=p.pop();var O=A.localNSMap;A.tagName!=L&&i.fatalError(\"end tag name: \"+L+\" does not match the current start tagName: \"+A.tagName),r.endElement(A.uri,A.localName,L);if(O)for(var M in O)r.endPrefixMapping(M);k++;break;case\"?\":h&&a(E),k=x(e,E,r);break;case\"!\":h&&a(E),k=S(e,E,r,i);break;default:try{h&&a(E);var _=new T,k=g(e,E,_,o,i),D=_.length;if(D&&h){var P=m(h,{});for(var E=0;E<D;E++){var H=_[E];a(H.offset),H.offset=m(h,{})}m(P,h)}!_.closed&&w(e,k,_.tagName,d)&&(_.closed=!0,n.nbsp||i.warning(\"unclosed xml attribute\")),y(_,r,p),_.uri===\"http://www.w3.org/1999/xhtml\"&&!_.closed?k=b(e,k,_.tagName,o,r):k++}catch(B){i.error(\"element parse error: \"+B),k=-1}}k<0?u(E+1):v=k}}function m(e,t){return t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}function g(e,t,n,r,i){var s,d,v=++t,m=o;for(;;){var g=e.charAt(v);switch(g){case\"=\":if(m===u)s=e.slice(t,v),m=f;else{if(m!==a)throw new Error(\"attribute equal must after attrName\");m=f}break;case\"'\":case'\"':if(m===f){t=v+1,v=e.indexOf(g,t);if(!(v>0))throw new Error(\"attribute value no end '\"+g+\"' match\");d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t-1),m=c}else{if(m!=l)throw new Error('attribute value must after \"=\"');d=e.slice(t,v).replace(/&#?\\w+;/g,r),n.add(s,d,t),i.warning('attribute \"'+s+'\" missed start quot('+g+\")!!\"),t=v+1,m=c}break;case\"/\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:m=p,n.closed=!0;case l:case u:case a:break;default:throw new Error(\"attribute invalid close char('/')\")}break;case\"\":i.error(\"unexpected end of input\");case\">\":switch(m){case o:n.setTagName(e.slice(t,v));case c:case h:case p:break;case l:case u:d=e.slice(t,v),d.slice(-1)===\"/\"&&(n.closed=!0,d=d.slice(0,-1));case a:m===a&&(d=s),m==l?(i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d.replace(/&#?\\w+;/g,r),t)):(i.warning('attribute \"'+d+'\" missed value!! \"'+d+'\" instead!!'),n.add(d,d,t));break;case f:throw new Error(\"attribute value missed!!\")}return v;case\"\\u0080\":g=\" \";default:if(g<=\" \")switch(m){case o:n.setTagName(e.slice(t,v)),m=h;break;case u:s=e.slice(t,v),m=a;break;case l:var d=e.slice(t,v).replace(/&#?\\w+;/g,r);i.warning('attribute \"'+d+'\" missed quot(\")!!'),n.add(s,d,t);case c:m=h}else switch(m){case a:i.warning('attribute \"'+s+'\" missed value!! \"'+s+'\" instead!!'),n.add(s,s,t),t=v,m=u;break;case c:i.warning('attribute space is required\"'+s+'\"!!');case h:m=u,t=v;break;case f:m=l,t=v;break;case p:throw new Error(\"elements closed character '/' and '>' must be connected to\")}}v++}}function y(e,t,n){var r=e.tagName,i=null,s=n[n.length-1].currentNSMap,o=e.length;while(o--){var u=e[o],a=u.qName,f=u.value,l=a.indexOf(\":\");if(l>0)var c=u.prefix=a.slice(0,l),h=a.slice(l+1),p=c===\"xmlns\"&&h;else h=a,c=null,p=a===\"xmlns\"&&\"\";u.localName=h,p!==!1&&(i==null&&(i={},E(s,s={})),s[p]=i[p]=f,u.uri=\"http://www.w3.org/2000/xmlns/\",t.startPrefixMapping(p,f))}var o=e.length;while(o--){u=e[o];var c=u.prefix;c&&(c===\"xml\"&&(u.uri=\"http://www.w3.org/XML/1998/namespace\"),c!==\"xmlns\"&&(u.uri=s[c]))}var l=r.indexOf(\":\");l>0?(c=e.prefix=r.slice(0,l),h=e.localName=r.slice(l+1)):(c=null,h=e.localName=r);var d=e.uri=s[c||\"\"];t.startElement(d,h,r,e);if(e.closed){t.endElement(d,h,r);if(i)for(c in i)t.endPrefixMapping(c)}else e.currentNSMap=s,e.localNSMap=i,n.push(e)}function b(e,t,n,r,i){if(/^(?:script|textarea)$/i.test(n)){var s=e.indexOf(\"</\"+n+\">\",t),o=e.substring(t+1,s);if(/[&<]/.test(o))return/^script$/i.test(n)?(i.characters(o,0,o.length),s):(o=o.replace(/&#?\\w+;/g,r),i.characters(o,0,o.length),s)}return t+1}function w(e,t,n,r){var i=r[n];return i==null&&(i=r[n]=e.lastIndexOf(\"</\"+n+\">\")),i<t}function E(e,t){for(var n in e)t[n]=e[n]}function S(e,t,n,r){var i=e.charAt(t+2);switch(i){case\"-\":if(e.charAt(t+3)===\"-\"){var s=e.indexOf(\"-->\",t+4);return s>t?(n.comment(e,t+4,s-t-4),s+3):(r.error(\"Unclosed comment\"),-1)}return-1;default:if(e.substr(t+3,6)==\"CDATA[\"){var s=e.indexOf(\"]]>\",t+9);return n.startCDATA(),n.characters(e,t+9,s-t-9),n.endCDATA(),s+3}var o=C(e,t),u=o.length;if(u>1&&/!doctype/i.test(o[0][0])){var a=o[1][0],f=u>3&&/^public$/i.test(o[2][0])&&o[3][0],l=u>4&&o[4][0],c=o[u-1];return n.startDTD(a,f&&f.replace(/^(['\"])(.*?)\\1$/,\"$2\"),l&&l.replace(/^(['\"])(.*?)\\1$/,\"$2\")),n.endDTD(),c.index+c[0].length}}return-1}function x(e,t,n){var r=e.indexOf(\"?>\",t);if(r){var i=e.substring(t,r).match(/^<\\?(\\S*)\\s*([\\s\\S]*?)\\s*$/);if(i){var s=i[0].length;return n.processingInstruction(i[1],i[2]),r+2}return-1}return-1}function T(e){}function N(e,t){return e.__proto__=t,e}function C(e,t){var n,r=[],i=/'[^']+'|\"[^\"]+\"|[^\\s<>\\/=]+=?|(\\/?\\s*>|<)/g;i.lastIndex=t,i.exec(e);while(n=i.exec(e)){r.push(n);if(n[1])return r}}var r=/[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/,i=new RegExp(\"[\\\\-\\\\.0-9\"+r.source.slice(1,-1)+\"\\u00b7\\u0300-\\u036f\\\\ux203F-\\u2040]\"),s=new RegExp(\"^\"+r.source+i.source+\"*(?::\"+r.source+i.source+\"*)?$\"),o=0,u=1,a=2,f=3,l=4,c=5,h=6,p=7;return d.prototype={parse:function(e,t,n){var r=this.domBuilder;r.startDocument(),E(t,t={}),v(e,t,n,r,this.errorHandler),r.endDocument()}},T.prototype={setTagName:function(e){if(!s.test(e))throw new Error(\"invalid tagName:\"+e);this.tagName=e},add:function(e,t,n){if(!s.test(e))throw new Error(\"invalid attribute:\"+e);this[this.length++]={qName:e,value:t,offset:n}},length:0,getLocalName:function(e){return this[e].localName},getOffset:function(e){return this[e].offset},getQName:function(e){return this[e].qName},getURI:function(e){return this[e].uri},getValue:function(e){return this[e].value}},N({},N.prototype)instanceof N||(N=function(e,t){function n(){}n.prototype=t,n=new n;for(t in e)n[t]=e[t];return n}),d}),define(\"ace/mode/xml/dom\",[],function(e,t,n){function r(e,t){for(var n in e)t[n]=e[n]}function i(e,t){var n=function(){},i=e.prototype;if(Object.create){var s=Object.create(t.prototype);i.__proto__=s}i instanceof t||(n.prototype=t.prototype,n=new n,r(i,n),e.prototype=i=n),i.constructor!=e&&(typeof e!=\"function\"&&console.error(\"unknown Class:\"+e),i.constructor=e)}function B(e,t){if(t instanceof Error)var n=t;else n=this,Error.call(this,w[e]),this.message=w[e],Error.captureStackTrace&&Error.captureStackTrace(this,B);return n.code=e,t&&(this.message=this.message+\": \"+t),n}function j(){}function F(e,t){this._node=e,this._refresh=t,I(this)}function I(e){var t=e._node._inc||e._node.ownerDocument._inc;if(e._inc!=t){var n=e._refresh(e._node);gt(e,\"length\",n.length),r(n,e),e._inc=t}}function q(){}function R(e,t){var n=e.length;while(n--)if(e[n]===t)return n}function U(e,t,n,r){r?t[R(t,r)]=n:t[t.length++]=n;if(e){n.ownerElement=e;var i=e.ownerDocument;i&&(r&&Q(i,e,r),K(i,e,n))}}function z(e,t,n){var r=R(t,n);if(!(r>=0))throw new B(L,new Error);var i=t.length-1;while(r<i)t[r]=t[++r];t.length=i;if(e){var s=e.ownerDocument;s&&(Q(s,e,n),n.ownerElement=null)}}function W(e){this._features={};if(e)for(var t in e)this._features=e[t]}function X(){}function V(e){return e==\"<\"&&\"<\"||e==\">\"&&\">\"||e==\"&\"&&\"&\"||e=='\"'&&\""\"||\"&#\"+e.charCodeAt()+\";\"}function $(e,t){if(t(e))return!0;if(e=e.firstChild)do if($(e,t))return!0;while(e=e.nextSibling)}function J(){}function K(e,t,n){e&&e._inc++;var r=n.namespaceURI;r==\"http://www.w3.org/2000/xmlns/\"&&(t._nsMap[n.prefix?n.localName:\"\"]=n.value)}function Q(e,t,n,r){e&&e._inc++;var i=n.namespaceURI;i==\"http://www.w3.org/2000/xmlns/\"&&delete t._nsMap[n.prefix?n.localName:\"\"]}function G(e,t,n){if(e&&e._inc){e._inc++;var r=t.childNodes;if(n)r[r.length++]=n;else{var i=t.firstChild,s=0;while(i)r[s++]=i,i=i.nextSibling;r.length=s}}}function Y(e,t){var n=t.previousSibling,r=t.nextSibling;return n?n.nextSibling=r:e.firstChild=r,r?r.previousSibling=n:e.lastChild=n,G(e.ownerDocument,e),t}function Z(e,t,n){var r=t.parentNode;r&&r.removeChild(t);if(t.nodeType===g){var i=t.firstChild;if(i==null)return t;var s=t.lastChild}else i=s=t;var o=n?n.previousSibling:e.lastChild;i.previousSibling=o,s.nextSibling=n,o?o.nextSibling=i:e.firstChild=i,n==null?e.lastChild=s:n.previousSibling=s;do i.parentNode=e;while(i!==s&&(i=i.nextSibling));return G(e.ownerDocument||e,e),t.nodeType==g&&(t.firstChild=t.lastChild=null),t}function et(e,t){var n=t.parentNode;if(n){var r=e.lastChild;n.removeChild(t);var r=e.lastChild}var r=e.lastChild;return t.parentNode=e,t.previousSibling=r,t.nextSibling=null,r?r.nextSibling=t:e.firstChild=t,e.lastChild=t,G(e.ownerDocument,e,t),t}function tt(){this._nsMap={}}function nt(){}function rt(){}function it(){}function st(){}function ot(){}function ut(){}function at(){}function ft(){}function lt(){}function ct(){}function ht(){}function pt(){}function dt(e,t){switch(e.nodeType){case u:var n=e.attributes,r=n.length,i=e.firstChild,o=e.tagName,h=s===e.namespaceURI;t.push(\"<\",o);for(var y=0;y<r;y++)dt(n.item(y),t);if(i||h&&!/^(?:meta|link|img|br|hr|input|button)$/i.test(o)){t.push(\">\");if(h&&/^script$/i.test(o))i&&t.push(i.data);else while(i)dt(i,t),i=i.nextSibling;t.push(\"</\",o,\">\")}else t.push(\"/>\");return;case v:case g:var i=e.firstChild;while(i)dt(i,t),i=i.nextSibling;return;case a:return t.push(\" \",e.name,'=\"',e.value.replace(/[<&\"]/g,V),'\"');case f:return t.push(e.data.replace(/[<&]/g,V));case l:return t.push(\"<![CDATA[\",e.data,\"]]>\");case d:return t.push(\"<!--\",e.data,\"-->\");case m:var b=e.publicId,w=e.systemId;t.push(\"<!DOCTYPE \",e.name);if(b)t.push(' PUBLIC \"',b),w&&w!=\".\"&&t.push('\" \"',w),t.push('\">');else if(w&&w!=\".\")t.push(' SYSTEM \"',w,'\">');else{var E=e.internalSubset;E&&t.push(\" [\",E,\"]\"),t.push(\">\")}return;case p:return t.push(\"<?\",e.target,\" \",e.data,\"?>\");case c:return t.push(\"&\",e.nodeName,\";\");default:t.push(\"??\",e.nodeName)}}function vt(e,t,n){var r;switch(t.nodeType){case u:r=t.cloneNode(!1),r.ownerDocument=e;case g:break;case a:n=!0}r||(r=t.cloneNode(!1)),r.ownerDocument=e,r.parentNode=null;if(n){var i=t.firstChild;while(i)r.appendChild(vt(e,i,n)),i=i.nextSibling}return r}function mt(e,t,n){var r=new t.constructor;for(var i in t){var s=t[i];typeof s!=\"object\"&&s!=r[i]&&(r[i]=s)}t.childNodes&&(r.childNodes=new j),r.ownerDocument=e;switch(r.nodeType){case u:var o=t.attributes,f=r.attributes=new q,l=o.length;f._ownerElement=r;for(var c=0;c<l;c++)r.setAttributeNode(mt(e,o.item(c),!0));break;case a:n=!0}if(n){var h=t.firstChild;while(h)r.appendChild(mt(e,h,n)),h=h.nextSibling}return r}function gt(e,t,n){e[t]=n}function yt(e){switch(e.nodeType){case 1:case 11:var t=[];e=e.firstChild;while(e)e.nodeType!==7&&e.nodeType!==8&&t.push(yt(e)),e=e.nextSibling;return t.join(\"\");default:return e.nodeValue}}var s=\"http://www.w3.org/1999/xhtml\",o={},u=o.ELEMENT_NODE=1,a=o.ATTRIBUTE_NODE=2,f=o.TEXT_NODE=3,l=o.CDATA_SECTION_NODE=4,c=o.ENTITY_REFERENCE_NODE=5,h=o.ENTITY_NODE=6,p=o.PROCESSING_INSTRUCTION_NODE=7,d=o.COMMENT_NODE=8,v=o.DOCUMENT_NODE=9,m=o.DOCUMENT_TYPE_NODE=10,g=o.DOCUMENT_FRAGMENT_NODE=11,y=o.NOTATION_NODE=12,b={},w={},E=b.INDEX_SIZE_ERR=(w[1]=\"Index size error\",1),S=b.DOMSTRING_SIZE_ERR=(w[2]=\"DOMString size error\",2),x=b.HIERARCHY_REQUEST_ERR=(w[3]=\"Hierarchy request error\",3),T=b.WRONG_DOCUMENT_ERR=(w[4]=\"Wrong document\",4),N=b.INVALID_CHARACTER_ERR=(w[5]=\"Invalid character\",5),C=b.NO_DATA_ALLOWED_ERR=(w[6]=\"No data allowed\",6),k=b.NO_MODIFICATION_ALLOWED_ERR=(w[7]=\"No modification allowed\",7),L=b.NOT_FOUND_ERR=(w[8]=\"Not found\",8),A=b.NOT_SUPPORTED_ERR=(w[9]=\"Not supported\",9),O=b.INUSE_ATTRIBUTE_ERR=(w[10]=\"Attribute in use\",10),M=b.INVALID_STATE_ERR=(w[11]=\"Invalid state\",11),_=b.SYNTAX_ERR=(w[12]=\"Syntax error\",12),D=b.INVALID_MODIFICATION_ERR=(w[13]=\"Invalid modification\",13),P=b.NAMESPACE_ERR=(w[14]=\"Invalid namespace\",14),H=b.INVALID_ACCESS_ERR=(w[15]=\"Invalid access\",15);B.prototype=Error.prototype,r(b,B),j.prototype={length:0,item:function(e){return this[e]||null}},F.prototype.item=function(e){return I(this),this[e]},i(F,j),q.prototype={length:0,item:j.prototype.item,getNamedItem:function(e){var t=this.length;while(t--){var n=this[t];if(n.nodeName==e)return n}},setNamedItem:function(e){var t=e.ownerElement;if(t&&t!=this._ownerElement)throw new B(O);var n=this.getNamedItem(e.nodeName);return U(this._ownerElement,this,e,n),n},setNamedItemNS:function(e){var t=e.ownerElement,n;if(t&&t!=this._ownerElement)throw new B(O);return n=this.getNamedItemNS(e.namespaceURI,e.localName),U(this._ownerElement,this,e,n),n},removeNamedItem:function(e){var t=this.getNamedItem(e);return z(this._ownerElement,this,t),t},removeNamedItemNS:function(e,t){var n=this.getNamedItemNS(e,t);return z(this._ownerElement,this,n),n},getNamedItemNS:function(e,t){var n=this.length;while(n--){var r=this[n];if(r.localName==t&&r.namespaceURI==e)return r}return null}},W.prototype={hasFeature:function(e,t){var n=this._features[e.toLowerCase()];return n&&(!t||t in n)?!0:!1},createDocument:function(e,t,n){var r=new J;r.implementation=this,r.childNodes=new j,r.doctype=n,n&&r.appendChild(n);if(t){var i=r.createElementNS(e,t);r.appendChild(i)}return r},createDocumentType:function(e,t,n){var r=new ut;return r.name=e,r.nodeName=e,r.publicId=t,r.systemId=n,r}},X.prototype={firstChild:null,lastChild:null,previousSibling:null,nextSibling:null,attributes:null,parentNode:null,childNodes:null,ownerDocument:null,nodeValue:null,namespaceURI:null,prefix:null,localName:null,insertBefore:function(e,t){return Z(this,e,t)},replaceChild:function(e,t){this.insertBefore(e,t),t&&this.removeChild(t)},removeChild:function(e){return Y(this,e)},appendChild:function(e){return this.insertBefore(e,null)},hasChildNodes:function(){return this.firstChild!=null},cloneNode:function(e){return mt(this.ownerDocument||this,this,e)},normalize:function(){var e=this.firstChild;while(e){var t=e.nextSibling;t&&t.nodeType==f&&e.nodeType==f?(this.removeChild(t),e.appendData(t.data)):(e.normalize(),e=t)}},isSupported:function(e,t){return this.ownerDocument.implementation.hasFeature(e,t)},hasAttributes:function(){return this.attributes.length>0},lookupPrefix:function(e){var t=this;while(t){var n=t._nsMap;if(n)for(var r in n)if(n[r]==e)return r;t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},lookupNamespaceURI:function(e){var t=this;while(t){var n=t._nsMap;if(n&&e in n)return n[e];t=t.nodeType==2?t.ownerDocument:t.parentNode}return null},isDefaultNamespace:function(e){var t=this.lookupPrefix(e);return t==null}},r(o,X),r(o,X.prototype),J.prototype={nodeName:\"#document\",nodeType:v,doctype:null,documentElement:null,_inc:1,insertBefore:function(e,t){if(e.nodeType==g){var n=e.firstChild;while(n){var r=n.nextSibling;this.insertBefore(n,t),n=r}return e}return this.documentElement==null&&e.nodeType==1&&(this.documentElement=e),Z(this,e,t),e.ownerDocument=this,e},removeChild:function(e){return this.documentElement==e&&(this.documentElement=null),Y(this,e)},importNode:function(e,t){return vt(this,e,t)},getElementById:function(e){var t=null;return $(this.documentElement,function(n){if(n.nodeType==1&&n.getAttribute(\"id\")==e)return t=n,!0}),t},createElement:function(e){var t=new tt;t.ownerDocument=this,t.nodeName=e,t.tagName=e,t.childNodes=new j;var n=t.attributes=new q;return n._ownerElement=t,t},createDocumentFragment:function(){var e=new ct;return e.ownerDocument=this,e.childNodes=new j,e},createTextNode:function(e){var t=new it;return t.ownerDocument=this,t.appendData(e),t},createComment:function(e){var t=new st;return t.ownerDocument=this,t.appendData(e),t},createCDATASection:function(e){var t=new ot;return t.ownerDocument=this,t.appendData(e),t},createProcessingInstruction:function(e,t){var n=new ht;return n.ownerDocument=this,n.tagName=n.target=e,n.nodeValue=n.data=t,n},createAttribute:function(e){var t=new nt;return t.ownerDocument=this,t.name=e,t.nodeName=e,t.localName=e,t.specified=!0,t},createEntityReference:function(e){var t=new lt;return t.ownerDocument=this,t.nodeName=e,t},createElementNS:function(e,t){var n=new tt,r=t.split(\":\"),i=n.attributes=new q;return n.childNodes=new j,n.ownerDocument=this,n.nodeName=t,n.tagName=t,n.namespaceURI=e,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,i._ownerElement=n,n},createAttributeNS:function(e,t){var n=new nt,r=t.split(\":\");return n.ownerDocument=this,n.nodeName=t,n.name=t,n.namespaceURI=e,n.specified=!0,r.length==2?(n.prefix=r[0],n.localName=r[1]):n.localName=t,n}},i(J,X),tt.prototype={nodeType:u,hasAttribute:function(e){return this.getAttributeNode(e)!=null},getAttribute:function(e){var t=this.getAttributeNode(e);return t&&t.value||\"\"},getAttributeNode:function(e){return this.attributes.getNamedItem(e)},setAttribute:function(e,t){var n=this.ownerDocument.createAttribute(e);n.value=n.nodeValue=\"\"+t,this.setAttributeNode(n)},removeAttribute:function(e){var t=this.getAttributeNode(e);t&&this.removeAttributeNode(t)},appendChild:function(e){return e.nodeType===g?this.insertBefore(e,null):et(this,e)},setAttributeNode:function(e){return this.attributes.setNamedItem(e)},setAttributeNodeNS:function(e){return this.attributes.setNamedItemNS(e)},removeAttributeNode:function(e){return this.attributes.removeNamedItem(e.nodeName)},removeAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);n&&this.removeAttributeNode(n)},hasAttributeNS:function(e,t){return this.getAttributeNodeNS(e,t)!=null},getAttributeNS:function(e,t){var n=this.getAttributeNodeNS(e,t);return n&&n.value||\"\"},setAttributeNS:function(e,t,n){var r=this.ownerDocument.createAttributeNS(e,t);r.value=r.nodeValue=\"\"+n,this.setAttributeNode(r)},getAttributeNodeNS:function(e,t){return this.attributes.getNamedItemNS(e,t)},getElementsByTagName:function(e){return new F(this,function(t){var n=[];return $(t,function(r){r!==t&&r.nodeType==u&&(e===\"*\"||r.tagName==e)&&n.push(r)}),n})},getElementsByTagNameNS:function(e,t){return new F(this,function(n){var r=[];return $(n,function(i){i!==n&&i.nodeType===u&&(e===\"*\"||i.namespaceURI===e)&&(t===\"*\"||i.localName==t)&&r.push(i)}),r})}},J.prototype.getElementsByTagName=tt.prototype.getElementsByTagName,J.prototype.getElementsByTagNameNS=tt.prototype.getElementsByTagNameNS,i(tt,X),nt.prototype.nodeType=a,i(nt,X),rt.prototype={data:\"\",substringData:function(e,t){return this.data.substring(e,e+t)},appendData:function(e){e=this.data+e,this.nodeValue=this.data=e,this.length=e.length},insertData:function(e,t){this.replaceData(e,0,t)},appendChild:function(e){throw new Error(w[3])},deleteData:function(e,t){this.replaceData(e,t,\"\")},replaceData:function(e,t,n){var r=this.data.substring(0,e),i=this.data.substring(e+t);n=r+n+i,this.nodeValue=this.data=n,this.length=n.length}},i(rt,X),it.prototype={nodeName:\"#text\",nodeType:f,splitText:function(e){var t=this.data,n=t.substring(e);t=t.substring(0,e),this.data=this.nodeValue=t,this.length=t.length;var r=this.ownerDocument.createTextNode(n);return this.parentNode&&this.parentNode.insertBefore(r,this.nextSibling),r}},i(it,rt),st.prototype={nodeName:\"#comment\",nodeType:d},i(st,rt),ot.prototype={nodeName:\"#cdata-section\",nodeType:l},i(ot,rt),ut.prototype.nodeType=m,i(ut,X),at.prototype.nodeType=y,i(at,X),ft.prototype.nodeType=h,i(ft,X),lt.prototype.nodeType=c,i(lt,X),ct.prototype.nodeName=\"#document-fragment\",ct.prototype.nodeType=g,i(ct,X),ht.prototype.nodeType=p,i(ht,X),pt.prototype.serializeToString=function(e){var t=[];return dt(e,t),t.join(\"\")},X.prototype.toString=function(){return pt.prototype.serializeToString(this)};try{Object.defineProperty&&(Object.defineProperty(F.prototype,\"length\",{get:function(){return I(this),this.$$length}}),Object.defineProperty(X.prototype,\"textContent\",{get:function(){return yt(this)},set:function(e){switch(this.nodeType){case 1:case 11:while(this.firstChild)this.removeChild(this.firstChild);(e||String(e))&&this.appendChild(this.ownerDocument.createTextNode(e));break;default:this.data=e,this.value=value,this.nodeValue=e}}}),gt=function(e,t,n){e[\"$$\"+t]=n})}catch(bt){}return W}),define(\"ace/mode/xml/dom-parser\",[],function(e,t,n){\"use strict\";function s(e){this.options=e||{locator:{}}}function o(e,t,n){function s(t){var s=e[t];if(!s)if(i)s=e.length==2?function(n){e(t,n)}:e;else{var o=arguments.length;while(--o)if(s=e[arguments[o]])break}r[t]=s&&function(e){s(e+f(n),e,n)}||function(){}}if(!e){if(t instanceof u)return t;e=t}var r={},i=e instanceof Function;return n=n||{},s(\"warning\",\"warn\"),s(\"error\",\"warn\",\"warning\"),s(\"fatalError\",\"warn\",\"warning\",\"error\"),r}function u(){this.cdata=!1}function a(e,t){t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber}function f(e){if(e)return\"\\n@\"+(e.systemId||\"\")+\"#[line:\"+e.lineNumber+\",col:\"+e.columnNumber+\"]\"}function l(e,t,n){return typeof e==\"string\"?e.substr(t,n):e.length>=t+n||t?new java.lang.String(e,t,n)+\"\":e}function c(e,t){e.currentElement?e.currentElement.appendChild(t):e.document.appendChild(t)}var r=e(\"./sax\"),i=e(\"./dom\");return s.prototype.parseFromString=function(e,t){var n=this.options,i=new r,s=n.domBuilder||new u,a=n.errorHandler,f=n.locator,l=n.xmlns||{},c={lt:\"<\",gt:\">\",amp:\"&\",quot:'\"',apos:\"'\"};return f&&s.setDocumentLocator(f),i.errorHandler=o(a,s,f),i.domBuilder=n.domBuilder||s,/\\/x?html?$/.test(t)&&(c.nbsp=\"\\u00a0\",c.copy=\"\\u00a9\",l[\"\"]=\"http://www.w3.org/1999/xhtml\"),e?i.parse(e,l,c):i.errorHandler.error(\"invalid document source\"),s.document},u.prototype={startDocument:function(){this.document=(new i).createDocument(null,null,null),this.locator&&(this.document.documentURI=this.locator.systemId)},startElement:function(e,t,n,r){var i=this.document,s=i.createElementNS(e,n||t),o=r.length;c(this,s),this.currentElement=s,this.locator&&a(this.locator,s);for(var u=0;u<o;u++){var e=r.getURI(u),f=r.getValue(u),n=r.getQName(u),l=i.createAttributeNS(e,n);l.getOffset&&a(l.getOffset(1),l),l.value=l.nodeValue=f,s.setAttributeNode(l)}},endElement:function(e,t,n){var r=this.currentElement,i=r.tagName;this.currentElement=r.parentNode},startPrefixMapping:function(e,t){},endPrefixMapping:function(e){},processingInstruction:function(e,t){var n=this.document.createProcessingInstruction(e,t);this.locator&&a(this.locator,n),c(this,n)},ignorableWhitespace:function(e,t,n){},characters:function(e,t,n){e=l.apply(this,arguments);if(this.currentElement&&e){if(this.cdata){var r=this.document.createCDATASection(e);this.currentElement.appendChild(r)}else{var r=this.document.createTextNode(e);this.currentElement.appendChild(r)}this.locator&&a(this.locator,r)}},skippedEntity:function(e){},endDocument:function(){this.document.normalize()},setDocumentLocator:function(e){if(this.locator=e)e.lineNumber=0},comment:function(e,t,n){e=l.apply(this,arguments);var r=this.document.createComment(e);this.locator&&a(this.locator,r),c(this,r)},startCDATA:function(){this.cdata=!0},endCDATA:function(){this.cdata=!1},startDTD:function(e,t,n){var r=this.document.implementation;if(r&&r.createDocumentType){var i=r.createDocumentType(e,t,n);this.locator&&a(this.locator,i),c(this,i)}},warning:function(e){console.warn(e,f(this.locator))},error:function(e){console.error(e,f(this.locator))},fatalError:function(e){throw console.error(e,f(this.locator)),e}},\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(e){u.prototype[e]=function(){return null}}),{DOMParser:s}}),define(\"ace/mode/xml_worker\",[],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"../worker/mirror\").Mirror,o=e(\"./xml/dom-parser\").DOMParser,u=t.Worker=function(e){s.call(this,e),this.setTimeout(400),this.context=null};r.inherits(u,s),function(){this.setOptions=function(e){this.context=e.context},this.onUpdate=function(){var e=this.doc.getValue();if(!e)return;var t=new o,n=[];t.options.errorHandler={fatalError:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},error:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"error\"})},warning:function(e,t,r){n.push({row:r.lineNumber,column:r.columnNumber,text:t,type:\"warning\"})}},t.parseFromString(e),this.sender.emit(\"error\",n)}}.call(u.prototype)}),define(\"ace/lib/es5-shim\",[],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,\"sentinel\",{}),\"sentinel\"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t===\"undefined\"||t===\"boolean\"||t===\"number\"||t===\"string\"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n==\"function\"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r==\"function\"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!=\"function\")throw new TypeError(\"Function.prototype.bind called on incompatible \"+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,\"__defineGetter__\"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,\"XXX\"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+t<n||(t=n-e);var r=this.slice(e,e+t),i=u.call(arguments,2),s=i.length;if(e===n)s&&this.push.apply(this,i);else{var o=Math.min(t,n-e),a=e+o,f=a+s-o,l=n-a,c=n-o;if(f<a)for(var h=0;h<l;++h)this[f+h]=this[a+h];else if(f>a)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h<s;++h)this[e+h]=i[h]}}return r};else{var v=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?v.apply(this,[e===void 0?0:e,t===void 0?this.length-e:t].concat(u.call(arguments,2))):[]}}Array.isArray||(Array.isArray=function(t){return a(t)==\"[object Array]\"});var m=Object(\"a\"),g=m[0]!=\"a\"||!(0 in m);Array.prototype.forEach||(Array.prototype.forEach=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=arguments[1],s=-1,o=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError;while(++s<o)s in r&&t.call(i,r[s],s,n)}),Array.prototype.map||(Array.prototype.map=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=Array(i),o=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var u=0;u<i;u++)u in r&&(s[u]=t.call(o,r[u],u,n));return s}),Array.prototype.filter||(Array.prototype.filter=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=[],o,u=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var f=0;f<i;f++)f in r&&(o=r[f],t.call(u,o,f,n)&&s.push(o));return s}),Array.prototype.every||(Array.prototype.every=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&!t.call(s,r[o],o,n))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0,s=arguments[1];if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");for(var o=0;o<i;o++)if(o in r&&t.call(s,r[o],o,n))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduce of empty array with no initial value\");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError(\"reduce of empty array with no initial value\")}while(!0);for(;s<i;s++)s in r&&(o=t.call(void 0,o,r[s],s,n));return o}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(t){var n=F(this),r=g&&a(this)==\"[object String]\"?this.split(\"\"):n,i=r.length>>>0;if(a(t)!=\"[object Function]\")throw new TypeError(t+\" is not a function\");if(!i&&arguments.length==1)throw new TypeError(\"reduceRight of empty array with no initial value\");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError(\"reduceRight of empty array with no initial value\")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i<r;i++)if(i in n&&n[i]===t)return i;return-1};if(!Array.prototype.lastIndexOf||[0,1].lastIndexOf(0,-3)!=-1)Array.prototype.lastIndexOf=function(t){var n=g&&a(this)==\"[object String]\"?this.split(\"\"):F(this),r=n.length>>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y=\"Object.getOwnPropertyDescriptor called on a non-object: \";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!=\"object\")throw new TypeError(\"typeof prototype[\"+typeof t+\"] != 'object'\");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document==\"undefined\"||w(document.createElement(\"div\"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T=\"Property description must be an object: \",N=\"Object.defineProperty called on non-object: \",C=\"getters & setters can not be defined on this javascript engine\";Object.defineProperty=function(t,n,r){if(typeof t!=\"object\"&&typeof t!=\"function\"||t===null)throw new TypeError(N+t);if(typeof r!=\"object\"&&typeof r!=\"function\"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,\"value\"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,\"get\")&&l(t,n,r.get),f(r,\"set\")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n==\"function\"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n=\"\";while(f(t,n))n+=\"?\";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=[\"toString\",\"toLocaleString\",\"valueOf\",\"hasOwnProperty\",\"isPrototypeOf\",\"propertyIsEnumerable\",\"constructor\"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!=\"object\"&&typeof e!=\"function\"||e===null)throw new TypeError(\"Object.keys called on a non-object\");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n<r;n++){var i=A[n];f(e,i)&&I.push(i)}return I}}Date.now||(Date.now=function(){return(new Date).getTime()});var _=\"\t\\n\\x0b\\f\\r \\u00a0\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\u2028\\u2029\\ufeff\";if(!String.prototype.trim||_.trim()){_=\"[\"+_+\"]\";var D=new RegExp(\"^\"+_+_+\"*\"),P=new RegExp(_+_+\"*$\");String.prototype.trim=function(){return String(this).replace(D,\"\").replace(P,\"\")}}var F=function(e){if(e==null)throw new TypeError(\"can't convert \"+e+\" to object\");return Object(e)}})","Xtento_StockImport/js/ace/mode-xml.min.js":"define(\"ace/mode/xml_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"./text_highlight_rules\").TextHighlightRules,s=function(e){var t=\"[_:a-zA-Z\\u00c0-\\uffff][-_:.a-zA-Z0-9\\u00c0-\\uffff]*\";this.$rules={start:[{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\",next:\"cdata\"},{token:[\"punctuation.instruction.xml\",\"keyword.instruction.xml\"],regex:\"(<\\\\?)(\"+t+\")\",next:\"processing_instruction\"},{token:\"comment.start.xml\",regex:\"<\\\\!--\",next:\"comment\"},{token:[\"xml-pe.doctype.xml\",\"xml-pe.doctype.xml\"],regex:\"(<\\\\!)(DOCTYPE)(?=[\\\\s])\",next:\"doctype\",caseInsensitive:!0},{include:\"tag\"},{token:\"text.end-tag-open.xml\",regex:\"</\"},{token:\"text.tag-open.xml\",regex:\"<\"},{include:\"reference\"},{defaultToken:\"text.xml\"}],processing_instruction:[{token:\"entity.other.attribute-name.decl-attribute-name.xml\",regex:t},{token:\"keyword.operator.decl-attribute-equals.xml\",regex:\"=\"},{include:\"whitespace\"},{include:\"string\"},{token:\"punctuation.xml-decl.xml\",regex:\"\\\\?>\",next:\"start\"}],doctype:[{include:\"whitespace\"},{include:\"string\"},{token:\"xml-pe.doctype.xml\",regex:\">\",next:\"start\"},{token:\"xml-pe.xml\",regex:\"[-_a-zA-Z0-9:]+\"},{token:\"punctuation.int-subset\",regex:\"\\\\[\",push:\"int_subset\"}],int_subset:[{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"punctuation.int-subset.xml\",regex:\"]\",next:\"pop\"},{token:[\"punctuation.markup-decl.xml\",\"keyword.markup-decl.xml\"],regex:\"(<\\\\!)(\"+t+\")\",push:[{token:\"text\",regex:\"\\\\s+\"},{token:\"punctuation.markup-decl.xml\",regex:\">\",next:\"pop\"},{include:\"string\"}]}],cdata:[{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\",next:\"start\"},{token:\"text.xml\",regex:\"\\\\s+\"},{token:\"text.xml\",regex:\"(?:[^\\\\]]|\\\\](?!\\\\]>))+\"}],comment:[{token:\"comment.end.xml\",regex:\"-->\",next:\"start\"},{defaultToken:\"comment.xml\"}],reference:[{token:\"constant.language.escape.reference.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],attr_reference:[{token:\"constant.language.escape.reference.attribute-value.xml\",regex:\"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\\\.-]+;)\"}],tag:[{token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.tag-name.xml\"],regex:\"(?:(<)|(</))((?:\"+t+\":)?\"+t+\")\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\"}]}],tag_whitespace:[{token:\"text.tag-whitespace.xml\",regex:\"\\\\s+\"}],whitespace:[{token:\"text.whitespace.xml\",regex:\"\\\\s+\"}],string:[{token:\"string.xml\",regex:\"'\",push:[{token:\"string.xml\",regex:\"'\",next:\"pop\"},{defaultToken:\"string.xml\"}]},{token:\"string.xml\",regex:'\"',push:[{token:\"string.xml\",regex:'\"',next:\"pop\"},{defaultToken:\"string.xml\"}]}],attributes:[{token:\"entity.other.attribute-name.xml\",regex:t},{token:\"keyword.operator.attribute-equals.xml\",regex:\"=\"},{include:\"tag_whitespace\"},{include:\"attribute_value\"}],attribute_value:[{token:\"string.attribute-value.xml\",regex:\"'\",push:[{token:\"string.attribute-value.xml\",regex:\"'\",next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]},{token:\"string.attribute-value.xml\",regex:'\"',push:[{token:\"string.attribute-value.xml\",regex:'\"',next:\"pop\"},{include:\"attr_reference\"},{defaultToken:\"string.attribute-value.xml\"}]}]},this.constructor===s&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,n){this.$rules.tag.unshift({token:[\"meta.tag.punctuation.tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(<)(\"+n+\"(?=\\\\s|>|$))\",next:[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:t+\"start\"}]}),this.$rules[n+\"-end\"]=[{include:\"attributes\"},{token:\"meta.tag.punctuation.tag-close.xml\",regex:\"/?>\",next:\"start\",onMatch:function(e,t,n){return n.splice(0),this.token}}],this.embedRules(e,t,[{token:[\"meta.tag.punctuation.end-tag-open.xml\",\"meta.tag.\"+n+\".tag-name.xml\"],regex:\"(</)(\"+n+\"(?=\\\\s|>|$))\",next:n+\"-end\"},{token:\"string.cdata.xml\",regex:\"<\\\\!\\\\[CDATA\\\\[\"},{token:\"string.cdata.xml\",regex:\"\\\\]\\\\]>\"}])}}).call(i.prototype),r.inherits(s,i),t.XmlHighlightRules=s}),define(\"ace/mode/behaviour/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/behaviour\",\"ace/token_iterator\",\"ace/lib/lang\"],function(e,t,n){\"use strict\";function u(e,t){return e&&e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../behaviour\").Behaviour,s=e(\"../../token_iterator\").TokenIterator,o=e(\"../../lib/lang\"),a=function(){this.add(\"string_dquotes\",\"insertion\",function(e,t,n,r,i){if(i=='\"'||i==\"'\"){var o=i,a=r.doc.getTextRange(n.getSelectionRange());if(a!==\"\"&&a!==\"'\"&&a!='\"'&&n.getWrapBehavioursEnabled())return{text:o+a+o,selection:!1};var f=n.getCursorPosition(),l=r.doc.getLine(f.row),c=l.substring(f.column,f.column+1),h=new s(r,f.row,f.column),p=h.getCurrentToken();if(c==o&&(u(p,\"attribute-value\")||u(p,\"string\")))return{text:\"\",selection:[1,1]};p||(p=h.stepBackward());if(!p)return;while(u(p,\"tag-whitespace\")||u(p,\"whitespace\"))p=h.stepBackward();var d=!c||c.match(/\\s/);if(u(p,\"attribute-equals\")&&(d||c==\">\")||u(p,\"decl-attribute-equals\")&&(d||c==\"?\"))return{text:o+o,selection:[1,1]}}}),this.add(\"string_dquotes\",\"deletion\",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='\"'||s==\"'\")){var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}}),this.add(\"autoclosing\",\"insertion\",function(e,t,n,r,i){if(i==\">\"){var o=n.getSelectionRange().start,a=new s(r,o.row,o.column),f=a.getCurrentToken()||a.stepBackward();if(!f||!(u(f,\"tag-name\")||u(f,\"tag-whitespace\")||u(f,\"attribute-name\")||u(f,\"attribute-equals\")||u(f,\"attribute-value\")))return;if(u(f,\"reference.attribute-value\"))return;if(u(f,\"attribute-value\")){var l=a.getCurrentTokenColumn()+f.value.length;if(o.column<l)return;if(o.column==l){var c=a.stepForward();if(c&&u(c,\"attribute-value\"))return;a.stepBackward()}}if(/^\\s*>/.test(r.getLine(o.row).slice(o.column)))return;while(!u(f,\"tag-name\")){f=a.stepBackward();if(f.value==\"<\"){f=a.stepForward();break}}var h=a.getCurrentTokenRow(),p=a.getCurrentTokenColumn();if(u(a.stepBackward(),\"end-tag-open\"))return;var d=f.value;h==o.row&&(d=d.substring(0,o.column-p));if(this.voidElements.hasOwnProperty(d.toLowerCase()))return;return{text:\"></\"+d+\">\",selection:[1,1]}}}),this.add(\"autoindent\",\"insertion\",function(e,t,n,r,i){if(i==\"\\n\"){var o=n.getCursorPosition(),u=r.getLine(o.row),a=new s(r,o.row,o.column),f=a.getCurrentToken();if(f&&f.type.indexOf(\"tag-close\")!==-1){if(f.value==\"/>\")return;while(f&&f.type.indexOf(\"tag-name\")===-1)f=a.stepBackward();if(!f)return;var l=f.value,c=a.getCurrentTokenRow();f=a.stepBackward();if(!f||f.type.indexOf(\"end-tag\")!==-1)return;if(this.voidElements&&!this.voidElements[l]){var h=r.getTokenAt(o.row,o.column+1),u=r.getLine(c),p=this.$getIndent(u),d=p+r.getTabString();return h&&h.value===\"</\"?{text:\"\\n\"+d+\"\\n\"+p,selection:[1,d.length,1,d.length]}:{text:\"\\n\"+d}}}}})};r.inherits(a,i),t.XmlBehaviour=a}),define(\"ace/mode/folding/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/range\",\"ace/mode/folding/fold_mode\",\"ace/token_iterator\"],function(e,t,n){\"use strict\";function l(e,t){return e.type.lastIndexOf(t+\".xml\")>-1}var r=e(\"../../lib/oop\"),i=e(\"../../lib/lang\"),s=e(\"../../range\").Range,o=e(\"./fold_mode\").FoldMode,u=e(\"../../token_iterator\").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=r.mixin({},this.voidElements),t&&r.mixin(this.optionalEndTags,t)};r.inherits(a,o);var f=function(){this.tagName=\"\",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};(function(){this.getFoldWidget=function(e,t,n){var r=this._getFirstTagInLine(e,n);return r?r.closing||!r.tagName&&r.selfClosing?t==\"markbeginend\"?\"end\":\"\":!r.tagName||r.selfClosing||this.voidElements.hasOwnProperty(r.tagName.toLowerCase())?\"\":this._findEndTagInLine(e,n,r.tagName,r.end.column)?\"\":\"start\":this.getCommentFoldWidget(e,n)},this.getCommentFoldWidget=function(e,t){return/comment/.test(e.getState(t))&&/<!-/.test(e.getLine(t))?\"start\":\"\"},this._getFirstTagInLine=function(e,t){var n=e.getTokens(t),r=new f;for(var i=0;i<n.length;i++){var s=n[i];if(l(s,\"tag-open\")){r.end.column=r.start.column+s.value.length,r.closing=l(s,\"end-tag-open\"),s=n[++i];if(!s)return null;r.tagName=s.value,r.end.column+=s.value.length;for(i++;i<n.length;i++){s=n[i],r.end.column+=s.value.length;if(l(s,\"tag-close\")){r.selfClosing=s.value==\"/>\";break}}return r}if(l(s,\"tag-close\"))return r.selfClosing=s.value==\"/>\",r;r.start.column+=s.value.length}return null},this._findEndTagInLine=function(e,t,n,r){var i=e.getTokens(t),s=0;for(var o=0;o<i.length;o++){var u=i[o];s+=u.value.length;if(s<r)continue;if(l(u,\"end-tag-open\")){u=i[o+1];if(u&&u.value==n)return!0}}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do if(l(t,\"tag-open\"))n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn();else if(l(t,\"tag-name\"))n.tagName=t.value;else if(l(t,\"tag-close\"))return n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),n;while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var n=new f;do{if(l(t,\"tag-open\"))return n.closing=l(t,\"end-tag-open\"),n.start.row=e.getCurrentTokenRow(),n.start.column=e.getCurrentTokenColumn(),e.stepBackward(),n;l(t,\"tag-name\")?n.tagName=t.value:l(t,\"tag-close\")&&(n.selfClosing=t.value==\"/>\",n.end.row=e.getCurrentTokenRow(),n.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){while(e.length){var n=e[e.length-1];if(!t||n.tagName==t.tagName)return e.pop();if(this.optionalEndTags.hasOwnProperty(n.tagName)){e.pop();continue}return null}},this.getFoldWidgetRange=function(e,t,n){var r=this._getFirstTagInLine(e,n);if(!r)return this.getCommentFoldWidget(e,n)&&e.getCommentFoldRange(n,e.getLine(n).length);var i=r.closing||r.selfClosing,o=[],a;if(!i){var f=new u(e,n,r.start.column),l={row:n,column:r.start.column+r.tagName.length+2};r.start.row==r.end.row&&(l.column=r.end.column);while(a=this._readTagForward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(a.closing){this._pop(o,a);if(o.length==0)return s.fromPoints(l,a.start)}else o.push(a)}}else{var f=new u(e,n,r.end.column),c={row:n,column:r.start.column};while(a=this._readTagBackward(f)){if(a.selfClosing){if(!o.length)return a.start.column+=a.tagName.length+2,a.end.column-=2,s.fromPoints(a.start,a.end);continue}if(!a.closing){this._pop(o,a);if(o.length==0)return a.start.column+=a.tagName.length+2,a.start.row==a.end.row&&a.start.column<a.end.column&&(a.start.column=a.end.column),s.fromPoints(a.start,c)}else o.push(a)}}}}).call(a.prototype)}),define(\"ace/mode/xml\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/lang\",\"ace/mode/text\",\"ace/mode/xml_highlight_rules\",\"ace/mode/behaviour/xml\",\"ace/mode/folding/xml\",\"ace/worker/worker_client\"],function(e,t,n){\"use strict\";var r=e(\"../lib/oop\"),i=e(\"../lib/lang\"),s=e(\"./text\").Mode,o=e(\"./xml_highlight_rules\").XmlHighlightRules,u=e(\"./behaviour/xml\").XmlBehaviour,a=e(\"./folding/xml\").FoldMode,f=e(\"../worker/worker_client\").WorkerClient,l=function(){this.HighlightRules=o,this.$behaviour=new u,this.foldingRules=new a};r.inherits(l,s),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:\"<!--\",end:\"-->\"},this.createWorker=function(e){var t=new f([\"ace\"],\"ace/mode/xml_worker\",\"Worker\");return t.attachToDocument(e.getDocument()),t.on(\"error\",function(t){e.setAnnotations(t.data)}),t.on(\"terminate\",function(){e.clearAnnotations()}),t},this.$id=\"ace/mode/xml\"}.call(l.prototype),t.Mode=l}); (function() {\n window.require([\"ace/mode/xml\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","Xtento_StockImport/js/jquery/jquery.blockUI.js":"/*!\n * jQuery blockUI plugin\n * Version 2.53 (01-NOV-2012)\n * @requires jQuery v1.3 or later\n *\n * Examples at: http://malsup.com/jquery/block/\n * Copyright (c) 2007-2012 M. Alsup\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n *\n * Thanks to Amir-Hossein Sobhi for some excellent contributions!\n */\n\n;(function() {\n\"use strict\";\n\n\tfunction setup($) {\n\t\tif (/^1\\.(0|1|2)/.test($.fn.jquery)) {\n\t\t\t/*global alert:true */\n\t\t\t//alert('blockUI requires jQuery v1.3 or later! You are using v' + $.fn.jquery);\n\t\t\t//return;\n\t\t}\n\n\t\t$.fn._fadeIn = $.fn.fadeIn;\n\n\t\tvar noOp = $.noop || function() {};\n\n\t\t// this bit is to ensure we don't call setExpression when we shouldn't (with extra muscle to handle\n\t\t// retarded userAgent strings on Vista)\n\t\tvar msie = /MSIE/.test(navigator.userAgent);\n\t\tvar ie6 = /MSIE 6.0/.test(navigator.userAgent);\n\t\tvar mode = document.documentMode || 0;\n\t\t// var setExpr = msie && (($.browser.version < 8 && !mode) || mode < 8);\n\t\tvar setExpr = $.isFunction( document.createElement('div').style.setExpression );\n\n\t\t// global $ methods for blocking/unblocking the entire page\n\t\t$.blockUI = function(opts) { install(window, opts); };\n\t\t$.unblockUI = function(opts) { remove(window, opts); };\n\n\t\t// convenience method for quick growl-like notifications (http://www.google.com/search?q=growl)\n\t\t$.growlUI = function(title, message, timeout, onClose) {\n\t\t\tvar $m = $('<div class=\"growlUI\"></div>');\n\t\t\tif (title) $m.append('<h1>'+title+'</h1>');\n\t\t\tif (message) $m.append('<h2>'+message+'</h2>');\n\t\t\tif (timeout === undefined) timeout = 3000;\n\t\t\t$.blockUI({\n\t\t\t\tmessage: $m, fadeIn: 700, fadeOut: 1000, centerY: false,\n\t\t\t\ttimeout: timeout, showOverlay: false,\n\t\t\t\tonUnblock: onClose,\n\t\t\t\tcss: $.blockUI.defaults.growlCSS\n\t\t\t});\n\t\t};\n\n\t\t// plugin method for blocking element content\n\t\t$.fn.block = function(opts) {\n\t\t\tvar fullOpts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tthis.each(function() {\n\t\t\t\tvar $el = $(this);\n\t\t\t\tif (fullOpts.ignoreIfBlocked && $el.data('blockUI.isBlocked'))\n\t\t\t\t\treturn;\n\t\t\t\t$el.unblock({ fadeOut: 0 });\n\t\t\t});\n\n\t\t\treturn this.each(function() {\n\t\t\t\tif ($.css(this,'position') == 'static')\n\t\t\t\t\tthis.style.position = 'relative';\n\t\t\t\tthis.style.zoom = 1; // force 'hasLayout' in ie\n\t\t\t\tinstall(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t// plugin method for unblocking element content\n\t\t$.fn.unblock = function(opts) {\n\t\t\treturn this.each(function() {\n\t\t\t\tremove(this, opts);\n\t\t\t});\n\t\t};\n\n\t\t$.blockUI.version = 2.53; // 2nd generation blocking at no extra cost!\n\n\t\t// override these in your code to change the default behavior and style\n\t\t$.blockUI.defaults = {\n\t\t\t// message displayed when blocking (use null for no message)\n\t\t\tmessage: '<h1>Please wait...</h1>',\n\n\t\t\ttitle: null,\t\t// title string; only used when theme == true\n\t\t\tdraggable: true,\t// only used when theme == true (requires jquery-ui.js to be loaded)\n\n\t\t\ttheme: false, // set to true to use with jQuery UI themes\n\n\t\t\t// styles for the message when blocking; if you wish to disable\n\t\t\t// these and use an external stylesheet then do this in your code:\n\t\t\t// $.blockUI.defaults.css = {};\n\t\t\tcss: {\n\t\t\t\tpadding:\t0,\n\t\t\t\tmargin:\t\t0,\n\t\t\t\twidth:\t\t'30%',\n\t\t\t\ttop:\t\t'40%',\n\t\t\t\tleft:\t\t'35%',\n\t\t\t\ttextAlign:\t'center',\n\t\t\t\tcolor:\t\t'#000',\n\t\t\t\tborder:\t\t'3px solid #aaa',\n\t\t\t\tbackgroundColor:'#fff',\n\t\t\t\tcursor:\t\t'wait'\n\t\t\t},\n\n\t\t\t// minimal style set used when themes are used\n\t\t\tthemedCSS: {\n\t\t\t\twidth:\t'30%',\n\t\t\t\ttop:\t'40%',\n\t\t\t\tleft:\t'35%'\n\t\t\t},\n\n\t\t\t// styles for the overlay\n\t\t\toverlayCSS: {\n\t\t\t\tbackgroundColor:\t'#000',\n\t\t\t\topacity:\t\t\t\t0.6,\n\t\t\t\tcursor:\t\t\t\t'wait'\n\t\t\t},\n\n\t\t\t// style to replace wait cursor before unblocking to correct issue\n\t\t\t// of lingering wait cursor\n\t\t\tcursorReset: 'default',\n\n\t\t\t// styles applied when using $.growlUI\n\t\t\tgrowlCSS: {\n\t\t\t\twidth:\t\t'350px',\n\t\t\t\ttop:\t\t'10px',\n\t\t\t\tleft:\t\t'',\n\t\t\t\tright:\t\t'10px',\n\t\t\t\tborder:\t\t'none',\n\t\t\t\tpadding:\t'5px',\n\t\t\t\topacity:\t0.6,\n\t\t\t\tcursor:\t\t'default',\n\t\t\t\tcolor:\t\t'#fff',\n\t\t\t\tbackgroundColor: '#000',\n\t\t\t\t'-webkit-border-radius':'10px',\n\t\t\t\t'-moz-border-radius':\t'10px',\n\t\t\t\t'border-radius':\t\t'10px'\n\t\t\t},\n\n\t\t\t// IE issues: 'about:blank' fails on HTTPS and javascript:false is s-l-o-w\n\t\t\t// (hat tip to Jorge H. N. de Vasconcelos)\n\t\t\t/*jshint scripturl:true */\n\t\t\tiframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank',\n\n\t\t\t// force usage of iframe in non-IE browsers (handy for blocking applets)\n\t\t\tforceIframe: false,\n\n\t\t\t// z-index for the blocking overlay\n\t\t\tbaseZ: 1000,\n\n\t\t\t// set these to true to have the message automatically centered\n\t\t\tcenterX: true, // <-- only effects element blocking (page block controlled via css above)\n\t\t\tcenterY: true,\n\n\t\t\t// allow body element to be stetched in ie6; this makes blocking look better\n\t\t\t// on \"short\" pages. disable if you wish to prevent changes to the body height\n\t\t\tallowBodyStretch: true,\n\n\t\t\t// enable if you want key and mouse events to be disabled for content that is blocked\n\t\t\tbindEvents: true,\n\n\t\t\t// be default blockUI will supress tab navigation from leaving blocking content\n\t\t\t// (if bindEvents is true)\n\t\t\tconstrainTabKey: true,\n\n\t\t\t// fadeIn time in millis; set to 0 to disable fadeIn on block\n\t\t\tfadeIn: 200,\n\n\t\t\t// fadeOut time in millis; set to 0 to disable fadeOut on unblock\n\t\t\tfadeOut: 400,\n\n\t\t\t// time in millis to wait before auto-unblocking; set to 0 to disable auto-unblock\n\t\t\ttimeout: 0,\n\n\t\t\t// disable if you don't want to show the overlay\n\t\t\tshowOverlay: true,\n\n\t\t\t// if true, focus will be placed in the first available input field when\n\t\t\t// page blocking\n\t\t\tfocusInput: true,\n\n\t\t\t// suppresses the use of overlay styles on FF/Linux (due to performance issues with opacity)\n\t\t\t// no longer needed in 2012\n\t\t\t// applyPlatformOpacityRules: true,\n\n\t\t\t// callback method invoked when fadeIn has completed and blocking message is visible\n\t\t\tonBlock: null,\n\n\t\t\t// callback method invoked when unblocking has completed; the callback is\n\t\t\t// passed the element that has been unblocked (which is the window object for page\n\t\t\t// blocks) and the options that were passed to the unblock call:\n\t\t\t//\tonUnblock(element, options)\n\t\t\tonUnblock: null,\n\n\t\t\t// callback method invoked when the overlay area is clicked.\n\t\t\t// setting this will turn the cursor to a pointer, otherwise cursor defined in overlayCss will be used.\n\t\t\tonOverlayClick: null,\n\n\t\t\t// don't ask; if you really must know: http://groups.google.com/group/jquery-en/browse_thread/thread/36640a8730503595/2f6a79a77a78e493#2f6a79a77a78e493\n\t\t\tquirksmodeOffsetHack: 4,\n\n\t\t\t// class name of the message block\n\t\t\tblockMsgClass: 'blockMsg',\n\n\t\t\t// if it is already blocked, then ignore it (don't unblock and reblock)\n\t\t\tignoreIfBlocked: false\n\t\t};\n\n\t\t// private data and functions follow...\n\n\t\tvar pageBlock = null;\n\t\tvar pageBlockEls = [];\n\n\t\tfunction install(el, opts) {\n\t\t\tvar css, themedCSS;\n\t\t\tvar full = (el == window);\n\t\t\tvar msg = (opts && opts.message !== undefined ? opts.message : undefined);\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\n\t\t\tif (opts.ignoreIfBlocked && $(el).data('blockUI.isBlocked'))\n\t\t\t\treturn;\n\n\t\t\topts.overlayCSS = $.extend({}, $.blockUI.defaults.overlayCSS, opts.overlayCSS || {});\n\t\t\tcss = $.extend({}, $.blockUI.defaults.css, opts.css || {});\n\t\t\tif (opts.onOverlayClick)\n\t\t\t\topts.overlayCSS.cursor = 'pointer';\n\n\t\t\tthemedCSS = $.extend({}, $.blockUI.defaults.themedCSS, opts.themedCSS || {});\n\t\t\tmsg = msg === undefined ? opts.message : msg;\n\n\t\t\t// remove the current block (if there is one)\n\t\t\tif (full && pageBlock)\n\t\t\t\tremove(window, {fadeOut:0});\n\n\t\t\t// if an existing element is being used as the blocking content then we capture\n\t\t\t// its current place in the DOM (and current display style) so we can restore\n\t\t\t// it when we unblock\n\t\t\tif (msg && typeof msg != 'string' && (msg.parentNode || msg.jquery)) {\n\t\t\t\tvar node = msg.jquery ? msg[0] : msg;\n\t\t\t\tvar data = {};\n\t\t\t\t$(el).data('blockUI.history', data);\n\t\t\t\tdata.el = node;\n\t\t\t\tdata.parent = node.parentNode;\n\t\t\t\tdata.display = node.style.display;\n\t\t\t\tdata.position = node.style.position;\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.removeChild(node);\n\t\t\t}\n\n\t\t\t$(el).data('blockUI.onUnblock', opts.onUnblock);\n\t\t\tvar z = opts.baseZ;\n\n\t\t\t// blockUI uses 3 layers for blocking, for simplicity they are all used on every platform;\n\t\t\t// layer1 is the iframe layer which is used to supress bleed through of underlying content\n\t\t\t// layer2 is the overlay layer which has opacity and a wait cursor (by default)\n\t\t\t// layer3 is the message content that is displayed while blocking\n\t\t\tvar lyr1, lyr2, lyr3, s;\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1 = $('<iframe class=\"blockUI\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0\" src=\"'+opts.iframeSrc+'\"></iframe>');\n\t\t\telse\n\t\t\t\tlyr1 = $('<div class=\"blockUI\" style=\"display:none\"></div>');\n\n\t\t\tif (opts.theme)\n\t\t\t\tlyr2 = $('<div class=\"blockUI blockOverlay ui-widget-overlay\" style=\"z-index:'+ (z++) +';display:none\"></div>');\n\t\t\telse\n\t\t\t\tlyr2 = $('<div class=\"blockUI blockOverlay\" style=\"z-index:'+ (z++) +';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0\"></div>');\n\n\t\t\tif (opts.theme && full) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:fixed\">';\n\t\t\t\tif ( opts.title ) {\n\t\t\t\t\ts += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || ' ')+'</div>';\n\t\t\t\t}\n\t\t\t\ts += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\n\t\t\t\ts += '</div>';\n\t\t\t}\n\t\t\telse if (opts.theme) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all\" style=\"z-index:'+(z+10)+';display:none;position:absolute\">';\n\t\t\t\tif ( opts.title ) {\n\t\t\t\t\ts += '<div class=\"ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle\">'+(opts.title || ' ')+'</div>';\n\t\t\t\t} \n\t\t\t\ts += '<div class=\"ui-widget-content ui-dialog-content\"></div>';\n\t\t\t\ts += '</div>';\n\t\t\t}\n\t\t\telse if (full) {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockPage\" style=\"z-index:'+(z+10)+';display:none;position:fixed\"></div>';\n\t\t\t}\n\t\t\telse {\n\t\t\t\ts = '<div class=\"blockUI ' + opts.blockMsgClass + ' blockElement\" style=\"z-index:'+(z+10)+';display:none;position:absolute\"></div>';\n\t\t\t}\n\t\t\tlyr3 = $(s);\n\n\t\t\t// if we have a message, style it\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme) {\n\t\t\t\t\tlyr3.css(themedCSS);\n\t\t\t\t\tlyr3.addClass('ui-widget-content');\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t\tlyr3.css(css);\n\t\t\t}\n\n\t\t\t// style the overlay\n\t\t\tif (!opts.theme /*&& (!opts.applyPlatformOpacityRules)*/)\n\t\t\t\tlyr2.css(opts.overlayCSS);\n\t\t\tlyr2.css('position', full ? 'fixed' : 'absolute');\n\n\t\t\t// make iframe layer transparent in IE\n\t\t\tif (msie || opts.forceIframe)\n\t\t\t\tlyr1.css('opacity',0.0);\n\n\t\t\t//$([lyr1[0],lyr2[0],lyr3[0]]).appendTo(full ? 'body' : el);\n\t\t\tvar layers = [lyr1,lyr2,lyr3], $par = full ? $('body') : $(el);\n\t\t\t$.each(layers, function() {\n\t\t\t\tthis.appendTo($par);\n\t\t\t});\n\n\t\t\tif (opts.theme && opts.draggable && $.fn.draggable) {\n\t\t\t\tlyr3.draggable({\n\t\t\t\t\thandle: '.ui-dialog-titlebar',\n\t\t\t\t\tcancel: 'li'\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling)\n\t\t\tvar expr = setExpr && (!$.support.boxModel || $('object,embed', full ? null : el).length > 0);\n\t\t\tif (ie6 || expr) {\n\t\t\t\t// give body 100% height\n\t\t\t\tif (full && opts.allowBodyStretch && $.support.boxModel)\n\t\t\t\t\t$('html,body').css('height','100%');\n\n\t\t\t\t// fix ie6 issue when blocked element has a border width\n\t\t\t\tif ((ie6 || !$.support.boxModel) && !full) {\n\t\t\t\t\tvar t = sz(el,'borderTopWidth'), l = sz(el,'borderLeftWidth');\n\t\t\t\t\tvar fixT = t ? '(0 - '+t+')' : 0;\n\t\t\t\t\tvar fixL = l ? '(0 - '+l+')' : 0;\n\t\t\t\t}\n\n\t\t\t\t// simulate fixed position\n\t\t\t\t$.each(layers, function(i,o) {\n\t\t\t\t\tvar s = o[0].style;\n\t\t\t\t\ts.position = 'absolute';\n\t\t\t\t\tif (i < 2) {\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:'+opts.quirksmodeOffsetHack+') + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('height','this.parentNode.offsetHeight + \"px\"');\n\t\t\t\t\t\tif (full)\n\t\t\t\t\t\t\ts.setExpression('width','jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + \"px\"');\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ts.setExpression('width','this.parentNode.offsetWidth + \"px\"');\n\t\t\t\t\t\tif (fixL) s.setExpression('left', fixL);\n\t\t\t\t\t\tif (fixT) s.setExpression('top', fixT);\n\t\t\t\t\t}\n\t\t\t\t\telse if (opts.centerY) {\n\t\t\t\t\t\tif (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + \"px\"');\n\t\t\t\t\t\ts.marginTop = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!opts.centerY && full) {\n\t\t\t\t\t\tvar top = (opts.css && opts.css.top) ? parseInt(opts.css.top, 10) : 0;\n\t\t\t\t\t\tvar expression = '((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + \"px\"';\n\t\t\t\t\t\ts.setExpression('top',expression);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// show the message\n\t\t\tif (msg) {\n\t\t\t\tif (opts.theme)\n\t\t\t\t\tlyr3.find('.ui-widget-content').append(msg);\n\t\t\t\telse\n\t\t\t\t\tlyr3.append(msg);\n\t\t\t\tif (msg.jquery || msg.nodeType)\n\t\t\t\t\t$(msg).show();\n\t\t\t}\n\n\t\t\tif ((msie || opts.forceIframe) && opts.showOverlay)\n\t\t\t\tlyr1.show(); // opacity is zero\n\t\t\tif (opts.fadeIn) {\n\t\t\t\tvar cb = opts.onBlock ? opts.onBlock : noOp;\n\t\t\t\tvar cb1 = (opts.showOverlay && !msg) ? cb : noOp;\n\t\t\t\tvar cb2 = msg ? cb : noOp;\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2._fadeIn(opts.fadeIn, cb1);\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3._fadeIn(opts.fadeIn, cb2);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (opts.showOverlay)\n\t\t\t\t\tlyr2.show();\n\t\t\t\tif (msg)\n\t\t\t\t\tlyr3.show();\n\t\t\t\tif (opts.onBlock)\n\t\t\t\t\topts.onBlock();\n\t\t\t}\n\n\t\t\t// bind key and mouse events\n\t\t\tbind(1, el, opts);\n\n\t\t\tif (full) {\n\t\t\t\tpageBlock = lyr3[0];\n\t\t\t\tpageBlockEls = $(':input:enabled:visible',pageBlock);\n\t\t\t\tif (opts.focusInput)\n\t\t\t\t\tsetTimeout(focus, 20);\n\t\t\t}\n\t\t\telse\n\t\t\t\tcenter(lyr3[0], opts.centerX, opts.centerY);\n\n\t\t\tif (opts.timeout) {\n\t\t\t\t// auto-unblock\n\t\t\t\tvar to = setTimeout(function() {\n\t\t\t\t\tif (full)\n\t\t\t\t\t\t$.unblockUI(opts);\n\t\t\t\t\telse\n\t\t\t\t\t\t$(el).unblock(opts);\n\t\t\t\t}, opts.timeout);\n\t\t\t\t$(el).data('blockUI.timeout', to);\n\t\t\t}\n\t\t}\n\n\t\t// remove the block\n\t\tfunction remove(el, opts) {\n\t\t\tvar full = (el == window);\n\t\t\tvar $el = $(el);\n\t\t\tvar data = $el.data('blockUI.history');\n\t\t\tvar to = $el.data('blockUI.timeout');\n\t\t\tif (to) {\n\t\t\t\tclearTimeout(to);\n\t\t\t\t$el.removeData('blockUI.timeout');\n\t\t\t}\n\t\t\topts = $.extend({}, $.blockUI.defaults, opts || {});\n\t\t\tbind(0, el, opts); // unbind events\n\n\t\t\tif (opts.onUnblock === null) {\n\t\t\t\topts.onUnblock = $el.data('blockUI.onUnblock');\n\t\t\t\t$el.removeData('blockUI.onUnblock');\n\t\t\t}\n\n\t\t\tvar els;\n\t\t\tif (full) // crazy selector to handle odd field errors in ie6/7\n\t\t\t\tels = $('body').children().filter('.blockUI').add('body > .blockUI');\n\t\t\telse\n\t\t\t\tels = $el.find('>.blockUI');\n\n\t\t\t// fix cursor issue\n\t\t\tif ( opts.cursorReset ) {\n\t\t\t\tif ( els.length > 1 )\n\t\t\t\t\tels[1].style.cursor = opts.cursorReset;\n\t\t\t\tif ( els.length > 2 )\n\t\t\t\t\tels[2].style.cursor = opts.cursorReset;\n\t\t\t}\n\n\t\t\tif (full)\n\t\t\t\tpageBlock = pageBlockEls = null;\n\n\t\t\tif (opts.fadeOut) {\n\t\t\t\tels.fadeOut(opts.fadeOut);\n\t\t\t\tsetTimeout(function() { reset(els,data,opts,el); }, opts.fadeOut);\n\t\t\t}\n\t\t\telse\n\t\t\t\treset(els, data, opts, el);\n\t\t}\n\n\t\t// move blocking element back into the DOM where it started\n\t\tfunction reset(els,data,opts,el) {\n\t\t\tels.each(function(i,o) {\n\t\t\t\t// remove via DOM calls so we don't lose event handlers\n\t\t\t\tif (this.parentNode)\n\t\t\t\t\tthis.parentNode.removeChild(this);\n\t\t\t});\n\n\t\t\tif (data && data.el) {\n\t\t\t\tdata.el.style.display = data.display;\n\t\t\t\tdata.el.style.position = data.position;\n\t\t\t\tif (data.parent)\n\t\t\t\t\tdata.parent.appendChild(data.el);\n\t\t\t\t$(el).removeData('blockUI.history');\n\t\t\t}\n\n\t\t\tif (typeof opts.onUnblock == 'function')\n\t\t\t\topts.onUnblock(el,opts);\n\n\t\t\t// fix issue in Safari 6 where block artifacts remain until reflow\n\t\t\tvar body = $(document.body), w = body.width(), cssW = body[0].style.width;\n\t\t\tbody.width(w-1).width(w);\n\t\t\tbody[0].style.width = cssW;\n\t\t}\n\n\t\t// bind/unbind the handler\n\t\tfunction bind(b, el, opts) {\n\t\t\tvar full = el == window, $el = $(el);\n\n\t\t\t// don't bother unbinding if there is nothing to unbind\n\t\t\tif (!b && (full && !pageBlock || !full && !$el.data('blockUI.isBlocked')))\n\t\t\t\treturn;\n\n\t\t\t$el.data('blockUI.isBlocked', b);\n\n\t\t\t// don't bind events when overlay is not in use or if bindEvents is false\n\t\t\tif (!opts.bindEvents || (b && !opts.showOverlay))\n\t\t\t\treturn;\n\n\t\t\t// bind anchors and inputs for mouse and key events\n\t\t\tvar events = 'mousedown mouseup keydown keypress touchstart touchend touchmove';\n\t\t\tif (b)\n\t\t\t\t$(document).bind(events, opts, handler);\n\t\t\telse\n\t\t\t\t$(document).unbind(events, handler);\n\n\t\t// former impl...\n\t\t//\t\tvar $e = $('a,:input');\n\t\t//\t\tb ? $e.bind(events, opts, handler) : $e.unbind(events, handler);\n\t\t}\n\n\t\t// event handler to suppress keyboard/mouse events when blocking\n\t\tfunction handler(e) {\n\t\t\t// allow tab navigation (conditionally)\n\t\t\tif (e.keyCode && e.keyCode == 9) {\n\t\t\t\tif (pageBlock && e.data.constrainTabKey) {\n\t\t\t\t\tvar els = pageBlockEls;\n\t\t\t\t\tvar fwd = !e.shiftKey && e.target === els[els.length-1];\n\t\t\t\t\tvar back = e.shiftKey && e.target === els[0];\n\t\t\t\t\tif (fwd || back) {\n\t\t\t\t\t\tsetTimeout(function(){focus(back);},10);\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar opts = e.data;\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.hasClass('blockOverlay') && opts.onOverlayClick)\n\t\t\t\topts.onOverlayClick();\n\n\t\t\t// allow events within the message content\n\t\t\tif (target.parents('div.' + opts.blockMsgClass).length > 0)\n\t\t\t\treturn true;\n\n\t\t\t// allow events for content that is not being blocked\n\t\t\treturn target.parents().children().filter('div.blockUI').length === 0;\n\t\t}\n\n\t\tfunction focus(back) {\n\t\t\tif (!pageBlockEls)\n\t\t\t\treturn;\n\t\t\tvar e = pageBlockEls[back===true ? pageBlockEls.length-1 : 0];\n\t\t\tif (e)\n\t\t\t\te.focus();\n\t\t}\n\n\t\tfunction center(el, x, y) {\n\t\t\tvar p = el.parentNode, s = el.style;\n\t\t\tvar l = ((p.offsetWidth - el.offsetWidth)/2) - sz(p,'borderLeftWidth');\n\t\t\tvar t = ((p.offsetHeight - el.offsetHeight)/2) - sz(p,'borderTopWidth');\n\t\t\tif (x) s.left = l > 0 ? (l+'px') : '0';\n\t\t\tif (y) s.top = t > 0 ? (t+'px') : '0';\n\t\t}\n\n\t\tfunction sz(el, p) {\n\t\t\treturn parseInt($.css(el,p),10)||0;\n\t\t}\n\n\t}\n\n\n\t/*global define:true */\n\tif (typeof define === 'function' && define.amd && define.amd.jQuery) {\n\t\tdefine(['jquery'], setup);\n\t} else {\n\t\tsetup(jQuery);\n\t}\n\n})();\n","Smartwave_Porto/js/jscolor.min.js":"/**\n * jscolor - JavaScript Color Picker\n *\n * @link http://jscolor.com\n * @license For open source use: GPLv3\n * For commercial use: JSColor Commercial License\n * @author Jan Odvarko\n * @version 2.0.4\n *\n * See usage examples at http://jscolor.com/examples/\n */\n\n\n\"use strict\";\n\n\nif (!window.jscolor) { window.jscolor = (function () {\n\n\nvar jsc = {\n\n\n register : function () {\n jsc.attachDOMReadyEvent(jsc.init);\n jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);\n jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);\n jsc.attachEvent(window, 'resize', jsc.onWindowResize);\n },\n\n\n init : function () {\n if (jsc.jscolor.lookupClass) {\n jsc.jscolor.installByClassName(jsc.jscolor.lookupClass);\n }\n },\n\n\n tryInstallOnElements : function (elms, className) {\n var matchClass = new RegExp('(^|\\\\s)(' + className + ')(\\\\s*(\\\\{[^}]*\\\\})|\\\\s|$)', 'i');\n\n for (var i = 0; i < elms.length; i += 1) {\n if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') {\n if (jsc.isColorAttrSupported) {\n // skip inputs of type 'color' if supported by the browser\n continue;\n }\n }\n var m;\n if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) {\n var targetElm = elms[i];\n var optsStr = null;\n\n var dataOptions = jsc.getDataAttr(targetElm, 'jscolor');\n if (dataOptions !== null) {\n optsStr = dataOptions;\n } else if (m[4]) {\n optsStr = m[4];\n }\n\n var opts = {};\n if (optsStr) {\n try {\n opts = (new Function ('return (' + optsStr + ')'))();\n } catch(eParseError) {\n jsc.warn('Error parsing jscolor options: ' + eParseError + ':\\n' + optsStr);\n }\n }\n targetElm.jscolor = new jsc.jscolor(targetElm, opts);\n }\n }\n },\n\n\n isColorAttrSupported : (function () {\n var elm = document.createElement('input');\n if (elm.setAttribute) {\n elm.setAttribute('type', 'color');\n if (elm.type.toLowerCase() == 'color') {\n return true;\n }\n }\n return false;\n })(),\n\n\n isCanvasSupported : (function () {\n var elm = document.createElement('canvas');\n return !!(elm.getContext && elm.getContext('2d'));\n })(),\n\n\n fetchElement : function (mixed) {\n return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;\n },\n\n\n isElementType : function (elm, type) {\n return elm.nodeName.toLowerCase() === type.toLowerCase();\n },\n\n\n getDataAttr : function (el, name) {\n var attrName = 'data-' + name;\n var attrValue = el.getAttribute(attrName);\n if (attrValue !== null) {\n return attrValue;\n }\n return null;\n },\n\n\n attachEvent : function (el, evnt, func) {\n if (el.addEventListener) {\n el.addEventListener(evnt, func, false);\n } else if (el.attachEvent) {\n el.attachEvent('on' + evnt, func);\n }\n },\n\n\n detachEvent : function (el, evnt, func) {\n if (el.removeEventListener) {\n el.removeEventListener(evnt, func, false);\n } else if (el.detachEvent) {\n el.detachEvent('on' + evnt, func);\n }\n },\n\n\n _attachedGroupEvents : {},\n\n\n attachGroupEvent : function (groupName, el, evnt, func) {\n if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\n jsc._attachedGroupEvents[groupName] = [];\n }\n jsc._attachedGroupEvents[groupName].push([el, evnt, func]);\n jsc.attachEvent(el, evnt, func);\n },\n\n\n detachGroupEvents : function (groupName) {\n if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {\n for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {\n var evt = jsc._attachedGroupEvents[groupName][i];\n jsc.detachEvent(evt[0], evt[1], evt[2]);\n }\n delete jsc._attachedGroupEvents[groupName];\n }\n },\n\n\n attachDOMReadyEvent : function (func) {\n var fired = false;\n var fireOnce = function () {\n if (!fired) {\n fired = true;\n func();\n }\n };\n\n if (document.readyState === 'complete') {\n setTimeout(fireOnce, 1); // async\n return;\n }\n\n if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', fireOnce, false);\n\n // Fallback\n window.addEventListener('load', fireOnce, false);\n\n } else if (document.attachEvent) {\n // IE\n document.attachEvent('onreadystatechange', function () {\n if (document.readyState === 'complete') {\n document.detachEvent('onreadystatechange', arguments.callee);\n fireOnce();\n }\n })\n\n // Fallback\n window.attachEvent('onload', fireOnce);\n\n // IE7/8\n if (document.documentElement.doScroll && window == window.top) {\n var tryScroll = function () {\n if (!document.body) { return; }\n try {\n document.documentElement.doScroll('left');\n fireOnce();\n } catch (e) {\n setTimeout(tryScroll, 1);\n }\n };\n tryScroll();\n }\n }\n },\n\n\n warn : function (msg) {\n if (window.console && window.console.warn) {\n window.console.warn(msg);\n }\n },\n\n\n preventDefault : function (e) {\n if (e.preventDefault) { e.preventDefault(); }\n e.returnValue = false;\n },\n\n\n captureTarget : function (target) {\n // IE\n if (target.setCapture) {\n jsc._capturedTarget = target;\n jsc._capturedTarget.setCapture();\n }\n },\n\n\n releaseTarget : function () {\n // IE\n if (jsc._capturedTarget) {\n jsc._capturedTarget.releaseCapture();\n jsc._capturedTarget = null;\n }\n },\n\n\n fireEvent : function (el, evnt) {\n if (!el) {\n return;\n }\n if (document.createEvent) {\n var ev = document.createEvent('HTMLEvents');\n ev.initEvent(evnt, true, true);\n el.dispatchEvent(ev);\n } else if (document.createEventObject) {\n var ev = document.createEventObject();\n el.fireEvent('on' + evnt, ev);\n } else if (el['on' + evnt]) { // alternatively use the traditional event model\n el['on' + evnt]();\n }\n },\n\n\n classNameToList : function (className) {\n return className.replace(/^\\s+|\\s+$/g, '').split(/\\s+/);\n },\n\n\n // The className parameter (str) can only contain a single class name\n hasClass : function (elm, className) {\n if (!className) {\n return false;\n }\n return -1 != (' ' + elm.className.replace(/\\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');\n },\n\n\n // The className parameter (str) can contain multiple class names separated by whitespace\n setClass : function (elm, className) {\n var classList = jsc.classNameToList(className);\n for (var i = 0; i < classList.length; i += 1) {\n if (!jsc.hasClass(elm, classList[i])) {\n elm.className += (elm.className ? ' ' : '') + classList[i];\n }\n }\n },\n\n\n // The className parameter (str) can contain multiple class names separated by whitespace\n unsetClass : function (elm, className) {\n var classList = jsc.classNameToList(className);\n for (var i = 0; i < classList.length; i += 1) {\n var repl = new RegExp(\n '^\\\\s*' + classList[i] + '\\\\s*|' +\n '\\\\s*' + classList[i] + '\\\\s*$|' +\n '\\\\s+' + classList[i] + '(\\\\s+)',\n 'g'\n );\n elm.className = elm.className.replace(repl, '$1');\n }\n },\n\n\n getStyle : function (elm) {\n return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;\n },\n\n\n setStyle : (function () {\n var helper = document.createElement('div');\n var getSupportedProp = function (names) {\n for (var i = 0; i < names.length; i += 1) {\n if (names[i] in helper.style) {\n return names[i];\n }\n }\n };\n var props = {\n borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']),\n boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow'])\n };\n return function (elm, prop, value) {\n switch (prop.toLowerCase()) {\n case 'opacity':\n var alphaOpacity = Math.round(parseFloat(value) * 100);\n elm.style.opacity = value;\n elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')';\n break;\n default:\n elm.style[props[prop]] = value;\n break;\n }\n };\n })(),\n\n\n setBorderRadius : function (elm, value) {\n jsc.setStyle(elm, 'borderRadius', value || '0');\n },\n\n\n setBoxShadow : function (elm, value) {\n jsc.setStyle(elm, 'boxShadow', value || 'none');\n },\n\n\n getElementPos : function (e, relativeToViewport) {\n var x=0, y=0;\n var rect = e.getBoundingClientRect();\n x = rect.left;\n y = rect.top;\n if (!relativeToViewport) {\n var viewPos = jsc.getViewPos();\n x += viewPos[0];\n y += viewPos[1];\n }\n return [x, y];\n },\n\n\n getElementSize : function (e) {\n return [e.offsetWidth, e.offsetHeight];\n },\n\n\n // get pointer's X/Y coordinates relative to viewport\n getAbsPointerPos : function (e) {\n if (!e) { e = window.event; }\n var x = 0, y = 0;\n if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\n // touch devices\n x = e.changedTouches[0].clientX;\n y = e.changedTouches[0].clientY;\n } else if (typeof e.clientX === 'number') {\n x = e.clientX;\n y = e.clientY;\n }\n return { x: x, y: y };\n },\n\n\n // get pointer's X/Y coordinates relative to target element\n getRelPointerPos : function (e) {\n if (!e) { e = window.event; }\n var target = e.target || e.srcElement;\n var targetRect = target.getBoundingClientRect();\n\n var x = 0, y = 0;\n\n var clientX = 0, clientY = 0;\n if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {\n // touch devices\n clientX = e.changedTouches[0].clientX;\n clientY = e.changedTouches[0].clientY;\n } else if (typeof e.clientX === 'number') {\n clientX = e.clientX;\n clientY = e.clientY;\n }\n\n x = clientX - targetRect.left;\n y = clientY - targetRect.top;\n return { x: x, y: y };\n },\n\n\n getViewPos : function () {\n var doc = document.documentElement;\n return [\n (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),\n (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)\n ];\n },\n\n\n getViewSize : function () {\n var doc = document.documentElement;\n return [\n (window.innerWidth || doc.clientWidth),\n (window.innerHeight || doc.clientHeight),\n ];\n },\n\n\n redrawPosition : function () {\n\n if (jsc.picker && jsc.picker.owner) {\n var thisObj = jsc.picker.owner;\n\n var tp, vp;\n\n if (thisObj.fixed) {\n // Fixed elements are positioned relative to viewport,\n // therefore we can ignore the scroll offset\n tp = jsc.getElementPos(thisObj.targetElement, true); // target pos\n vp = [0, 0]; // view pos\n } else {\n tp = jsc.getElementPos(thisObj.targetElement); // target pos\n vp = jsc.getViewPos(); // view pos\n }\n\n var ts = jsc.getElementSize(thisObj.targetElement); // target size\n var vs = jsc.getViewSize(); // view size\n var ps = jsc.getPickerOuterDims(thisObj); // picker size\n var a, b, c;\n switch (thisObj.position.toLowerCase()) {\n case 'left': a=1; b=0; c=-1; break;\n case 'right':a=1; b=0; c=1; break;\n case 'top': a=0; b=1; c=-1; break;\n default: a=0; b=1; c=1; break;\n }\n var l = (ts[b]+ps[b])/2;\n\n // compute picker position\n if (!thisObj.smartPosition) {\n var pp = [\n tp[a],\n tp[b]+ts[b]-l+l*c\n ];\n } else {\n var pp = [\n -vp[a]+tp[a]+ps[a] > vs[a] ?\n (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :\n tp[a],\n -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?\n (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :\n (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)\n ];\n }\n\n var x = pp[a];\n var y = pp[b];\n var positionValue = thisObj.fixed ? 'fixed' : 'absolute';\n var contractShadow =\n (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&\n (pp[1] + ps[1] < tp[1] + ts[1]);\n\n jsc._drawPosition(thisObj, x, y, positionValue, contractShadow);\n }\n },\n\n\n _drawPosition : function (thisObj, x, y, positionValue, contractShadow) {\n var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px\n\n jsc.picker.wrap.style.position = positionValue;\n jsc.picker.wrap.style.left = x + 'px';\n jsc.picker.wrap.style.top = y + 'px';\n\n jsc.setBoxShadow(\n jsc.picker.boxS,\n thisObj.shadow ?\n new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :\n null);\n },\n\n\n getPickerDims : function (thisObj) {\n var displaySlider = !!jsc.getSliderComponent(thisObj);\n var dims = [\n 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width +\n (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0),\n 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height +\n (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0)\n ];\n return dims;\n },\n\n\n getPickerOuterDims : function (thisObj) {\n var dims = jsc.getPickerDims(thisObj);\n return [\n dims[0] + 2 * thisObj.borderWidth,\n dims[1] + 2 * thisObj.borderWidth\n ];\n },\n\n\n getPadToSliderPadding : function (thisObj) {\n return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness));\n },\n\n\n getPadYComponent : function (thisObj) {\n switch (thisObj.mode.charAt(1).toLowerCase()) {\n case 'v': return 'v'; break;\n }\n return 's';\n },\n\n\n getSliderComponent : function (thisObj) {\n if (thisObj.mode.length > 2) {\n switch (thisObj.mode.charAt(2).toLowerCase()) {\n case 's': return 's'; break;\n case 'v': return 'v'; break;\n }\n }\n return null;\n },\n\n\n onDocumentMouseDown : function (e) {\n if (!e) { e = window.event; }\n var target = e.target || e.srcElement;\n\n if (target._jscLinkedInstance) {\n if (target._jscLinkedInstance.showOnClick) {\n target._jscLinkedInstance.show();\n }\n } else if (target._jscControlName) {\n jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse');\n } else {\n // Mouse is outside the picker controls -> hide the color picker!\n if (jsc.picker && jsc.picker.owner) {\n jsc.picker.owner.hide();\n }\n }\n },\n\n\n onDocumentTouchStart : function (e) {\n if (!e) { e = window.event; }\n var target = e.target || e.srcElement;\n\n if (target._jscLinkedInstance) {\n if (target._jscLinkedInstance.showOnClick) {\n target._jscLinkedInstance.show();\n }\n } else if (target._jscControlName) {\n jsc.onControlPointerStart(e, target, target._jscControlName, 'touch');\n } else {\n if (jsc.picker && jsc.picker.owner) {\n jsc.picker.owner.hide();\n }\n }\n },\n\n\n onWindowResize : function (e) {\n jsc.redrawPosition();\n },\n\n\n onParentScroll : function (e) {\n // hide the picker when one of the parent elements is scrolled\n if (jsc.picker && jsc.picker.owner) {\n jsc.picker.owner.hide();\n }\n },\n\n\n _pointerMoveEvent : {\n mouse: 'mousemove',\n touch: 'touchmove'\n },\n _pointerEndEvent : {\n mouse: 'mouseup',\n touch: 'touchend'\n },\n\n\n _pointerOrigin : null,\n _capturedTarget : null,\n\n\n onControlPointerStart : function (e, target, controlName, pointerType) {\n var thisObj = target._jscInstance;\n\n jsc.preventDefault(e);\n jsc.captureTarget(target);\n\n var registerDragEvents = function (doc, offset) {\n jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],\n jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));\n jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],\n jsc.onDocumentPointerEnd(e, target, controlName, pointerType));\n };\n\n registerDragEvents(document, [0, 0]);\n\n if (window.parent && window.frameElement) {\n var rect = window.frameElement.getBoundingClientRect();\n var ofs = [-rect.left, -rect.top];\n registerDragEvents(window.parent.window.document, ofs);\n }\n\n var abs = jsc.getAbsPointerPos(e);\n var rel = jsc.getRelPointerPos(e);\n jsc._pointerOrigin = {\n x: abs.x - rel.x,\n y: abs.y - rel.y\n };\n\n switch (controlName) {\n case 'pad':\n // if the slider is at the bottom, move it up\n switch (jsc.getSliderComponent(thisObj)) {\n case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break;\n case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break;\n }\n jsc.setPad(thisObj, e, 0, 0);\n break;\n\n case 'sld':\n jsc.setSld(thisObj, e, 0);\n break;\n }\n\n jsc.dispatchFineChange(thisObj);\n },\n\n\n onDocumentPointerMove : function (e, target, controlName, pointerType, offset) {\n return function (e) {\n var thisObj = target._jscInstance;\n switch (controlName) {\n case 'pad':\n if (!e) { e = window.event; }\n jsc.setPad(thisObj, e, offset[0], offset[1]);\n jsc.dispatchFineChange(thisObj);\n break;\n\n case 'sld':\n if (!e) { e = window.event; }\n jsc.setSld(thisObj, e, offset[1]);\n jsc.dispatchFineChange(thisObj);\n break;\n }\n }\n },\n\n\n onDocumentPointerEnd : function (e, target, controlName, pointerType) {\n return function (e) {\n var thisObj = target._jscInstance;\n jsc.detachGroupEvents('drag');\n jsc.releaseTarget();\n // Always dispatch changes after detaching outstanding mouse handlers,\n // in case some user interaction will occur in user's onchange callback\n // that would intrude with current mouse events\n jsc.dispatchChange(thisObj);\n };\n },\n\n\n dispatchChange : function (thisObj) {\n if (thisObj.valueElement) {\n if (jsc.isElementType(thisObj.valueElement, 'input')) {\n jsc.fireEvent(thisObj.valueElement, 'change');\n }\n }\n },\n\n\n dispatchFineChange : function (thisObj) {\n if (thisObj.onFineChange) {\n var callback;\n if (typeof thisObj.onFineChange === 'string') {\n callback = new Function (thisObj.onFineChange);\n } else {\n callback = thisObj.onFineChange;\n }\n callback.call(thisObj);\n }\n },\n\n\n setPad : function (thisObj, e, ofsX, ofsY) {\n var pointerAbs = jsc.getAbsPointerPos(e);\n var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth;\n var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;\n\n var xVal = x * (360 / (thisObj.width - 1));\n var yVal = 100 - (y * (100 / (thisObj.height - 1)));\n\n switch (jsc.getPadYComponent(thisObj)) {\n case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break;\n case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break;\n }\n },\n\n\n setSld : function (thisObj, e, ofsY) {\n var pointerAbs = jsc.getAbsPointerPos(e);\n var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;\n\n var yVal = 100 - (y * (100 / (thisObj.height - 1)));\n\n switch (jsc.getSliderComponent(thisObj)) {\n case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break;\n case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break;\n }\n },\n\n\n _vmlNS : 'jsc_vml_',\n _vmlCSS : 'jsc_vml_css_',\n _vmlReady : false,\n\n\n initVML : function () {\n if (!jsc._vmlReady) {\n // init VML namespace\n var doc = document;\n if (!doc.namespaces[jsc._vmlNS]) {\n doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml');\n }\n if (!doc.styleSheets[jsc._vmlCSS]) {\n var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image'];\n var ss = doc.createStyleSheet();\n ss.owningElement.id = jsc._vmlCSS;\n for (var i = 0; i < tags.length; i += 1) {\n ss.addRule(jsc._vmlNS + '\\\\:' + tags[i], 'behavior:url(#default#VML);');\n }\n }\n jsc._vmlReady = true;\n }\n },\n\n\n createPalette : function () {\n\n var paletteObj = {\n elm: null,\n draw: null\n };\n\n if (jsc.isCanvasSupported) {\n // Canvas implementation for modern browsers\n\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n\n var drawFunc = function (width, height, type) {\n canvas.width = width;\n canvas.height = height;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);\n hGrad.addColorStop(0 / 6, '#F00');\n hGrad.addColorStop(1 / 6, '#FF0');\n hGrad.addColorStop(2 / 6, '#0F0');\n hGrad.addColorStop(3 / 6, '#0FF');\n hGrad.addColorStop(4 / 6, '#00F');\n hGrad.addColorStop(5 / 6, '#F0F');\n hGrad.addColorStop(6 / 6, '#F00');\n\n ctx.fillStyle = hGrad;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n\n var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);\n switch (type.toLowerCase()) {\n case 's':\n vGrad.addColorStop(0, 'rgba(255,255,255,0)');\n vGrad.addColorStop(1, 'rgba(255,255,255,1)');\n break;\n case 'v':\n vGrad.addColorStop(0, 'rgba(0,0,0,0)');\n vGrad.addColorStop(1, 'rgba(0,0,0,1)');\n break;\n }\n ctx.fillStyle = vGrad;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n paletteObj.elm = canvas;\n paletteObj.draw = drawFunc;\n\n } else {\n // VML fallback for IE 7 and 8\n\n jsc.initVML();\n\n var vmlContainer = document.createElement('div');\n vmlContainer.style.position = 'relative';\n vmlContainer.style.overflow = 'hidden';\n\n var hGrad = document.createElement(jsc._vmlNS + ':fill');\n hGrad.type = 'gradient';\n hGrad.method = 'linear';\n hGrad.angle = '90';\n hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0'\n\n var hRect = document.createElement(jsc._vmlNS + ':rect');\n hRect.style.position = 'absolute';\n hRect.style.left = -1 + 'px';\n hRect.style.top = -1 + 'px';\n hRect.stroked = false;\n hRect.appendChild(hGrad);\n vmlContainer.appendChild(hRect);\n\n var vGrad = document.createElement(jsc._vmlNS + ':fill');\n vGrad.type = 'gradient';\n vGrad.method = 'linear';\n vGrad.angle = '180';\n vGrad.opacity = '0';\n\n var vRect = document.createElement(jsc._vmlNS + ':rect');\n vRect.style.position = 'absolute';\n vRect.style.left = -1 + 'px';\n vRect.style.top = -1 + 'px';\n vRect.stroked = false;\n vRect.appendChild(vGrad);\n vmlContainer.appendChild(vRect);\n\n var drawFunc = function (width, height, type) {\n vmlContainer.style.width = width + 'px';\n vmlContainer.style.height = height + 'px';\n\n hRect.style.width =\n vRect.style.width =\n (width + 1) + 'px';\n hRect.style.height =\n vRect.style.height =\n (height + 1) + 'px';\n\n // Colors must be specified during every redraw, otherwise IE won't display\n // a full gradient during a subsequential redraw\n hGrad.color = '#F00';\n hGrad.color2 = '#F00';\n\n switch (type.toLowerCase()) {\n case 's':\n vGrad.color = vGrad.color2 = '#FFF';\n break;\n case 'v':\n vGrad.color = vGrad.color2 = '#000';\n break;\n }\n };\n \n paletteObj.elm = vmlContainer;\n paletteObj.draw = drawFunc;\n }\n\n return paletteObj;\n },\n\n\n createSliderGradient : function () {\n\n var sliderObj = {\n elm: null,\n draw: null\n };\n\n if (jsc.isCanvasSupported) {\n // Canvas implementation for modern browsers\n\n var canvas = document.createElement('canvas');\n var ctx = canvas.getContext('2d');\n\n var drawFunc = function (width, height, color1, color2) {\n canvas.width = width;\n canvas.height = height;\n\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);\n grad.addColorStop(0, color1);\n grad.addColorStop(1, color2);\n\n ctx.fillStyle = grad;\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n };\n\n sliderObj.elm = canvas;\n sliderObj.draw = drawFunc;\n\n } else {\n // VML fallback for IE 7 and 8\n\n jsc.initVML();\n\n var vmlContainer = document.createElement('div');\n vmlContainer.style.position = 'relative';\n vmlContainer.style.overflow = 'hidden';\n\n var grad = document.createElement(jsc._vmlNS + ':fill');\n grad.type = 'gradient';\n grad.method = 'linear';\n grad.angle = '180';\n\n var rect = document.createElement(jsc._vmlNS + ':rect');\n rect.style.position = 'absolute';\n rect.style.left = -1 + 'px';\n rect.style.top = -1 + 'px';\n rect.stroked = false;\n rect.appendChild(grad);\n vmlContainer.appendChild(rect);\n\n var drawFunc = function (width, height, color1, color2) {\n vmlContainer.style.width = width + 'px';\n vmlContainer.style.height = height + 'px';\n\n rect.style.width = (width + 1) + 'px';\n rect.style.height = (height + 1) + 'px';\n\n grad.color = color1;\n grad.color2 = color2;\n };\n \n sliderObj.elm = vmlContainer;\n sliderObj.draw = drawFunc;\n }\n\n return sliderObj;\n },\n\n\n leaveValue : 1<<0,\n leaveStyle : 1<<1,\n leavePad : 1<<2,\n leaveSld : 1<<3,\n\n\n BoxShadow : (function () {\n var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {\n this.hShadow = hShadow;\n this.vShadow = vShadow;\n this.blur = blur;\n this.spread = spread;\n this.color = color;\n this.inset = !!inset;\n };\n\n BoxShadow.prototype.toString = function () {\n var vals = [\n Math.round(this.hShadow) + 'px',\n Math.round(this.vShadow) + 'px',\n Math.round(this.blur) + 'px',\n Math.round(this.spread) + 'px',\n this.color\n ];\n if (this.inset) {\n vals.push('inset');\n }\n return vals.join(' ');\n };\n\n return BoxShadow;\n })(),\n\n\n //\n // Usage:\n // var myColor = new jscolor(<targetElement> [, <options>])\n //\n\n jscolor : function (targetElement, options) {\n\n // General options\n //\n this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB()\n this.valueElement = targetElement; // element that will be used to display and input the color code\n this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor\n this.required = true; // whether the associated text <input> can be left empty\n this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace)\n this.hash = false; // whether to prefix the HEX color code with # symbol\n this.uppercase = true; // whether to uppercase the color code\n this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code)\n this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it\n this.minS = 0; // min allowed saturation (0 - 100)\n this.maxS = 100; // max allowed saturation (0 - 100)\n this.minV = 0; // min allowed value (brightness) (0 - 100)\n this.maxV = 100; // max allowed value (brightness) (0 - 100)\n\n // Accessing the picked color\n //\n this.hsv = [0, 0, 100]; // read-only [0-360, 0-100, 0-100]\n this.rgb = [255, 255, 255]; // read-only [0-255, 0-255, 0-255]\n\n // Color Picker options\n //\n this.width = 181; // width of color palette (in px)\n this.height = 101; // height of color palette (in px)\n this.showOnClick = true; // whether to display the color picker when user clicks on its target element\n this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls\n this.position = 'bottom'; // left | right | top | bottom - position relative to the target element\n this.smartPosition = true; // automatically change picker position when there is not enough space for it\n this.sliderSize = 16; // px\n this.crossSize = 8; // px\n this.closable = false; // whether to display the Close button\n this.closeText = 'Close';\n this.buttonColor = '#000000'; // CSS color\n this.buttonHeight = 18; // px\n this.padding = 12; // px\n this.backgroundColor = '#FFFFFF'; // CSS color\n this.borderWidth = 1; // px\n this.borderColor = '#BBBBBB'; // CSS color\n this.borderRadius = 8; // px\n this.insetWidth = 1; // px\n this.insetColor = '#BBBBBB'; // CSS color\n this.shadow = true; // whether to display shadow\n this.shadowBlur = 15; // px\n this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color\n this.pointerColor = '#4C4C4C'; // px\n this.pointerBorderColor = '#FFFFFF'; // px\n this.pointerBorderWidth = 1; // px\n this.pointerThickness = 2; // px\n this.zIndex = 1000;\n this.container = null; // where to append the color picker (BODY element by default)\n\n\n for (var opt in options) {\n if (options.hasOwnProperty(opt)) {\n this[opt] = options[opt];\n }\n }\n\n\n this.hide = function () {\n if (isPickerOwner()) {\n detachPicker();\n }\n };\n\n\n this.show = function () {\n drawPicker();\n };\n\n\n this.redraw = function () {\n if (isPickerOwner()) {\n drawPicker();\n }\n };\n\n\n this.importColor = function () {\n if (!this.valueElement) {\n this.exportColor();\n } else {\n if (jsc.isElementType(this.valueElement, 'input')) {\n if (!this.refine) {\n if (!this.fromString(this.valueElement.value, jsc.leaveValue)) {\n if (this.styleElement) {\n this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;\n this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;\n this.styleElement.style.color = this.styleElement._jscOrigStyle.color;\n }\n this.exportColor(jsc.leaveValue | jsc.leaveStyle);\n }\n } else if (!this.required && /^\\s*$/.test(this.valueElement.value)) {\n this.valueElement.value = '';\n if (this.styleElement) {\n this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;\n this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;\n this.styleElement.style.color = this.styleElement._jscOrigStyle.color;\n }\n this.exportColor(jsc.leaveValue | jsc.leaveStyle);\n\n } else if (this.fromString(this.valueElement.value)) {\n // managed to import color successfully from the value -> OK, don't do anything\n } else {\n this.exportColor(2);\n }\n } else {\n // not an input element -> doesn't have any value\n this.exportColor();\n }\n }\n };\n\n\n this.exportColor = function (flags) {\n if (flags == 2) {\n if (this.styleElement) {\n this.styleElement.style.backgroundImage = 'none';\n this.styleElement.style.backgroundColor = 'transparent';\n this.styleElement.style.color = '#000';\n }\n } else {\n if (!(flags & jsc.leaveValue) && this.valueElement) {\n var value = this.toString();\n if (this.uppercase) { value = value.toUpperCase(); }\n if (this.hash) { value = '#' + value; }\n\n if (jsc.isElementType(this.valueElement, 'input')) {\n this.valueElement.value = value;\n } else {\n this.valueElement.innerHTML = value;\n }\n }\n if (!(flags & jsc.leaveStyle)) {\n if (this.styleElement) {\n this.styleElement.style.backgroundImage = 'none';\n this.styleElement.style.backgroundColor = '#' + this.toString();\n this.styleElement.style.color = this.isLight() ? '#000' : '#FFF';\n }\n }\n if (!(flags & jsc.leavePad) && isPickerOwner()) {\n redrawPad();\n }\n if (!(flags & jsc.leaveSld) && isPickerOwner()) {\n redrawSld();\n }\n }\n };\n\n\n // h: 0-360\n // s: 0-100\n // v: 0-100\n //\n this.fromHSV = function (h, s, v, flags) { // null = don't change\n if (h !== null) {\n if (isNaN(h)) { return false; }\n h = Math.max(0, Math.min(360, h));\n }\n if (s !== null) {\n if (isNaN(s)) { return false; }\n s = Math.max(0, Math.min(100, this.maxS, s), this.minS);\n }\n if (v !== null) {\n if (isNaN(v)) { return false; }\n v = Math.max(0, Math.min(100, this.maxV, v), this.minV);\n }\n\n this.rgb = HSV_RGB(\n h===null ? this.hsv[0] : (this.hsv[0]=h),\n s===null ? this.hsv[1] : (this.hsv[1]=s),\n v===null ? this.hsv[2] : (this.hsv[2]=v)\n );\n\n this.exportColor(flags);\n };\n\n\n // r: 0-255\n // g: 0-255\n // b: 0-255\n //\n this.fromRGB = function (r, g, b, flags) { // null = don't change\n if (r !== null) {\n if (isNaN(r)) { return false; }\n r = Math.max(0, Math.min(255, r));\n }\n if (g !== null) {\n if (isNaN(g)) { return false; }\n g = Math.max(0, Math.min(255, g));\n }\n if (b !== null) {\n if (isNaN(b)) { return false; }\n b = Math.max(0, Math.min(255, b));\n }\n\n var hsv = RGB_HSV(\n r===null ? this.rgb[0] : r,\n g===null ? this.rgb[1] : g,\n b===null ? this.rgb[2] : b\n );\n if (hsv[0] !== null) {\n this.hsv[0] = Math.max(0, Math.min(360, hsv[0]));\n }\n if (hsv[2] !== 0) {\n this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));\n }\n this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));\n\n // update RGB according to final HSV, as some values might be trimmed\n var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);\n this.rgb[0] = rgb[0];\n this.rgb[1] = rgb[1];\n this.rgb[2] = rgb[2];\n\n this.exportColor(flags);\n };\n\n\n this.fromString = function (str, flags) {\n var m;\n if (m = str.match(/^\\W*([0-9A-F]{3}([0-9A-F]{3})?)\\W*$/i)) {\n // HEX notation\n //\n\n if (m[1].length === 6) {\n // 6-char notation\n this.fromRGB(\n parseInt(m[1].substr(0,2),16),\n parseInt(m[1].substr(2,2),16),\n parseInt(m[1].substr(4,2),16),\n flags\n );\n } else {\n // 3-char notation\n this.fromRGB(\n parseInt(m[1].charAt(0) + m[1].charAt(0),16),\n parseInt(m[1].charAt(1) + m[1].charAt(1),16),\n parseInt(m[1].charAt(2) + m[1].charAt(2),16),\n flags\n );\n }\n return true;\n\n } else if (m = str.match(/^\\W*rgba?\\(([^)]*)\\)\\W*$/i)) {\n var params = m[1].split(',');\n var re = /^\\s*(\\d*)(\\.\\d+)?\\s*$/;\n var mR, mG, mB;\n if (\n params.length >= 3 &&\n (mR = params[0].match(re)) &&\n (mG = params[1].match(re)) &&\n (mB = params[2].match(re))\n ) {\n var r = parseFloat((mR[1] || '0') + (mR[2] || ''));\n var g = parseFloat((mG[1] || '0') + (mG[2] || ''));\n var b = parseFloat((mB[1] || '0') + (mB[2] || ''));\n this.fromRGB(r, g, b, flags);\n return true;\n }\n }\n return false;\n };\n\n\n this.toString = function () {\n return (\n (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) +\n (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) +\n (0x100 | Math.round(this.rgb[2])).toString(16).substr(1)\n );\n };\n\n\n this.toHEXString = function () {\n return '#' + this.toString().toUpperCase();\n };\n\n\n this.toRGBString = function () {\n return ('rgb(' +\n Math.round(this.rgb[0]) + ',' +\n Math.round(this.rgb[1]) + ',' +\n Math.round(this.rgb[2]) + ')'\n );\n };\n\n\n this.isLight = function () {\n return (\n 0.213 * this.rgb[0] +\n 0.715 * this.rgb[1] +\n 0.072 * this.rgb[2] >\n 255 / 2\n );\n };\n\n\n this._processParentElementsInDOM = function () {\n if (this._linkedElementsProcessed) { return; }\n this._linkedElementsProcessed = true;\n\n var elm = this.targetElement;\n do {\n // If the target element or one of its parent nodes has fixed position,\n // then use fixed positioning instead\n //\n // Note: In Firefox, getComputedStyle returns null in a hidden iframe,\n // that's why we need to check if the returned style object is non-empty\n var currStyle = jsc.getStyle(elm);\n if (currStyle && currStyle.position.toLowerCase() === 'fixed') {\n this.fixed = true;\n }\n\n if (elm !== this.targetElement) {\n // Ensure to attach onParentScroll only once to each parent element\n // (multiple targetElements can share the same parent nodes)\n //\n // Note: It's not just offsetParents that can be scrollable,\n // that's why we loop through all parent nodes\n if (!elm._jscEventsAttached) {\n jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);\n elm._jscEventsAttached = true;\n }\n }\n } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body'));\n };\n\n\n // r: 0-255\n // g: 0-255\n // b: 0-255\n //\n // returns: [ 0-360, 0-100, 0-100 ]\n //\n function RGB_HSV (r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n var n = Math.min(Math.min(r,g),b);\n var v = Math.max(Math.max(r,g),b);\n var m = v - n;\n if (m === 0) { return [ null, 0, 100 * v ]; }\n var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);\n return [\n 60 * (h===6?0:h),\n 100 * (m/v),\n 100 * v\n ];\n }\n\n\n // h: 0-360\n // s: 0-100\n // v: 0-100\n //\n // returns: [ 0-255, 0-255, 0-255 ]\n //\n function HSV_RGB (h, s, v) {\n var u = 255 * (v / 100);\n\n if (h === null) {\n return [ u, u, u ];\n }\n\n h /= 60;\n s /= 100;\n\n var i = Math.floor(h);\n var f = i%2 ? h-i : 1-(h-i);\n var m = u * (1 - s);\n var n = u * (1 - s * f);\n switch (i) {\n case 6:\n case 0: return [u,n,m];\n case 1: return [n,u,m];\n case 2: return [m,u,n];\n case 3: return [m,n,u];\n case 4: return [n,m,u];\n case 5: return [u,m,n];\n }\n }\n\n\n function detachPicker () {\n jsc.unsetClass(THIS.targetElement, THIS.activeClass);\n jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);\n delete jsc.picker.owner;\n }\n\n\n function drawPicker () {\n\n // At this point, when drawing the picker, we know what the parent elements are\n // and we can do all related DOM operations, such as registering events on them\n // or checking their positioning\n THIS._processParentElementsInDOM();\n\n if (!jsc.picker) {\n jsc.picker = {\n owner: null,\n wrap : document.createElement('div'),\n box : document.createElement('div'),\n boxS : document.createElement('div'), // shadow area\n boxB : document.createElement('div'), // border\n pad : document.createElement('div'),\n padB : document.createElement('div'), // border\n padM : document.createElement('div'), // mouse/touch area\n padPal : jsc.createPalette(),\n cross : document.createElement('div'),\n crossBY : document.createElement('div'), // border Y\n crossBX : document.createElement('div'), // border X\n crossLY : document.createElement('div'), // line Y\n crossLX : document.createElement('div'), // line X\n sld : document.createElement('div'),\n sldB : document.createElement('div'), // border\n sldM : document.createElement('div'), // mouse/touch area\n sldGrad : jsc.createSliderGradient(),\n sldPtrS : document.createElement('div'), // slider pointer spacer\n sldPtrIB : document.createElement('div'), // slider pointer inner border\n sldPtrMB : document.createElement('div'), // slider pointer middle border\n sldPtrOB : document.createElement('div'), // slider pointer outer border\n btn : document.createElement('div'),\n btnT : document.createElement('span') // text\n };\n\n jsc.picker.pad.appendChild(jsc.picker.padPal.elm);\n jsc.picker.padB.appendChild(jsc.picker.pad);\n jsc.picker.cross.appendChild(jsc.picker.crossBY);\n jsc.picker.cross.appendChild(jsc.picker.crossBX);\n jsc.picker.cross.appendChild(jsc.picker.crossLY);\n jsc.picker.cross.appendChild(jsc.picker.crossLX);\n jsc.picker.padB.appendChild(jsc.picker.cross);\n jsc.picker.box.appendChild(jsc.picker.padB);\n jsc.picker.box.appendChild(jsc.picker.padM);\n\n jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);\n jsc.picker.sldB.appendChild(jsc.picker.sld);\n jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);\n jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);\n jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);\n jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);\n jsc.picker.box.appendChild(jsc.picker.sldB);\n jsc.picker.box.appendChild(jsc.picker.sldM);\n\n jsc.picker.btn.appendChild(jsc.picker.btnT);\n jsc.picker.box.appendChild(jsc.picker.btn);\n\n jsc.picker.boxB.appendChild(jsc.picker.box);\n jsc.picker.wrap.appendChild(jsc.picker.boxS);\n jsc.picker.wrap.appendChild(jsc.picker.boxB);\n }\n\n var p = jsc.picker;\n\n var displaySlider = !!jsc.getSliderComponent(THIS);\n var dims = jsc.getPickerDims(THIS);\n var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\n var padToSliderPadding = jsc.getPadToSliderPadding(THIS);\n var borderRadius = Math.min(\n THIS.borderRadius,\n Math.round(THIS.padding * Math.PI)); // px\n var padCursor = 'crosshair';\n\n // wrap\n p.wrap.style.clear = 'both';\n p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px';\n p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px';\n p.wrap.style.zIndex = THIS.zIndex;\n\n // picker\n p.box.style.width = dims[0] + 'px';\n p.box.style.height = dims[1] + 'px';\n\n p.boxS.style.position = 'absolute';\n p.boxS.style.left = '0';\n p.boxS.style.top = '0';\n p.boxS.style.width = '100%';\n p.boxS.style.height = '100%';\n jsc.setBorderRadius(p.boxS, borderRadius + 'px');\n\n // picker border\n p.boxB.style.position = 'relative';\n p.boxB.style.border = THIS.borderWidth + 'px solid';\n p.boxB.style.borderColor = THIS.borderColor;\n p.boxB.style.background = THIS.backgroundColor;\n jsc.setBorderRadius(p.boxB, borderRadius + 'px');\n\n // IE hack:\n // If the element is transparent, IE will trigger the event on the elements under it,\n // e.g. on Canvas or on elements with border\n p.padM.style.background =\n p.sldM.style.background =\n '#FFF';\n jsc.setStyle(p.padM, 'opacity', '0');\n jsc.setStyle(p.sldM, 'opacity', '0');\n\n // pad\n p.pad.style.position = 'relative';\n p.pad.style.width = THIS.width + 'px';\n p.pad.style.height = THIS.height + 'px';\n\n // pad palettes (HSV and HVS)\n p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS));\n\n // pad border\n p.padB.style.position = 'absolute';\n p.padB.style.left = THIS.padding + 'px';\n p.padB.style.top = THIS.padding + 'px';\n p.padB.style.border = THIS.insetWidth + 'px solid';\n p.padB.style.borderColor = THIS.insetColor;\n\n // pad mouse area\n p.padM._jscInstance = THIS;\n p.padM._jscControlName = 'pad';\n p.padM.style.position = 'absolute';\n p.padM.style.left = '0';\n p.padM.style.top = '0';\n p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px';\n p.padM.style.height = dims[1] + 'px';\n p.padM.style.cursor = padCursor;\n\n // pad cross\n p.cross.style.position = 'absolute';\n p.cross.style.left =\n p.cross.style.top =\n '0';\n p.cross.style.width =\n p.cross.style.height =\n crossOuterSize + 'px';\n\n // pad cross border Y and X\n p.crossBY.style.position =\n p.crossBX.style.position =\n 'absolute';\n p.crossBY.style.background =\n p.crossBX.style.background =\n THIS.pointerBorderColor;\n p.crossBY.style.width =\n p.crossBX.style.height =\n (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\n p.crossBY.style.height =\n p.crossBX.style.width =\n crossOuterSize + 'px';\n p.crossBY.style.left =\n p.crossBX.style.top =\n (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';\n p.crossBY.style.top =\n p.crossBX.style.left =\n '0';\n\n // pad cross line Y and X\n p.crossLY.style.position =\n p.crossLX.style.position =\n 'absolute';\n p.crossLY.style.background =\n p.crossLX.style.background =\n THIS.pointerColor;\n p.crossLY.style.height =\n p.crossLX.style.width =\n (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';\n p.crossLY.style.width =\n p.crossLX.style.height =\n THIS.pointerThickness + 'px';\n p.crossLY.style.left =\n p.crossLX.style.top =\n (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';\n p.crossLY.style.top =\n p.crossLX.style.left =\n THIS.pointerBorderWidth + 'px';\n\n // slider\n p.sld.style.overflow = 'hidden';\n p.sld.style.width = THIS.sliderSize + 'px';\n p.sld.style.height = THIS.height + 'px';\n\n // slider gradient\n p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');\n\n // slider border\n p.sldB.style.display = displaySlider ? 'block' : 'none';\n p.sldB.style.position = 'absolute';\n p.sldB.style.right = THIS.padding + 'px';\n p.sldB.style.top = THIS.padding + 'px';\n p.sldB.style.border = THIS.insetWidth + 'px solid';\n p.sldB.style.borderColor = THIS.insetColor;\n\n // slider mouse area\n p.sldM._jscInstance = THIS;\n p.sldM._jscControlName = 'sld';\n p.sldM.style.display = displaySlider ? 'block' : 'none';\n p.sldM.style.position = 'absolute';\n p.sldM.style.right = '0';\n p.sldM.style.top = '0';\n p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px';\n p.sldM.style.height = dims[1] + 'px';\n p.sldM.style.cursor = 'default';\n\n // slider pointer inner and outer border\n p.sldPtrIB.style.border =\n p.sldPtrOB.style.border =\n THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;\n\n // slider pointer outer border\n p.sldPtrOB.style.position = 'absolute';\n p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';\n p.sldPtrOB.style.top = '0';\n\n // slider pointer middle border\n p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;\n\n // slider pointer spacer\n p.sldPtrS.style.width = THIS.sliderSize + 'px';\n p.sldPtrS.style.height = sliderPtrSpace + 'px';\n\n // the Close button\n function setBtnBorder () {\n var insetColors = THIS.insetColor.split(/\\s+/);\n var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];\n p.btn.style.borderColor = outsetColor;\n }\n p.btn.style.display = THIS.closable ? 'block' : 'none';\n p.btn.style.position = 'absolute';\n p.btn.style.left = THIS.padding + 'px';\n p.btn.style.bottom = THIS.padding + 'px';\n p.btn.style.padding = '0 15px';\n p.btn.style.height = THIS.buttonHeight + 'px';\n p.btn.style.border = THIS.insetWidth + 'px solid';\n setBtnBorder();\n p.btn.style.color = THIS.buttonColor;\n p.btn.style.font = '12px sans-serif';\n p.btn.style.textAlign = 'center';\n try {\n p.btn.style.cursor = 'pointer';\n } catch(eOldIE) {\n p.btn.style.cursor = 'hand';\n }\n p.btn.onmousedown = function () {\n THIS.hide();\n };\n p.btnT.style.lineHeight = THIS.buttonHeight + 'px';\n p.btnT.innerHTML = '';\n p.btnT.appendChild(document.createTextNode(THIS.closeText));\n\n // place pointers\n redrawPad();\n redrawSld();\n\n // If we are changing the owner without first closing the picker,\n // make sure to first deal with the old owner\n if (jsc.picker.owner && jsc.picker.owner !== THIS) {\n jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass);\n }\n\n // Set the new picker owner\n jsc.picker.owner = THIS;\n\n // The redrawPosition() method needs picker.owner to be set, that's why we call it here,\n // after setting the owner\n if (jsc.isElementType(container, 'body')) {\n jsc.redrawPosition();\n } else {\n jsc._drawPosition(THIS, 0, 0, 'relative', false);\n }\n\n if (p.wrap.parentNode != container) {\n container.appendChild(p.wrap);\n }\n\n jsc.setClass(THIS.targetElement, THIS.activeClass);\n }\n\n\n function redrawPad () {\n // redraw the pad pointer\n switch (jsc.getPadYComponent(THIS)) {\n case 's': var yComponent = 1; break;\n case 'v': var yComponent = 2; break;\n }\n var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1));\n var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));\n var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);\n var ofs = -Math.floor(crossOuterSize / 2);\n jsc.picker.cross.style.left = (x + ofs) + 'px';\n jsc.picker.cross.style.top = (y + ofs) + 'px';\n\n // redraw the slider\n switch (jsc.getSliderComponent(THIS)) {\n case 's':\n var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]);\n var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]);\n var color1 = 'rgb(' +\n Math.round(rgb1[0]) + ',' +\n Math.round(rgb1[1]) + ',' +\n Math.round(rgb1[2]) + ')';\n var color2 = 'rgb(' +\n Math.round(rgb2[0]) + ',' +\n Math.round(rgb2[1]) + ',' +\n Math.round(rgb2[2]) + ')';\n jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\n break;\n case 'v':\n var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100);\n var color1 = 'rgb(' +\n Math.round(rgb[0]) + ',' +\n Math.round(rgb[1]) + ',' +\n Math.round(rgb[2]) + ')';\n var color2 = '#000';\n jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);\n break;\n }\n }\n\n\n function redrawSld () {\n var sldComponent = jsc.getSliderComponent(THIS);\n if (sldComponent) {\n // redraw the slider pointer\n switch (sldComponent) {\n case 's': var yComponent = 1; break;\n case 'v': var yComponent = 2; break;\n }\n var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));\n jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px';\n }\n }\n\n\n function isPickerOwner () {\n return jsc.picker && jsc.picker.owner === THIS;\n }\n\n\n function blurValue () {\n THIS.importColor();\n }\n\n\n // Find the target element\n if (typeof targetElement === 'string') {\n var id = targetElement;\n var elm = document.getElementById(id);\n if (elm) {\n this.targetElement = elm;\n } else {\n jsc.warn('Could not find target element with ID \\'' + id + '\\'');\n }\n } else if (targetElement) {\n this.targetElement = targetElement;\n } else {\n jsc.warn('Invalid target element: \\'' + targetElement + '\\'');\n }\n\n if (this.targetElement._jscLinkedInstance) {\n jsc.warn('Cannot link jscolor twice to the same element. Skipping.');\n return;\n }\n this.targetElement._jscLinkedInstance = this;\n\n // Find the value element\n this.valueElement = jsc.fetchElement(this.valueElement);\n // Find the style element\n this.styleElement = jsc.fetchElement(this.styleElement);\n\n var THIS = this;\n var container =\n this.container ?\n jsc.fetchElement(this.container) :\n document.getElementsByTagName('body')[0];\n var sliderPtrSpace = 3; // px\n\n // For BUTTON elements it's important to stop them from sending the form when clicked\n // (e.g. in Safari)\n if (jsc.isElementType(this.targetElement, 'button')) {\n if (this.targetElement.onclick) {\n var origCallback = this.targetElement.onclick;\n this.targetElement.onclick = function (evt) {\n origCallback.call(this, evt);\n return false;\n };\n } else {\n this.targetElement.onclick = function () { return false; };\n }\n }\n\n /*\n var elm = this.targetElement;\n do {\n // If the target element or one of its offsetParents has fixed position,\n // then use fixed positioning instead\n //\n // Note: In Firefox, getComputedStyle returns null in a hidden iframe,\n // that's why we need to check if the returned style object is non-empty\n var currStyle = jsc.getStyle(elm);\n if (currStyle && currStyle.position.toLowerCase() === 'fixed') {\n this.fixed = true;\n }\n\n if (elm !== this.targetElement) {\n // attach onParentScroll so that we can recompute the picker position\n // when one of the offsetParents is scrolled\n if (!elm._jscEventsAttached) {\n jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);\n elm._jscEventsAttached = true;\n }\n }\n } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body'));\n */\n\n // valueElement\n if (this.valueElement) {\n if (jsc.isElementType(this.valueElement, 'input')) {\n var updateField = function () {\n THIS.fromString(THIS.valueElement.value, jsc.leaveValue);\n jsc.dispatchFineChange(THIS);\n };\n jsc.attachEvent(this.valueElement, 'keyup', updateField);\n jsc.attachEvent(this.valueElement, 'input', updateField);\n jsc.attachEvent(this.valueElement, 'blur', blurValue);\n this.valueElement.setAttribute('autocomplete', 'off');\n }\n }\n\n // styleElement\n if (this.styleElement) {\n this.styleElement._jscOrigStyle = {\n backgroundImage : this.styleElement.style.backgroundImage,\n backgroundColor : this.styleElement.style.backgroundColor,\n color : this.styleElement.style.color\n };\n }\n\n if (this.value) {\n // Try to set the color from the .value option and if unsuccessful,\n // export the current color\n this.fromString(this.value) || this.exportColor();\n } else {\n this.importColor();\n }\n }\n\n};\n\n\n//================================\n// Public properties and methods\n//================================\n\n\n// By default, search for all elements with class=\"jscolor\" and install a color picker on them.\n//\n// You can change what class name will be looked for by setting the property jscolor.lookupClass\n// anywhere in your HTML document. To completely disable the automatic lookup, set it to null.\n//\njsc.jscolor.lookupClass = 'jscolor';\n\n\njsc.jscolor.installByClassName = function (className) {\n var inputElms = document.getElementsByTagName('input');\n var buttonElms = document.getElementsByTagName('button');\n\n jsc.tryInstallOnElements(inputElms, className);\n jsc.tryInstallOnElements(buttonElms, className);\n};\n\n\njsc.register();\n\n\nreturn jsc.jscolor;\n\n\n})(); }\n","Smartwave_Dailydeals/js/script.js":"require([\n 'jquery',\n 'jquery_chosen'\n], function ($) {\n 'use strict';\n\n $(document).ready(function(){\n \tsetTimeout(function(){\n \t\t$(\"#dailydeal_sw_product_sku\").chosen();\n \t},1000);\n });\n\n});","Smartwave_Dailydeals/js/chosen.jquery.min.js":"/* Chosen v1.8.7 | (c) 2011-2018 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */\n\n(function(){var t,e,s,i,n=function(t,e){return function(){return t.apply(e,arguments)}},r=function(t,e){function s(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return s.prototype=e.prototype,t.prototype=new s,t.__super__=e.prototype,t},o={}.hasOwnProperty;(i=function(){function t(){this.options_index=0,this.parsed=[]}return t.prototype.add_node=function(t){return\"OPTGROUP\"===t.nodeName.toUpperCase()?this.add_group(t):this.add_option(t)},t.prototype.add_group=function(t){var e,s,i,n,r,o;for(e=this.parsed.length,this.parsed.push({array_index:e,group:!0,label:t.label,title:t.title?t.title:void 0,children:0,disabled:t.disabled,classes:t.className}),o=[],s=0,i=(r=t.childNodes).length;s<i;s++)n=r[s],o.push(this.add_option(n,e,t.disabled));return o},t.prototype.add_option=function(t,e,s){if(\"OPTION\"===t.nodeName.toUpperCase())return\"\"!==t.text?(null!=e&&(this.parsed[e].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:t.value,text:t.text,html:t.innerHTML,title:t.title?t.title:void 0,selected:t.selected,disabled:!0===s?s:t.disabled,group_array_index:e,group_label:null!=e?this.parsed[e].label:null,classes:t.className,style:t.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1},t}()).select_to_array=function(t){var e,s,n,r,o;for(r=new i,s=0,n=(o=t.childNodes).length;s<n;s++)e=o[s],r.add_node(e);return r.parsed},e=function(){function t(e,s){this.form_field=e,this.options=null!=s?s:{},this.label_click_handler=n(this.label_click_handler,this),t.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return t.prototype.set_default_values=function(){return this.click_test_action=function(t){return function(e){return t.test_active_click(e)}}(this),this.activate_action=function(t){return function(e){return t.activate_field(e)}}(this),this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.is_rtl=this.options.rtl||/\\bchosen-rtl\\b/.test(this.form_field.className),this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&\"\"===this.form_field.options[0].text&&this.options.allow_single_deselect,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null==this.options.enable_split_word_search||this.options.enable_split_word_search,this.group_search=null==this.options.group_search||this.options.group_search,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null==this.options.single_backstroke_delete||this.options.single_backstroke_delete,this.max_selected_options=this.options.max_selected_options||Infinity,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null==this.options.display_selected_options||this.options.display_selected_options,this.display_disabled_options=null==this.options.display_disabled_options||this.options.display_disabled_options,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1,this.max_shown_results=this.options.max_shown_results||Number.POSITIVE_INFINITY,this.case_sensitive_search=this.options.case_sensitive_search||!1,this.hide_results_on_select=null==this.options.hide_results_on_select||this.options.hide_results_on_select},t.prototype.set_default_text=function(){return this.form_field.getAttribute(\"data-placeholder\")?this.default_text=this.form_field.getAttribute(\"data-placeholder\"):this.is_multiple?this.default_text=this.options.placeholder_text_multiple||this.options.placeholder_text||t.default_multiple_text:this.default_text=this.options.placeholder_text_single||this.options.placeholder_text||t.default_single_text,this.default_text=this.escape_html(this.default_text),this.results_none_found=this.form_field.getAttribute(\"data-no_results_text\")||this.options.no_results_text||t.default_no_result_text},t.prototype.choice_label=function(t){return this.include_group_label_in_selected&&null!=t.group_label?\"<b class='group-name'>\"+this.escape_html(t.group_label)+\"</b>\"+t.html:t.html},t.prototype.mouse_enter=function(){return this.mouse_on_container=!0},t.prototype.mouse_leave=function(){return this.mouse_on_container=!1},t.prototype.input_focus=function(t){if(this.is_multiple){if(!this.active_field)return setTimeout(function(t){return function(){return t.container_mousedown()}}(this),50)}else if(!this.active_field)return this.activate_field()},t.prototype.input_blur=function(t){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(t){return function(){return t.blur_test()}}(this),100)},t.prototype.label_click_handler=function(t){return this.is_multiple?this.container_mousedown(t):this.activate_field()},t.prototype.results_option_build=function(t){var e,s,i,n,r,o,h;for(e=\"\",h=0,n=0,r=(o=this.results_data).length;n<r&&(s=o[n],i=\"\",\"\"!==(i=s.group?this.result_add_group(s):this.result_add_option(s))&&(h++,e+=i),(null!=t?t.first:void 0)&&(s.selected&&this.is_multiple?this.choice_build(s):s.selected&&!this.is_multiple&&this.single_set_selected_text(this.choice_label(s))),!(h>=this.max_shown_results));n++);return e},t.prototype.result_add_option=function(t){var e,s;return t.search_match&&this.include_option_in_results(t)?(e=[],t.disabled||t.selected&&this.is_multiple||e.push(\"active-result\"),!t.disabled||t.selected&&this.is_multiple||e.push(\"disabled-result\"),t.selected&&e.push(\"result-selected\"),null!=t.group_array_index&&e.push(\"group-option\"),\"\"!==t.classes&&e.push(t.classes),s=document.createElement(\"li\"),s.className=e.join(\" \"),t.style&&(s.style.cssText=t.style),s.setAttribute(\"data-option-array-index\",t.array_index),s.innerHTML=t.highlighted_html||t.html,t.title&&(s.title=t.title),this.outerHTML(s)):\"\"},t.prototype.result_add_group=function(t){var e,s;return(t.search_match||t.group_match)&&t.active_options>0?((e=[]).push(\"group-result\"),t.classes&&e.push(t.classes),s=document.createElement(\"li\"),s.className=e.join(\" \"),s.innerHTML=t.highlighted_html||this.escape_html(t.label),t.title&&(s.title=t.title),this.outerHTML(s)):\"\"},t.prototype.results_update_field=function(){if(this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing)return this.winnow_results()},t.prototype.reset_single_select_options=function(){var t,e,s,i,n;for(n=[],t=0,e=(s=this.results_data).length;t<e;t++)(i=s[t]).selected?n.push(i.selected=!1):n.push(void 0);return n},t.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},t.prototype.results_search=function(t){return this.results_showing?this.winnow_results():this.results_show()},t.prototype.winnow_results=function(t){var e,s,i,n,r,o,h,l,c,_,a,u,d,p,f;for(this.no_results_clear(),_=0,e=(h=this.get_search_text()).replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\"),c=this.get_search_regex(e),i=0,n=(l=this.results_data).length;i<n;i++)(r=l[i]).search_match=!1,a=null,u=null,r.highlighted_html=\"\",this.include_option_in_results(r)&&(r.group&&(r.group_match=!1,r.active_options=0),null!=r.group_array_index&&this.results_data[r.group_array_index]&&(0===(a=this.results_data[r.group_array_index]).active_options&&a.search_match&&(_+=1),a.active_options+=1),f=r.group?r.label:r.text,r.group&&!this.group_search||(u=this.search_string_match(f,c),r.search_match=null!=u,r.search_match&&!r.group&&(_+=1),r.search_match?(h.length&&(d=u.index,o=f.slice(0,d),s=f.slice(d,d+h.length),p=f.slice(d+h.length),r.highlighted_html=this.escape_html(o)+\"<em>\"+this.escape_html(s)+\"</em>\"+this.escape_html(p)),null!=a&&(a.group_match=!0)):null!=r.group_array_index&&this.results_data[r.group_array_index].search_match&&(r.search_match=!0)));return this.result_clear_highlight(),_<1&&h.length?(this.update_results_content(\"\"),this.no_results(h)):(this.update_results_content(this.results_option_build()),(null!=t?t.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},t.prototype.get_search_regex=function(t){var e,s;return s=this.search_contains?t:\"(^|\\\\s|\\\\b)\"+t+\"[^\\\\s]*\",this.enable_split_word_search||this.search_contains||(s=\"^\"+s),e=this.case_sensitive_search?\"\":\"i\",new RegExp(s,e)},t.prototype.search_string_match=function(t,e){var s;return s=e.exec(t),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},t.prototype.choices_count=function(){var t,e,s;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,t=0,e=(s=this.form_field.options).length;t<e;t++)s[t].selected&&(this.selected_option_count+=1);return this.selected_option_count},t.prototype.choices_click=function(t){if(t.preventDefault(),this.activate_field(),!this.results_showing&&!this.is_disabled)return this.results_show()},t.prototype.keydown_checker=function(t){var e,s;switch(s=null!=(e=t.which)?e:t.keyCode,this.search_field_scale(),8!==s&&this.pending_backstroke&&this.clear_backstroke(),s){case 8:this.backstroke_length=this.get_search_field_value().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(t),this.mouse_on_container=!1;break;case 13:case 27:this.results_showing&&t.preventDefault();break;case 32:this.disable_search&&t.preventDefault();break;case 38:t.preventDefault(),this.keyup_arrow();break;case 40:t.preventDefault(),this.keydown_arrow()}},t.prototype.keyup_checker=function(t){var e,s;switch(s=null!=(e=t.which)?e:t.keyCode,this.search_field_scale(),s){case 8:this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case 13:t.preventDefault(),this.results_showing&&this.result_select(t);break;case 27:this.results_showing&&this.results_hide();break;case 9:case 16:case 17:case 18:case 38:case 40:case 91:break;default:this.results_search()}},t.prototype.clipboard_event_checker=function(t){if(!this.is_disabled)return setTimeout(function(t){return function(){return t.results_search()}}(this),50)},t.prototype.container_width=function(){return null!=this.options.width?this.options.width:this.form_field.offsetWidth+\"px\"},t.prototype.include_option_in_results=function(t){return!(this.is_multiple&&!this.display_selected_options&&t.selected)&&(!(!this.display_disabled_options&&t.disabled)&&!t.empty)},t.prototype.search_results_touchstart=function(t){return this.touch_started=!0,this.search_results_mouseover(t)},t.prototype.search_results_touchmove=function(t){return this.touch_started=!1,this.search_results_mouseout(t)},t.prototype.search_results_touchend=function(t){if(this.touch_started)return this.search_results_mouseup(t)},t.prototype.outerHTML=function(t){var e;return t.outerHTML?t.outerHTML:((e=document.createElement(\"div\")).appendChild(t),e.innerHTML)},t.prototype.get_single_html=function(){return'<a class=\"chosen-single chosen-default\">\\n <span>'+this.default_text+'</span>\\n <div><b></b></div>\\n</a>\\n<div class=\"chosen-drop\">\\n <div class=\"chosen-search\">\\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" />\\n </div>\\n <ul class=\"chosen-results\"></ul>\\n</div>'},t.prototype.get_multi_html=function(){return'<ul class=\"chosen-choices\">\\n <li class=\"search-field\">\\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" value=\"'+this.default_text+'\" />\\n </li>\\n</ul>\\n<div class=\"chosen-drop\">\\n <ul class=\"chosen-results\"></ul>\\n</div>'},t.prototype.get_no_results_html=function(t){return'<li class=\"no-results\">\\n '+this.results_none_found+\" <span>\"+this.escape_html(t)+\"</span>\\n</li>\"},t.browser_is_supported=function(){return\"Microsoft Internet Explorer\"===window.navigator.appName?document.documentMode>=8:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},t.default_multiple_text=\"Select Some Options\",t.default_single_text=\"Select an Option\",t.default_no_result_text=\"No results match\",t}(),(t=jQuery).fn.extend({chosen:function(i){return e.browser_is_supported()?this.each(function(e){var n,r;r=(n=t(this)).data(\"chosen\"),\"destroy\"!==i?r instanceof s||n.data(\"chosen\",new s(this,i)):r instanceof s&&r.destroy()}):this}}),s=function(s){function n(){return n.__super__.constructor.apply(this,arguments)}return r(n,e),n.prototype.setup=function(){return this.form_field_jq=t(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},n.prototype.set_up_html=function(){var e,s;return(e=[\"chosen-container\"]).push(\"chosen-container-\"+(this.is_multiple?\"multi\":\"single\")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push(\"chosen-rtl\"),s={\"class\":e.join(\" \"),title:this.form_field.title},this.form_field.id.length&&(s.id=this.form_field.id.replace(/[^\\w]/g,\"_\")+\"_chosen\"),this.container=t(\"<div />\",s),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find(\"div.chosen-drop\").first(),this.search_field=this.container.find(\"input\").first(),this.search_results=this.container.find(\"ul.chosen-results\").first(),this.search_field_scale(),this.search_no_results=this.container.find(\"li.no-results\").first(),this.is_multiple?(this.search_choices=this.container.find(\"ul.chosen-choices\").first(),this.search_container=this.container.find(\"li.search-field\").first()):(this.search_container=this.container.find(\"div.chosen-search\").first(),this.selected_item=this.container.find(\".chosen-single\").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},n.prototype.on_ready=function(){return this.form_field_jq.trigger(\"chosen:ready\",{chosen:this})},n.prototype.register_observers=function(){return this.container.on(\"touchstart.chosen\",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on(\"touchend.chosen\",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on(\"mousedown.chosen\",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on(\"mouseup.chosen\",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on(\"mouseenter.chosen\",function(t){return function(e){t.mouse_enter(e)}}(this)),this.container.on(\"mouseleave.chosen\",function(t){return function(e){t.mouse_leave(e)}}(this)),this.search_results.on(\"mouseup.chosen\",function(t){return function(e){t.search_results_mouseup(e)}}(this)),this.search_results.on(\"mouseover.chosen\",function(t){return function(e){t.search_results_mouseover(e)}}(this)),this.search_results.on(\"mouseout.chosen\",function(t){return function(e){t.search_results_mouseout(e)}}(this)),this.search_results.on(\"mousewheel.chosen DOMMouseScroll.chosen\",function(t){return function(e){t.search_results_mousewheel(e)}}(this)),this.search_results.on(\"touchstart.chosen\",function(t){return function(e){t.search_results_touchstart(e)}}(this)),this.search_results.on(\"touchmove.chosen\",function(t){return function(e){t.search_results_touchmove(e)}}(this)),this.search_results.on(\"touchend.chosen\",function(t){return function(e){t.search_results_touchend(e)}}(this)),this.form_field_jq.on(\"chosen:updated.chosen\",function(t){return function(e){t.results_update_field(e)}}(this)),this.form_field_jq.on(\"chosen:activate.chosen\",function(t){return function(e){t.activate_field(e)}}(this)),this.form_field_jq.on(\"chosen:open.chosen\",function(t){return function(e){t.container_mousedown(e)}}(this)),this.form_field_jq.on(\"chosen:close.chosen\",function(t){return function(e){t.close_field(e)}}(this)),this.search_field.on(\"blur.chosen\",function(t){return function(e){t.input_blur(e)}}(this)),this.search_field.on(\"keyup.chosen\",function(t){return function(e){t.keyup_checker(e)}}(this)),this.search_field.on(\"keydown.chosen\",function(t){return function(e){t.keydown_checker(e)}}(this)),this.search_field.on(\"focus.chosen\",function(t){return function(e){t.input_focus(e)}}(this)),this.search_field.on(\"cut.chosen\",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.search_field.on(\"paste.chosen\",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.is_multiple?this.search_choices.on(\"click.chosen\",function(t){return function(e){t.choices_click(e)}}(this)):this.container.on(\"click.chosen\",function(t){t.preventDefault()})},n.prototype.destroy=function(){return t(this.container[0].ownerDocument).off(\"click.chosen\",this.click_test_action),this.form_field_label.length>0&&this.form_field_label.off(\"click.chosen\"),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData(\"chosen\"),this.form_field_jq.show()},n.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled||this.form_field_jq.parents(\"fieldset\").is(\":disabled\"),this.container.toggleClass(\"chosen-disabled\",this.is_disabled),this.search_field[0].disabled=this.is_disabled,this.is_multiple||this.selected_item.off(\"focus.chosen\",this.activate_field),this.is_disabled?this.close_field():this.is_multiple?void 0:this.selected_item.on(\"focus.chosen\",this.activate_field)},n.prototype.container_mousedown=function(e){var s;if(!this.is_disabled)return!e||\"mousedown\"!==(s=e.type)&&\"touchstart\"!==s||this.results_showing||e.preventDefault(),null!=e&&t(e.target).hasClass(\"search-choice-close\")?void 0:(this.active_field?this.is_multiple||!e||t(e.target)[0]!==this.selected_item[0]&&!t(e.target).parents(\"a.chosen-single\").length||(e.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(\"\"),t(this.container[0].ownerDocument).on(\"click.chosen\",this.click_test_action),this.results_show()),this.activate_field())},n.prototype.container_mouseup=function(t){if(\"ABBR\"===t.target.nodeName&&!this.is_disabled)return this.results_reset(t)},n.prototype.search_results_mousewheel=function(t){var e;if(t.originalEvent&&(e=t.originalEvent.deltaY||-t.originalEvent.wheelDelta||t.originalEvent.detail),null!=e)return t.preventDefault(),\"DOMMouseScroll\"===t.type&&(e*=40),this.search_results.scrollTop(e+this.search_results.scrollTop())},n.prototype.blur_test=function(t){if(!this.active_field&&this.container.hasClass(\"chosen-container-active\"))return this.close_field()},n.prototype.close_field=function(){return t(this.container[0].ownerDocument).off(\"click.chosen\",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass(\"chosen-container-active\"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale(),this.search_field.blur()},n.prototype.activate_field=function(){if(!this.is_disabled)return this.container.addClass(\"chosen-container-active\"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},n.prototype.test_active_click=function(e){var s;return(s=t(e.target).closest(\".chosen-container\")).length&&this.container[0]===s[0]?this.active_field=!0:this.close_field()},n.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=i.select_to_array(this.form_field),this.is_multiple?this.search_choices.find(\"li.search-choice\").remove():(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass(\"chosen-container-single-nosearch\")):(this.search_field[0].readOnly=!1,this.container.removeClass(\"chosen-container-single-nosearch\"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},n.prototype.result_do_highlight=function(t){var e,s,i,n,r;if(t.length){if(this.result_clear_highlight(),this.result_highlight=t,this.result_highlight.addClass(\"highlighted\"),i=parseInt(this.search_results.css(\"maxHeight\"),10),r=this.search_results.scrollTop(),n=i+r,s=this.result_highlight.position().top+this.search_results.scrollTop(),(e=s+this.result_highlight.outerHeight())>=n)return this.search_results.scrollTop(e-i>0?e-i:0);if(s<r)return this.search_results.scrollTop(s)}},n.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass(\"highlighted\"),this.result_highlight=null},n.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger(\"chosen:maxselected\",{chosen:this}),!1):(this.container.addClass(\"chosen-with-drop\"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.get_search_field_value()),this.winnow_results(),this.form_field_jq.trigger(\"chosen:showing_dropdown\",{chosen:this}))},n.prototype.update_results_content=function(t){return this.search_results.html(t)},n.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass(\"chosen-with-drop\"),this.form_field_jq.trigger(\"chosen:hiding_dropdown\",{chosen:this})),this.results_showing=!1},n.prototype.set_tab_index=function(t){var e;if(this.form_field.tabIndex)return e=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=e},n.prototype.set_label_behavior=function(){if(this.form_field_label=this.form_field_jq.parents(\"label\"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=t(\"label[for='\"+this.form_field.id+\"']\")),this.form_field_label.length>0)return this.form_field_label.on(\"click.chosen\",this.label_click_handler)},n.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass(\"default\")):(this.search_field.val(\"\"),this.search_field.removeClass(\"default\"))},n.prototype.search_results_mouseup=function(e){var s;if((s=t(e.target).hasClass(\"active-result\")?t(e.target):t(e.target).parents(\".active-result\").first()).length)return this.result_highlight=s,this.result_select(e),this.search_field.focus()},n.prototype.search_results_mouseover=function(e){var s;if(s=t(e.target).hasClass(\"active-result\")?t(e.target):t(e.target).parents(\".active-result\").first())return this.result_do_highlight(s)},n.prototype.search_results_mouseout=function(e){if(t(e.target).hasClass(\"active-result\")||t(e.target).parents(\".active-result\").first())return this.result_clear_highlight()},n.prototype.choice_build=function(e){var s,i;return s=t(\"<li />\",{\"class\":\"search-choice\"}).html(\"<span>\"+this.choice_label(e)+\"</span>\"),e.disabled?s.addClass(\"search-choice-disabled\"):((i=t(\"<a />\",{\"class\":\"search-choice-close\",\"data-option-array-index\":e.array_index})).on(\"click.chosen\",function(t){return function(e){return t.choice_destroy_link_click(e)}}(this)),s.append(i)),this.search_container.before(s)},n.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(t(e.target))},n.prototype.choice_destroy=function(t){if(this.result_deselect(t[0].getAttribute(\"data-option-array-index\")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.get_search_field_value().length<1&&this.results_hide(),t.parents(\"li\").first().remove(),this.search_field_scale()},n.prototype.results_reset=function(){if(this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.trigger_form_field_change(),this.active_field)return this.results_hide()},n.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find(\"abbr\").remove()},n.prototype.result_select=function(t){var e,s;if(this.result_highlight)return e=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger(\"chosen:maxselected\",{chosen:this}),!1):(this.is_multiple?e.removeClass(\"active-result\"):this.reset_single_select_options(),e.addClass(\"result-selected\"),s=this.results_data[e[0].getAttribute(\"data-option-array-index\")],s.selected=!0,this.form_field.options[s.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(s):this.single_set_selected_text(this.choice_label(s)),this.is_multiple&&(!this.hide_results_on_select||t.metaKey||t.ctrlKey)?t.metaKey||t.ctrlKey?this.winnow_results({skip_highlight:!0}):(this.search_field.val(\"\"),this.winnow_results()):(this.results_hide(),this.show_search_field_default()),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.trigger_form_field_change({selected:this.form_field.options[s.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,t.preventDefault(),this.search_field_scale())},n.prototype.single_set_selected_text=function(t){return null==t&&(t=this.default_text),t===this.default_text?this.selected_item.addClass(\"chosen-default\"):(this.single_deselect_control_build(),this.selected_item.removeClass(\"chosen-default\")),this.selected_item.find(\"span\").html(t)},n.prototype.result_deselect=function(t){var e;return e=this.results_data[t],!this.form_field.options[e.options_index].disabled&&(e.selected=!1,this.form_field.options[e.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.trigger_form_field_change({deselected:this.form_field.options[e.options_index].value}),this.search_field_scale(),!0)},n.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect)return this.selected_item.find(\"abbr\").length||this.selected_item.find(\"span\").first().after('<abbr class=\"search-choice-close\"></abbr>'),this.selected_item.addClass(\"chosen-single-with-deselect\")},n.prototype.get_search_field_value=function(){return this.search_field.val()},n.prototype.get_search_text=function(){return t.trim(this.get_search_field_value())},n.prototype.escape_html=function(e){return t(\"<div/>\").text(e).html()},n.prototype.winnow_results_set_highlight=function(){var t,e;if(e=this.is_multiple?[]:this.search_results.find(\".result-selected.active-result\"),null!=(t=e.length?e.first():this.search_results.find(\".active-result\").first()))return this.result_do_highlight(t)},n.prototype.no_results=function(t){var e;return e=this.get_no_results_html(t),this.search_results.append(e),this.form_field_jq.trigger(\"chosen:no_results\",{chosen:this})},n.prototype.no_results_clear=function(){return this.search_results.find(\".no-results\").remove()},n.prototype.keydown_arrow=function(){var t;return this.results_showing&&this.result_highlight?(t=this.result_highlight.nextAll(\"li.active-result\").first())?this.result_do_highlight(t):void 0:this.results_show()},n.prototype.keyup_arrow=function(){var t;return this.results_showing||this.is_multiple?this.result_highlight?(t=this.result_highlight.prevAll(\"li.active-result\")).length?this.result_do_highlight(t.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight()):void 0:this.results_show()},n.prototype.keydown_backstroke=function(){var t;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find(\"a\").first()),this.clear_backstroke()):(t=this.search_container.siblings(\"li.search-choice\").last()).length&&!t.hasClass(\"search-choice-disabled\")?(this.pending_backstroke=t,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass(\"search-choice-focus\")):void 0},n.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass(\"search-choice-focus\"),this.pending_backstroke=null},n.prototype.search_field_scale=function(){var e,s,i,n,r,o,h;if(this.is_multiple){for(r={position:\"absolute\",left:\"-1000px\",top:\"-1000px\",display:\"none\",whiteSpace:\"pre\"},s=0,i=(o=[\"fontSize\",\"fontStyle\",\"fontWeight\",\"fontFamily\",\"lineHeight\",\"textTransform\",\"letterSpacing\"]).length;s<i;s++)r[n=o[s]]=this.search_field.css(n);return(e=t(\"<div />\").css(r)).text(this.get_search_field_value()),t(\"body\").append(e),h=e.width()+25,e.remove(),this.container.is(\":visible\")&&(h=Math.min(this.container.outerWidth()-10,h)),this.search_field.width(h)}},n.prototype.trigger_form_field_change=function(t){return this.form_field_jq.trigger(\"input\",t),this.form_field_jq.trigger(\"change\",t)},n}()}).call(this);","Mageplaza_Smtp/js/testemail.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license that is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (https://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\ndefine([\n \"jquery\",\n \"Magento_Ui/js/modal/alert\",\n \"mage/translate\",\n \"jquery/ui\"\n], function ($, alert, $t) {\n \"use strict\";\n\n $.widget('mageplaza.testEmail', {\n options: {\n ajaxUrl: '',\n testEmail: '#smtp_configuration_option_test_email_sent',\n fromEmailElem: '#smtp_configuration_option_test_email_from',\n hostElem: '#smtp_configuration_option_host',\n portElem: '#smtp_configuration_option_port',\n authenticationElem: '#smtp_configuration_option_authentication',\n protocolElem: '#smtp_configuration_option_protocol',\n usernameElem: '#smtp_configuration_option_username',\n passwordElem: '#smtp_configuration_option_password',\n rerutnPathElem: '#smtp_configuration_option_return_path_email'\n },\n _create: function () {\n var self = this;\n\n $(this.options.testEmail).click(function (e) {\n e.preventDefault();\n if (self.element.val()) {\n self._ajaxSubmit();\n }\n });\n },\n\n _ajaxSubmit: function () {\n $.ajax({\n url: this.options.ajaxUrl,\n data: {\n from: $(this.options.fromEmailElem).val(),\n to: this.element.val(),\n host: $(this.options.hostElem).val(),\n port: $(this.options.portElem).val(),\n authentication: $(this.options.authenticationElem).val(),\n protocol: $(this.options.protocolElem).val(),\n username: $(this.options.usernameElem).val(),\n password: $(this.options.passwordElem).val(),\n returnpath: $(this.options.rerutnPathElem).val()\n },\n dataType: 'json',\n showLoader: true,\n success: function (result) {\n alert({\n title: result.status ? $t('Success') : $t('Error'),\n content: result.content\n });\n }\n });\n }\n });\n\n return $.mageplaza.testEmail;\n});\n","Mageplaza_Smtp/js/testconnection.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license that is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (https://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\ndefine([\n \"jquery\",\n \"Magento_Ui/js/modal/alert\",\n \"mage/translate\",\n \"jquery/ui\"\n], function ($, alert, $t) {\n \"use strict\";\n\n $.widget('mageplaza.testconnection', {\n options: {\n ajaxUrl: '',\n testConnection: '#email_marketing_general_test_connection',\n appID: '#email_marketing_general_app_id',\n secretKey: '#email_marketing_general_secret_key',\n },\n _create: function () {\n var self = this;\n\n $(this.options.testConnection).click(function (e) {\n e.preventDefault();\n self._ajaxSubmit();\n });\n },\n\n _ajaxSubmit: function () {\n $.ajax({\n url: this.options.ajaxUrl,\n data: {\n appID: $(this.options.appID).val(),\n secretKey: $(this.options.secretKey).val()\n },\n dataType: 'json',\n showLoader: true,\n success: function (result) {\n alert({\n title: result.status ? $t('Success') : $t('Error'),\n content: result.content\n });\n }\n });\n }\n });\n\n return $.mageplaza.testconnection;\n});\n","Mageplaza_Smtp/js/abandonedcart.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license that is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_SMTP\n * @copyright Copyright (c) Mageplaza (http://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\ndefine([\n 'jquery',\n 'Magento_Ui/js/modal/modal'\n], function ($, modal) {\n \"use strict\";\n\n $.widget('mageplaza.abandonedcarts', {\n\n _create: function () {\n this.initObserve();\n },\n\n /**\n * Init observe\n */\n initObserve: function () {\n var self = this,\n popupSendEmailElement = $('#popup-send-email'),\n copyElement = $('#copy');\n\n $(\"#send\").click(function () {\n $('#popup-send-email-details').show();\n $('#popup-send-email-preview').show();\n $('#preview').hide();\n $('#popup-send-email-back').hide();\n\n modal({\n type: 'popup',\n responsive: true,\n innerScroll: true,\n title: '',\n buttons: []\n }, popupSendEmailElement);\n\n popupSendEmailElement.modal('openModal');\n });\n\n $('#popup-send-email-preview').click(function () {\n self.preview();\n });\n\n $('#popup-send-email form').submit(function(){\n $(this).find(':submit').attr('disabled','disabled');\n });\n\n\n $('#popup-send-email-back').click(function () {\n $('#popup-send-email-details').show();\n $('#popup-send-email-preview').show();\n $('#preview').hide();\n this.hide();\n });\n\n copyElement.click(function () {\n self.copyToClipboard();\n $('#link-tooltip').text(self.options.copied_message);\n\n });\n\n copyElement.mouseout(function () {\n $('#link-tooltip').text(self.options.tooltip);\n })\n\n },\n copyToClipboard: function(){\n var temp = $('<input>');\n\n $('body').append(temp);\n temp.val($('#recovery_link > span').text()).select();\n document.execCommand('copy');\n temp.remove();\n },\n\n /**\n * @param type\n * @param message\n * @returns {string}\n */\n getMessageHtml: function (type, message) {\n return '<div class=\"message message-' + type + '\"> <span>' + message + '</span> </div>';\n },\n getParams: function () {\n return {\n from: $('#sender').val(),\n quote_id: this.options.quote_id,\n template_id: $('#email-template').val(),\n customer_name: this.options.customer_name,\n additional_message: $('#additional-message').val()\n }\n },\n preview: function () {\n var self = this;\n\n $.ajax({\n url: this.options.preview_url,\n data: this.getParams(),\n dataType: 'json',\n showLoader: true,\n success: function (result) {\n if (result.status) {\n var dstFrame = document.getElementById('iframe-preview'),\n dstDoc = dstFrame.contentDocument || dstFrame.contentWindow.document;\n\n dstDoc.write(result.content);\n dstDoc.close();\n $('#popup-send-email-details').hide();\n $('#popup-send-email-back').show();\n $('#preview').show();\n $('#popup-send-email-preview').hide();\n $('#subject strong').text(result.subject);\n $('#preview-from').text(result.from.email);\n } else {\n $('#popup-send-email #messages').html(self.getMessageHtml('error error', result.message));\n }\n }\n });\n }\n });\n\n return $.mageplaza.abandonedcarts;\n});\n","Mageplaza_Smtp/js/grid/columns/actions.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license sliderConfig is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (http://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\n\ndefine([\n 'jquery',\n 'Magento_Ui/js/grid/columns/actions',\n 'Magento_Ui/js/modal/modal'\n], function ($, Column) {\n 'use strict';\n\n function strip(html){\n var doc = new DOMParser().parseFromString(html, 'text/html');\n\n return doc.body.textContent || \"\";\n }\n\n return Column.extend({\n modal: {},\n\n /**\n * @inheritDoc\n */\n defaultCallback: function (actionIndex, recordId, action) {\n if (actionIndex !== 'view') {\n return this._super();\n }\n\n if (typeof this.modal[action.rowIndex] === 'undefined' || typeof this.modal[action.rowIndex] === 'object') {\n var row = this.rows[action.rowIndex],\n modalHtml = '<iframe srcdoc=\"' + row['email_content'] + '\" style=\"width: 100%; height: 100%\"></iframe>';\n\n this.modal[action.rowIndex] = $('<div>')\n .html(modalHtml)\n .modal({\n type: 'slide',\n title: strip(row['subject']),\n modalClass: 'mpsmtp-modal-email',\n innerScroll: true,\n buttons: []\n });\n }\n\n this.modal[action.rowIndex].trigger('openModal');\n }\n });\n});\n\n","Mageplaza_Smtp/js/grid/columns/status.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license sliderConfig is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (http://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\n\ndefine([\n 'Magento_Ui/js/grid/columns/select'\n], function (Column) {\n 'use strict';\n\n return Column.extend({\n defaults: {\n bodyTmpl: 'ui/grid/cells/html'\n },\n getLabel: function (record) {\n var label = this._super(record);\n\n if (label !== '') {\n if (record.status == 1) {\n label = '<span class=\"grid-severity-notice\"><span>' + label + '</span></span>';\n } else {\n label = '<span class=\"grid-severity-minor\"><span>' + label + '</span></span>';\n }\n }\n\n return label;\n }\n });\n});\n\n","Mageplaza_Smtp/js/sync/sync.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license that is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (https://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\ndefine([\n 'jquery',\n 'Mageplaza_Smtp/js/model/sync'\n], function ($, Sync) {\n 'use strict';\n\n $.widget('mageplaza.sync', {\n options: {\n ajaxUrl: '',\n websiteId: '',\n storeId: '',\n estimateUrl: '',\n buttonElement: '#email_marketing_general_synchronization_sync',\n saveLog: '#email_marketing_general_synchronization_sync_log',\n prefix: '#mp-synchronize',\n console: '.email_marketing_general_synchronization_sync_console'\n },\n _create: function () {\n var self = this;\n\n $(this.options.buttonElement).click(function (e) {\n e.preventDefault();\n Sync.process(self.options);\n });\n\n $(this.options.saveLog).click(function (e) {\n e.preventDefault();\n Sync.saveLog(self.options.console);\n });\n },\n });\n\n return $.mageplaza.sync;\n});\n","Mageplaza_Smtp/js/model/sync.js":"/**\n * Mageplaza\n *\n * NOTICE OF LICENSE\n *\n * This source file is subject to the Mageplaza.com license that is\n * available through the world-wide-web at this URL:\n * https://www.mageplaza.com/LICENSE.txt\n *\n * DISCLAIMER\n *\n * Do not edit or add to this file if you wish to upgrade this extension to newer\n * version in the future.\n *\n * @category Mageplaza\n * @package Mageplaza_Smtp\n * @copyright Copyright (c) Mageplaza (https://www.mageplaza.com/)\n * @license https://www.mageplaza.com/LICENSE.txt\n */\n\ndefine([\n 'jquery',\n 'underscore',\n 'mage/translate'\n], function ($, _, $t) {\n \"use strict\";\n\n return {\n options: {},\n currentResult: {},\n totalSync: 0,\n\n /**\n * @param classCss\n * @param message\n */\n showMessage: function (classCss, message) {\n var messageElement = this.getElement(\".message\");\n\n messageElement.removeClass('message-error message-success message-notice');\n this.getElement(\".message-text strong\").text(message);\n messageElement.addClass(classCss).show();\n },\n\n /**\n * @param value\n * @returns {*|n.fn.init|r.fn.init|jQuery.fn.init|jQuery|HTMLElement}\n */\n getElement: function (value) {\n return $(this.options.prefix + ' ' + value);\n },\n\n /**\n * @param start\n * @param i\n */\n syncData: function (start, i) {\n var end = start + 100,\n ids = this.currentResult.ids.slice(start, end),\n self = this,\n createdFrom = $('#datepicker-from').val(),\n createdTo = $('#datepicker-to').val(),\n daysRange = $('#email_marketing_general_synchronization_days_range').val(),\n type = $('#email_marketing_general_synchronization_sync_type').val(),\n syncOptions = $('#email_marketing_general_synchronization_sync_options').val(),\n percent, percentText;\n\n $.ajax({\n url: this.options.ajaxUrl,\n type: 'post',\n dataType: 'json',\n data: {\n type: i ? i : type,\n syncOptions: syncOptions,\n ids: ids,\n from: createdFrom,\n to: createdTo,\n daysRange: daysRange\n },\n success: function (result) {\n var inputLog = self.getElement('#mp-log-data').val();\n\n inputLog += JSON.stringify(result.log) + '|';\n\n if (result.status) {\n percent = ids.length / self.currentResult.total * 100;\n self.totalSync += result.total;\n percent = percent.toFixed(2);\n\n self.currentResult.percent += parseFloat(percent);\n if (self.currentResult.percent > 100) {\n self.currentResult.percent = 100;\n }\n self.getElement('#mp-log-data').val(inputLog);\n self.getElement('#mp-console-log').val(self.formatLog(result.log, self));\n percentText = self.currentResult.percent.toFixed(2) + '%';\n if (percentText === '100.00%' || self.totalSync === self.currentResult.total) {\n percentText = '100%';\n $(self.options.buttonElement).removeClass('disabled');\n }\n\n self.getElement('.progress-bar').css('width', percentText);\n self.getElement('#sync-percent').text(\n percentText + ' (' + self.totalSync + '/' + self.currentResult.total + ')'\n );\n\n if (i && i >= 1 && i <= 3) {\n self.getElement('.progress-bar-' + i).css('width', percentText);\n self.getElement('#sync-percent-' + i).text(\n percentText + ' (' + self.totalSync + '/' + self.currentResult.total + ')'\n );\n }\n\n if (end < self.currentResult.total) {\n self.syncData(end, i);\n } else {\n self.getElement('.syncing').hide();\n if (type === 'all') {\n self.showMultiMessages('message message-success', self.options.successMessage[i]);\n } else {\n self.showMessage('message-success', self.options.successMessage[type]);\n }\n if (i !== null) {\n self.estimateSyncAll(i + 1, syncOptions, createdFrom, createdTo, daysRange);\n }\n }\n } else {\n self.getElement('#mp-console-log').val(self.formatLog(result.log, self));\n self.getElement('#mp-log-data').val(inputLog);\n if (type === 'all') {\n self.showMultiMessages('message message-error', result.message);\n } else {\n self.showMessage('message-error', result.message);\n }\n $(self.options.buttonElement).removeClass('disabled');\n }\n }\n });\n },\n\n formatLog: function (log, self) {\n var rs = self.getElement('#mp-console-log').val();\n\n rs += log.message + '\\n';\n\n _.each(log.data, function (item, index) {\n if (index === 'success') {\n rs += ($t('Success: ') + item + '\\n')\n }\n\n if (index === 'error') {\n rs += ($t('Error: ') + item + '\\n')\n }\n\n if (index === 'error_details') {\n _.each(item, function (detail) {\n rs += ($t('Item ID: ' + detail.id + '\\n'))\n rs += ($t('Error: ' + detail.message + '\\n\\n'))\n })\n }\n });\n\n return rs;\n },\n\n /**\n * @param options\n */\n process: function (options) {\n var self = this,\n type = $('#email_marketing_general_synchronization_sync_type').val(),\n syncOptions = $('#email_marketing_general_synchronization_sync_options').val(),\n createdFrom = $('#datepicker-from').val(),\n createdTo = $('#datepicker-to').val(),\n daysRange = $('#email_marketing_general_synchronization_days_range').val();\n\n options.buttonElement = '#email_marketing_general_synchronization button';\n this.options = options;\n this.currentResult = {};\n\n self.getElement('.progress-content').hide();\n\n if (type !== 'all') {\n self.estimateSync(type, syncOptions, createdFrom, createdTo, daysRange);\n } else {\n self.getElement('#mp-console-log').val('');\n self.getElement('#mp-log-data').val('');\n self.estimateSyncAll(null, syncOptions, createdFrom, createdTo, daysRange);\n }\n },\n\n estimateSync: function (type, syncOptions, createdFrom, createdTo, daysRange) {\n var self = this;\n\n $.ajax({\n url: this.options.estimateUrl,\n data: {\n websiteId: this.options.websiteId,\n storeId: this.options.storeId,\n type: type,\n syncOptions: syncOptions,\n from: createdFrom,\n to: createdTo,\n daysRange: daysRange\n },\n dataType: 'json',\n showLoader: true,\n success: function (result) {\n window.onbeforeunload = (e) => {\n e.preventDefault();\n e.returnValue = $t('Changes you made may not be saved.');\n };\n\n self.getElement('.multi-messages').hide();\n\n if (result.status) {\n self.currentResult = result;\n self.getElement('.message').hide();\n if (self.currentResult.total > 0) {\n self.getElement('#console-log').show();\n }\n self.getElement('#mp-console-log').val('');\n self.getElement('#mp-log-data').val('');\n\n if (self.currentResult.total > 0) {\n self.getElement('#sync-percent').text('0%');\n self.getElement('.progress-bar').removeAttr('style');\n self.currentResult.percent = 0;\n self.getElement('#progress-content').show();\n self.totalSync = 0;\n self.getElement('.syncing').hide();\n self.getElement('#syncing').show();\n $(self.options.buttonElement).addClass('disabled');\n self.syncData(0, null);\n } else {\n self.showMessage('message-notice', result.message);\n $(self.options.buttonElement).removeClass('disabled');\n self.getElement('#progress-content').hide();\n }\n } else {\n self.showMessage('message-error', result.message);\n $(self.options.buttonElement).removeClass('disabled');\n self.getElement('#progress-content').hide();\n }\n }\n });\n },\n\n estimateSyncAll: function (i = null, syncOptions, createdFrom, createdTo, daysRange) {\n var self = this;\n\n if (i === null) {\n self.getElement('.multi-messages').html('');\n i = 1;\n }\n\n if (i <= 3) {\n $.ajax({\n url: this.options.estimateUrl,\n data: {\n websiteId: this.options.websiteId,\n storeId: this.options.storeId,\n type: i,\n syncOptions: syncOptions,\n from: createdFrom,\n to: createdTo,\n daysRange: daysRange\n },\n dataType: 'json',\n showLoader: true,\n success: function (result) {\n window.onbeforeunload = (e) => {\n e.preventDefault();\n e.returnValue = $t('Changes you made may not be saved.');\n };\n\n if (result.status) {\n self.currentResult = result;\n self.getElement('.message').hide();\n self.getElement('.multi-messages').show();\n self.getElement('.multi-messages .message').show();\n if (self.currentResult.total > 0) {\n self.getElement('#console-log').show();\n }\n\n if (self.currentResult.total > 0) {\n self.getElement('#sync-percent-' + i).text('0%');\n self.getElement('.progress-bar-' + i).removeAttr('style');\n self.currentResult.percent = 0;\n self.getElement('#progress-content-' + i).show();\n self.totalSync = 0;\n self.getElement('.syncing').hide();\n self.getElement('#syncing-' + i).show();\n $(self.options.buttonElement).addClass('disabled');\n self.syncData(0, i);\n } else {\n self.showMultiMessages('message message-notice', result.message);\n $(self.options.buttonElement).removeClass('disabled');\n self.getElement('#progress-content-' + i).hide();\n self.estimateSyncAll(i + 1, syncOptions, createdFrom, createdTo, daysRange);\n }\n } else {\n self.showMultiMessages('message message-error', result.message);\n $(self.options.buttonElement).removeClass('disabled');\n self.getElement('#progress-content-' + i).hide();\n }\n }\n });\n }\n },\n\n showMultiMessages: function (classCss, message) {\n var messageElement = this.getElement('.multi-messages'),\n html = '<div class=\"' + classCss + '\"><span class=\"message-text\"><strong>'\n + message + '</strong></span><br></div>';\n\n messageElement.append(html);\n messageElement.find('.message').show();\n },\n\n saveLog: function (console) {\n var log = $(console).val(),\n content = 'status,message,success,error,detail' + '\\n',\n arrLog = log.split('|');\n\n _.each(arrLog, function (item) {\n if (item) {\n var data = JSON.parse(item),\n detail = '';\n\n content += data.success + ',' + data.message + ',' + data.data.success + ',' + data.data.error + ',';\n _.each(data.data.error_details, function (error) {\n if (error) {\n detail += JSON.stringify(error) + '\\n';\n }\n });\n var newDetail = detail.replace(',', ';');\n newDetail = newDetail.replace(/['\"]+/g, '');\n content += '\"' + newDetail + '\"' + '\\n';\n }\n });\n\n var hiddenElement = document.createElement('a');\n hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(content);\n hiddenElement.target = '_blank';\n hiddenElement.download = 'mp-console-log.csv';\n hiddenElement.click();\n }\n };\n});\n","StripeIntegration_Tax/js/tax_classes.js":"define([\n 'uiLayout'\n],\nfunction(layout)\n{\n return function(config)\n {\n layout([\n {\n component: 'StripeIntegration_Tax/js/view/ui_components/tax_classes',\n name: 'stripe_tax_classes',\n taxClasses: JSON.parse(config.taxClasses),\n productTaxCodes: JSON.parse(config.productTaxCodes),\n formKey: config.formKey\n }\n ]);\n\n return config;\n };\n});\n","StripeIntegration_Tax/js/view/ui_components/tax_classes.js":"define(\n [\n 'ko',\n 'uiComponent',\n 'mage/translate',\n 'jquery',\n 'mage/storage',\n 'uiLayout',\n 'Magento_Ui/js/modal/modal'\n ],\n function (\n ko,\n Component,\n $t,\n $,\n storage,\n layout,\n modal\n ) {\n 'use strict';\n\n return Component.extend({\n defaults: {\n template: 'StripeIntegration_Tax/tax_classes',\n errorUninitialized: $.mage.__('There was a problem communicating with Stripe. Please check that your API keys are correct, and the Stripe PHP library is installed.'),\n },\n\n initObservable: function ()\n {\n this._super()\n .observe([\n 'newTaxClassName',\n 'newTaxClassCode',\n 'taxClasses',\n 'productTaxCodes',\n 'actionsListOpened',\n 'formKey',\n 'savingChanges',\n 'selectedProductTaxCode',\n 'searchText',\n 'searchTaxClassesText',\n 'editingRow',\n 'paginationLimit',\n 'paginationMenuOpened',\n 'paginationPage',\n 'paginationTotalPages',\n 'sortByName',\n 'sortByCategory',\n 'sortByCode'\n ]);\n\n this.filteredTaxClasses = ko.computed(this.filterTaxClasses, this);\n this.sortedTaxClasses = ko.computed(this.sortTaxClasses, this);\n this.paginatedTaxClasses = ko.computed(this.paginateTaxClasses, this);\n this.paginationLimit(parseInt(localStorage.getItem('tax_classes_pagination_limit')) || 10);\n this.paginationPage(1);\n this.paginationOptions = [10, 25, 50, 100];\n this.sortByCategory(null);\n this.sortByCode(null);\n this.sortByName('asc');\n\n this.paginationTotalPages = ko.computed(function ()\n {\n if (this.paginationLimit() == 0 || isNaN(this.paginationLimit()) || this.paginationLimit() < 0)\n {\n return 1;\n }\n\n return Math.ceil(this.filteredTaxClasses().length / this.paginationLimit());\n }, this);\n\n this.paginationLimit.subscribe(function (newLimit)\n {\n if (this.paginationPage() > this.paginationTotalPages())\n {\n this.paginationPage(this.paginationTotalPages());\n }\n\n if (!isNaN(newLimit) && newLimit > 0)\n {\n localStorage.setItem('tax_classes_pagination_limit', newLimit);\n }\n }, this);\n\n this.paginationPage.subscribe(function (newPage)\n {\n if (newPage > this.paginationTotalPages())\n {\n this.paginationPage(this.paginationTotalPages());\n }\n }, this);\n\n var self = this;\n\n // When the user left clicks anywhere outside .action-menu and not on .action-select, close it\n $(document).on('mousedown tap', function (e)\n {\n var isLeftClickOrTap = e.button === 0 || e.type === 'tap';\n var isInsideActionMenu = $(e.target).closest('.action-menu').length > 0;\n var isInsideEditableRow = $(e.target).closest('.data-grid-editable-row').length > 0;\n var isActionSelect = $(e.target).hasClass('action-select');\n var isRenameAction = $(e.target).hasClass('action-rename') || $(e.target).parent().hasClass('action-rename');\n\n if (isLeftClickOrTap && !isInsideActionMenu && !isActionSelect)\n {\n self.closeActionsMenu();\n }\n\n if (isLeftClickOrTap && !isInsideEditableRow && !isActionSelect && !isRenameAction && self.editingRow() !== null)\n {\n self.cancelTaxClassRowEditing(self.editingRow());\n }\n });\n\n // When the user presses the escape button, close the action menu\n $(document).keyup(function (e)\n {\n if (e.key === 'Escape')\n {\n self.closeActionsMenu();\n\n if (self.editingRow() !== null) {\n self.cancelTaxClassRowEditing(self.editingRow());\n }\n }\n });\n\n // When the enter key is pressed, save the editable row\n $(document).keypress(function (e)\n {\n if (e.key === 'Enter' && self.editingRow() !== null)\n {\n self.saveTaxClassRow(self.editingRow());\n e.preventDefault();\n }\n });\n\n // Listen to the saveChanges event\n document.addEventListener('saveChanges', this.saveChanges.bind(this));\n\n this.filteredProductTaxCodes = ko.computed(function() {\n var search = self.searchText();\n if (!search || !search.length)\n {\n return self.productTaxCodes();\n }\n\n search = search.toLowerCase();\n\n return ko.utils.arrayFilter(self.productTaxCodes(), function(obj) {\n return obj.name.toLowerCase().indexOf(search) >= 0;\n });\n });\n\n return this;\n },\n\n filterTaxClasses: function()\n {\n var results = this.taxClasses();\n var search = this.searchTaxClassesText();\n\n if (search && search.length)\n {\n search = search.toLowerCase();\n\n results = ko.utils.arrayFilter(results, function(obj)\n {\n if (obj.class_name && obj.class_name.toLowerCase().indexOf(search) >= 0)\n return true;\n\n if (obj.stripe_product_tax_code_name && obj.stripe_product_tax_code_name.toLowerCase().indexOf(search) >= 0)\n return true;\n\n if (obj.stripe_product_tax_code && obj.stripe_product_tax_code.toLowerCase().indexOf(search) >= 0)\n return true;\n\n return false;\n });\n }\n\n return results;\n },\n\n sortTaxClasses: function()\n {\n var results = this.filteredTaxClasses();\n\n if (this.sortByName() === 'asc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.class_name)\n {\n return -1;\n }\n\n if (!b || !b.class_name)\n {\n return 1;\n }\n\n return a.class_name.localeCompare(b.class_name);\n });\n }\n else if (this.sortByName() === 'desc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.class_name)\n {\n return 1;\n }\n\n if (!b || !b.class_name)\n {\n return -1;\n }\n\n return b.class_name.localeCompare(a.class_name);\n });\n }\n\n if (this.sortByCategory() === 'asc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.stripe_product_tax_code_name)\n {\n return -1;\n }\n\n if (!b || !b.stripe_product_tax_code_name)\n {\n return 1;\n }\n\n return a.stripe_product_tax_code_name.localeCompare(b.stripe_product_tax_code_name);\n });\n }\n else if (this.sortByCategory() === 'desc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.stripe_product_tax_code_name)\n {\n return 1;\n }\n\n if (!b || !b.stripe_product_tax_code_name)\n {\n return -1;\n }\n\n return b.stripe_product_tax_code_name.localeCompare(a.stripe_product_tax_code_name);\n });\n }\n\n if (this.sortByCode() === 'asc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.stripe_product_tax_code)\n {\n return -1;\n }\n\n if (!b || !b.stripe_product_tax_code)\n {\n return 1;\n }\n\n return a.stripe_product_tax_code.localeCompare(b.stripe_product_tax_code);\n });\n }\n else if (this.sortByCode() === 'desc')\n {\n results = results.sort(function(a, b)\n {\n if (!a || !a.stripe_product_tax_code)\n {\n return 1;\n }\n\n if (!b || !b.stripe_product_tax_code)\n {\n return -1;\n }\n\n return b.stripe_product_tax_code.localeCompare(a.stripe_product_tax_code);\n });\n }\n\n return results;\n },\n\n paginateTaxClasses: function ()\n {\n this.closePagination();\n var results = this.sortedTaxClasses();\n var limit = 10;\n\n // Further filter the results by pagination\n try\n {\n limit = parseInt(this.paginationLimit());\n }\n catch (e)\n {\n console.warn(\"Error parsing pagination limit: \" + e);\n }\n\n if (this.paginationPage() > this.paginationTotalPages())\n {\n this.paginationPage(this.paginationTotalPages());\n }\n else if (this.paginationPage() < 1)\n {\n this.paginationPage(1);\n }\n\n var page = this.paginationPage();\n if (!isNaN(page) && page > 0 && !isNaN(limit) && limit > 0)\n {\n var start = Math.max(0, (page - 1) * limit);\n var end = Math.min(start + limit, results.length);\n\n results = results.slice(start, end);\n }\n\n return results;\n },\n\n openModalAddNewTaxClass: function ()\n {\n this.validateStripeAPI();\n this.searchText('');\n this.selectedProductTaxCode(null);\n\n var self = this;\n\n var options = {\n type: 'popup',\n responsive: true,\n innerScroll: true,\n title: 'Add a new tax class',\n buttons: [\n {\n text: $.mage.__('Add'),\n class: 'action-primary add-tax-class-button',\n click: () => {\n this.addNewTaxClass();\n // Declaring the function this way, causes `this` to be bound to the UIComponent,\n // not the modal instance\n $('#tax-class-modal').modal('closeModal');\n }\n },\n {\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n click: function () {\n this.closeModal();\n }\n }\n ]\n };\n\n // Create the modal using the options defined above\n var popup = modal(options, $('#tax-class-modal'));\n $('#tax-class-modal').modal('openModal');\n\n var primaryButton = $('.modal-footer button.action-primary');\n primaryButton.attr('disabled', 'disabled');\n },\n\n openModalChangeCategory: function (selectedTaxClass)\n {\n this.validateStripeAPI();\n this.searchText('');\n this.selectedProductTaxCode(null);\n\n var self = this;\n\n var options = {\n type: 'popup',\n responsive: true,\n innerScroll: true,\n title: 'Set tax class category',\n buttons: [\n {\n text: $.mage.__('Set'),\n class: 'action-primary set-tax-class-button',\n click: () => {\n this.changeTaxClassCategory(selectedTaxClass);\n // Declaring the function this way, causes `this` to be bound to the UIComponent,\n // not the modal instance\n $('#tax-class-modal').modal('closeModal');\n }\n },\n {\n text: $.mage.__('Cancel'),\n class: 'action-secondary action-dismiss',\n click: function () {\n this.closeModal();\n }\n }\n ]\n };\n\n // Create the modal using the options defined above\n var popup = modal(options, $('#tax-class-modal'));\n $('#tax-class-modal').modal('openModal');\n\n var primaryButton = $('.modal-footer button.action-primary');\n primaryButton.attr('disabled', 'disabled');\n this.closeActionsMenu();\n },\n\n addNewTaxClass: function ()\n {\n var selection = this.selectedProductTaxCode();\n if (!selection || !selection.id)\n {\n return;\n }\n\n var taxClasses = this.taxClasses();\n taxClasses.push({\n class_name: selection.name,\n stripe_product_tax_code_name: selection.name,\n stripe_product_tax_code: selection.id\n });\n\n this.taxClasses(taxClasses);\n },\n\n changeTaxClassCategory: function (selectedTaxClass)\n {\n var selection = this.selectedProductTaxCode();\n if (!selection || !selection.id) {\n return;\n }\n\n var taxClasses = this.taxClasses();\n\n var index = taxClasses.findIndex(function (obj) {\n return obj === selectedTaxClass;\n });\n\n if (index === -1) {\n return;\n }\n\n // Create a shallow copy of the object to modify\n var taxClass = { ...taxClasses[index] };\n\n // Modify the copy\n taxClass.stripe_product_tax_code = selection.id;\n taxClass.stripe_product_tax_code_name = selection.name;\n if (!taxClass.class_name || taxClass.class_name.length === 0) {\n taxClass.class_name = selection.name;\n }\n\n // Replace the object in the array\n taxClasses.splice(index, 1, taxClass);\n this.taxClasses(taxClasses);\n },\n\n unsetTaxClassCategory: function (taxClass)\n {\n var taxClasses = this.taxClasses();\n\n var index = taxClasses.findIndex(function (obj) {\n return obj === taxClass;\n });\n\n if (index === -1) {\n return;\n }\n\n // Create a shallow copy of the object to modify\n var taxClass = { ...taxClasses[index] };\n\n // Modify the copy\n taxClass.stripe_product_tax_code = null;\n taxClass.stripe_product_tax_code_name = null;\n\n // Replace the object in the array\n taxClasses.splice(index, 1, taxClass);\n this.taxClasses(taxClasses);\n this.closeActionsMenu();\n },\n\n renameTaxClass: function (taxClass)\n {\n this.editingRow(taxClass);\n this.closeActionsMenu();\n $('.class-name-input').focus();\n this.originalTaxClassName = taxClass.class_name;\n },\n\n deleteTaxClass: function (taxClass)\n {\n var taxClasses = this.taxClasses();\n taxClasses = taxClasses.filter(function (obj)\n {\n return obj !== taxClass;\n });\n\n this.taxClasses(taxClasses);\n this.closeActionsMenu();\n },\n\n toggleActionsMenu: function (index)\n {\n if (this.actionsListOpened() === index)\n {\n this.actionsListOpened(null);\n }\n else\n {\n this.actionsListOpened(index);\n }\n },\n\n closeActionsMenu: function()\n {\n this.actionsListOpened(null);\n },\n\n saveChanges: function ()\n {\n this.savingChanges(true);\n\n // Add the form data to the form\n var form = $('#tax-classes-form');\n form.find('input[name=\"tax_classes\"]').val(JSON.stringify(this.taxClasses()));\n\n // Submit the form\n $('#tax-classes-form').submit();\n },\n\n validateStripeAPI: function ()\n {\n if (this.productTaxCodes().length > 0)\n {\n return true;\n }\n\n var options = {\n type: 'popup',\n responsive: true,\n innerScroll: true,\n title: 'Cannot perform action',\n buttons: [\n {\n text: $.mage.__('Close'),\n class: 'action-secondary action-dismiss',\n click: function () {\n this.closeModal();\n }\n }]\n };\n\n // Create the modal using the options defined above\n var popup = modal(options, $('#stripe-api-error-modal'));\n $('#stripe-api-error-modal').modal('openModal');\n\n throw new Error(this.errorUninitialized);\n },\n\n selectProductTaxCode: function (object)\n {\n var primaryButton = $('.modal-footer button.action-primary');\n if (this.selectedProductTaxCode() === object)\n {\n this.selectedProductTaxCode(null);\n primaryButton.attr('disabled', 'disabled');\n }\n else\n {\n this.selectedProductTaxCode(object);\n primaryButton.removeAttr('disabled');\n }\n },\n\n selectedProductTaxCodeId: function()\n {\n if (!this.selectedProductTaxCode())\n {\n return null;\n }\n\n return this.selectedProductTaxCode().id;\n },\n\n saveTaxClassRow: function (taxClass)\n {\n if (!taxClass.class_name || taxClass.class_name.trim().length === 0)\n {\n return this.cancelTaxClassRowEditing(taxClass);\n }\n\n var copy = { ...taxClass };\n var taxClasses = this.taxClasses();\n\n var index = taxClasses.findIndex(function (obj) {\n return obj === taxClass;\n });\n\n if (index !== -1) {\n taxClasses.splice(index, 1, copy);\n this.taxClasses(taxClasses);\n }\n\n this.editingRow(null);\n },\n\n cancelTaxClassRowEditing: function (taxClass)\n {\n if (!taxClass)\n {\n return;\n }\n\n taxClass.class_name = this.originalTaxClassName;\n this.editingRow(null);\n },\n\n openPagination: function ()\n {\n this.paginationMenuOpened(true);\n },\n\n closePagination: function (test)\n {\n this.paginationMenuOpened(false);\n },\n\n setPaginationLimit: function (limit)\n {\n this.paginationLimit(limit);\n this.closePagination();\n },\n\n togglePagination: function ()\n {\n this.paginationMenuOpened(!this.paginationMenuOpened());\n },\n\n nextPage: function ()\n {\n if (this.paginationPage() < this.paginationTotalPages())\n {\n this.paginationPage(this.paginationPage() + 1);\n }\n },\n\n previousPage: function ()\n {\n if (this.paginationPage() > 1)\n {\n this.paginationPage(this.paginationPage() - 1);\n }\n },\n\n isFirstPage: function ()\n {\n return this.paginationPage() === 1;\n },\n\n isLastPage: function ()\n {\n return this.paginationPage() === this.paginationTotalPages();\n },\n\n toggleSortByName: function()\n {\n this.sortByCategory(null);\n this.sortByCode(null);\n\n if (this.sortByName() !== 'asc')\n {\n this.sortByName('asc');\n }\n else\n {\n this.sortByName('desc');\n }\n },\n\n toggleSortByCategory: function()\n {\n this.sortByName(null);\n this.sortByCode(null);\n\n if (this.sortByCategory() !== 'asc')\n {\n this.sortByCategory('asc');\n }\n else\n {\n this.sortByCategory('desc');\n }\n },\n\n toggleSortByCode: function()\n {\n this.sortByName(null);\n this.sortByCategory(null);\n\n if (this.sortByCode() !== 'asc')\n {\n this.sortByCode('asc');\n }\n else\n {\n this.sortByCode('desc');\n }\n },\n\n });\n }\n);\n","js/theme.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine('globalNavigationScroll', [\n 'jquery'\n], function ($) {\n 'use strict';\n\n var win = $(window),\n subMenuClass = '.submenu',\n fixedClassName = '_fixed',\n menu = $('.menu-wrapper'),\n content = $('.page-wrapper'),\n menuItems = $('#nav').children('li'),\n winHeight,\n menuHeight = menu.height(),\n menuScrollMax = 0,\n submenuHeight = 0,\n contentHeight,\n winTop = 0,\n winTopLast = 0,\n scrollStep = 0,\n nextTop = 0;\n\n /**\n * Check if menu is fixed\n * @returns {Boolean}\n */\n function isMenuFixed() {\n return menuHeight < contentHeight && contentHeight > winHeight;\n }\n\n /**\n * Check if class exist than add or do nothing\n * @param {jQuery} el\n * @param {String} $class\n */\n function checkAddClass(el, $class) {\n if (!el.hasClass($class)) {\n el.addClass($class);\n }\n }\n\n /**\n * Check if class exist than remove or do nothing\n * @param {jQuery} el\n * @param {String} $class\n */\n function checkRemoveClass(el, $class) {\n if (el.hasClass($class)) {\n el.removeClass($class);\n }\n }\n\n /**\n * Calculate and apply menu position\n */\n function positionMenu() {\n\n // Spotting positions and heights\n winHeight = win.height();\n contentHeight = content.height();\n winTop = win.scrollTop();\n scrollStep = winTop - winTopLast;\n\n if (isMenuFixed()) { // fixed menu cases\n\n checkAddClass(menu, fixedClassName);\n\n if (menuHeight > winHeight) { // smart scroll cases\n\n if (winTop > winTopLast) { //eslint-disable-line max-depth\n\n menuScrollMax = menuHeight - winHeight;\n\n nextTop < menuScrollMax - scrollStep ?\n nextTop += scrollStep : nextTop = menuScrollMax;\n\n menu.css('top', -nextTop);\n\n } else if (winTop <= winTopLast) { // scroll up\n\n nextTop > -scrollStep ?\n nextTop += scrollStep : nextTop = 0;\n\n menu.css('top', -nextTop);\n\n }\n\n }\n\n } else { // static menu cases\n checkRemoveClass(menu, fixedClassName);\n menu.css('top', 'auto');\n }\n\n // Save previous window scrollTop\n winTopLast = winTop;\n\n }\n\n positionMenu(); // page start calculation\n\n // Change position on scroll\n win.on('scroll', function () {\n positionMenu();\n });\n\n win.on('resize', function () {\n\n winHeight = win.height();\n\n // Reset position if fixed and out of smart scroll\n if (menuHeight < contentHeight && menuHeight <= winHeight) {\n menu.removeAttr('style');\n menuItems.off();\n }\n\n });\n\n // Add event to menuItems to check submenu overlap\n menuItems.on('click', function () {\n\n var submenu = $(this).children(subMenuClass),\n delta,\n logo = $('.logo')[0].offsetHeight;\n\n submenuHeight = submenu.height();\n\n if (submenuHeight > menuHeight && menuHeight + logo > winHeight) {\n menu.height(submenuHeight - logo);\n delta = -menu.position().top;\n window.scrollTo(0, 0);\n positionMenu();\n window.scrollTo(0, delta);\n positionMenu();\n menuHeight = submenuHeight;\n }\n });\n\n});\n\ndefine('globalNavigation', [\n 'jquery',\n 'jquery/ui',\n 'globalNavigationScroll'\n], function ($) {\n 'use strict';\n\n $.widget('mage.globalNavigation', {\n options: {\n selectors: {\n menu: '#nav',\n currentItem: '._current',\n topLevelItem: '.level-0',\n topLevelHref: '> a',\n subMenu: '> .submenu',\n closeSubmenuBtn: '[data-role=\"close-submenu\"]'\n },\n overlayTmpl: '<div class=\"admin__menu-overlay\"></div>'\n },\n\n /** @inheritdoc */\n _create: function () {\n var selectors = this.options.selectors;\n\n this.menu = this.element;\n this.menuLinks = $(selectors.topLevelHref, selectors.topLevelItem);\n this.closeActions = $(selectors.closeSubmenuBtn);\n\n this._initOverlay()\n ._bind();\n },\n\n /**\n * @return {Object}\n * @private\n */\n _initOverlay: function () {\n this.overlay = $(this.options.overlayTmpl).appendTo('body').hide(0);\n\n return this;\n },\n\n /**\n * @private\n */\n _bind: function () {\n var focus = this._focus.bind(this),\n open = this._open.bind(this),\n blur = this._blur.bind(this),\n keyboard = this._keyboard.bind(this);\n\n this.menuLinks\n .on('focus', focus)\n .on('click', open);\n\n this.menuLinks.last().on('blur', blur);\n\n this.closeActions.on('keydown', keyboard);\n },\n\n /**\n * Remove active class from current menu item\n * Turn back active class to current page menu item\n */\n _blur: function (e) {\n var selectors = this.options.selectors,\n menuItem = $(e.target).closest(selectors.topLevelItem),\n currentItem = $(selectors.menu).find(selectors.currentItem);\n\n menuItem.removeClass('_active');\n currentItem.addClass('_active');\n },\n\n /**\n * Add focus to active menu item\n */\n _keyboard: function (e) {\n var selectors = this.options.selectors,\n menuItem = $(e.target).closest(selectors.topLevelItem);\n\n if (e.which === 13) {\n this._close(e);\n $(selectors.topLevelHref, menuItem).trigger('focus');\n }\n },\n\n /**\n * Toggle active state on focus\n */\n _focus: function (e) {\n var selectors = this.options.selectors,\n menuItem = $(e.target).closest(selectors.topLevelItem);\n\n menuItem.addClass('_active')\n .siblings(selectors.topLevelItem)\n .removeClass('_active');\n },\n\n /**\n * @param {jQuery.Event} e\n * @private\n */\n _closeSubmenu: function (e) {\n var selectors = this.options.selectors,\n currentItem = $(selectors.menu).find(selectors.currentItem);\n\n this._close(e);\n\n currentItem.addClass('_active');\n },\n\n /**\n * @param {jQuery.Event} e\n * @private\n */\n _open: function (e) {\n var selectors = this.options.selectors,\n menuItemSelector = selectors.topLevelItem,\n menuItem = $(e.target).closest(menuItemSelector),\n subMenu = $(selectors.subMenu, menuItem),\n close = this._closeSubmenu.bind(this),\n closeBtn = subMenu.find(selectors.closeSubmenuBtn);\n\n if (subMenu.length) {\n e.preventDefault();\n }\n closeBtn.on('click', close);\n\n if ($(menuItem).hasClass('_show')) {\n closeBtn.trigger('click');\n } else {\n menuItem.addClass('_show')\n .siblings(menuItemSelector)\n .removeClass('_show');\n subMenu.attr('aria-expanded', 'true');\n this.overlay.show(0).on('click', close);\n this.menuLinks.last().off('blur');\n }\n },\n\n /**\n * @param {jQuery.Event} e\n * @private\n */\n _close: function (e) {\n var selectors = this.options.selectors,\n menuItem = this.menu.find(selectors.topLevelItem + '._show'),\n subMenu = $(selectors.subMenu, menuItem),\n closeBtn = subMenu.find(selectors.closeSubmenuBtn),\n blur = this._blur.bind(this);\n\n e.preventDefault();\n\n this.overlay.hide(0).off('click');\n\n this.menuLinks.last().on('blur', blur);\n\n closeBtn.off('click');\n\n subMenu.attr('aria-expanded', 'false');\n\n menuItem.removeClass('_show _active');\n }\n });\n\n return $.mage.globalNavigation;\n});\n\ndefine('globalSearch', [\n 'jquery',\n 'Magento_Ui/js/lib/key-codes',\n 'jquery-ui-modules/widget'\n], function ($, keyCodes) {\n 'use strict';\n\n $.widget('mage.globalSearch', {\n options: {\n field: '.search-global-field',\n fieldActiveClass: '_active',\n input: '#search-global'\n },\n\n /** @inheritdoc */\n _create: function () {\n this.field = $(this.options.field);\n this.input = $(this.options.input);\n this._events();\n },\n\n /**\n * @private\n */\n _events: function () {\n var self = this;\n\n this.input.on('blur.resetGlobalSearchForm', function () {\n if (!self.input.val()) {\n self.field.removeClass(self.options.fieldActiveClass);\n }\n });\n\n this.input.on('focus.activateGlobalSearchForm', function () {\n self.field.addClass(self.options.fieldActiveClass);\n });\n\n $(document).on('keydown.activateGlobalSearchForm', function (event) {\n var inputs = [\n 'input',\n 'select',\n 'textarea'\n ];\n\n if (keyCodes[event.which] !== 'forwardSlashKey' ||\n inputs.indexOf(event.target.tagName.toLowerCase()) !== -1 ||\n event.target.isContentEditable\n ) {\n return;\n }\n\n event.preventDefault();\n\n self.input.focus();\n });\n }\n });\n\n return $.mage.globalSearch;\n});\n\ndefine('modalPopup', [\n 'jquery',\n 'jquery/ui'\n], function ($) {\n 'use strict';\n\n $.widget('mage.modalPopup', {\n options: {\n popup: '.popup',\n btnDismiss: '[data-dismiss=\"popup\"]',\n btnHide: '[data-hide=\"popup\"]'\n },\n\n /** @inheritdoc */\n _create: function () {\n this.fade = this.element;\n this.popup = $(this.options.popup, this.fade);\n this.btnDismiss = $(this.options.btnDismiss, this.popup);\n this.btnHide = $(this.options.btnHide, this.popup);\n\n this._events();\n },\n\n /**\n * @private\n */\n _events: function () {\n var self = this;\n\n this.btnDismiss\n .on('click.dismissModalPopup', function () {\n self.fade.remove();\n });\n\n this.btnHide\n .on('click.hideModalPopup', function () {\n self.fade.hide();\n });\n }\n });\n\n return $.mage.modalPopup;\n});\n\ndefine('useDefault', [\n 'jquery',\n 'jquery/ui'\n], function ($) {\n 'use strict';\n\n $.widget('mage.useDefault', {\n options: {\n field: '.field',\n useDefault: '.use-default',\n checkbox: '.use-default-control',\n label: '.use-default-label'\n },\n\n /** @inheritdoc */\n _create: function () {\n this.el = this.element;\n this.field = $(this.el).closest(this.options.field);\n this.useDefault = $(this.options.useDefault, this.field);\n this.checkbox = $(this.options.checkbox, this.useDefault);\n this.label = $(this.options.label, this.useDefault);\n this.origValue = this.el.attr('data-store-label');\n\n this._events();\n },\n\n /**\n * @private\n */\n _events: function () {\n var self = this;\n\n this.el.on(\n 'change.toggleUseDefaultVisibility keyup.toggleUseDefaultVisibility',\n $.proxy(this._toggleUseDefaultVisibility, this)\n ).trigger('change.toggleUseDefaultVisibility');\n\n this.checkboxon('change.setOrigValue', function () {\n if ($(this).prop('checked')) {\n self.el\n .val(self.origValue)\n .trigger('change.toggleUseDefaultVisibility');\n\n $(this).prop('checked', false);\n }\n });\n },\n\n /**\n * @private\n */\n _toggleUseDefaultVisibility: function () {\n var curValue = this.el.val(),\n origValue = this.origValue;\n\n this[curValue != origValue ? '_show' : '_hide'](); //eslint-disable-line eqeqeq\n },\n\n /**\n * @private\n */\n _show: function () {\n this.useDefault.show();\n },\n\n /**\n * @private\n */\n _hide: function () {\n this.useDefault.hide();\n }\n });\n\n return $.mage.useDefault;\n});\n\ndefine('loadingPopup', [\n 'jquery',\n 'jquery/ui'\n], function ($) {\n 'use strict';\n\n $.widget('mage.loadingPopup', {\n options: {\n message: 'Please wait...',\n timeout: 5000,\n timeoutId: null,\n callback: null,\n template: null\n },\n\n /** @inheritdoc */\n _create: function () {\n this.template =\n '<div class=\"popup popup-loading\">' +\n '<div class=\"popup-inner\">' + this.options.message + '</div>' +\n '</div>';\n\n this.popup = $(this.template);\n\n this._show();\n this._events();\n },\n\n /**\n * @private\n */\n _events: function () {\n var self = this;\n\n this.element\n .on('showLoadingPopup', function () {\n self._show();\n })\n .on('hideLoadingPopup', function () {\n self._hide();\n });\n },\n\n /**\n * @private\n */\n _show: function () {\n var options = this.options,\n timeout = options.timeout;\n\n $('body').trigger('processStart');\n\n if (timeout) {\n options.timeoutId = setTimeout(this._delayedHide.bind(this), timeout);\n }\n },\n\n /**\n * @private\n */\n _hide: function () {\n $('body').trigger('processStop');\n },\n\n /**\n * @private\n */\n _delayedHide: function () {\n this._hide();\n\n this.options.callback && this.options.callback();\n\n this.options.timeoutId && clearTimeout(this.options.timeoutId);\n }\n });\n\n return $.mage.loadingPopup;\n});\n\ndefine('collapsable', [\n 'jquery',\n 'jquery/ui',\n 'jquery/jquery.tabs'\n], function ($) {\n 'use strict';\n\n $.widget('mage.collapsable', {\n options: {\n parent: null,\n openedClass: 'opened',\n wrapper: '.fieldset-wrapper'\n },\n\n /** @inheritdoc */\n _create: function () {\n this._events();\n },\n\n /** @inheritdoc */\n _events: function () {\n var self = this;\n\n this.element\n .on('show.bs.collapse', function (e) {\n var fieldsetWrapper = $(this).closest(self.options.wrapper);\n\n fieldsetWrapper.addClass(self.options.openedClass);\n e.stopPropagation();\n })\n .on('hide.bs.collapse', function (e) {\n var fieldsetWrapper = $(this).closest(self.options.wrapper);\n\n fieldsetWrapper.removeClass(self.options.openedClass);\n e.stopPropagation();\n });\n }\n });\n\n return $.mage.collapsable;\n});\n\ndefine('js/theme', [\n 'jquery',\n 'mage/smart-keyboard-handler',\n 'collapsable',\n 'domReady!'\n], function ($, keyboardHandler) {\n 'use strict';\n\n /* @TODO refactor collapsible as widget and avoid logic binding with such a general selectors */\n $('.collapse').collapsable();\n\n $.each($('.entry-edit'), function (i, entry) {\n $('.collapse:first', entry).filter(function () {\n return $(this).data('collapsed') !== true;\n }).collapse('show');\n });\n\n keyboardHandler.apply();\n});\n","mage/trim-input.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n $.widget('mage.trimInput', {\n options: {\n cache: {}\n },\n\n /**\n * Widget initialization\n * @private\n */\n _create: function () {\n this.options.cache.input = $(this.element);\n this._bind();\n },\n\n /**\n * Event binding, will monitor change, keyup and paste events.\n * @private\n */\n _bind: function () {\n if (this.options.cache.input.length) {\n this._on(this.options.cache.input, {\n 'change': this._trimInput,\n 'keyup': this._trimInput,\n 'paste': this._trimInput\n });\n }\n },\n\n /**\n * Trim value\n * @private\n */\n _trimInput: function () {\n // Safari caret position workaround: storing carter position\n var caretStart, caretEnd, input;\n\n caretStart = this.options.cache.input.get(0).selectionStart;\n caretEnd = this.options.cache.input.get(0).selectionEnd;\n\n input = this._getInputValue().trim();\n\n this.options.cache.input.val(input);\n\n // Safari caret position workaround: setting caret position to previously stored values\n if (caretStart !== null && caretEnd !== null) {\n this.options.cache.input.get(0).setSelectionRange(caretStart, caretEnd);\n }\n },\n\n /**\n * Get input value\n * @returns {*}\n * @private\n */\n _getInputValue: function () {\n return this.options.cache.input.val();\n }\n });\n\n return $.mage.trimInput;\n});\n","mage/storage.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine(['jquery', 'mage/url'], function ($, urlBuilder) {\n 'use strict';\n\n return {\n /**\n * Perform asynchronous GET request to server.\n * @param {String} url\n * @param {Boolean} global\n * @param {String} contentType\n * @param {Object} headers\n * @returns {Deferred}\n */\n get: function (url, global, contentType, headers) {\n headers = headers || {};\n global = global === undefined ? true : global;\n contentType = contentType || 'application/json';\n\n return $.ajax({\n url: urlBuilder.build(url),\n type: 'GET',\n global: global,\n contentType: contentType,\n headers: headers\n });\n },\n\n /**\n * Perform asynchronous POST request to server.\n * @param {String} url\n * @param {String} data\n * @param {Boolean} global\n * @param {String} contentType\n * @param {Object} headers\n * @returns {Deferred}\n */\n post: function (url, data, global, contentType, headers) {\n headers = headers || {};\n global = global === undefined ? true : global;\n contentType = contentType || 'application/json';\n\n return $.ajax({\n url: urlBuilder.build(url),\n type: 'POST',\n data: data,\n global: global,\n contentType: contentType,\n headers: headers\n });\n },\n\n /**\n * Perform asynchronous PUT request to server.\n * @param {String} url\n * @param {String} data\n * @param {Boolean} global\n * @param {String} contentType\n * @param {Object} headers\n * @returns {Deferred}\n */\n put: function (url, data, global, contentType, headers) {\n var ajaxSettings = {};\n\n headers = headers || {};\n global = global === undefined ? true : global;\n contentType = contentType || 'application/json';\n ajaxSettings.url = urlBuilder.build(url);\n ajaxSettings.type = 'PUT';\n ajaxSettings.data = data;\n ajaxSettings.global = global;\n ajaxSettings.contentType = contentType;\n ajaxSettings.headers = headers;\n\n return $.ajax(ajaxSettings);\n },\n\n /**\n * Perform asynchronous DELETE request to server.\n * @param {String} url\n * @param {Boolean} global\n * @param {String} contentType\n * @param {Object} headers\n * @returns {Deferred}\n */\n delete: function (url, global, contentType, headers) {\n headers = headers || {};\n global = global === undefined ? true : global;\n contentType = contentType || 'application/json';\n\n return $.ajax({\n url: urlBuilder.build(url),\n type: 'DELETE',\n global: global,\n contentType: contentType,\n headers: headers\n });\n }\n };\n});\n","mage/dropdown_old.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n var ESC_KEY_CODE = '27';\n\n $(document)\n .on('click.dropdown', function (event) {\n if (!$(event.target).is('[data-toggle=dropdown].active, ' +\n '[data-toggle=dropdown].active *, ' +\n '[data-toggle=dropdown].active + .dropdown-menu, ' +\n '[data-toggle=dropdown].active + .dropdown-menu *,' +\n '[data-toggle=dropdown].active + [data-target=\"dropdown\"],' +\n '[data-toggle=dropdown].active + [data-target=\"dropdown\"] *')\n ) {\n $('[data-toggle=dropdown].active').trigger('close.dropdown');\n }\n })\n .on('keyup.dropdown', function (event) {\n if (event.keyCode == ESC_KEY_CODE) { //eslint-disable-line eqeqeq\n $('[data-toggle=dropdown].active').trigger('close.dropdown');\n }\n });\n\n /**\n * @param {Object} options\n */\n $.fn.dropdown = function (options) {\n options = $.extend({\n parent: null,\n btnArrow: '.arrow',\n activeClass: 'active'\n }, options);\n\n return this.each(function () {\n var elem = $(this);\n\n elem.off('open.dropdown, close.dropdown, click.dropdown');\n elem.on('open.dropdown', function () {\n elem\n .addClass(options.activeClass)\n .parent()\n .addClass(options.activeClass);\n elem.find(options.btnArrow).text('\\u25b2'); // arrow up\n });\n\n elem.on('close.dropdown', function () {\n elem\n .removeClass(options.activeClass)\n .parent()\n .removeClass(options.activeClass);\n elem.find(options.btnArrow).text('\\u25bc'); // arrow down\n });\n\n elem.on('click.dropdown', function () {\n var isActive = elem.hasClass('active');\n\n $('[data-toggle=dropdown].active').trigger('close.dropdown');\n elem.trigger(isActive ? 'close.dropdown' : 'open.dropdown');\n\n return false;\n });\n });\n };\n\n return function (data, el) {\n $(el).dropdown(data);\n };\n});\n","mage/smart-keyboard-handler.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\ndefine([\n 'jquery'\n], function ($) {\n 'use strict';\n\n /**\n * @return {Object}\n * @constructor\n */\n function KeyboardHandler() {\n var body = $('body'),\n focusState = false,\n tabFocusClass = '_keyfocus',\n productsGrid = '[data-container=\"product-grid\"]',\n catalogProductsGrid = $(productsGrid),\n CODE_TAB = 9;\n\n /**\n * Handle logic, when onTabKeyPress fired at first.\n * Then it changes state.\n */\n function onFocusInHandler() {\n focusState = true;\n body.addClass(tabFocusClass)\n .off('focusin.keyboardHandler', onFocusInHandler);\n }\n\n /**\n * Handle logic to remove state after onTabKeyPress to normal.\n */\n function onClickHandler() {\n focusState = false;\n body.removeClass(tabFocusClass)\n .off('click', onClickHandler);\n }\n\n /**\n * Tab key onKeypress handler. Apply main logic:\n * - call differ actions onTabKeyPress and onClick\n */\n function smartKeyboardFocus() {\n $(document).on('keydown keypress', function (event) {\n if (event.which === CODE_TAB && !focusState) {\n body\n .on('focusin.keyboardHandler', onFocusInHandler)\n .on('click', onClickHandler);\n }\n });\n\n // ARIA support for catalog grid products\n if (catalogProductsGrid.length) {\n body.on('focusin.gridProducts', productsGrid, function () {\n if (body.hasClass(tabFocusClass)) {\n $(this).addClass('active');\n }\n });\n body.on('focusout.gridProducts', productsGrid, function () {\n $(this).removeClass('active');\n });\n }\n }\n\n /**\n * Attach smart focus on specific element.\n * @param {jQuery} element\n */\n function handleFocus(element) {\n element.on('focusin.emulateTabFocus', function () {\n focusState = true;\n body.addClass(tabFocusClass);\n element.off();\n });\n\n element.on('focusout.emulateTabFocus', function () {\n focusState = false;\n body.removeClass(tabFocusClass);\n element.off();\n });\n }\n\n return {\n apply: smartKeyboardFocus,\n focus: handleFocus\n };\n }\n\n return new KeyboardHandler;\n});\n","mage/validation.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'moment',\n 'mageUtils',\n 'jquery-ui-modules/widget',\n 'jquery/validate',\n 'mage/translate'\n], function ($, moment, utils) {\n 'use strict';\n\n var creditCartTypes, rules, showLabel, originValidateDelegate;\n\n $.extend(true, $, {\n // @TODO: Move methods 'isEmpty', 'isEmptyNoTrim', 'parseNumber', 'stripHtml' in file with utility functions\n mage: {\n /**\n * Check if string is empty with trim\n * @param {String} value\n */\n isEmpty: function (value) {\n return value === '' || value === undefined ||\n value == null || value.length === 0 || /^\\s+$/.test(value);\n },\n\n /**\n * Check if string is empty no trim\n * @param {String} value\n */\n isEmptyNoTrim: function (value) {\n return value === '' || value == null || value.length === 0;\n },\n\n /**\n * Checks if {value} is between numbers {from} and {to}\n * @param {String} value\n * @param {String} from\n * @param {String} to\n * @returns {Boolean}\n */\n isBetween: function (value, from, to) {\n return ($.mage.isEmpty(from) || value >= $.mage.parseNumber(from)) &&\n ($.mage.isEmpty(to) || value <= $.mage.parseNumber(to));\n },\n\n /**\n * Parse price string\n * @param {String} value\n */\n parseNumber: function (value) {\n var isDot, isComa;\n\n if (typeof value !== 'string') {\n return parseFloat(value);\n }\n isDot = value.indexOf('.');\n isComa = value.indexOf(',');\n\n if (isDot !== -1 && isComa !== -1) {\n if (isComa > isDot) {\n value = value.replace('.', '').replace(',', '.');\n } else {\n value = value.replace(',', '');\n }\n } else if (isComa !== -1) {\n value = value.replace(',', '.');\n }\n\n return parseFloat(value);\n },\n\n /**\n * Removes HTML tags and space characters, numbers and punctuation.\n *\n * @param {String} value - Value being stripped.\n * @return {String}\n */\n stripHtml: function (value) {\n return value.replace(/<.[^<>]*?>/g, ' ').replace(/ | /gi, ' ')\n .replace(/[0-9.(),;:!?%#$'\"_+=\\/-]*/g, '');\n }\n }\n });\n\n /**\n * @param {String} name\n * @param {*} method\n * @param {*} message\n * @param {*} dontSkip\n */\n $.validator.addMethod = function (name, method, message, dontSkip) {\n $.validator.methods[name] = method;\n $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];\n\n if (method.length < 3 || dontSkip) {\n $.validator.addClassRules(name, $.validator.normalizeRule(name));\n }\n };\n\n /**\n * Javascript object with credit card types\n * 0 - regexp for card number\n * 1 - regexp for cvn\n * 2 - check or not credit card number trough Luhn algorithm by\n */\n creditCartTypes = {\n 'SO': [\n new RegExp('^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$'),\n new RegExp('^([0-9]{3}|[0-9]{4})?$'),\n true\n ],\n 'SM': [\n new RegExp('(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|' +\n '(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|' +\n '(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|' +\n '(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|' +\n '(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|' +\n '(^(4936)([0-9]{12}$|[0-9]{14,15}$))'), new RegExp('^([0-9]{3}|[0-9]{4})?$'),\n true\n ],\n 'VI': [new RegExp('^4[0-9]{12}([0-9]{3})?$'), new RegExp('^[0-9]{3}$'), true],\n 'MC': [\n new RegExp('^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$'),\n new RegExp('^[0-9]{3}$'),\n true\n ],\n 'AE': [new RegExp('^3[47][0-9]{13}$'), new RegExp('^[0-9]{4}$'), true],\n 'DI': [new RegExp('^(6011(0|[2-4]|74|7[7-9]|8[6-9]|9)|6(4[4-9]|5))\\\\d*$'), new RegExp('^[0-9]{3}$'), true],\n 'JCB': [new RegExp('^35(2[8-9]|[3-8])\\\\d*$'), new RegExp('^[0-9]{3}$'), true],\n 'DN': [new RegExp('^(3(0[0-5]|095|6|[8-9]))\\\\d*$'), new RegExp('^[0-9]{3}$'), true],\n 'UN': [\n new RegExp('^(622(1(2[6-9]|[3-9])|[3-8]|9([[0-1]|2[0-5]))|62[4-6]|628([2-8]))\\\\d*?$'),\n new RegExp('^[0-9]{3}$'),\n true\n ],\n 'MI': [new RegExp('^(5(0|[6-9])|63|67(?!59|6770|6774))\\\\d*$'), new RegExp('^[0-9]{3}$'), true],\n 'MD': [new RegExp('^6759(?!24|38|40|6[3-9]|70|76)|676770|676774\\\\d*$'), new RegExp('^[0-9]{3}$'), true]\n };\n\n /**\n * validate credit card number using mod10\n * @param {String} s\n * @return {Boolean}\n */\n function validateCreditCard(s) {\n // remove non-numerics\n var v = '0123456789',\n w = '',\n i, j, k, m, c, a, x;\n\n for (i = 0; i < s.length; i++) {\n x = s.charAt(i);\n\n if (v.indexOf(x, 0) !== -1) {\n w += x;\n }\n }\n // validate number\n j = w.length / 2;\n k = Math.floor(j);\n m = Math.ceil(j) - k;\n c = 0;\n\n for (i = 0; i < k; i++) {\n a = w.charAt(i * 2 + m) * 2;\n c += a > 9 ? Math.floor(a / 10 + a % 10) : a;\n }\n\n for (i = 0; i < k + m; i++) {\n c += w.charAt(i * 2 + 1 - m) * 1;\n }\n\n return c % 10 === 0;\n }\n\n /**\n * validate all table required inputs at once, using single hidden input\n * @param {String} value\n * @param {HTMLElement} element\n *\n * @return {Boolean}\n */\n function tableSingleValidation(value, element) {\n var empty = $(element).closest('table')\n .find('input.required-option:visible')\n .filter(function (i, el) {\n if ($(el).is('disabled')) {\n return $.mage.isEmpty(el.value);\n }\n })\n .length;\n\n return empty === 0;\n }\n\n /**\n *\n * @param {float} qty\n * @param {float} qtyIncrements\n * @returns {float}\n */\n function resolveModulo(qty, qtyIncrements) {\n var divideEpsilon = 10000,\n epsilon,\n remainder;\n\n while (qtyIncrements < 1) {\n qty *= 10;\n qtyIncrements *= 10;\n }\n\n epsilon = qtyIncrements / divideEpsilon;\n remainder = qty % qtyIncrements;\n\n if (Math.abs(remainder - qtyIncrements) < epsilon ||\n Math.abs(remainder) < epsilon) {\n remainder = 0;\n }\n\n return remainder;\n }\n\n /**\n * Collection of validation rules including rules from additional-methods.js\n * @type {Object}\n */\n rules = {\n 'max-words': [\n function (value, element, params) {\n return this.optional(element) || $.mage.stripHtml(value).match(/\\b\\w+\\b/g).length <= params;\n },\n $.mage.__('Please enter {0} words or less.')\n ],\n 'min-words': [\n function (value, element, params) {\n return this.optional(element) || $.mage.stripHtml(value).match(/\\b\\w+\\b/g).length >= params;\n },\n $.mage.__('Please enter at least {0} words.')\n ],\n 'range-words': [\n function (value, element, params) {\n return this.optional(element) ||\n $.mage.stripHtml(value).match(/\\b\\w+\\b/g).length >= params[0] &&\n value.match(/bw+b/g).length < params[1];\n },\n $.mage.__('Please enter between {0} and {1} words.')\n ],\n 'letters-with-basic-punc': [\n function (value, element) {\n return this.optional(element) || /^[a-z\\-.,()'\\\"\\s]+$/i.test(value);\n },\n $.mage.__('Letters or punctuation only please')\n ],\n 'alphanumeric': [\n function (value, element) {\n return this.optional(element) || /^\\w+$/i.test(value);\n },\n $.mage.__('Letters, numbers, spaces or underscores only please')\n ],\n 'letters-only': [\n function (value, element) {\n return this.optional(element) || /^[a-z]+$/i.test(value);\n },\n $.mage.__('Letters only please')\n ],\n 'no-whitespace': [\n function (value, element) {\n return this.optional(element) || /^\\S+$/i.test(value);\n },\n $.mage.__('No white space please')\n ],\n 'no-marginal-whitespace': [\n function (value, element) {\n return this.optional(element) || !/^\\s+|\\s+$/i.test(value);\n },\n $.mage.__('No marginal white space please')\n ],\n 'zip-range': [\n function (value, element) {\n return this.optional(element) || /^90[2-5]-\\d{2}-\\d{4}$/.test(value);\n },\n $.mage.__('Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx')\n ],\n 'integer': [\n function (value, element) {\n return this.optional(element) || /^-?\\d+$/.test(value);\n },\n $.mage.__('A positive or negative non-decimal number please')\n ],\n 'vinUS': [\n function (v) {\n var i, n, d, f, cd, cdv, LL, VL, FL, rs;\n\n /* eslint-disable max-depth */\n if (v.length !== 17) {\n return false;\n }\n\n LL = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L',\n 'M', 'N', 'P', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];\n VL = [1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9];\n FL = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2];\n rs = 0;\n\n for (i = 0; i < 17; i++) {\n f = FL[i];\n d = v.slice(i, i + 1);\n\n if (i === 8) {\n cdv = d;\n }\n\n if (!isNaN(d)) {\n d *= f;\n } else {\n for (n = 0; n < LL.length; n++) {\n if (d.toUpperCase() === LL[n]) {\n d = VL[n];\n d *= f;\n\n if (isNaN(cdv) && n === 8) {\n cdv = LL[n];\n }\n break;\n }\n }\n }\n rs += d;\n }\n\n /* eslint-enable max-depth */\n cd = rs % 11;\n\n if (cd === 10) {\n cd = 'X';\n }\n\n if (cd === cdv) {\n return true;\n }\n\n return false;\n },\n $.mage.__('The specified vehicle identification number (VIN) is invalid.')\n ],\n 'dateITA': [\n function (value, element) {\n var check = false,\n re = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$/,\n adata, gg, mm, aaaa, xdata;\n\n if (re.test(value)) {\n adata = value.split('/');\n gg = parseInt(adata[0], 10);\n mm = parseInt(adata[1], 10);\n aaaa = parseInt(adata[2], 10);\n xdata = new Date(aaaa, mm - 1, gg);\n\n if (xdata.getFullYear() === aaaa &&\n xdata.getMonth() === mm - 1 &&\n xdata.getDate() === gg\n ) {\n check = true;\n } else {\n check = false;\n }\n } else {\n check = false;\n }\n\n return this.optional(element) || check;\n },\n $.mage.__('Please enter a correct date')\n ],\n 'dateNL': [\n function (value, element) {\n return this.optional(element) || /^\\d\\d?[\\.\\/-]\\d\\d?[\\.\\/-]\\d\\d\\d?\\d?$/.test(value);\n },\n 'Vul hier een geldige datum in.'\n ],\n 'time': [\n function (value, element) {\n return this.optional(element) || /^([01]\\d|2[0-3])(:[0-5]\\d){0,2}$/.test(value);\n },\n $.mage.__('Please enter a valid time, between 00:00 and 23:59')\n ],\n 'time12h': [\n function (value, element) {\n return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\\d){0,2}(\\s[AP]M))$/i.test(value);\n },\n $.mage.__('Please enter a valid time, between 00:00 am and 12:00 pm')\n ],\n 'phoneUS': [\n function (phoneNumber, element) {\n phoneNumber = phoneNumber.replace(/\\s+/g, '');\n\n return this.optional(element) || phoneNumber.length > 9 &&\n phoneNumber.match(/^(1-?)?(\\([2-9]\\d{2}\\)|[2-9]\\d{2})-?[2-9]\\d{2}-?\\d{4}$/);\n },\n $.mage.__('Please specify a valid phone number')\n ],\n 'phoneUK': [\n function (phoneNumber, element) {\n return this.optional(element) || phoneNumber.length > 9 &&\n phoneNumber.match(/^(\\(?(0|\\+44)[1-9]{1}\\d{1,4}?\\)?\\s?\\d{3,4}\\s?\\d{3,4})$/);\n },\n $.mage.__('Please specify a valid phone number')\n ],\n 'mobileUK': [\n function (phoneNumber, element) {\n return this.optional(element) || phoneNumber.length > 9 &&\n phoneNumber.match(/^((0|\\+44)7\\d{3}\\s?\\d{6})$/);\n },\n $.mage.__('Please specify a valid mobile number')\n ],\n 'stripped-min-length': [\n function (value, element, param) {\n return value.length >= param;\n },\n $.mage.__('Please enter at least {0} characters')\n ],\n\n /* detect chars that would require more than 3 bytes */\n 'validate-no-utf8mb4-characters': [\n function (value) {\n var validator = this,\n message = $.mage.__('Please remove invalid characters: {0}.'),\n matches = value.match(/(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF])/g),\n result = matches === null;\n\n if (!result) {\n validator.charErrorMessage = message.replace('{0}', matches.join());\n }\n\n return result;\n }, function () {\n return this.charErrorMessage;\n }\n ],\n\n /* eslint-disable max-len */\n 'email2': [\n function (value, element) {\n return this.optional(element) ||\n /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?$/i.test(value);\n },\n $.validator.messages.email\n ],\n 'url2': [\n function (value, element) {\n return this.optional(element) || /^(https?|ftp):\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?(((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)*(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.?)(:\\d*)?)(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)?(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i.test(value);\n },\n $.validator.messages.url\n ],\n\n /* eslint-enable max-len */\n 'credit-card-types': [\n function (value, element, param) {\n var validTypes;\n\n if (/[^0-9-]+/.test(value)) {\n return false;\n }\n value = value.replace(/\\D/g, '');\n\n validTypes = 0x0000;\n\n if (param.mastercard) {\n validTypes |= 0x0001;\n }\n\n if (param.visa) {\n validTypes |= 0x0002;\n }\n\n if (param.amex) {\n validTypes |= 0x0004;\n }\n\n if (param.dinersclub) {\n validTypes |= 0x0008;\n }\n\n if (param.enroute) {\n validTypes |= 0x0010;\n }\n\n if (param.discover) {\n validTypes |= 0x0020;\n }\n\n if (param.jcb) {\n validTypes |= 0x0040;\n }\n\n if (param.unknown) {\n validTypes |= 0x0080;\n }\n\n if (param.all) {\n validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;\n }\n\n if (validTypes & 0x0001 && /^(51|52|53|54|55)/.test(value)) { //mastercard\n return value.length === 16;\n }\n\n if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa\n return value.length === 16;\n }\n\n if (validTypes & 0x0004 && /^(34|37)/.test(value)) { //amex\n return value.length === 15;\n }\n\n if (validTypes & 0x0008 && /^(300|301|302|303|304|305|36|38)/.test(value)) { //dinersclub\n return value.length === 14;\n }\n\n if (validTypes & 0x0010 && /^(2014|2149)/.test(value)) { //enroute\n return value.length === 15;\n }\n\n if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover\n return value.length === 16;\n }\n\n if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb\n return value.length === 16;\n }\n\n if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb\n return value.length === 15;\n }\n\n if (validTypes & 0x0080) { //unknown\n return true;\n }\n\n return false;\n },\n $.mage.__('Please enter a valid credit card number.')\n ],\n\n /* eslint-disable max-len */\n 'ipv4': [\n function (value, element) {\n return this.optional(element) ||\n /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/i.test(value);\n },\n $.mage.__('Please enter a valid IP v4 address.')\n ],\n 'ipv6': [\n function (value, element) {\n return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);\n },\n $.mage.__('Please enter a valid IP v6 address.')\n ],\n\n /* eslint-enable max-len */\n 'pattern': [\n function (value, element, param) {\n return this.optional(element) || new RegExp(param).test(value);\n },\n $.mage.__('Invalid format.')\n ],\n 'allow-container-className': [\n function (element) {\n if (element.type === 'radio' || element.type === 'checkbox') {\n return $(element).hasClass('change-container-classname');\n }\n },\n ''\n ],\n 'validate-no-html-tags': [\n function (value) {\n return !/<(\\/)?\\w+/.test(value);\n },\n $.mage.__('HTML tags are not allowed.')\n ],\n 'validate-select': [\n function (value) {\n return value !== 'none' && value != null && value.length !== 0;\n },\n $.mage.__('Please select an option.')\n ],\n 'validate-no-empty': [\n function (value) {\n return !$.mage.isEmpty(value);\n },\n $.mage.__('Empty Value.')\n ],\n 'validate-alphanum-with-spaces': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[a-zA-Z0-9 ]+$/.test(v);\n },\n $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9) or spaces only in this field.')\n ],\n 'validate-data': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[A-Za-z]+[A-Za-z0-9_]+$/.test(v);\n },\n $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.') //eslint-disable-line max-len\n ],\n 'validate-street': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[ \\w]{3,}([A-Za-z]\\.)?([ \\w]*\\#\\d+)?(\\r\\n| )[ \\w]{3,}/.test(v);\n },\n $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9), spaces and \"#\" in this field.')\n ],\n 'validate-phoneStrict': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^(\\()?\\d{3}(\\))?(-|\\s)?\\d{3}(-|\\s)\\d{4}$/.test(v);\n },\n $.mage.__('Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.')\n ],\n 'validate-phoneLax': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) ||\n /^((\\d[\\-. ]?)?((\\(\\d{3}\\))|\\d{3}))?[\\-. ]?\\d{3}[\\-. ]?\\d{4}$/.test(v);\n },\n $.mage.__('Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.')\n ],\n 'validate-fax': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^(\\()?\\d{3}(\\))?(-|\\s)?\\d{3}(-|\\s)\\d{4}$/.test(v);\n },\n $.mage.__('Please enter a valid fax number (Ex: 123-456-7890).')\n ],\n 'validate-email': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^([a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i.test(v); //eslint-disable-line max-len\n },\n $.mage.__('Please enter a valid email address (Ex: [email protected]).')\n ],\n 'validate-emailSender': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[\\S ]+$/.test(v);\n },\n $.mage.__('Please enter a valid email address (Ex: [email protected]).')\n ],\n 'validate-password': [\n function (v) {\n var pass;\n\n if (v == null) {\n return false;\n }\n //strip leading and trailing spaces\n pass = v.trim();\n\n if (!pass.length) {\n return true;\n }\n\n return !(pass.length > 0 && pass.length < 6);\n },\n $.mage.__('Please enter 6 or more characters. Leading and trailing spaces will be ignored.')\n ],\n 'validate-admin-password': [\n function (v) {\n var pass;\n\n if (v == null) {\n return false;\n }\n pass = v.trim();\n // strip leading and trailing spaces\n if (pass.length === 0) {\n return true;\n }\n\n if (!/[a-z]/i.test(v) || !/[0-9]/.test(v)) {\n return false;\n }\n\n if (pass.length < 7) {\n return false;\n }\n\n return true;\n },\n $.mage.__('Please enter 7 or more characters, using both numeric and alphabetic.')\n ],\n 'validate-customer-password': [\n function (v, elm) {\n var validator = this,\n counter = 0,\n passwordMinLength = $(elm).data('password-min-length'),\n passwordMinCharacterSets = $(elm).data('password-min-character-sets'),\n pass = v.trim(),\n result = pass.length >= passwordMinLength;\n\n if (result === false) {\n validator.passwordErrorMessage = $.mage.__('Minimum length of this field must be equal or greater than %1 symbols. Leading and trailing spaces will be ignored.').replace('%1', passwordMinLength); //eslint-disable-line max-len\n\n return result;\n }\n\n if (pass.match(/\\d+/)) {\n counter++;\n }\n\n if (pass.match(/[a-z]+/)) {\n counter++;\n }\n\n if (pass.match(/[A-Z]+/)) {\n counter++;\n }\n\n if (pass.match(/[^a-zA-Z0-9]+/)) {\n counter++;\n }\n\n if (counter < passwordMinCharacterSets) {\n result = false;\n validator.passwordErrorMessage = $.mage.__('Minimum of different classes of characters in password is %1. Classes of characters: Lower Case, Upper Case, Digits, Special Characters.').replace('%1', passwordMinCharacterSets); //eslint-disable-line max-len\n }\n\n return result;\n }, function () {\n return this.passwordErrorMessage;\n }\n ],\n 'validate-url': [\n function (v) {\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n v = (v || '').replace(/^\\s+/, '').replace(/\\s+$/, '');\n\n return (/^(http|https|ftp):\\/\\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\\d+))?(\\/[A-Z0-9~](([A-Z0-9_~-]|\\.)*[A-Z0-9~]|))*\\/?(.*)?$/i).test(v); //eslint-disable-line max-len\n\n },\n $.mage.__('Please enter a valid URL. Protocol is required (http://, https:// or ftp://).')\n ],\n 'validate-clean-url': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^(http|https|ftp):\\/\\/(([A-Z0-9][A-Z0-9_-]*)(\\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\\d+))?\\/?/i.test(v) || /^(www)((\\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\\d+))?\\/?/i.test(v); //eslint-disable-line max-len\n\n },\n $.mage.__('Please enter a valid URL. For example http://www.example.com or www.example.com.')\n ],\n 'validate-xml-identifier': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[A-Z][A-Z0-9_\\/-]*$/i.test(v);\n\n },\n $.mage.__('Please enter a valid XML-identifier (Ex: something_1, block5, id-4).')\n ],\n 'validate-ssn': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^\\d{3}-?\\d{2}-?\\d{4}$/.test(v);\n\n },\n $.mage.__('Please enter a valid social security number (Ex: 123-45-6789).')\n ],\n 'validate-zip-us': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/.test(v);\n\n },\n $.mage.__('Please enter a valid zip code (Ex: 90602 or 90602-1234).')\n ],\n 'validate-date-au': [\n function (v) {\n var regex, d;\n\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n regex = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\n\n if ($.mage.isEmpty(v) || !regex.test(v)) {\n return false;\n }\n d = new Date(v.replace(regex, '$2/$1/$3'));\n\n return parseInt(RegExp.$2, 10) === 1 + d.getMonth() &&\n parseInt(RegExp.$1, 10) === d.getDate() &&\n parseInt(RegExp.$3, 10) === d.getFullYear();\n\n },\n $.mage.__('Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.')\n ],\n 'validate-currency-dollar': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^\\$?\\-?([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}\\d*(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$/.test(v); //eslint-disable-line max-len\n\n },\n $.mage.__('Please enter a valid $ amount. For example $100.00.')\n ],\n 'validate-not-negative-number': [\n function (v) {\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n v = $.mage.parseNumber(v);\n\n return !isNaN(v) && v >= 0;\n\n },\n $.mage.__('Please enter a number 0 or greater in this field.')\n ],\n // validate-not-negative-number should be replaced in all places with this one and then removed\n 'validate-zero-or-greater': [\n function (v) {\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n v = $.mage.parseNumber(v);\n\n return !isNaN(v) && v >= 0;\n\n },\n $.mage.__('Please enter a number 0 or greater in this field.')\n ],\n 'validate-greater-than-zero': [\n function (v) {\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n v = $.mage.parseNumber(v);\n\n return !isNaN(v) && v > 0;\n },\n $.mage.__('Please enter a number greater than 0 in this field.')\n ],\n 'validate-css-length': [\n function (v) {\n if (v !== '') {\n return (/^[0-9]*\\.*[0-9]+(px|pc|pt|ex|em|mm|cm|in|%)?$/).test(v);\n }\n\n return true;\n },\n $.mage.__('Please input a valid CSS-length (Ex: 100px, 77pt, 20em, .5ex or 50%).')\n ],\n // Additional methods\n 'validate-number': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || !isNaN($.mage.parseNumber(v)) && /^\\s*-?\\d*(\\.\\d*)?\\s*$/.test(v);\n },\n $.mage.__('Please enter a valid number in this field.')\n ],\n 'required-number': [\n function (v) {\n return !!v.length;\n },\n $.mage.__('Please enter a valid number in this field.')\n ],\n 'validate-number-range': [\n function (v, elm, param) {\n var numValue, dataAttrRange, classNameRange, result, range, m, classes, ii;\n\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n\n numValue = $.mage.parseNumber(v);\n\n if (isNaN(numValue)) {\n return false;\n }\n\n dataAttrRange = /^(-?[\\d.,]+)?-(-?[\\d.,]+)?$/;\n classNameRange = /^number-range-(-?[\\d.,]+)?-(-?[\\d.,]+)?$/;\n result = true;\n range = param;\n\n if (typeof range === 'string') {\n m = dataAttrRange.exec(range);\n\n if (m) {\n result = result && $.mage.isBetween(numValue, m[1], m[2]);\n } else {\n result = false;\n }\n } else if (elm && elm.className) {\n classes = elm.className.split(' ');\n ii = classes.length;\n\n while (ii--) {\n range = classes[ii];\n m = classNameRange.exec(range);\n\n if (m) { //eslint-disable-line max-depth\n result = result && $.mage.isBetween(numValue, m[1], m[2]);\n break;\n }\n }\n }\n\n return result;\n },\n $.mage.__('The value is not within the specified range.'),\n true\n ],\n 'validate-digits': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || !/[^\\d]/.test(v);\n },\n $.mage.__('Please enter a valid number in this field.')\n ],\n 'validate-forbidden-extensions': [\n function (v, elem) {\n var forbiddenExtensions = $(elem).attr('data-validation-params'),\n forbiddenExtensionsArray = forbiddenExtensions.split(','),\n extensionsArray = v.split(','),\n result = true;\n\n this.validateExtensionsMessage = $.mage.__('Forbidden extensions has been used. Avoid usage of ') +\n forbiddenExtensions;\n\n $.each(extensionsArray, function (key, extension) {\n if (forbiddenExtensionsArray.indexOf(extension) !== -1) {\n result = false;\n }\n });\n\n return result;\n }, function () {\n return this.validateExtensionsMessage;\n }\n ],\n 'validate-digits-range': [\n function (v, elm, param) {\n var numValue, dataAttrRange, classNameRange, result, range, m, classes, ii;\n\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n }\n\n numValue = $.mage.parseNumber(v);\n\n if (isNaN(numValue)) {\n return false;\n }\n\n dataAttrRange = /^(-?\\d+)?-(-?\\d+)?$/;\n classNameRange = /^digits-range-(-?\\d+)?-(-?\\d+)?$/;\n result = true;\n range = param;\n\n if (typeof range === 'string') {\n m = dataAttrRange.exec(range);\n\n if (m) {\n result = result && $.mage.isBetween(numValue, m[1], m[2]);\n } else {\n result = false;\n }\n } else if (elm && elm.className) {\n classes = elm.className.split(' ');\n ii = classes.length;\n\n while (ii--) {\n range = classes[ii];\n m = classNameRange.exec(range);\n\n if (m) { //eslint-disable-line max-depth\n result = result && $.mage.isBetween(numValue, m[1], m[2]);\n break;\n }\n }\n }\n\n return result;\n },\n $.mage.__('The value is not within the specified range.'),\n true\n ],\n 'validate-range': [\n function (v, elm) {\n var minValue, maxValue, ranges, reRange, result, values,\n i, name, validRange, minValidRange, maxValidRange;\n\n if ($.mage.isEmptyNoTrim(v)) {\n return true;\n } else if ($.validator.methods['validate-digits'] && $.validator.methods['validate-digits'](v)) {\n minValue = maxValue = $.mage.parseNumber(v);\n } else {\n ranges = /^(-?\\d+)?-(-?\\d+)?$/.exec(v);\n\n if (ranges) {\n minValue = $.mage.parseNumber(ranges[1]);\n maxValue = $.mage.parseNumber(ranges[2]);\n\n if (minValue > maxValue) { //eslint-disable-line max-depth\n return false;\n }\n } else {\n return false;\n }\n }\n reRange = /^range-(-?\\d+)?-(-?\\d+)?$/;\n result = true;\n values = $(elm).prop('class').split(' ');\n\n for (i = values.length - 1; i >= 0; i--) {\n name = values[i];\n validRange = reRange.exec(name);\n\n if (validRange) {\n minValidRange = $.mage.parseNumber(validRange[1]);\n maxValidRange = $.mage.parseNumber(validRange[2]);\n result = result &&\n (isNaN(minValidRange) || minValue >= minValidRange) &&\n (isNaN(maxValidRange) || maxValue <= maxValidRange);\n }\n }\n\n return result;\n },\n $.mage.__('The value is not within the specified range.')\n ],\n 'validate-alpha': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[a-zA-Z]+$/.test(v);\n },\n $.mage.__('Please use letters only (a-z or A-Z) in this field.')\n ],\n 'validate-code': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[a-zA-Z]+[a-zA-Z0-9_]+$/.test(v);\n },\n $.mage.__('Please use only letters (a-z or A-Z), numbers (0-9) or underscore (_) in this field, and the first character should be a letter.') //eslint-disable-line max-len\n ],\n 'validate-alphanum': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[a-zA-Z0-9]+$/.test(v);\n },\n $.mage.__('Please use only letters (a-z or A-Z) or numbers (0-9) in this field. No spaces or other characters are allowed.') //eslint-disable-line max-len\n ],\n 'validate-not-number-first': [\n function (value) {\n return $.mage.isEmptyNoTrim(value) || /^[^0-9-\\.].*$/.test(value.trim());\n },\n $.mage.__('First character must be letter.')\n ],\n 'validate-date': [\n function (value, params, additionalParams) {\n var test = moment(value, utils.convertToMomentFormat(additionalParams.dateFormat));\n\n return $.mage.isEmptyNoTrim(value) || test.isValid();\n },\n $.mage.__('Please enter a valid date.')\n\n ],\n 'validate-date-range': [\n function (v, elm) {\n var m = /\\bdate-range-(\\w+)-(\\w+)\\b/.exec(elm.className),\n currentYear, normalizedTime, dependentElements;\n\n if (!m || m[2] === 'to' || $.mage.isEmptyNoTrim(v)) {\n return true;\n }\n\n currentYear = new Date().getFullYear() + '';\n\n /**\n * @param {String} vd\n * @return {Number}\n */\n normalizedTime = function (vd) {\n vd = vd.split(/[.\\/]/);\n\n if (vd[2] && vd[2].length < 4) {\n vd[2] = currentYear.substr(0, vd[2].length) + vd[2];\n }\n\n return new Date(vd.join('/')).getTime();\n };\n\n dependentElements = $(elm.form).find('.validate-date-range.date-range-' + m[1] + '-to');\n\n return !dependentElements.length || $.mage.isEmptyNoTrim(dependentElements[0].value) ||\n normalizedTime(v) <= normalizedTime(dependentElements[0].value);\n },\n $.mage.__('Make sure the To Date is later than or the same as the From Date.')\n ],\n 'validate-cpassword': [\n function () {\n var conf = $('#confirmation').length > 0 ? $('#confirmation') : $($('.validate-cpassword')[0]),\n pass = false,\n passwordElements, i, passwordElement;\n\n if ($('#password')) {\n pass = $('#password');\n }\n passwordElements = $('.validate-password');\n\n for (i = 0; i < passwordElements.length; i++) {\n passwordElement = $(passwordElements[i]);\n\n if (passwordElement.closest('form').attr('id') === conf.closest('form').attr('id')) {\n pass = passwordElement;\n }\n }\n\n if ($('.validate-admin-password').length) {\n pass = $($('.validate-admin-password')[0]);\n }\n\n return pass.val() === conf.val();\n },\n $.mage.__('Please make sure your passwords match.')\n ],\n 'validate-identifier': [\n function (v) {\n return $.mage.isEmptyNoTrim(v) || /^[a-z0-9][a-z0-9_\\/-]+(\\.[a-z0-9_-]+)?$/.test(v);\n },\n $.mage.__('Please enter a valid URL Key (Ex: \"example-page\", \"example-page.html\" or \"anotherlevel/example-page\").') //eslint-disable-line max-len\n ],\n 'validate-zip-international': [\n\n /*function(v) {\n // @TODO: Cleanup\n return Validation.get('IsEmpty').test(v) ||\n /(^[A-z0-9]{2,10}([\\s]{0,1}|[\\-]{0,1})[A-z0-9]{2,10}$)/.test(v);\n }*/\n function () {\n return true;\n },\n $.mage.__('Please enter a valid zip code.')\n ],\n 'validate-one-required': [\n function (v, elm) {\n var p = $(elm).parent(),\n options = p.find('input');\n\n return options.map(function (el) {\n return $(el).val();\n }).length > 0;\n },\n $.mage.__('Please select one of the options above.')\n ],\n 'validate-state': [\n function (v) {\n return v !== 0;\n },\n $.mage.__('Please select State/Province.')\n ],\n 'required-file': [\n function (v, elm) {\n var result = !$.mage.isEmptyNoTrim(v),\n ovId;\n\n if (!result) {\n ovId = $('#' + $(elm).attr('id') + '_value');\n\n if (ovId.length > 0) {\n result = !$.mage.isEmptyNoTrim(ovId.val());\n }\n }\n\n return result;\n },\n $.mage.__('Please select a file.')\n ],\n 'validate-ajax-error': [\n function (v, element) {\n element = $(element);\n element.on('change.ajaxError', function () {\n element.removeClass('validate-ajax-error');\n element.off('change.ajaxError');\n });\n\n return !element.hasClass('validate-ajax-error');\n },\n ''\n ],\n 'validate-optional-datetime': [\n function (v, elm, param) {\n var dateTimeParts = $('.datetime-picker[id^=\"options_' + param + '\"]'),\n hasWithValue = false,\n hasWithNoValue = false,\n pattern = /day_part$/i,\n i;\n\n for (i = 0; i < dateTimeParts.length; i++) {\n if (!pattern.test($(dateTimeParts[i]).attr('id'))) {\n if ($(dateTimeParts[i]).val() === 's') { //eslint-disable-line max-depth\n hasWithValue = true;\n } else {\n hasWithNoValue = true;\n }\n }\n }\n\n return hasWithValue ^ hasWithNoValue;\n },\n $.mage.__('The field isn\\'t complete.')\n ],\n 'validate-required-datetime': [\n function (v, elm, param) {\n var dateTimeParts = $('.datetime-picker[id^=\"options_' + param + '\"]'),\n i;\n\n for (i = 0; i < dateTimeParts.length; i++) {\n if (dateTimeParts[i].value === '') {\n return false;\n }\n }\n\n return true;\n },\n $.mage.__('This is a required field.')\n ],\n 'validate-one-required-by-name': [\n function (v, elm, selector) {\n var name = elm.name.replace(/([\\\\\"])/g, '\\\\$1'),\n container = this.currentForm;\n\n selector = selector === true ? 'input[name=\"' + name + '\"]:checked' : selector;\n\n return !!container.querySelectorAll(selector).length;\n },\n $.mage.__('Please select one of the options.')\n ],\n 'less-than-equals-to': [\n function (value, element, params) {\n if ($.isNumeric($(params).val()) && $.isNumeric(value)) {\n this.lteToVal = $(params).val();\n\n return parseFloat(value) <= parseFloat($(params).val());\n }\n\n return true;\n },\n function () {\n var message = $.mage.__('Please enter a value less than or equal to %s.');\n\n return message.replace('%s', this.lteToVal);\n }\n ],\n 'greater-than-equals-to': [\n function (value, element, params) {\n if ($.isNumeric($(params).val()) && $.isNumeric(value)) {\n this.gteToVal = $(params).val();\n\n return parseFloat(value) >= parseFloat($(params).val());\n }\n\n return true;\n },\n function () {\n var message = $.mage.__('Please enter a value greater than or equal to %s.');\n\n return message.replace('%s', this.gteToVal);\n }\n ],\n 'validate-emails': [\n function (value) {\n var validRegexp, emails, i;\n\n if ($.mage.isEmpty(value)) {\n return true;\n }\n validRegexp = /^([a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!\\#\\$%&'\\*\\+\\/=\\?\\^_`\\{\\|\\}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i; //eslint-disable-line max-len\n emails = value.split(/[\\s\\n\\,]+/g);\n\n for (i = 0; i < emails.length; i++) {\n if (!validRegexp.test(emails[i].trim())) {\n return false;\n }\n }\n\n return true;\n },\n $.mage.__('Please enter valid email addresses, separated by commas. For example, [email protected], [email protected].') //eslint-disable-line max-len\n ],\n\n 'validate-cc-type-select': [\n\n /**\n * Validate credit card type matches credit card number\n * @param {*} value - select credit card type\n * @param {*} element - element contains the select box for credit card types\n * @param {*} params - selector for credit card number\n * @return {Boolean}\n */\n function (value, element, params) {\n if (value && params && creditCartTypes[value]) {\n return creditCartTypes[value][0].test($(params).val().replace(/\\s+/g, ''));\n }\n\n return false;\n },\n $.mage.__('Card type does not match credit card number.')\n ],\n 'validate-cc-number': [\n\n /**\n * Validate credit card number based on mod 10.\n *\n * @param {*} value - credit card number\n * @return {Boolean}\n */\n function (value) {\n if (value) {\n return validateCreditCard(value);\n }\n\n return false;\n },\n $.mage.__('Please enter a valid credit card number.')\n ],\n 'validate-cc-type': [\n\n /**\n * Validate credit card number is for the correct credit card type.\n *\n * @param {String} value - credit card number\n * @param {*} element - element contains credit card number\n * @param {*} params - selector for credit card type\n * @return {Boolean}\n */\n function (value, element, params) {\n var ccType;\n\n if (value && params) {\n ccType = $(params).val();\n value = value.replace(/\\s/g, '').replace(/\\-/g, '');\n\n if (creditCartTypes[ccType] && creditCartTypes[ccType][0]) {\n return creditCartTypes[ccType][0].test(value);\n } else if (creditCartTypes[ccType] && !creditCartTypes[ccType][0]) {\n return true;\n }\n }\n\n return false;\n },\n $.mage.__('Credit card number does not match credit card type.')\n ],\n 'validate-cc-exp': [\n\n /**\n * Validate credit card expiration date, make sure it's within the year and not before current month.\n *\n * @param {*} value - month\n * @param {*} element - element contains month\n * @param {*} params - year selector\n * @return {Boolean}\n */\n function (value, element, params) {\n var isValid = false,\n month, year, currentTime, currentMonth, currentYear;\n\n if (value && params) {\n month = value;\n year = $(params).val();\n currentTime = new Date();\n currentMonth = currentTime.getMonth() + 1;\n currentYear = currentTime.getFullYear();\n\n isValid = !year || year > currentYear || year == currentYear && month >= currentMonth; //eslint-disable-line\n }\n\n return isValid;\n },\n $.mage.__('Incorrect credit card expiration date.')\n ],\n 'validate-cc-cvn': [\n\n /**\n * Validate credit card cvn based on credit card type.\n *\n * @param {*} value - credit card cvn\n * @param {*} element - element contains credit card cvn\n * @param {*} params - credit card type selector\n * @return {*}\n */\n function (value, element, params) {\n var ccType;\n\n if (value && params) {\n ccType = $(params).val();\n\n if (creditCartTypes[ccType] && creditCartTypes[ccType][0]) {\n return creditCartTypes[ccType][1].test(value);\n }\n }\n\n return false;\n },\n $.mage.__('Please enter a valid credit card verification number.')\n ],\n 'validate-cc-ukss': [\n\n /**\n * Validate Switch/Solo/Maestro issue number and start date is filled.\n *\n * @param {*} value - input field value\n * @return {*}\n */\n function (value) {\n return value;\n },\n $.mage.__('Please enter issue number or start date for switch/solo card type.')\n ],\n 'validate-length': [\n function (v, elm) {\n var reMax = new RegExp(/^maximum-length-[0-9]+$/),\n reMin = new RegExp(/^minimum-length-[0-9]+$/),\n validator = this,\n result = true,\n length = 0;\n\n $.each(elm.className.split(' '), function (index, name) {\n if (name.match(reMax) && result) {\n length = name.split('-')[2];\n result = v.length <= length;\n validator.validateMessage =\n $.mage.__('Please enter less or equal than %1 symbols.').replace('%1', length);\n }\n\n if (name.match(reMin) && result && !$.mage.isEmpty(v)) {\n length = name.split('-')[2];\n result = v.length >= length;\n validator.validateMessage =\n $.mage.__('Please enter more or equal than %1 symbols.').replace('%1', length);\n }\n });\n\n return result;\n }, function () {\n return this.validateMessage;\n }\n ],\n 'required-entry': [\n function (value) {\n return !$.mage.isEmpty(value);\n }, $.mage.__('This is a required field.')\n ],\n 'not-negative-amount': [\n function (v) {\n if (v.length) {\n return (/^\\s*\\d+([,.]\\d+)*\\s*%?\\s*$/).test(v);\n }\n\n return true;\n },\n $.mage.__('Please enter positive number in this field.')\n ],\n 'validate-per-page-value-list': [\n function (v) {\n var isValid = true,\n values = v.split(','),\n i;\n\n if ($.mage.isEmpty(v)) {\n return isValid;\n }\n\n for (i = 0; i < values.length; i++) {\n if (!/^[0-9]+$/.test(values[i])) {\n isValid = false;\n }\n }\n\n return isValid;\n },\n $.mage.__('Please enter a valid value, ex: 10,20,30')\n ],\n 'validate-per-page-value': [\n function (v, elm) {\n var values;\n\n if ($.mage.isEmpty(v)) {\n return false;\n }\n values = $('#' + elm.id + '_values').val().split(',');\n\n return values.indexOf(v) !== -1;\n },\n $.mage.__('Please enter a valid value from list')\n ],\n 'validate-new-password': [\n function (v) {\n if ($.validator.methods['validate-password'] && !$.validator.methods['validate-password'](v)) {\n return false;\n }\n\n if ($.mage.isEmpty(v) && v !== '') {\n return false;\n }\n\n return true;\n },\n $.mage.__('Please enter 6 or more characters. Leading and trailing spaces will be ignored.')\n ],\n 'required-if-not-specified': [\n function (value, element, params) {\n var valid = false,\n alternate = $(params),\n alternateValue;\n\n if (alternate.length > 0) {\n valid = this.check(alternate);\n // if valid, it may be blank, so check for that\n if (valid) {\n alternateValue = alternate.val();\n\n if (typeof alternateValue == 'undefined' || alternateValue.length === 0) { //eslint-disable-line\n valid = false;\n }\n }\n }\n\n if (!valid) {\n valid = !this.optional(element);\n }\n\n return valid;\n },\n $.mage.__('This is a required field.')\n ],\n 'required-if-all-sku-empty-and-file-not-loaded': [\n function (value, element, params) {\n var valid = false,\n alternate = $(params.specifiedId),\n alternateValue;\n\n if (alternate.length > 0) {\n valid = this.check(alternate);\n // if valid, it may be blank, so check for that\n if (valid) {\n alternateValue = alternate.val();\n\n if (typeof alternateValue == 'undefined' || alternateValue.length === 0) { //eslint-disable-line\n valid = false;\n }\n }\n }\n\n if (!valid) {\n valid = !this.optional(element);\n }\n\n $('input[' + params.dataSku + '=true]').each(function () {\n if ($(this).val() !== '') {\n valid = true;\n }\n });\n\n return valid;\n },\n $.mage.__('Please enter valid SKU key.')\n ],\n 'required-if-specified': [\n function (value, element, params) {\n var valid = true,\n dependent = $(params),\n dependentValue;\n\n if (dependent.length > 0) {\n valid = this.check(dependent);\n // if valid, it may be blank, so check for that\n if (valid) {\n dependentValue = dependent.val();\n valid = typeof dependentValue != 'undefined' && dependentValue.length > 0;\n }\n }\n\n if (valid) {\n valid = !this.optional(element);\n } else {\n valid = true; // dependent was not valid, so don't even check\n }\n\n return valid;\n },\n $.mage.__('This is a required field.')\n ],\n 'required-number-if-specified': [\n function (value, element, params) {\n var valid = true,\n dependent = $(params),\n depeValue;\n\n if (dependent.length) {\n valid = this.check(dependent);\n\n if (valid) {\n depeValue = dependent[0].value;\n valid = !!(depeValue && depeValue.length);\n }\n }\n\n return valid ? !!value.length : true;\n },\n $.mage.__('Please enter a valid number.')\n ],\n 'datetime-validation': [\n function (value, element) {\n var isValid = true;\n\n if ($(element).val().length === 0) {\n isValid = false;\n $(element).addClass('mage-error');\n }\n\n return isValid;\n },\n $.mage.__('This is required field')\n ],\n 'required-text-swatch-entry': [\n tableSingleValidation,\n $.mage.__('Admin is a required field in each row.')\n ],\n 'required-visual-swatch-entry': [\n tableSingleValidation,\n $.mage.__('Admin is a required field in each row.')\n ],\n 'required-dropdown-attribute-entry': [\n tableSingleValidation,\n $.mage.__('Admin is a required field in each row.')\n ],\n 'validate-item-quantity': [\n function (value, element, params) {\n var validator = this,\n result = false,\n // obtain values for validation\n qty = $.mage.parseNumber(value),\n isMinAllowedValid = typeof params.minAllowed === 'undefined' ||\n qty >= $.mage.parseNumber(params.minAllowed),\n isMaxAllowedValid = typeof params.maxAllowed === 'undefined' ||\n qty <= $.mage.parseNumber(params.maxAllowed),\n isQtyIncrementsValid = typeof params.qtyIncrements === 'undefined' ||\n resolveModulo(qty, $.mage.parseNumber(params.qtyIncrements)) === 0.0;\n\n result = qty > 0;\n\n if (result === false) {\n validator.itemQtyErrorMessage = $.mage.__('Please enter a quantity greater than 0.');//eslint-disable-line max-len\n\n return result;\n }\n\n result = isMinAllowedValid;\n\n if (result === false) {\n validator.itemQtyErrorMessage = $.mage.__('The fewest you may purchase is %1.').replace('%1', params.minAllowed);//eslint-disable-line max-len\n\n return result;\n }\n\n result = isMaxAllowedValid;\n\n if (result === false) {\n validator.itemQtyErrorMessage = $.mage.__('The maximum you may purchase is %1.').replace('%1', params.maxAllowed);//eslint-disable-line max-len\n\n return result;\n }\n\n result = isQtyIncrementsValid;\n\n if (result === false) {\n validator.itemQtyErrorMessage = $.mage.__('You can buy this product only in quantities of %1 at a time.').replace('%1', params.qtyIncrements);//eslint-disable-line max-len\n\n return result;\n }\n\n return result;\n }, function () {\n return this.itemQtyErrorMessage;\n }\n ],\n 'password-not-equal-to-user-name': [\n function (value, element, params) {\n if (typeof params === 'string') {\n return value.toLowerCase() !== params.toLowerCase();\n }\n\n return true;\n },\n $.mage.__('The password can\\'t be the same as the email address. Create a new password and try again.')\n ]\n };\n\n $.each(rules, function (i, rule) {\n rule.unshift(i);\n $.validator.addMethod.apply($.validator, rule);\n });\n $.validator.addClassRules({\n 'required-option': {\n required: true\n },\n 'required-options-count': {\n required: true\n },\n 'validate-both-passwords': {\n 'validate-cpassword': true\n }\n });\n $.validator.messages = $.extend($.validator.messages, {\n required: $.mage.__('This is a required field.'),\n remote: $.mage.__('Please fix this field.'),\n email: $.mage.__('Please enter a valid email address.'),\n url: $.mage.__('Please enter a valid URL.'),\n date: $.mage.__('Please enter a valid date.'),\n dateISO: $.mage.__('Please enter a valid date (ISO).'),\n number: $.mage.__('Please enter a valid number.'),\n digits: $.mage.__('Please enter only digits.'),\n creditcard: $.mage.__('Please enter a valid credit card number.'),\n equalTo: $.mage.__('Please enter the same value again.'),\n maxlength: $.validator.format($.mage.__('Please enter no more than {0} characters.')),\n minlength: $.validator.format($.mage.__('Please enter at least {0} characters.')),\n rangelength: $.validator.format($.mage.__('Please enter a value between {0} and {1} characters long.')),\n range: $.validator.format($.mage.__('Please enter a value between {0} and {1}.')),\n max: $.validator.format($.mage.__('Please enter a value less than or equal to {0}.')),\n min: $.validator.format($.mage.__('Please enter a value greater than or equal to {0}.'))\n });\n\n if ($.metadata) {\n // Setting the type as html5 to enable data-validate attribute\n $.metadata.setType('html5');\n }\n\n showLabel = $.validator.prototype.showLabel;\n $.extend(true, $.validator.prototype, {\n /**\n * @param {*} element\n * @param {*} message\n */\n showLabel: function (element, message) {\n var label, elem;\n\n showLabel.call(this, element, message);\n\n // ARIA (adding aria-invalid & aria-describedby)\n label = this.errorsFor(element);\n elem = $(element);\n\n if (!label.attr('id')) {\n label.attr('id', this.idOrName(element) + '-error');\n }\n elem.attr('aria-invalid', 'true')\n .attr('aria-describedby', label.attr('id'));\n }\n });\n\n /**\n * Validate form field without instantiating validate plug-in.\n *\n * @param {Element|String} element - DOM element or selector\n * @return {Boolean} validation result\n */\n $.validator.validateElement = function (element) {\n var form, validator, valid, classes;\n\n element = $(element);\n form = element.get(0).form;\n validator = form ? $(form).data('validator') : null;\n\n if (validator) {\n return validator.element(element.get(0));\n }\n valid = true;\n classes = element.prop('class').split(' ');\n $.each(classes, $.proxy(function (i, className) {\n if (this.methods[className] && !this.methods[className](element.val(), element.get(0))) {\n valid = false;\n\n return valid;\n }\n }, this));\n\n return valid;\n };\n\n originValidateDelegate = $.fn.validateDelegate;\n\n /**\n * @return {*}\n */\n $.fn.validateDelegate = function () {\n if (!this[0].form) {\n return this;\n }\n\n return originValidateDelegate.apply(this, arguments);\n };\n\n /**\n * Validate single element.\n *\n * @param {Element} element\n * @param {Object} config\n * @returns {*}\n */\n $.validator.validateSingleElement = function (element, config) {\n var errors = {},\n valid = true,\n validateConfig = {\n errorElement: 'label',\n ignore: '.ignore-validate',\n hideError: false\n },\n form, validator, classes, elementValue;\n\n $.extend(validateConfig, config);\n element = $(element).not(validateConfig.ignore);\n\n if (!element.length) {\n return true;\n }\n\n form = element.get(0).form;\n validator = form ? $(form).data('validator') : null;\n\n if (validator) {\n return validator.element(element.get(0));\n }\n\n classes = element.prop('class').split(' ');\n validator = element.parent().data('validator') ||\n $.mage.validation(validateConfig, element.parent()).validate;\n\n element.removeClass(validator.settings.errorClass);\n validator.toHide = validator.toShow;\n validator.hideErrors();\n validator.toShow = validator.toHide = $([]);\n\n $.each(classes, $.proxy(function (i, className) {\n elementValue = element.val();\n\n if (element.is(':checkbox') || element.is(':radio')) {\n elementValue = element.is(':checked') || null;\n }\n\n if (this.methods[className] && !this.methods[className](elementValue, element.get(0))) {\n valid = false;\n errors[element.get(0).name] = this.messages[className];\n validator.invalid[element.get(0).name] = true;\n\n if (!validateConfig.hideError) {\n validator.showErrors(errors);\n }\n\n return valid;\n }\n }, this));\n\n return valid;\n };\n\n $.widget('mage.validation', {\n options: {\n meta: 'validate',\n onfocusout: false,\n onkeyup: false,\n onclick: false,\n ignoreTitle: true,\n errorClass: 'mage-error',\n errorElement: 'div',\n\n /**\n * @param {*} error\n * @param {*} element\n */\n errorPlacement: function (error, element) {\n var errorPlacement = element,\n fieldWrapper;\n\n // logic for date-picker error placement\n if (element.hasClass('_has-datepicker')) {\n errorPlacement = element.siblings('button');\n }\n // logic for field wrapper\n fieldWrapper = element.closest('.addon');\n\n if (fieldWrapper.length) {\n errorPlacement = fieldWrapper.after(error);\n }\n //logic for checkboxes/radio\n if (element.is(':checkbox') || element.is(':radio')) {\n errorPlacement = element.parents('.control').children().last();\n\n //fallback if group does not have .control parent\n if (!errorPlacement.length) {\n errorPlacement = element.siblings('label').last();\n }\n }\n //logic for control with tooltip\n if (element.siblings('.tooltip').length) {\n errorPlacement = element.siblings('.tooltip');\n }\n //logic for select with tooltip in after element\n if (element.next().find('.tooltip').length) {\n errorPlacement = element.next();\n }\n errorPlacement.after(error);\n }\n },\n\n /**\n * Check if form pass validation rules without submit.\n *\n * @return boolean\n */\n isValid: function () {\n return this.element.valid();\n },\n\n /**\n * Remove validation error messages\n */\n clearError: function () {\n if (arguments.length) {\n $.each(arguments, $.proxy(function (index, item) {\n this.validate.prepareElement(item);\n this.validate.hideErrors();\n }, this));\n } else {\n this.validate.resetForm();\n }\n },\n\n /**\n * Validation creation.\n *\n * @protected\n */\n _create: function () {\n this.validate = this.element.validate(this.options);\n\n // ARIA (adding aria-required attribute)\n this.element\n .find('.field.required')\n .find('.control')\n .find('input, select, textarea')\n .attr('aria-required', 'true');\n\n this._listenFormValidate();\n },\n\n /**\n * Validation listening.\n *\n * @protected\n */\n _listenFormValidate: function () {\n $('form').on('invalid-form.validate', this.listenFormValidateHandler);\n },\n\n /**\n * Handle form validation. Focus on first invalid form field.\n *\n * @param {jQuery.Event} event\n * @param {Object} validation\n */\n listenFormValidateHandler: function (event, validation) {\n var firstActive = $(validation.errorList[0].element || []),\n lastActive = $(validation.findLastActive() ||\n validation.errorList.length && validation.errorList[0].element || []),\n windowHeight = $(window).height(),\n parent, successList;\n\n if (lastActive.is(':hidden')) {\n parent = lastActive.parent();\n $('html, body').animate({\n scrollTop: parent.offset().top - windowHeight / 2\n });\n }\n\n // ARIA (removing aria attributes if success)\n successList = validation.successList;\n\n if (successList.length) {\n $.each(successList, function () {\n $(this)\n .removeAttr('aria-describedby')\n .removeAttr('aria-invalid');\n });\n }\n\n if (firstActive.length) {\n $('html, body').stop().animate({\n scrollTop: firstActive.parent().offset().top - windowHeight / 2\n });\n firstActive.focus();\n }\n }\n });\n\n return $.mage.validation;\n});\n","mage/collapsible.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'jquery-ui-modules/widget',\n 'jquery-ui-modules/core',\n 'jquery/jquery-storageapi',\n 'mage/mage'\n], function ($) {\n 'use strict';\n\n var hideProps = {},\n showProps = {};\n\n hideProps.height = 'hide';\n showProps.height = 'show';\n\n $.widget('mage.collapsible', {\n options: {\n active: false,\n disabled: false,\n collapsible: true,\n header: '[data-role=title]',\n content: '[data-role=content]',\n trigger: '[data-role=trigger]',\n closedState: null,\n openedState: null,\n disabledState: null,\n ajaxUrlElement: '[data-ajax=true]',\n ajaxContent: false,\n loadingClass: null,\n saveState: false,\n animate: false,\n icons: {\n activeHeader: null,\n header: null\n },\n collateral: {\n element: null,\n openedState: null\n }\n },\n\n /**\n * @private\n */\n _create: function () {\n this.storage = $.localStorage;\n this.icons = false;\n\n if (typeof this.options.icons === 'string') {\n this.options.icons = JSON.parse(this.options.icons);\n }\n\n this._processPanels();\n this._processState();\n this._refresh();\n\n if (this.options.icons.header && this.options.icons.activeHeader) {\n this._createIcons();\n this.icons = true;\n }\n\n this.element.on('dimensionsChanged', function (e) {\n if (e.target && e.target.classList.contains('active')) {\n this._scrollToTopIfNotVisible();\n }\n }.bind(this));\n\n this._bind('click');\n this._trigger('created');\n },\n\n /**\n * @private\n */\n _refresh: function () {\n this.trigger.attr('tabIndex', 0);\n\n if (this.options.active && !this.options.disabled) {\n if (this.options.openedState) {\n this.element.addClass(this.options.openedState);\n }\n\n if (this.options.collateral.element && this.options.collateral.openedState) {\n $(this.options.collateral.element).addClass(this.options.collateral.openedState);\n }\n\n if (this.options.ajaxContent) {\n this._loadContent();\n }\n // ARIA (updates aria attributes)\n this.header.attr({\n 'aria-selected': false\n });\n } else if (this.options.disabled) {\n this.disable();\n } else {\n this.content.hide();\n\n if (this.options.closedState) {\n this.element.addClass(this.options.closedState);\n }\n }\n },\n\n /**\n * Processing the state:\n * If deep linking is used and the anchor is the id of the content or the content contains this id,\n * and the collapsible element is a nested one having collapsible parents, in order to see the content,\n * all the parents must be expanded.\n * @private\n */\n _processState: function () {\n var anchor = window.location.hash,\n isValid = $.mage.isValidSelector(anchor),\n urlPath = window.location.pathname.replace(/\\./g, ''),\n state;\n\n this.stateKey = encodeURIComponent(urlPath + this.element.attr('id'));\n\n if (isValid &&\n ($(this.content.find(anchor)).length > 0 || this.content.attr('id') === anchor.replace('#', ''))\n ) {\n this.element.parents('[data-collapsible=true]').collapsible('forceActivate');\n\n if (!this.options.disabled) {\n this.options.active = true;\n\n if (this.options.saveState) { //eslint-disable-line max-depth\n this.storage.set(this.stateKey, true);\n }\n }\n } else if (this.options.saveState && !this.options.disabled) {\n state = this.storage.get(this.stateKey);\n\n if (typeof state === 'undefined' || state === null) {\n this.storage.set(this.stateKey, this.options.active);\n } else if (state === true) {\n this.options.active = true;\n } else if (state === false) {\n this.options.active = false;\n }\n }\n },\n\n /**\n * @private\n */\n _createIcons: function () {\n var icons = this.options.icons;\n\n if (icons) {\n $('<span>')\n .addClass(icons.header)\n .attr('data-role', 'icons')\n .prependTo(this.header);\n\n if (this.options.active && !this.options.disabled) {\n this.header.children('[data-role=icons]')\n .removeClass(icons.header)\n .addClass(icons.activeHeader);\n }\n }\n },\n\n /**\n * @private\n */\n _destroyIcons: function () {\n this.header\n .children('[data-role=icons]')\n .remove();\n },\n\n /**\n * @private\n */\n _destroy: function () {\n var options = this.options;\n\n this.element.removeAttr('data-collapsible');\n\n this.trigger.removeAttr('tabIndex');\n\n if (options.openedState) {\n this.element.removeClass(options.openedState);\n }\n\n if (this.options.collateral.element && this.options.collateral.openedState) {\n $(this.options.collateral.element).removeClass(this.options.collateral.openedState);\n }\n\n if (options.closedState) {\n this.element.removeClass(options.closedState);\n }\n\n if (options.disabledState) {\n this.element.removeClass(options.disabledState);\n }\n\n if (this.icons) {\n this._destroyIcons();\n }\n },\n\n /**\n * @private\n */\n _processPanels: function () {\n var headers, triggers;\n\n this.element.attr('data-collapsible', 'true');\n\n if (typeof this.options.header === 'object') {\n this.header = this.options.header;\n } else {\n headers = this.element.find(this.options.header);\n\n if (headers.length > 0) {\n this.header = headers.eq(0);\n } else {\n this.header = this.element;\n }\n }\n\n if (typeof this.options.content === 'object') {\n this.content = this.options.content;\n } else {\n this.content = this.header.next(this.options.content).eq(0);\n }\n\n // ARIA (init aria attributes)\n if (this.header.attr('id')) {\n this.content.attr('aria-labelledby', this.header.attr('id'));\n }\n\n if (this.content.attr('id')) {\n this.header.attr('aria-controls', this.content.attr('id'));\n }\n\n this.header\n .attr({\n 'role': 'tab',\n 'aria-selected': this.options.active,\n 'aria-expanded': this.options.active\n });\n\n // For collapsible widget only (not tabs or accordion)\n if (this.header.parent().attr('role') !== 'presentation') {\n this.header\n .parent()\n .attr('role', 'tablist');\n }\n\n this.content.attr({\n 'role': 'tabpanel',\n 'aria-hidden': !this.options.active\n });\n\n if (typeof this.options.trigger === 'object') {\n this.trigger = this.options.trigger;\n } else {\n triggers = this.header.find(this.options.trigger);\n\n if (triggers.length > 0) {\n this.trigger = triggers.eq(0);\n } else {\n this.trigger = this.header;\n }\n }\n },\n\n /**\n * @param {jQuery.Event} event\n * @private\n */\n _keydown: function (event) {\n var keyCode;\n\n if (event.altKey || event.ctrlKey) {\n return;\n }\n\n keyCode = $.ui.keyCode;\n\n switch (event.keyCode) {\n case keyCode.SPACE:\n case keyCode.ENTER:\n this._eventHandler(event);\n break;\n }\n\n },\n\n /**\n * @param {jQuery.Event} event\n * @private\n */\n _bind: function (event) {\n var self = this;\n\n this.events = {\n keydown: '_keydown'\n };\n\n if (event) {\n $.each(event.split(' '), function (index, eventName) {\n self.events[eventName] = '_eventHandler';\n });\n }\n this._off(this.trigger);\n\n if (!this.options.disabled) {\n this._on(this.trigger, this.events);\n }\n },\n\n /**\n * Disable.\n */\n disable: function () {\n this.options.disabled = true;\n this._off(this.trigger);\n this.forceDeactivate();\n\n if (this.options.disabledState) {\n this.element.addClass(this.options.disabledState);\n }\n this.trigger.attr('tabIndex', -1);\n },\n\n /**\n * Enable.\n */\n enable: function () {\n this.options.disabled = false;\n this._on(this.trigger, this.events);\n this.forceActivate();\n\n if (this.options.disabledState) {\n this.element.removeClass(this.options.disabledState);\n }\n this.trigger.attr('tabIndex', 0);\n },\n\n /**\n * @param {jQuery.Event} event\n * @private\n */\n _eventHandler: function (event) {\n\n if (this.options.active && this.options.collapsible) {\n this.deactivate();\n } else {\n this.activate();\n\n }\n event.preventDefault();\n\n },\n\n /**\n * @param {*} prop\n * @private\n */\n _animate: function (prop) {\n var duration,\n easing,\n animate = this.options.animate;\n\n if (typeof animate === 'number') {\n duration = animate;\n }\n\n if (typeof animate === 'string') {\n animate = JSON.parse(animate);\n }\n duration = duration || animate.duration;\n easing = animate.easing;\n this.content.animate(prop, duration, easing);\n },\n\n /**\n * Deactivate.\n */\n deactivate: function () {\n if (this.options.animate) {\n this._animate(hideProps);\n } else {\n this.content.hide();\n }\n this._close();\n },\n\n /**\n * Force deactivate.\n */\n forceDeactivate: function () {\n this.content.hide();\n this._close();\n\n },\n\n /**\n * @private\n */\n _close: function () {\n this.options.active = false;\n\n if (this.options.saveState) {\n this.storage.set(this.stateKey, false);\n }\n\n if (this.options.openedState) {\n this.element.removeClass(this.options.openedState);\n }\n\n if (this.options.collateral.element && this.options.collateral.openedState) {\n $(this.options.collateral.element).removeClass(this.options.collateral.openedState);\n }\n\n if (this.options.closedState) {\n this.element.addClass(this.options.closedState);\n }\n\n if (this.icons) {\n this.header.children('[data-role=icons]')\n .removeClass(this.options.icons.activeHeader)\n .addClass(this.options.icons.header);\n }\n\n // ARIA (updates aria attributes)\n this.header.attr({\n 'aria-selected': 'false',\n 'aria-expanded': 'false'\n });\n this.content.attr({\n 'aria-hidden': 'true'\n });\n\n this.element.trigger('dimensionsChanged', {\n opened: false\n });\n },\n\n /**\n * Activate.\n *\n * @return void;\n */\n activate: function () {\n if (this.options.disabled) {\n return;\n }\n\n if (this.options.animate) {\n this._animate(showProps);\n } else {\n this.content.show();\n }\n this._open();\n },\n\n /**\n * Force activate.\n */\n forceActivate: function () {\n if (!this.options.disabled) {\n this.content.show();\n this._open();\n }\n },\n\n /**\n * @private\n */\n _open: function () {\n this.element.trigger('beforeOpen');\n this.options.active = true;\n\n if (this.options.ajaxContent) {\n this._loadContent();\n }\n\n if (this.options.saveState) {\n this.storage.set(this.stateKey, true);\n }\n\n if (this.options.openedState) {\n this.element.addClass(this.options.openedState);\n }\n\n if (this.options.collateral.element && this.options.collateral.openedState) {\n $(this.options.collateral.element).addClass(this.options.collateral.openedState);\n }\n\n if (this.options.closedState) {\n this.element.removeClass(this.options.closedState);\n }\n\n if (this.icons) {\n this.header.children('[data-role=icons]')\n .removeClass(this.options.icons.header)\n .addClass(this.options.icons.activeHeader);\n }\n\n // ARIA (updates aria attributes)\n this.header.attr({\n 'aria-selected': 'true',\n 'aria-expanded': 'true'\n });\n this.content.attr({\n 'aria-hidden': 'false'\n });\n\n this.element.trigger('dimensionsChanged', {\n opened: true\n });\n },\n\n /**\n * @private\n */\n _loadContent: function () {\n var url = this.element.find(this.options.ajaxUrlElement).attr('href'),\n that = this;\n\n if (url) {\n that.xhr = $.get({\n url: url,\n dataType: 'html'\n }, function () {\n });\n }\n\n if (that.xhr && that.xhr.statusText !== 'canceled') {\n if (that.options.loadingClass) {\n that.element.addClass(that.options.loadingClass);\n }\n that.content.attr('aria-busy', 'true');\n that.xhr.done(function (response) {\n setTimeout(function () {\n that.content.html(response);\n }, 1);\n });\n that.xhr.always(function (jqXHR, status) {\n setTimeout(function () {\n if (status === 'abort') {\n that.content.stop(false, true);\n }\n\n if (that.options.loadingClass) {\n that.element.removeClass(that.options.loadingClass);\n }\n that.content.removeAttr('aria-busy');\n\n if (jqXHR === that.xhr) {\n delete that.xhr;\n }\n }, 1);\n });\n }\n },\n\n /**\n * @private\n */\n _scrollToTopIfNotVisible: function () {\n if (this._isElementOutOfViewport()) {\n this.header[0].scrollIntoView();\n }\n },\n\n /**\n * @private\n * @return {Boolean}\n */\n _isElementOutOfViewport: function () {\n var headerRect = this.header[0].getBoundingClientRect(),\n contentRect = this.content.get().length ? this.content[0].getBoundingClientRect() : false,\n headerOut,\n contentOut;\n\n headerOut = headerRect.bottom - headerRect.height < 0 ||\n headerRect.right - headerRect.width < 0 ||\n headerRect.left + headerRect.width > window.innerWidth ||\n headerRect.top + headerRect.height > window.innerHeight;\n\n contentOut = contentRect ? contentRect.bottom - contentRect.height < 0 ||\n contentRect.right - contentRect.width < 0 ||\n contentRect.left + contentRect.width > window.innerWidth ||\n contentRect.top + contentRect.height > window.innerHeight : false;\n\n return headerOut ? headerOut : contentOut;\n }\n });\n\n return $.mage.collapsible;\n});\n","mage/edit-trigger.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/**\n * @deprecated since version 2.2.0\n */\ndefine([\n 'jquery',\n 'mage/template',\n 'jquery-ui-modules/widget'\n], function ($, mageTemplate) {\n 'use strict';\n\n var editTriggerPrototype;\n\n $.widget('mage.editTrigger', {\n options: {\n img: '',\n alt: '[TR]',\n template: '#translate-inline-icon',\n zIndex: 2000,\n editSelector: '[data-translate]',\n delay: 2000,\n offsetTop: -3,\n singleElement: true\n },\n\n /**\n * editTriger creation\n * @protected\n */\n _create: function () {\n this.tmpl = mageTemplate(this.options.template);\n this._initTrigger();\n this._bind();\n },\n\n /**\n * @return {Object}\n * @private\n */\n _getCss: function () {\n return {\n position: 'absolute',\n cursor: 'pointer',\n display: 'none',\n 'z-index': this.options.zIndex\n };\n },\n\n /**\n * @param {*} appendTo\n * @return {*|jQuery}\n * @private\n */\n _createTrigger: function (appendTo) {\n var tmpl = this.tmpl({\n data: this.options\n });\n\n return $(tmpl)\n .css(this._getCss())\n .data('role', 'edit-trigger-element')\n .appendTo(appendTo);\n },\n\n /**\n * @private\n */\n _initTrigger: function () {\n this.trigger = this._createTrigger($('body'));\n },\n\n /**\n * Bind on mousemove event\n * @protected\n */\n _bind: function () {\n this.trigger.on('click.' + this.widgetName, $.proxy(this._onClick, this));\n this.element.on('mousemove.' + this.widgetName, $.proxy(this._onMouseMove, this));\n },\n\n /**\n * Show editTriger\n */\n show: function () {\n if (this.trigger.is(':hidden')) {\n this.trigger.show();\n }\n },\n\n /**\n * Hide editTriger\n */\n hide: function () {\n this.currentTarget = null;\n\n if (this.trigger && this.trigger.is(':visible')) {\n this.trigger.hide();\n }\n },\n\n /**\n * Set editTriger position\n * @protected\n */\n _setPosition: function (el) {\n var offset = el.offset();\n\n this.trigger.css({\n top: offset.top + el.outerHeight() + this.options.offsetTop,\n left: offset.left\n });\n },\n\n /**\n * Show/hide trigger on mouse move.\n *\n * @param {jQuery.Event} e\n * @protected\n */\n _onMouseMove: function (e) {\n var target = $(e.target),\n inner = target.find(this.options.editSelector);\n\n if ($(e.target).is('button') && inner.length) {\n target = inner;\n } else if (!target.is(this.trigger) && !target.is(this.options.editSelector)) {\n target = target.parents(this.options.editSelector).first();\n }\n\n if (target.length) {\n if (!target.is(this.trigger)) {\n this._setPosition(target);\n this.currentTarget = target;\n }\n this.show();\n } else {\n this.hide();\n }\n },\n\n /**\n * Trigger event \"edit\" on element for translate.\n *\n * @param {jQuery.Event} e\n * @protected\n */\n _onClick: function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n $(this.currentTarget).trigger('edit.' + this.widgetName);\n this.hide(true);\n },\n\n /**\n * Destroy editTriger\n */\n destroy: function () {\n this.trigger.remove();\n this.element.off('.' + this.widgetName);\n\n return $.Widget.prototype.destroy.call(this);\n }\n });\n\n /**\n * Extention for widget editTrigger - hide trigger with delay\n */\n editTriggerPrototype = $.mage.editTrigger.prototype;\n\n $.widget('mage.editTrigger', $.extend({}, editTriggerPrototype, {\n /**\n * Added clear timeout on trigger show\n */\n show: function () {\n editTriggerPrototype.show.apply(this, arguments);\n\n if (this.options.delay) {\n this._clearTimer();\n }\n },\n\n /**\n * Added setTimeout on trigger hide\n */\n hide: function (immediate) {\n if (!immediate && this.options.delay) {\n if (!this.timer) {\n this.timer = setTimeout($.proxy(function () {\n editTriggerPrototype.hide.apply(this, arguments);\n this._clearTimer();\n }, this), this.options.delay);\n }\n } else {\n editTriggerPrototype.hide.apply(this, arguments);\n }\n },\n\n /**\n * Clear timer\n * @protected\n */\n _clearTimer: function () {\n if (this.timer) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n }));\n\n return $.mage.editTrigger;\n});\n","mage/url.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\n/* eslint-disable strict */\ndefine([], function () {\n var baseUrl = '';\n\n return {\n /**\n * @param {String} url\n */\n setBaseUrl: function (url) {\n baseUrl = url;\n },\n\n /**\n * @param {String} path\n * @return {*}\n */\n build: function (path) {\n if (path.indexOf(baseUrl) !== -1) {\n return path;\n }\n\n return baseUrl + path;\n }\n };\n});\n","mage/translate-inline.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'mage/template',\n 'mage/utils/misc',\n 'mage/translate',\n 'jquery-ui-modules/dialog'\n], function ($, mageTemplate, miscUtils) {\n 'use strict';\n\n $.widget('mage.translateInline', $.ui.dialog, {\n options: {\n translateForm: {\n template: '#translate-form-template',\n data: {\n id: 'translate-inline-form',\n message: 'Please refresh the page to see your changes after submitting this form. ' +\n 'Note: browser cache refresh may be required'\n }\n },\n autoOpen: false,\n translateArea: null,\n modal: true,\n dialogClass: 'popup-window window-translate-inline',\n width: '75%',\n title: $.mage.__('Translate'),\n height: 470,\n position: {\n my: 'left top',\n at: 'center top',\n of: 'body'\n },\n buttons: [{\n text: $.mage.__('Submit'),\n 'class': 'action-primary',\n\n /**\n * Click\n */\n click: function () {\n $(this).translateInline('submit');\n }\n },\n {\n text: $.mage.__('Close'),\n 'class': 'action-close',\n\n /**\n * Click.\n */\n click: function () {\n $(this).translateInline('close');\n }\n }],\n\n /**\n * Open.\n */\n open: function () {\n var $uiDialog = $(this).closest('.ui-dialog'),\n topMargin = $uiDialog.children('.ui-dialog-titlebar').outerHeight() + 45;\n\n $uiDialog\n .addClass('ui-dialog-active')\n .css('margin-top', topMargin);\n },\n\n /**\n * Close.\n */\n close: function () {\n $(this).closest('.ui-dialog').removeClass('ui-dialog-active');\n }\n },\n\n /**\n * Translate Inline creation\n * @protected\n */\n _create: function () {\n var $translateArea = $(this.options.translateArea);\n\n if (!$translateArea.length) {\n $translateArea = $('body');\n }\n $translateArea.on('edit.editTrigger', $.proxy(this._onEdit, this));\n\n this.tmpl = mageTemplate(this.options.translateForm.template);\n\n this._super();\n },\n\n /**\n * @param {*} templateData\n * @return {*|jQuery|HTMLElement}\n * @private\n */\n _prepareContent: function (templateData) {\n var data = $.extend({\n items: templateData,\n escape: miscUtils.escape\n }, this.options.translateForm.data);\n\n this.data = data;\n\n return $(this.tmpl({\n data: data\n }));\n },\n\n /**\n * Render translation form and open dialog\n * @param {Object} e - object\n * @protected\n */\n _onEdit: function (e) {\n this.target = e.target;\n this.element.html(this._prepareContent($(e.target).data('translate')));\n this.open(e);\n },\n\n /**\n * Submit.\n */\n submit: function () {\n if (this.formIsSubmitted) {\n return;\n }\n this._formSubmit();\n },\n\n /**\n * Send ajax request on form submit\n * @protected\n */\n _formSubmit: function () {\n var parameters = $.param({\n area: this.options.area\n }) + '&' + $('#' + this.options.translateForm.data.id).serialize();\n\n this.formIsSubmitted = true;\n\n $.ajax({\n url: this.options.ajaxUrl,\n type: 'POST',\n data: parameters,\n loaderContext: this.element,\n showLoader: true\n }).always($.proxy(this._formSubmitComplete, this));\n },\n\n /**\n * @param {Object} response\n * @private\n */\n _formSubmitComplete: function (response) {\n var responseJSON = response.responseJSON || response;\n\n this.close();\n this.formIsSubmitted = false;\n $.mage.translate.add(responseJSON);\n this._updatePlaceholder(responseJSON[this.data.items[0].original]);\n },\n\n /**\n * @param {*} newValue\n * @private\n */\n _updatePlaceholder: function (newValue) {\n var $target = $(this.target),\n translateObject = $target.data('translate')[0];\n\n translateObject.shown = newValue;\n translateObject.translated = newValue;\n $.mage.translate.add(this.data.items[0].original, newValue);\n\n $target.html(newValue);\n },\n\n /**\n * Destroy translateInline\n */\n destroy: function () {\n this.element.off('.editTrigger');\n this._super();\n }\n });\n\n return $.mage.translateInline;\n});\n","mage/mage.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'mage/apply/main'\n], function ($, mage) {\n 'use strict';\n\n /**\n * Main namespace for Magento extensions\n * @type {Object}\n */\n $.mage = $.mage || {};\n\n /**\n * Plugin mage, initialize components on elements\n * @param {String} name - Components' path.\n * @param {Object} config - Components' config.\n * @returns {JQuery} Chainable.\n */\n $.fn.mage = function (name, config) {\n config = config || {};\n\n this.each(function (index, el) {\n mage.applyFor(el, config, name);\n });\n\n return this;\n };\n\n $.extend($.mage, {\n /**\n * Handle all components declared via data attribute\n * @return {Object} $.mage\n */\n init: function () {\n mage.apply();\n\n return this;\n },\n\n /**\n * Method handling redirects and page refresh\n * @param {String} url - redirect URL\n * @param {(undefined|String)} type - 'assign', 'reload', 'replace'\n * @param {(undefined|Number)} timeout - timeout in milliseconds before processing the redirect or reload\n * @param {(undefined|Boolean)} forced - true|false used for 'reload' only\n */\n redirect: function (url, type, timeout, forced) {\n var _redirect;\n\n forced = !!forced;\n timeout = timeout || 0;\n type = type || 'assign';\n\n /**\n * @private\n */\n _redirect = function () {\n window.location[type](type === 'reload' ? forced : url);\n };\n\n timeout ? setTimeout(_redirect, timeout) : _redirect();\n },\n\n /**\n * Checks if provided string is a valid selector.\n * @param {String} selector - Selector to check.\n * @returns {Boolean}\n */\n isValidSelector: function (selector) {\n try {\n document.querySelector(selector);\n\n return true;\n } catch (e) {\n return false;\n }\n }\n });\n\n /**\n * Init components inside of dynamically updated elements\n */\n $(document).on('contentUpdated', 'body', function () {\n if (mage) {\n mage.apply();\n }\n });\n\n return $.mage;\n});\n","mage/touch-slider.js":"/**\n * Copyright \u00a9 Magento, Inc. All rights reserved.\n * See COPYING.txt for license details.\n */\n\ndefine([\n 'jquery',\n 'underscore',\n 'jquery-ui-modules/slider'\n], function ($, _) {\n 'use strict';\n\n /**\n * Adds support for touch events for regular jQuery UI slider.\n */\n $.widget('mage.touchSlider', $.ui.slider, {\n\n /**\n * Creates instance of widget.\n *\n * @override\n */\n _create: function () {\n _.bindAll(\n this,\n '_mouseDown',\n '_mouseMove',\n '_onTouchEnd'\n );\n\n return this._superApply(arguments);\n },\n\n /**\n * Initializes mouse events on element.\n * @override\n */\n _mouseInit: function () {\n var result = this._superApply(arguments);\n\n this.element\n .off('mousedown.' + this.widgetName)\n .on('touchstart.' + this.widgetName, this._mouseDown);\n\n return result;\n },\n\n /**\n * Elements' 'mousedown' event handler polyfill.\n * @override\n */\n _mouseDown: function (event) {\n var prevDelegate = this._mouseMoveDelegate,\n result;\n\n event = this._touchToMouse(event);\n result = this._super(event);\n\n if (prevDelegate === this._mouseMoveDelegate) {\n return result;\n }\n\n $(document)\n .off('mousemove.' + this.widgetName)\n .off('mouseup.' + this.widgetName);\n\n $(document)\n .on('touchmove.' + this.widgetName, this._mouseMove)\n .on('touchend.' + this.widgetName, this._onTouchEnd)\n .on('tochleave.' + this.widgetName, this._onTouchEnd);\n\n return result;\n },\n\n /**\n * Documents' 'mousemove' event handler polyfill.\n *\n * @override\n * @param {Event} event - Touch event object.\n */\n _mouseMove: function (event) {\n event = this._touchToMouse(event);\n\n return this._super(event);\n },\n\n /**\n * Documents' 'touchend' event handler.\n */\n _onTouchEnd: function (event) {\n $(document).trigger('mouseup');\n\n return this._mouseUp(event);\n },\n\n /**\n * Removes previously assigned touch handlers.\n *\n * @override\n */\n _mouseUp: function () {\n this._removeTouchHandlers();\n\n return this._superApply(arguments);\n },\n\n /**\n * Removes previously assigned touch handlers.\n *\n * @override\n */\n _mouseDestroy: function () {\n this._removeTouchHandlers();\n\n return this._superApply(arguments);\n },\n\n /**\n * Removes touch events from document object.\n */\n _removeTouchHandlers: function () {\n $(document)\n .off('touchmove.' + this.widgetName)\n .off('touchend.' + this.widgetName)\n .off('touchleave.' + this.widgetName);\n },\n\n /**\n * Adds properties to the touch event to mimic mouse event.\n *\n * @param {Event} event - Touch event object.\n * @returns {Event}\n */\n _touchToMouse: function (event) {\n var orig = event.originalEvent,\n touch = orig.touches[0];\n\n return _.extend(event, {\n which: 1,\n pageX: touch.pageX,\n pageY: touch.pageY,\n clientX: touch.clientX,\n clientY: touch.clientY,\n screenX: touch.screenX,\n screenY: touch.screenY\n });\n }\n });\n\n return $.mage.touchSlider;\n});\n"} }});