sdc_client 0.58.6 → 0.158.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/node.js.yml +2 -2
- package/.idea/inspectionProfiles/Project_Default.xml +17 -0
- package/.idea/workspace.xml +122 -23
- package/.readthedocs.yaml +13 -0
- package/dist/index.js +70 -51
- package/dist/ugly.index.js +1 -1
- package/docs/api-reference.rst +225 -0
- package/docs/conf.py +11 -0
- package/docs/controllers.rst +228 -0
- package/docs/events-and-dom.rst +120 -0
- package/docs/getting-started.rst +143 -0
- package/docs/index.rst +22 -0
- package/docs/models.rst +351 -0
- package/docs/overview.rst +66 -0
- package/docs/requirements.txt +1 -0
- package/eslint.config.js +60 -0
- package/gulp/gulp.jsx +15 -13
- package/package.json +13 -3
- package/src/index.js +44 -11
- package/src/simpleDomControl/AbstractSDC.js +287 -286
- package/src/simpleDomControl/sdc_controller.js +157 -132
- package/src/simpleDomControl/sdc_dom_events.js +99 -88
- package/src/simpleDomControl/sdc_events.js +39 -40
- package/src/simpleDomControl/sdc_main.js +88 -67
- package/src/simpleDomControl/sdc_model.js +1513 -0
- package/src/simpleDomControl/sdc_params.js +44 -29
- package/src/simpleDomControl/sdc_server_call.js +153 -154
- package/src/simpleDomControl/sdc_socket.js +8 -829
- package/src/simpleDomControl/sdc_test_utils.js +77 -80
- package/src/simpleDomControl/sdc_utils.js +295 -176
- package/src/simpleDomControl/sdc_view.js +245 -177
- package/test/model.test.js +332 -0
- package/test/models/Author.js +145 -0
- package/test/models/Book.js +112 -0
- package/test/models/BookContent.js +114 -0
- package/test/models/SdcUser.js +75 -0
- package/test/models/src.js +8 -0
- package/test/sdc_model_dates.ai.test.js +57 -0
- package/test/sdc_server_call.ai.test.js +267 -0
package/dist/index.js
CHANGED
|
@@ -8,125 +8,135 @@
|
|
|
8
8
|
*/
|
|
9
9
|
/******/ var __webpack_modules__ = ({
|
|
10
10
|
|
|
11
|
-
/***/ "./src/index.js"
|
|
11
|
+
/***/ "./src/index.js"
|
|
12
12
|
/*!**********************!*\
|
|
13
13
|
!*** ./src/index.js ***!
|
|
14
14
|
\**********************/
|
|
15
|
-
|
|
15
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
16
16
|
|
|
17
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ allOff: () => (/* reexport safe */
|
|
17
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* reexport safe */ _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__.AbstractSDC),\n/* harmony export */ SdcModel: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ SdcQuerySet: () => (/* reexport safe */ _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet),\n/* harmony export */ allOff: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.allOff),\n/* harmony export */ app: () => (/* reexport safe */ _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.on),\n/* harmony export */ registerModel: () => (/* reexport safe */ _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__.registerModel),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.setEvent),\n/* harmony export */ socketReconnect: () => (/* binding */ socketReconnect),\n/* harmony export */ test_utils: () => (/* binding */ test_utils),\n/* harmony export */ trigger: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__.trigger)\n/* harmony export */ });\n/* harmony import */ var _simpleDomControl_sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./simpleDomControl/sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _simpleDomControl_AbstractSDC_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./simpleDomControl/AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _simpleDomControl_sdc_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_model.js */ \"./src/simpleDomControl/sdc_model.js\");\n/* harmony import */ var _simpleDomControl_sdc_socket_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./simpleDomControl/sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_7__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.getCsrfToken,\n controllerFromTestHtml: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_8__.controllerFromTestHtml\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFtRDtBQUNXO0FBQ1E7QUFDUDtBQU1yQjtBQU1EO0FBSUs7QUFDYztBQUtkO0FBRTlDLE1BQU1rQixlQUFlLEdBQUdKLHVFQUFLO0FBQzdCLE1BQU1LLFVBQVUsR0FBRztFQUFDSixjQUFjO0VBQUVDLFlBQVk7RUFBRUMsc0JBQXNCQSx5RkFBQUE7QUFBQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tIFwiLi9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge0Fic3RyYWN0U0RDfSBmcm9tIFwiLi9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzXCI7XG5pbXBvcnQgU2RjTW9kZWwsIHtTZGNRdWVyeVNldH0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfbW9kZWwuanNcIjtcbmltcG9ydCB7cmVnaXN0ZXJNb2RlbH0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzXCI7XG5pbXBvcnQge1xuICBvbixcbiAgdHJpZ2dlcixcbiAgYWxsT2ZmLFxuICBzZXRFdmVudCxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzXCI7XG5cbmltcG9ydCB7XG4gIGNsZWFyRXJyb3JzSW5Gb3JtLFxuICBzZXRFcnJvcnNJbkZvcm0sXG4gIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIGNvbnRyb2xsZXJGYWN0b3J5LFxuICBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyxcbn0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtjbG9zZX0gZnJvbSBcIi4vc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanNcIjtcbmltcG9ydCB7XG4gIGdldF9jb250cm9sbGVyLFxuICBnZXRDc3JmVG9rZW4sXG4gIGNvbnRyb2xsZXJGcm9tVGVzdEh0bWwsXG59IGZyb20gXCIuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanNcIjtcblxuY29uc3Qgc29ja2V0UmVjb25uZWN0ID0gY2xvc2U7XG5jb25zdCB0ZXN0X3V0aWxzID0ge2dldF9jb250cm9sbGVyLCBnZXRDc3JmVG9rZW4sIGNvbnRyb2xsZXJGcm9tVGVzdEh0bWx9O1xuXG5leHBvcnQge1xuICBhcHAsXG4gIEFic3RyYWN0U0RDLFxuICBvbixcbiAgdHJpZ2dlcixcbiAgYWxsT2ZmLFxuICBzZXRFdmVudCxcbiAgY2xlYXJFcnJvcnNJbkZvcm0sXG4gIHNldEVycm9yc0luRm9ybSxcbiAgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxuICBjb250cm9sbGVyRmFjdG9yeSxcbiAgcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMsXG4gIHNvY2tldFJlY29ubmVjdCxcbiAgdGVzdF91dGlscyxcbiAgU2RjTW9kZWwsXG4gIFNkY1F1ZXJ5U2V0LFxuICByZWdpc3Rlck1vZGVsXG59O1xuIl0sIm5hbWVzIjpbImFwcCIsIkFic3RyYWN0U0RDIiwiU2RjTW9kZWwiLCJTZGNRdWVyeVNldCIsInJlZ2lzdGVyTW9kZWwiLCJvbiIsInRyaWdnZXIiLCJhbGxPZmYiLCJzZXRFdmVudCIsImNsZWFyRXJyb3JzSW5Gb3JtIiwic2V0RXJyb3JzSW5Gb3JtIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiY29udHJvbGxlckZhY3RvcnkiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsImNsb3NlIiwiZ2V0X2NvbnRyb2xsZXIiLCJnZXRDc3JmVG9rZW4iLCJjb250cm9sbGVyRnJvbVRlc3RIdG1sIiwic29ja2V0UmVjb25uZWN0IiwidGVzdF91dGlscyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n\n}");
|
|
18
18
|
|
|
19
|
-
/***/ }
|
|
19
|
+
/***/ },
|
|
20
20
|
|
|
21
|
-
/***/ "./src/simpleDomControl/AbstractSDC.js"
|
|
21
|
+
/***/ "./src/simpleDomControl/AbstractSDC.js"
|
|
22
22
|
/*!*********************************************!*\
|
|
23
23
|
!*** ./src/simpleDomControl/AbstractSDC.js ***!
|
|
24
24
|
\*********************************************/
|
|
25
|
-
|
|
25
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
26
26
|
|
|
27
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = '';\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn('afterShow is deprecated!!');\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = Object.getPrototypeOf(this)._tagName ?? '';\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === 'function') {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.DEBUG(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle('onLoad', arguments);\n }\n willShow() {\n return this._runLifecycle('willShow', arguments);\n }\n onRefresh() {\n return this._runLifecycle('onRefresh', arguments);\n }\n onRemove() {\n this._runLifecycle('onRemove', arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error('To use the serverCall function the contentUrl must be set: ' + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param model_name {string | Number}\n * @param model_query {Object}\n * @constructor\n */\n newModel(model_name, model_query = {}) {\n if (model_name instanceof Number && model_name.hasOwnProperty('load')) {\n return model_name.load(this);\n }\n if (model_name instanceof _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model) {\n return model_name;\n }\n const model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n this._models.push(model);\n return model;\n }\n\n /**\n *\n * @param model_name {string}\n * @param model_query {Object}\n * @param values {Object}\n * @constructor\n */\n updateModel(model_name, model_query = {}, values) {\n let model = new _sdc_socket_js__WEBPACK_IMPORTED_MODULE_2__.Model(model_name, model_query);\n return model.load().then(() => {\n model.values |= values;\n model.save().then(() => {\n model.close();\n return model.values;\n });\n });\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === 'function') {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === 'function') {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n let p_list = [];\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let {\n model,\n form_name\n } = $form.data();\n const values = model.syncForm($form);\n for (let instance_value of values) {\n p_list.push(new Promise((resolve, reject) => {\n let prom;\n if (instance_value.pk !== null && instance_value.pk >= 0) {\n prom = model.save(instance_value.pk, form_name);\n } else {\n prom = model.create(instance_value);\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n this.reconcile($(`<div class=\"container-fluid\">${data.html}</div>`), $form.find('.container-fluid').first());\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n }));\n }\n }\n return Promise.all(p_list).then(res => {\n return Object.assign({}, ...res.flat());\n });\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBdUM7QUFDTDtBQUNJO0FBQ1U7QUFDcUU7QUFFOUcsTUFBTVMsV0FBVyxDQUFDO0VBQ3JCQyxXQUFXQSxDQUFBLEVBQUc7SUFDVixJQUFJLENBQUNDLEtBQUssR0FBR1AscURBQU0sQ0FBQyxDQUFDO0lBQ3JCLElBQUksQ0FBQ1EsVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDQyxhQUFhLEdBQUcsS0FBSztJQUMxQixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUk7SUFDNUIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsRUFBRTtJQUNoQixJQUFJLENBQUNDLFVBQVUsR0FBRyxLQUFLO0lBQ3ZCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLEtBQUs7SUFDekIsSUFBSSxDQUFDQyxVQUFVLEdBQUcsSUFBSTtJQUV0QixJQUFJLENBQUNDLFVBQVUsR0FBRyxFQUFFO0lBQ3BCLElBQUksQ0FBQ0MsT0FBTyxHQUFHLEVBQUU7O0lBRWpCO0lBQ0EsSUFBSSxDQUFDQyxRQUFRLEdBQUcsRUFBRTtJQUNsQixJQUFJLENBQUNDLFNBQVMsR0FBRyxNQUFNO01BQ25CQyxPQUFPLENBQUNDLElBQUksQ0FBQywyQkFBMkIsQ0FBQztJQUM3QyxDQUFDO0lBQ0Q7O0lBR0E7QUFDUjtBQUNBO0FBQ0E7SUFDUSxJQUFJLENBQUNDLE9BQU8sR0FBRyxDQUFDLENBQUM7O0lBRWpCO0FBQ1I7QUFDQTtJQUNRLElBQUksQ0FBQ0MsUUFBUSxHQUFHQyxNQUFNLENBQUNDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQ0YsUUFBUSxJQUFJLEVBQUU7O0lBRTFEO0FBQ1I7QUFDQTtJQUNRLElBQUksQ0FBQ0csZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDOztJQUUxQjtBQUNSO0FBQ0E7SUFDUSxJQUFJLENBQUNDLGlCQUFpQixHQUFHLElBQUk7O0lBRTdCO0FBQ1I7QUFDQTtJQUNRLElBQUksQ0FBQ0MsV0FBVyxHQUFHLEtBQUs7O0lBRXhCO0FBQ1I7QUFDQTtJQUNRLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUk7O0lBRXRCO0FBQ1I7QUFDQTtBQUNBO0lBQ1EsSUFBSSxDQUFDQyxRQUFRLEdBQUcsS0FBSztFQUN6Qjs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSUMsYUFBYUEsQ0FBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUU7SUFDeEIsSUFBSW5DLDZDQUFHLENBQUNvQyxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUNKLFFBQVEsRUFBRTtNQUM3QlYsT0FBTyxDQUFDZSxLQUFLLENBQUNILE1BQU0sRUFBRSxJQUFJLENBQUNULFFBQVEsQ0FBQztJQUN4QztJQUVBLElBQUlhLGVBQWUsR0FBRyxFQUFFO0lBQ3hCLElBQUksSUFBSSxDQUFDTixRQUFRLEVBQUU7TUFDZjtJQUNKO0lBQ0EsSUFBSSxDQUFDQSxRQUFRLEdBQUcsSUFBSTtJQUNwQixLQUFLLElBQUlPLFFBQVEsSUFBSSxJQUFJLENBQUNmLE9BQU8sRUFBRTtNQUMvQixJQUFJZ0IsS0FBSyxHQUFHLElBQUksQ0FBQ2hCLE9BQU8sQ0FBQ2UsUUFBUSxDQUFDO01BQ2xDLElBQUksT0FBT0MsS0FBSyxDQUFDTixNQUFNLENBQUMsS0FBSyxVQUFVLEVBQUU7UUFFckNJLGVBQWUsQ0FBQ0csSUFBSSxDQUFDRCxLQUFLLENBQUNOLE1BQU0sQ0FBQyxDQUFDUSxLQUFLLENBQUMsSUFBSSxFQUFFUCxJQUFJLENBQUMsQ0FBQztNQUN6RDtJQUNKO0lBRUEsT0FBT1EsT0FBTyxDQUFDQyxHQUFHLENBQUNOLGVBQWUsQ0FBQyxDQUFDTyxJQUFJLENBQUMsTUFBTTtNQUMzQyxJQUFJLENBQUNiLFFBQVEsR0FBRyxLQUFLO0lBQ3pCLENBQUMsQ0FBQztFQUNOO0VBRUFjLE1BQU1BLENBQUEsRUFBRztJQUNMLElBQUk5Qyw2Q0FBRyxDQUFDb0MsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDSixRQUFRLEVBQUU7TUFDN0JWLE9BQU8sQ0FBQ2MsS0FBSyxDQUFDVyxLQUFLLENBQUNMLEtBQUssQ0FBQyxJQUFJLEVBQUVNLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQ3ZCLFFBQVEsQ0FBQztJQUM5RDtFQUNKO0VBRUEsSUFBSXdCLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ25CLE9BQU8sSUFBSSxDQUFDcEIsaUJBQWlCO0VBQ2pDO0VBRUEsSUFBSXFCLGVBQWVBLENBQUEsRUFBRztJQUNsQixPQUFPLElBQUksQ0FBQ3RCLGdCQUFnQjtFQUNoQztFQUVBdUIsTUFBTUEsQ0FBQSxFQUFHO0lBQ0wsT0FBTyxJQUFJLENBQUNsQixhQUFhLENBQUMsUUFBUSxFQUFFZSxTQUFTLENBQUM7RUFDbEQ7RUFFQUksUUFBUUEsQ0FBQSxFQUFHO0lBQ1AsT0FBTyxJQUFJLENBQUNuQixhQUFhLENBQUMsVUFBVSxFQUFFZSxTQUFTLENBQUM7RUFDcEQ7RUFFQUssU0FBU0EsQ0FBQSxFQUFHO0lBQ1IsT0FBTyxJQUFJLENBQUNwQixhQUFhLENBQUMsV0FBVyxFQUFFZSxTQUFTLENBQUM7RUFDckQ7RUFFQU0sUUFBUUEsQ0FBQSxFQUFHO0lBQ1AsSUFBSSxDQUFDckIsYUFBYSxDQUFDLFVBQVUsRUFBRWUsU0FBUyxDQUFDO0lBQ3pDLE9BQU8sSUFBSTtFQUNmO0VBRUFPLG1CQUFtQkEsQ0FBQSxFQUFJO0lBQ25CLE9BQU9aLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQ3FDLEdBQUcsQ0FBQ0MsQ0FBQyxJQUFJQSxDQUFDLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUNqRTtFQUVBQyxNQUFNQSxDQUFBLEVBQUc7SUFDTCxLQUFLLE1BQU1DLEtBQUssSUFBSSxJQUFJLENBQUN6QyxPQUFPLEVBQUU7TUFDOUJ5QyxLQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO0lBQ2pCO0lBQ0EsSUFBSWpDLGdCQUFnQixHQUFHLElBQUksQ0FBQ0EsZ0JBQWdCO0lBQzVDLEtBQUssSUFBSWtDLENBQUMsSUFBSWxDLGdCQUFnQixFQUFFO01BQzVCLElBQUlBLGdCQUFnQixDQUFDbUMsY0FBYyxDQUFDRCxDQUFDLENBQUMsRUFBRTtRQUNwQyxLQUFLLElBQUlFLEVBQUUsSUFBSXBDLGdCQUFnQixDQUFDa0MsQ0FBQyxDQUFDLEVBQUU7VUFDaEMsSUFBSSxDQUFDRSxFQUFFLENBQUNMLE1BQU0sQ0FBQyxDQUFDLEVBQUU7WUFDZCxPQUFPLEtBQUs7VUFDaEI7UUFDSjtNQUNKO0lBQ0o7SUFFQSxJQUFJLENBQUMsSUFBSSxDQUFDTCxRQUFRLElBQUksSUFBSSxDQUFDQSxRQUFRLENBQUMsQ0FBQyxFQUFFO01BQ25DdkQsc0RBQU0sQ0FBQyxJQUFJLENBQUM7TUFDWixNQUFNa0UsTUFBTSxHQUFHM0QsaUVBQWtCLENBQUMsSUFBSSxDQUFDbUIsUUFBUSxDQUFDO01BQ2hELElBQUksSUFBSSxDQUFDSSxpQkFBaUIsQ0FBQ0QsZ0JBQWdCLENBQUNxQyxNQUFNLENBQUMsRUFBRTtRQUNqRCxJQUFJQyxHQUFHLEdBQUcsSUFBSSxDQUFDckMsaUJBQWlCLENBQUNELGdCQUFnQixDQUFDcUMsTUFBTSxDQUFDO1FBQ3pELEtBQUssSUFBSUgsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHSSxHQUFHLENBQUNDLE1BQU0sRUFBRUwsQ0FBQyxFQUFFLEVBQUU7VUFDakMsSUFBSUksR0FBRyxDQUFDSixDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDakJJLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDTixDQUFDLEVBQUUsQ0FBQyxDQUFDO1VBQ3BCO1FBQ0o7TUFDSjtNQUVBLElBQUksQ0FBQy9CLFVBQVUsQ0FBQzRCLE1BQU0sQ0FBQyxDQUFDO01BQ3hCLE9BQU8sSUFBSTtNQUNYLE9BQU8sSUFBSTtJQUNmO0lBRUEsT0FBTyxLQUFLO0VBQ2hCO0VBRUFVLGVBQWVBLENBQUEsRUFBRztJQUNkLE9BQU85RCxvRUFBcUIsQ0FBQyxJQUFJLENBQUNrQixRQUFRLENBQUM7RUFDL0M7RUFFQTZDLFFBQVFBLENBQUNDLEtBQUssRUFBRUMsUUFBUSxFQUFFQyxPQUFPLEVBQUU7SUFDL0IsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQztJQUNoQixJQUFJLENBQUN6RCxVQUFVLENBQUNzRCxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUN0RCxVQUFVLENBQUNzRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDdEQsVUFBVSxDQUFDc0QsS0FBSyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxHQUFHQyxPQUFPO0VBQzlDO0VBRUFDLFNBQVNBLENBQUEsRUFBRztJQUNSLElBQUksSUFBSSxDQUFDekQsVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDQSxVQUFVO0lBQzNDLElBQUkwRCxTQUFTLEdBQUcsRUFBRTtJQUNsQkEsU0FBUyxHQUFHQSxTQUFTLENBQUNDLE1BQU0sQ0FBQyxJQUFJLENBQUM5RCxNQUFNLENBQUM7SUFDekMsS0FBSyxJQUFJeUIsUUFBUSxJQUFJLElBQUksQ0FBQ2YsT0FBTyxFQUFFO01BQy9CLElBQUlnQixLQUFLLEdBQUcsSUFBSSxDQUFDaEIsT0FBTyxDQUFDZSxRQUFRLENBQUM7TUFDbEMsSUFBSVEsS0FBSyxDQUFDOEIsT0FBTyxDQUFDckMsS0FBSyxDQUFDMUIsTUFBTSxDQUFDLEVBQUU7UUFDN0I2RCxTQUFTLEdBQUdBLFNBQVMsQ0FBQ0MsTUFBTSxDQUFDcEMsS0FBSyxDQUFDMUIsTUFBTSxDQUFDO01BQzlDO0lBQ0o7SUFHQSxPQUFRLElBQUksQ0FBQ0csVUFBVSxHQUFHNkQsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBR0osU0FBUyxDQUFDO0VBQ25EO0VBRUFLLElBQUlBLENBQUNDLEdBQUcsRUFBRTlDLElBQUksRUFBRTtJQUNaLE9BQU9uQyw2Q0FBRyxDQUFDZ0YsSUFBSSxDQUFDLElBQUksRUFBRUMsR0FBRyxFQUFFOUMsSUFBSSxDQUFDO0VBQ3BDO0VBRUErQyxHQUFHQSxDQUFDRCxHQUFHLEVBQUU5QyxJQUFJLEVBQUU7SUFDWCxPQUFPbkMsNkNBQUcsQ0FBQ2tGLEdBQUcsQ0FBQyxJQUFJLEVBQUVELEdBQUcsRUFBRTlDLElBQUksQ0FBQztFQUNuQztFQUVBZ0QsVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFSCxHQUFHLEVBQUUvQyxNQUFNLEVBQUU7SUFDMUIsT0FBT2xDLDZDQUFHLENBQUNxRix1QkFBdUIsQ0FBQyxJQUFJLEVBQUVELElBQUksRUFBRUgsR0FBRyxFQUFFL0MsTUFBTSxDQUFDO0VBQy9EO0VBRUFvRCxVQUFVQSxDQUFDQyxPQUFPLEVBQUVwRCxJQUFJLEVBQUU7SUFDdEIsSUFBSXFELEVBQUUsR0FBRyxvQkFBb0I7SUFDN0IsSUFBSXhGLEdBQUcsR0FBRyxJQUFJLENBQUNXLFVBQVUsQ0FBQzhFLEtBQUssQ0FBQ0QsRUFBRSxDQUFDO0lBQ25DLElBQUksQ0FBQ3hGLEdBQUcsSUFBSUEsR0FBRyxDQUFDbUUsTUFBTSxHQUFHLENBQUMsRUFBRTtNQUN4QjdDLE9BQU8sQ0FBQ29FLEtBQUssQ0FBQyw2REFBNkQsR0FBRyxJQUFJLENBQUNDLElBQUksQ0FBQztNQUN4RjtJQUNKO0lBRUEsT0FBT3pGLCtEQUFVLENBQUNGLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUN5QixRQUFRLEVBQUUsSUFBSSxDQUFDWixnQkFBZ0IsSUFBSSxJQUFJLENBQUNGLFVBQVUsRUFBRTRFLE9BQU8sRUFBRXBELElBQUksQ0FBQztFQUNyRzs7RUFFQTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSXlELFFBQVFBLENBQUNDLFVBQVUsRUFBRUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ25DLElBQUdELFVBQVUsWUFBWUUsTUFBTSxJQUFJRixVQUFVLENBQUM5QixjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7TUFDbEUsT0FBTzhCLFVBQVUsQ0FBQ0csSUFBSSxDQUFDLElBQUksQ0FBQztJQUNoQztJQUNBLElBQUlILFVBQVUsWUFBWTVGLGlEQUFLLEVBQUU7TUFDL0IsT0FBTzRGLFVBQVU7SUFDbkI7SUFFQSxNQUFNakMsS0FBSyxHQUFHLElBQUkzRCxpREFBSyxDQUFDNEYsVUFBVSxFQUFFQyxXQUFXLENBQUM7SUFDaEQsSUFBSSxDQUFDM0UsT0FBTyxDQUFDc0IsSUFBSSxDQUFDbUIsS0FBSyxDQUFDO0lBQ3hCLE9BQU9BLEtBQUs7RUFDaEI7O0VBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDSXFDLFdBQVdBLENBQUNKLFVBQVUsRUFBRUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFSSxNQUFNLEVBQUU7SUFDOUMsSUFBSXRDLEtBQUssR0FBRyxJQUFJM0QsaURBQUssQ0FBQzRGLFVBQVUsRUFBRUMsV0FBVyxDQUFDO0lBQzlDLE9BQU9sQyxLQUFLLENBQUNvQyxJQUFJLENBQUMsQ0FBQyxDQUFDbkQsSUFBSSxDQUFDLE1BQUk7TUFDekJlLEtBQUssQ0FBQ3NDLE1BQU0sSUFBSUEsTUFBTTtNQUN0QnRDLEtBQUssQ0FBQ3VDLElBQUksQ0FBQyxDQUFDLENBQUN0RCxJQUFJLENBQUMsTUFBSztRQUNuQmUsS0FBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztRQUNiLE9BQU9ELEtBQUssQ0FBQ3NDLE1BQU07TUFDdkIsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDO0VBQ047O0VBRUE7QUFDSjtBQUNBO0FBQ0E7RUFDSUUsSUFBSUEsQ0FBQ0MsV0FBVyxFQUFFO0lBQ2QsT0FBTyxJQUFJLENBQUN0RSxVQUFVLENBQUNxRSxJQUFJLENBQUNDLFdBQVcsQ0FBQztFQUM1QztFQUVBQyxPQUFPQSxDQUFBLEVBQUc7SUFDTixPQUFPdEcsNkNBQUcsQ0FBQ3NHLE9BQU8sQ0FBQyxJQUFJLENBQUN2RSxVQUFVLEVBQUUsSUFBSSxDQUFDO0VBQzdDO0VBRUF3RSxNQUFNQSxDQUFBLEVBQUc7SUFDTCxPQUFPdkcsNkNBQUcsQ0FBQ3dHLGdCQUFnQixDQUFDLElBQUksQ0FBQztFQUNyQztFQUVBQyxTQUFTQSxDQUFDQyxZQUFZLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDdEMsT0FBTzNHLDZDQUFHLENBQUN5RyxTQUFTLENBQUMsSUFBSSxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsQ0FBQztFQUN2RDtFQUVBQywwQkFBMEJBLENBQUNDLEtBQUssRUFBRUMsQ0FBQyxFQUFFO0lBQ2pDLElBQUksT0FBTyxJQUFJLENBQUNDLGdCQUFnQixLQUFLLFVBQVUsRUFBRTtNQUM3QyxPQUFPLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNGLEtBQUssRUFBRUMsQ0FBQyxDQUFDO0lBQzFDO0lBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQ0UsZUFBZSxLQUFLLFVBQVUsRUFBRTtNQUM1QyxPQUFPLElBQUksQ0FBQ0EsZUFBZSxDQUFDSCxLQUFLLEVBQUVDLENBQUMsQ0FBQztJQUN6QztJQUNBLE9BQU8sSUFBSSxDQUFDRyxzQkFBc0IsQ0FBQ0osS0FBSyxFQUFFQyxDQUFDLENBQUM7RUFDaEQ7RUFFQUksa0JBQWtCQSxDQUFBLEVBQUc7SUFDakIsSUFBSXRGLGdCQUFnQixHQUFHLElBQUksQ0FBQ0EsZ0JBQWdCO0lBQzVDLElBQUl1RixHQUFHLEdBQUcsRUFBRTtJQUNaLEtBQUssSUFBSXJELENBQUMsSUFBSWxDLGdCQUFnQixFQUFFO01BQzVCLElBQUlBLGdCQUFnQixDQUFDbUMsY0FBYyxDQUFDRCxDQUFDLENBQUMsRUFBRTtRQUNwQyxLQUFLLElBQUlFLEVBQUUsSUFBSXBDLGdCQUFnQixDQUFDa0MsQ0FBQyxDQUFDLEVBQUU7VUFDaENxRCxHQUFHLENBQUMxRSxJQUFJLENBQUN1QixFQUFFLENBQUM7VUFDWm1ELEdBQUcsQ0FBQzFFLElBQUksQ0FBQyxHQUFHdUIsRUFBRSxDQUFDa0Qsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ3hDO01BQ0o7SUFDSjtJQUNBLE9BQU9DLEdBQUc7RUFDZDs7RUFFQTtBQUNKO0FBQ0E7RUFDSUYsc0JBQXNCQSxDQUFDSixLQUFLLEVBQUVDLENBQUMsRUFBRTtJQUM3QixJQUFJTSxNQUFNLEdBQUcsRUFBRTtJQUNmLElBQUksQ0FBQyxJQUFJLENBQUNwRixRQUFRLEVBQUU7TUFDaEI4RSxDQUFDLENBQUNPLGVBQWUsQ0FBQyxDQUFDO01BQ25CUCxDQUFDLENBQUNRLGNBQWMsQ0FBQyxDQUFDO01BQ2xCLElBQUk7UUFBQzFELEtBQUs7UUFBRTJEO01BQVMsQ0FBQyxHQUFHVixLQUFLLENBQUNXLElBQUksQ0FBQyxDQUFDO01BQ3JDLE1BQU10QixNQUFNLEdBQUd0QyxLQUFLLENBQUM2RCxRQUFRLENBQUNaLEtBQUssQ0FBQztNQUNwQyxLQUFLLElBQUlhLGNBQWMsSUFBSXhCLE1BQU0sRUFBRTtRQUMvQmtCLE1BQU0sQ0FBQzNFLElBQUksQ0FBQyxJQUFJRSxPQUFPLENBQUMsQ0FBQ2dGLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQ3pDLElBQUlDLElBQUk7VUFDUixJQUFJSCxjQUFjLENBQUNJLEVBQUUsS0FBSyxJQUFJLElBQUlKLGNBQWMsQ0FBQ0ksRUFBRSxJQUFJLENBQUMsRUFBRTtZQUN0REQsSUFBSSxHQUFHakUsS0FBSyxDQUFDdUMsSUFBSSxDQUFDdUIsY0FBYyxDQUFDSSxFQUFFLEVBQUVQLFNBQVMsQ0FBQztVQUNuRCxDQUFDLE1BQU07WUFDSE0sSUFBSSxHQUFHakUsS0FBSyxDQUFDbUUsTUFBTSxDQUFDTCxjQUFjLENBQUM7VUFDdkM7VUFFQUcsSUFBSSxDQUFDaEYsSUFBSSxDQUFFc0UsR0FBRyxJQUFLO1lBQ2Y5RyxnRUFBaUIsQ0FBQ3dHLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUNtQix5QkFBeUIsSUFBSSxJQUFJLENBQUNBLHlCQUF5QixDQUFDYixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEUsS0FBSSxNQUFNYyxVQUFVLElBQUksSUFBSSxDQUFDZixrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7Y0FDL0NlLFVBQVUsQ0FBQ0QseUJBQXlCLElBQUlDLFVBQVUsQ0FBQ0QseUJBQXlCLENBQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RjtZQUNBUSxPQUFPLENBQUNSLEdBQUcsQ0FBQztVQUNoQixDQUFDLENBQUMsQ0FBQ2UsS0FBSyxDQUFFVixJQUFJLElBQUs7WUFDZixJQUFJLENBQUNmLFNBQVMsQ0FBQzBCLENBQUMsQ0FBQyxnQ0FBZ0NYLElBQUksQ0FBQ1ksSUFBSSxRQUFRLENBQUMsRUFBRXZCLEtBQUssQ0FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUNpQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVHLElBQUksQ0FBQ0MsdUJBQXVCLElBQUksSUFBSSxDQUFDQSx1QkFBdUIsQ0FBQ2QsSUFBSSxDQUFDO1lBQ2xFLEtBQUksTUFBTVMsVUFBVSxJQUFJLElBQUksQ0FBQ2Ysa0JBQWtCLENBQUMsQ0FBQyxFQUFFO2NBQy9DZSxVQUFVLENBQUNLLHVCQUF1QixJQUFJTCxVQUFVLENBQUNLLHVCQUF1QixDQUFDZCxJQUFJLENBQUM7WUFDbEY7WUFDQUksTUFBTSxDQUFDSixJQUFJLENBQUM7VUFDaEIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7TUFDUDtJQUNKO0lBRUEsT0FBTzdFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0UsTUFBTSxDQUFDLENBQUN2RSxJQUFJLENBQUVzRSxHQUFHLElBQUs7TUFDckMsT0FBT3pGLE1BQU0sQ0FBQzZHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHcEIsR0FBRyxDQUFDcUIsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDLENBQUM7RUFDTjtBQUNKIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzP2Q3ZjciXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthbGxPZmZ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHtNb2RlbH0gZnJvbSBcIi4vc2RjX3NvY2tldC5qc1wiO1xuaW1wb3J0IHtjYWxsU2VydmVyfSBmcm9tIFwiLi9zZGNfc2VydmVyX2NhbGwuanNcIjtcbmltcG9ydCB7dXVpZHY0LCBzZXRFcnJvcnNJbkZvcm0sIGNsZWFyRXJyb3JzSW5Gb3JtLCB0YWdOYW1lVG9DYW1lbENhc2UsIHRhZ05hbWVUb1JlYWRhYmxlTmFtZX0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNEQyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3V1aWQgPSB1dWlkdjQoKTtcbiAgICAgICAgdGhpcy5jb250ZW50VXJsID0gJyc7XG4gICAgICAgIHRoaXMuY29udGVudFJlbG9hZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBhcnNlZENvbnRlbnRVcmwgPSBudWxsO1xuICAgICAgICB0aGlzLmV2ZW50cyA9IFtdO1xuICAgICAgICB0aGlzLmxvYWRfYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzID0gbnVsbDtcblxuICAgICAgICB0aGlzLl91cmxQYXJhbXMgPSBbXTtcbiAgICAgICAgdGhpcy5fbW9kZWxzID0gW107XG5cbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tIE9sZCBkZXByZWNhdGVkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgICB0aGlzLl9jc3NVcmxzID0gW107XG4gICAgICAgIHRoaXMuYWZ0ZXJTaG93ID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdhZnRlclNob3cgaXMgZGVwcmVjYXRlZCEhJylcbiAgICAgICAgfTtcbiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0gRW5kIG9sZCBkZXByZWNhdGVkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqIEB0eXBlIHt7c3RyaW5nOiBBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9taXhpbnMgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX3RhZ05hbWUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX3RhZ05hbWUgPz8gJyc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHt7c3RyaW5nOkFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoaWxkQ29udHJvbGxlciA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7QWJzdHJhY3RTREN9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9wYXJlbnRDb250cm9sbGVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9vbkxvYWREb25lID0gZmFsc2U7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtqcXVlcnl9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBudWxsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgbXVzdCBiZSBpbiB7fVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgaW4gYXJndW1lbnRzIG9mXG4gICAgICpcbiAgICAgKi9cbiAgICBfcnVuTGlmZWN5Y2xlKG1ldGhvZCwgYXJncykge1xuICAgICAgICBpZiAoYXBwLkRFQlVHICYmICF0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKG1ldGhvZCwgdGhpcy5fdGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0dXJuUHJvbWlzc2VzID0gW107XG4gICAgICAgIGlmICh0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IG1peGluS2V5IGluIHRoaXMuX21peGlucykge1xuICAgICAgICAgICAgbGV0IG1peGluID0gdGhpcy5fbWl4aW5zW21peGluS2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW5bbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuUHJvbWlzc2VzLnB1c2gobWl4aW5bbWV0aG9kXS5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmV0dXJuUHJvbWlzc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBpZiAoYXBwLkRFQlVHICYmICF0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICBjb25zb2xlLkRFQlVHKEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyksIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIGdldCBjaGlsZENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgb25Mb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvbkxvYWQnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHdpbGxTaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCd3aWxsU2hvdycsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlZnJlc2gnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9ydW5MaWZlY3ljbGUoJ29uUmVtb3ZlJywgYXJndW1lbnRzKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub09wZW5Nb2RlbFJlcXVlc3RzKCApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuX21vZGVscy5tYXAoeCA9PiB4Lm5vT3BlblJlcXVlc3RzKCkpKTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5fbW9kZWxzKSB7XG4gICAgICAgICAgICBtb2RlbC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNjLnJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub25SZW1vdmUgfHwgdGhpcy5vblJlbW92ZSgpKSB7XG4gICAgICAgICAgICBhbGxPZmYodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBjX25hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGhpcy5fdGFnTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb250cm9sbGVyX25hbWUoKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUodGhpcy5fdGFnTmFtZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZXZlbnQsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF0gPSB0aGlzLl9hbGxFdmVudHNbZXZlbnRdIHx8IHt9O1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdW3NlbGVjdG9yXSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5fYWxsRXZlbnRzKSByZXR1cm4gdGhpcy5fYWxsRXZlbnRzO1xuICAgICAgICBsZXQgYWxsRXZlbnRzID0gW107XG4gICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQodGhpcy5ldmVudHMpO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbi5ldmVudHMpKSB7XG4gICAgICAgICAgICAgICAgYWxsRXZlbnRzID0gYWxsRXZlbnRzLmNvbmNhdChtaXhpbi5ldmVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYWxsRXZlbnRzID0gXy5tZXJnZSguLi5hbGxFdmVudHMpKTtcbiAgICB9XG5cbiAgICBwb3N0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLnBvc3QodGhpcywgdXJsLCBhcmdzKTtcbiAgICB9XG5cbiAgICBnZXQodXJsLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcHAuZ2V0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgc3VibWl0Rm9ybShmb3JtLCB1cmwsIG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gYXBwLnN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3KHRoaXMsIGZvcm0sIHVybCwgbWV0aG9kKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXJDYWxsKG1ldGhvZGUsIGFyZ3MpIHtcbiAgICAgICAgbGV0IHJlID0gL3NkY192aWV3XFwvKFteL10rKS9pO1xuICAgICAgICBsZXQgYXBwID0gdGhpcy5jb250ZW50VXJsLm1hdGNoKHJlKTtcbiAgICAgICAgaWYgKCFhcHAgfHwgYXBwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RvIHVzZSB0aGUgc2VydmVyQ2FsbCBmdW5jdGlvbiB0aGUgY29udGVudFVybCBtdXN0IGJlIHNldDogJyArIHRoaXMubmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbFNlcnZlcihhcHBbMV0sIHRoaXMuX3RhZ05hbWUsIHRoaXMucGFyc2VkQ29udGVudFVybCA/PyB0aGlzLmNvbnRlbnRVcmwsIG1ldGhvZGUsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZyB8IE51bWJlcn1cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBuZXdNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIGlmKG1vZGVsX25hbWUgaW5zdGFuY2VvZiBOdW1iZXIgJiYgbW9kZWxfbmFtZS5oYXNPd25Qcm9wZXJ0eSgnbG9hZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kZWxfbmFtZS5sb2FkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RlbF9uYW1lIGluc3RhbmNlb2YgTW9kZWwpIHtcbiAgICAgICAgICByZXR1cm4gbW9kZWxfbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgdGhpcy5fbW9kZWxzLnB1c2gobW9kZWwpO1xuICAgICAgICByZXR1cm4gbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBwYXJhbSB2YWx1ZXMge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICB1cGRhdGVNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9LCB2YWx1ZXMpIHtcbiAgICAgICAgbGV0IG1vZGVsID0gbmV3IE1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5KTtcbiAgICAgICAgcmV0dXJuIG1vZGVsLmxvYWQoKS50aGVuKCgpPT57XG4gICAgICAgICAgICBtb2RlbC52YWx1ZXMgfD0gdmFsdWVzO1xuICAgICAgICAgICAgbW9kZWwuc2F2ZSgpLnRoZW4oKCk9PiB7XG4gICAgICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWwudmFsdWVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRhcHRlciB0byB0aGlzLiRjb250YWluZXIuZmluZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBkb21TZWxlY3RvclxuICAgICAqL1xuICAgIGZpbmQoZG9tU2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICByZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlZnJlc2godGhpcy4kY29udGFpbmVyLCB0aGlzKTtcbiAgICB9XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVsb2FkQ29udHJvbGxlcih0aGlzKTtcbiAgICB9XG5cbiAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICB9XG5cbiAgICBzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcigkZm9ybSwgZSkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG5cbiAgICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBsZXQgcmVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYyBvZiBfY2hpbGRDb250cm9sbGVyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goLi4uY2MuaXRlcmF0ZUFsbENoaWxkcmVuKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vZGVsIEZvcm0gRXZlbnRzXG4gICAgICovXG4gICAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgICAgICBsZXQgcF9saXN0ID0gW107XG4gICAgICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxldCB7bW9kZWwsIGZvcm1fbmFtZX0gPSAkZm9ybS5kYXRhKCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBtb2RlbC5zeW5jRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbnN0YW5jZV92YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcm9tO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VfdmFsdWUucGsgIT09IG51bGwgJiYgaW5zdGFuY2VfdmFsdWUucGsgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbSA9IG1vZGVsLnNhdmUoaW5zdGFuY2VfdmFsdWUucGssIGZvcm1fbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuY3JlYXRlKGluc3RhbmNlX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb20udGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yc0luRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbmNpbGUoJChgPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPiR7ZGF0YS5odG1sfTwvZGl2PmApLCAkZm9ybS5maW5kKCcuY29udGFpbmVyLWZsdWlkJykuZmlyc3QoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocF9saXN0KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCAuLi5yZXMuZmxhdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJhbGxPZmYiLCJhcHAiLCJNb2RlbCIsImNhbGxTZXJ2ZXIiLCJ1dWlkdjQiLCJzZXRFcnJvcnNJbkZvcm0iLCJjbGVhckVycm9yc0luRm9ybSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsIkFic3RyYWN0U0RDIiwiY29uc3RydWN0b3IiLCJfdXVpZCIsImNvbnRlbnRVcmwiLCJjb250ZW50UmVsb2FkIiwicGFyc2VkQ29udGVudFVybCIsImV2ZW50cyIsImxvYWRfYXN5bmMiLCJfaXNFdmVudHNTZXQiLCJfYWxsRXZlbnRzIiwiX3VybFBhcmFtcyIsIl9tb2RlbHMiLCJfY3NzVXJscyIsImFmdGVyU2hvdyIsImNvbnNvbGUiLCJ3YXJuIiwiX21peGlucyIsIl90YWdOYW1lIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJfb25Mb2FkRG9uZSIsIiRjb250YWluZXIiLCJfaXNNaXhpbiIsIl9ydW5MaWZlY3ljbGUiLCJtZXRob2QiLCJhcmdzIiwiREVCVUciLCJkZWJ1ZyIsInJldHVyblByb21pc3NlcyIsIm1peGluS2V5IiwibWl4aW4iLCJwdXNoIiwiYXBwbHkiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm9uSW5pdCIsIkFycmF5IiwiYXJndW1lbnRzIiwicGFyZW50Q29udHJvbGxlciIsImNoaWxkQ29udHJvbGxlciIsIm9uTG9hZCIsIndpbGxTaG93Iiwib25SZWZyZXNoIiwib25SZW1vdmUiLCJub09wZW5Nb2RlbFJlcXVlc3RzIiwibWFwIiwieCIsIm5vT3BlblJlcXVlc3RzIiwicmVtb3ZlIiwibW9kZWwiLCJjbG9zZSIsImkiLCJoYXNPd25Qcm9wZXJ0eSIsImNjIiwiY19uYW1lIiwiYXJyIiwibGVuZ3RoIiwic3BsaWNlIiwiY29udHJvbGxlcl9uYW1lIiwiYWRkRXZlbnQiLCJldmVudCIsInNlbGVjdG9yIiwiaGFuZGxlciIsImdldEV2ZW50cyIsImFsbEV2ZW50cyIsImNvbmNhdCIsImlzQXJyYXkiLCJfIiwibWVyZ2UiLCJwb3N0IiwidXJsIiwiZ2V0Iiwic3VibWl0Rm9ybSIsImZvcm0iLCJzdWJtaXRGb3JtQW5kVXBkYXRlVmlldyIsInNlcnZlckNhbGwiLCJtZXRob2RlIiwicmUiLCJtYXRjaCIsImVycm9yIiwibmFtZSIsIm5ld01vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiTnVtYmVyIiwibG9hZCIsInVwZGF0ZU1vZGVsIiwidmFsdWVzIiwic2F2ZSIsImZpbmQiLCJkb21TZWxlY3RvciIsInJlZnJlc2giLCJyZWxvYWQiLCJyZWxvYWRDb250cm9sbGVyIiwicmVjb25jaWxlIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwic3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IiLCIkZm9ybSIsImUiLCJfc3VibWl0TW9kZWxGb3JtIiwic3VibWl0TW9kZWxGb3JtIiwiZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsInJlcyIsInBfbGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiZm9ybV9uYW1lIiwiZGF0YSIsInN5bmNGb3JtIiwiaW5zdGFuY2VfdmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbSIsInBrIiwiY3JlYXRlIiwic3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyIsImNvbnRyb2xsZXIiLCJjYXRjaCIsIiQiLCJodG1sIiwiZmlyc3QiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsImFzc2lnbiIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n\n}");
|
|
27
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AbstractSDC: () => (/* binding */ AbstractSDC)\n/* harmony export */ });\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_model_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_model.js */ \"./src/simpleDomControl/sdc_model.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\n\n\nclass AbstractSDC {\n constructor() {\n this._uuid = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.uuidv4)();\n this.contentUrl = \"\";\n this.contentReload = false;\n this.parsedContentUrl = null;\n this.events = [];\n this.load_async = false;\n this._isEventsSet = false;\n this._allEvents = null;\n this._urlParams = [];\n this._models = [];\n\n // ------------------ Old deprecated properties ----------------------\n this._cssUrls = [];\n this.afterShow = () => {\n console.warn(\"afterShow is deprecated!!\");\n };\n // -------------- End old deprecated properties ----------------------\n\n /**\n *\n * @type {{string: AbstractSDC}}\n */\n this._mixins = {};\n\n /**\n * @type {string}\n */\n this._tagName = Object.getPrototypeOf(this)._tagName ?? \"\";\n\n /**\n * @type {{string:AbstractSDC}}\n */\n this._childController = {};\n\n /**\n * @type {AbstractSDC}\n */\n this._parentController = null;\n\n /**\n * @type {boolean}\n */\n this._onLoadDone = false;\n\n /**\n * @type {jquery}\n */\n this.$container = null;\n\n /**\n *\n * @type {boolean}\n */\n this._isMixin = false;\n }\n\n /**\n *\n * @param {string} method must be in {}\n * @param {Array} args in arguments of\n *\n */\n _runLifecycle(method, args) {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(method, this._tagName);\n }\n let returnPromisses = [];\n if (this._isMixin) {\n return;\n }\n this._isMixin = true;\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (typeof mixin[method] === \"function\") {\n returnPromisses.push(mixin[method].apply(this, args));\n }\n }\n return Promise.all(returnPromisses).then(() => {\n this._isMixin = false;\n });\n }\n\n /**\n *\n * @return {Promise<*>|*}\n */\n onInit() {\n if (_sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.DEBUG && !this._isMixin) {\n console.debug(Array.apply(null, arguments), this._tagName);\n }\n }\n get parentController() {\n return this._parentController;\n }\n get childController() {\n return this._childController;\n }\n onLoad() {\n return this._runLifecycle(\"onLoad\", arguments);\n }\n willShow() {\n return this._runLifecycle(\"willShow\", arguments);\n }\n onRefresh() {\n return this._runLifecycle(\"onRefresh\", arguments);\n }\n onRemove() {\n this._runLifecycle(\"onRemove\", arguments);\n return true;\n }\n noOpenModelRequests() {\n return Promise.all(this._models.map(x => x.noOpenRequests()));\n }\n remove() {\n for (const model of this._models) {\n model.close();\n }\n let _childController = this._childController;\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n if (!cc.remove()) {\n return false;\n }\n }\n }\n }\n if (!this.onRemove || this.onRemove()) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_0__.allOff)(this);\n const c_name = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToCamelCase)(this._tagName);\n if (this._parentController._childController[c_name]) {\n let arr = this._parentController._childController[c_name];\n for (let i = 0; i < arr.length; i++) {\n if (arr[i] === this) {\n arr.splice(i, 1);\n }\n }\n }\n this.$container.remove();\n delete this;\n return true;\n }\n return false;\n }\n controller_name() {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.tagNameToReadableName)(this._tagName);\n }\n addEvent(event, selector, handler) {\n this.getEvents();\n this._allEvents[event] = this._allEvents[event] || {};\n this._allEvents[event][selector] = handler;\n }\n getEvents() {\n if (this._allEvents) return this._allEvents;\n let allEvents = [];\n allEvents = allEvents.concat(this.events);\n for (let mixinKey in this._mixins) {\n let mixin = this._mixins[mixinKey];\n if (Array.isArray(mixin.events)) {\n allEvents = allEvents.concat(mixin.events);\n }\n }\n return this._allEvents = _.merge(...allEvents);\n }\n post(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.post(this, url, args);\n }\n get(url, args) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.get(this, url, args);\n }\n submitForm(form, url, method) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.submitFormAndUpdateView(this, form, url, method);\n }\n serverCall(methode, args) {\n let re = /sdc_view\\/([^/]+)/i;\n let app = this.contentUrl.match(re);\n if (!app || app.length < 2) {\n console.error(\"To use the serverCall function the contentUrl must be set: \" + this.name);\n return;\n }\n return (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_3__.callServer)(app[1], this._tagName, this.parsedContentUrl ?? this.contentUrl, methode, args);\n }\n\n /**\n *\n * @param {string} modelName\n * @param {object?} modelQuery\n * @returns {SdcQuerySet}\n */\n querySet(modelName, modelQuery = {}) {\n const newQuerySet = new _sdc_model_js__WEBPACK_IMPORTED_MODULE_2__.SdcQuerySet(modelName, modelQuery);\n this._models.push(newQuerySet);\n return newQuerySet;\n }\n newModel(modelName, modelQuery = {}) {\n console.warn(\"newModel is deprecated and will soon be removed\");\n return this.querySet(modelName, modelQuery);\n }\n\n /**\n * Adapter to this.$container.find\n * @param {string} domSelector\n */\n find(domSelector) {\n return this.$container.find(domSelector);\n }\n refresh() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.refresh(this.$container, this);\n }\n reload() {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reloadController(this);\n }\n reconcile($virtualNode, $realNode = null) {\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_1__.app.reconcile(this, $virtualNode, $realNode);\n }\n submitModelFormDistributor($form, e) {\n if (typeof this._submitModelForm === \"function\") {\n return this._submitModelForm($form, e);\n }\n if (typeof this.submitModelForm === \"function\") {\n return this.submitModelForm($form, e);\n }\n return this.defaultSubmitModelForm($form, e);\n }\n iterateAllChildren() {\n let _childController = this._childController;\n let res = [];\n for (let i in _childController) {\n if (_childController.hasOwnProperty(i)) {\n for (let cc of _childController[i]) {\n res.push(cc);\n res.push(...cc.iterateAllChildren());\n }\n }\n }\n return res;\n }\n\n /**\n * Model Form Events\n */\n defaultSubmitModelForm($form, e) {\n if (!this._isMixin) {\n e.stopPropagation();\n e.preventDefault();\n let {\n model,\n form_name\n } = $form.data();\n let data = model.syncForm($form);\n return new Promise((resolve, reject) => {\n let prom;\n if (model.id !== null && model.id >= 0) {\n prom = model.save({\n formName: form_name,\n data\n });\n } else {\n prom = model.create({\n data\n });\n }\n prom.then(res => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.clearErrorsInForm)($form);\n this.submit_model_form_success && this.submit_model_form_success(res[0]);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_success && controller.submit_model_form_success(res[0]);\n }\n resolve(res);\n }).catch(data => {\n this.reconcile($(`<div class=\"container-fluid\">${data.html}</div>`), $form.find(\".container-fluid\").first());\n this.submit_model_form_error && this.submit_model_form_error(data);\n for (const controller of this.iterateAllChildren()) {\n controller.submit_model_form_error && controller.submit_model_form_error(data);\n }\n reject(data);\n });\n });\n }\n return Promise.resolve();\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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O1FBRUFJLElBQUksQ0FDRDNFLElBQUksQ0FBRW1FLEdBQUcsSUFBSztVQUNiM0csZ0VBQWlCLENBQUNxRyxLQUFLLENBQUM7VUFDeEIsSUFBSSxDQUFDbUIseUJBQXlCLElBQzlCLElBQUksQ0FBQ0EseUJBQXlCLENBQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUN0QyxLQUFLLE1BQU1jLFVBQVUsSUFBSSxJQUFJLENBQUNmLGtCQUFrQixDQUFDLENBQUMsRUFBRTtZQUNsRGUsVUFBVSxDQUFDRCx5QkFBeUIsSUFDcENDLFVBQVUsQ0FBQ0QseUJBQXlCLENBQUNiLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUM5QztVQUVBTSxPQUFPLENBQUNOLEdBQUcsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNEZSxLQUFLLENBQUVYLElBQUksSUFBSztVQUNmLElBQUksQ0FBQ2QsU0FBUyxDQUNaMEIsQ0FBQyxDQUFDLGdDQUFnQ1osSUFBSSxDQUFDYSxJQUFJLFFBQVEsQ0FBQyxFQUNwRHZCLEtBQUssQ0FBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUNpQyxLQUFLLENBQUMsQ0FDdkMsQ0FBQztVQUNELElBQUksQ0FBQ0MsdUJBQXVCLElBQzVCLElBQUksQ0FBQ0EsdUJBQXVCLENBQUNmLElBQUksQ0FBQztVQUNsQyxLQUFLLE1BQU1VLFVBQVUsSUFBSSxJQUFJLENBQUNmLGtCQUFrQixDQUFDLENBQUMsRUFBRTtZQUNsRGUsVUFBVSxDQUFDSyx1QkFBdUIsSUFDbENMLFVBQVUsQ0FBQ0ssdUJBQXVCLENBQUNmLElBQUksQ0FBQztVQUMxQztVQUVBRyxNQUFNLENBQUNILElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztNQUNOLENBQUMsQ0FBQztJQUNKO0lBRUEsT0FBT3pFLE9BQU8sQ0FBQzJFLE9BQU8sQ0FBQyxDQUFDO0VBQzFCO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanM/ZDdmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FsbE9mZn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge1NkY1F1ZXJ5U2V0fSBmcm9tIFwiLi9zZGNfbW9kZWwuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge1xuICB1dWlkdjQsXG4gIGNsZWFyRXJyb3JzSW5Gb3JtLFxuICB0YWdOYW1lVG9DYW1lbENhc2UsXG4gIHRhZ05hbWVUb1JlYWRhYmxlTmFtZSxcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFNEQyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3V1aWQgPSB1dWlkdjQoKTtcbiAgICB0aGlzLmNvbnRlbnRVcmwgPSBcIlwiO1xuICAgIHRoaXMuY29udGVudFJlbG9hZCA9IGZhbHNlO1xuICAgIHRoaXMucGFyc2VkQ29udGVudFVybCA9IG51bGw7XG4gICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICB0aGlzLmxvYWRfYXN5bmMgPSBmYWxzZTtcbiAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICB0aGlzLl91cmxQYXJhbXMgPSBbXTtcbiAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICB0aGlzLl9jc3NVcmxzID0gW107XG4gICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oXCJhZnRlclNob3cgaXMgZGVwcmVjYXRlZCEhXCIpO1xuICAgIH07XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0gRW5kIG9sZCBkZXByZWNhdGVkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAqL1xuICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICB0aGlzLl90YWdOYW1lID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl90YWdOYW1lID8/IFwiXCI7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICovXG4gICAgdGhpcy5fY2hpbGRDb250cm9sbGVyID0ge307XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7QWJzdHJhY3RTREN9XG4gICAgICovXG4gICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLl9vbkxvYWREb25lID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAqL1xuICAgIHRoaXMuJGNvbnRhaW5lciA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqL1xuICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICogQHBhcmFtIHtBcnJheX0gYXJncyBpbiBhcmd1bWVudHMgb2ZcbiAgICpcbiAgICovXG4gIF9ydW5MaWZlY3ljbGUobWV0aG9kLCBhcmdzKSB7XG4gICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGxldCByZXR1cm5Qcm9taXNzZXMgPSBbXTtcbiAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc01peGluID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm5Qcm9taXNzZXMucHVzaChtaXhpblttZXRob2RdLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocmV0dXJuUHJvbWlzc2VzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPCo+fCp9XG4gICAqL1xuICBvbkluaXQoKSB7XG4gICAgaWYgKGFwcC5ERUJVRyAmJiAhdGhpcy5faXNNaXhpbikge1xuICAgICAgY29uc29sZS5kZWJ1ZyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcGFyZW50Q29udHJvbGxlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgfVxuXG4gIGdldCBjaGlsZENvbnRyb2xsZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgfVxuXG4gIG9uTG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwib25Mb2FkXCIsIGFyZ3VtZW50cyk7XG4gIH1cblxuICB3aWxsU2hvdygpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwid2lsbFNob3dcIiwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIG9uUmVmcmVzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKFwib25SZWZyZXNoXCIsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBvblJlbW92ZSgpIHtcbiAgICB0aGlzLl9ydW5MaWZlY3ljbGUoXCJvblJlbW92ZVwiLCBhcmd1bWVudHMpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbm9PcGVuTW9kZWxSZXF1ZXN0cygpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5fbW9kZWxzLm1hcCgoeCkgPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gIH1cblxuICByZW1vdmUoKSB7XG4gICAgZm9yIChjb25zdCBtb2RlbCBvZiB0aGlzLl9tb2RlbHMpIHtcbiAgICAgIG1vZGVsLmNsb3NlKCk7XG4gICAgfVxuICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgIGlmICghY2MucmVtb3ZlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub25SZW1vdmUgfHwgdGhpcy5vblJlbW92ZSgpKSB7XG4gICAgICBhbGxPZmYodGhpcyk7XG4gICAgICBjb25zdCBjX25hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGhpcy5fdGFnTmFtZSk7XG4gICAgICBpZiAodGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV0pIHtcbiAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgIHJldHVybiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUodGhpcy5fdGFnTmFtZSk7XG4gIH1cblxuICBhZGRFdmVudChldmVudCwgc2VsZWN0b3IsIGhhbmRsZXIpIHtcbiAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF0gPSB0aGlzLl9hbGxFdmVudHNbZXZlbnRdIHx8IHt9O1xuICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF1bc2VsZWN0b3JdID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fYWxsRXZlbnRzKSByZXR1cm4gdGhpcy5fYWxsRXZlbnRzO1xuICAgIGxldCBhbGxFdmVudHMgPSBbXTtcbiAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbi5ldmVudHMpKSB7XG4gICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gIH1cblxuICBwb3N0KHVybCwgYXJncykge1xuICAgIHJldHVybiBhcHAucG9zdCh0aGlzLCB1cmwsIGFyZ3MpO1xuICB9XG5cbiAgZ2V0KHVybCwgYXJncykge1xuICAgIHJldHVybiBhcHAuZ2V0KHRoaXMsIHVybCwgYXJncyk7XG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm0sIHVybCwgbWV0aG9kKSB7XG4gICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gIH1cblxuICBzZXJ2ZXJDYWxsKG1ldGhvZGUsIGFyZ3MpIHtcbiAgICBsZXQgcmUgPSAvc2RjX3ZpZXdcXC8oW14vXSspL2k7XG4gICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgaWYgKCFhcHAgfHwgYXBwLmxlbmd0aCA8IDIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiVG8gdXNlIHRoZSBzZXJ2ZXJDYWxsIGZ1bmN0aW9uIHRoZSBjb250ZW50VXJsIG11c3QgYmUgc2V0OiBcIiArXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGxTZXJ2ZXIoXG4gICAgICBhcHBbMV0sXG4gICAgICB0aGlzLl90YWdOYW1lLFxuICAgICAgdGhpcy5wYXJzZWRDb250ZW50VXJsID8/IHRoaXMuY29udGVudFVybCxcbiAgICAgIG1ldGhvZGUsXG4gICAgICBhcmdzLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKiBAcGFyYW0gIHtvYmplY3Q/fSBtb2RlbFF1ZXJ5XG4gICAqIEByZXR1cm5zIHtTZGNRdWVyeVNldH1cbiAgICovXG4gIHF1ZXJ5U2V0KG1vZGVsTmFtZSwgbW9kZWxRdWVyeSA9IHt9KSB7XG4gICAgY29uc3QgbmV3UXVlcnlTZXQgPSBuZXcgU2RjUXVlcnlTZXQobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5KTtcbiAgICB0aGlzLl9tb2RlbHMucHVzaChuZXdRdWVyeVNldCk7XG4gICAgcmV0dXJuIG5ld1F1ZXJ5U2V0O1xuICB9XG5cbiAgbmV3TW9kZWwobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5ID0ge30pIHtcbiAgICBjb25zb2xlLndhcm4oXCJuZXdNb2RlbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIHNvb24gYmUgcmVtb3ZlZFwiKTtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNldChtb2RlbE5hbWUsIG1vZGVsUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIgdG8gdGhpcy4kY29udGFpbmVyLmZpbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGRvbVNlbGVjdG9yXG4gICAqL1xuICBmaW5kKGRvbVNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHRoaXMuJGNvbnRhaW5lci5maW5kKGRvbVNlbGVjdG9yKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgcmV0dXJuIGFwcC5yZWZyZXNoKHRoaXMuJGNvbnRhaW5lciwgdGhpcyk7XG4gIH1cblxuICByZWxvYWQoKSB7XG4gICAgcmV0dXJuIGFwcC5yZWxvYWRDb250cm9sbGVyKHRoaXMpO1xuICB9XG5cbiAgcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCkge1xuICAgIHJldHVybiBhcHAucmVjb25jaWxlKHRoaXMsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgfVxuXG4gIHN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yKCRmb3JtLCBlKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGhpcy5zdWJtaXRNb2RlbEZvcm0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gIH1cblxuICBpdGVyYXRlQWxsQ2hpbGRyZW4oKSB7XG4gICAgbGV0IF9jaGlsZENvbnRyb2xsZXIgPSB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgbGV0IHJlcyA9IFtdO1xuICAgIGZvciAobGV0IGkgaW4gX2NoaWxkQ29udHJvbGxlcikge1xuICAgICAgaWYgKF9jaGlsZENvbnRyb2xsZXIuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgIHJlcy5wdXNoKGNjKTtcbiAgICAgICAgICByZXMucHVzaCguLi5jYy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RlbCBGb3JtIEV2ZW50c1xuICAgKi9cbiAgZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSkge1xuICAgIGlmICghdGhpcy5faXNNaXhpbikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGxldCB7bW9kZWwsIGZvcm1fbmFtZX0gPSAkZm9ybS5kYXRhKCk7XG4gICAgICBsZXQgZGF0YSA9IG1vZGVsLnN5bmNGb3JtKCRmb3JtKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAobW9kZWwuaWQgIT09IG51bGwgJiYgbW9kZWwuaWQgPj0gMCkge1xuICAgICAgICAgIHByb20gPSBtb2RlbC5zYXZlKHtmb3JtTmFtZTogZm9ybV9uYW1lLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvbSA9IG1vZGVsLmNyZWF0ZSh7ZGF0YX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvbVxuICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKTtcbiAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJlxuICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiZcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWNvbmNpbGUoXG4gICAgICAgICAgICAgICQoYDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4ke2RhdGEuaHRtbH08L2Rpdj5gKSxcbiAgICAgICAgICAgICAgJGZvcm0uZmluZChcIi5jb250YWluZXItZmx1aWRcIikuZmlyc3QoKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJlxuICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZWplY3QoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhbGxPZmYiLCJhcHAiLCJTZGNRdWVyeVNldCIsImNhbGxTZXJ2ZXIiLCJ1dWlkdjQiLCJjbGVhckVycm9yc0luRm9ybSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsIkFic3RyYWN0U0RDIiwiY29uc3RydWN0b3IiLCJfdXVpZCIsImNvbnRlbnRVcmwiLCJjb250ZW50UmVsb2FkIiwicGFyc2VkQ29udGVudFVybCIsImV2ZW50cyIsImxvYWRfYXN5bmMiLCJfaXNFdmVudHNTZXQiLCJfYWxsRXZlbnRzIiwiX3VybFBhcmFtcyIsIl9tb2RlbHMiLCJfY3NzVXJscyIsImFmdGVyU2hvdyIsImNvbnNvbGUiLCJ3YXJuIiwiX21peGlucyIsIl90YWdOYW1lIiwiT2JqZWN0IiwiZ2V0UHJvdG90eXBlT2YiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJfb25Mb2FkRG9uZSIsIiRjb250YWluZXIiLCJfaXNNaXhpbiIsIl9ydW5MaWZlY3ljbGUiLCJtZXRob2QiLCJhcmdzIiwiREVCVUciLCJkZWJ1ZyIsInJldHVyblByb21pc3NlcyIsIm1peGluS2V5IiwibWl4aW4iLCJwdXNoIiwiYXBwbHkiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm9uSW5pdCIsIkFycmF5IiwiYXJndW1lbnRzIiwicGFyZW50Q29udHJvbGxlciIsImNoaWxkQ29udHJvbGxlciIsIm9uTG9hZCIsIndpbGxTaG93Iiwib25SZWZyZXNoIiwib25SZW1vdmUiLCJub09wZW5Nb2RlbFJlcXVlc3RzIiwibWFwIiwieCIsIm5vT3BlblJlcXVlc3RzIiwicmVtb3ZlIiwibW9kZWwiLCJjbG9zZSIsImkiLCJoYXNPd25Qcm9wZXJ0eSIsImNjIiwiY19uYW1lIiwiYXJyIiwibGVuZ3RoIiwic3BsaWNlIiwiY29udHJvbGxlcl9uYW1lIiwiYWRkRXZlbnQiLCJldmVudCIsInNlbGVjdG9yIiwiaGFuZGxlciIsImdldEV2ZW50cyIsImFsbEV2ZW50cyIsImNvbmNhdCIsImlzQXJyYXkiLCJfIiwibWVyZ2UiLCJwb3N0IiwidXJsIiwiZ2V0Iiwic3VibWl0Rm9ybSIsImZvcm0iLCJzdWJtaXRGb3JtQW5kVXBkYXRlVmlldyIsInNlcnZlckNhbGwiLCJtZXRob2RlIiwicmUiLCJtYXRjaCIsImVycm9yIiwibmFtZSIsInF1ZXJ5U2V0IiwibW9kZWxOYW1lIiwibW9kZWxRdWVyeSIsIm5ld1F1ZXJ5U2V0IiwibmV3TW9kZWwiLCJmaW5kIiwiZG9tU2VsZWN0b3IiLCJyZWZyZXNoIiwicmVsb2FkIiwicmVsb2FkQ29udHJvbGxlciIsInJlY29uY2lsZSIsIiR2aXJ0dWFsTm9kZSIsIiRyZWFsTm9kZSIsInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yIiwiJGZvcm0iLCJlIiwiX3N1Ym1pdE1vZGVsRm9ybSIsInN1Ym1pdE1vZGVsRm9ybSIsImRlZmF1bHRTdWJtaXRNb2RlbEZvcm0iLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJyZXMiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsImZvcm1fbmFtZSIsImRhdGEiLCJzeW5jRm9ybSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwiaWQiLCJzYXZlIiwiZm9ybU5hbWUiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJmaXJzdCIsInN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n\n}");
|
|
28
28
|
|
|
29
|
-
/***/ }
|
|
29
|
+
/***/ },
|
|
30
30
|
|
|
31
|
-
/***/ "./src/simpleDomControl/sdc_controller.js"
|
|
31
|
+
/***/ "./src/simpleDomControl/sdc_controller.js"
|
|
32
32
|
/*!************************************************!*\
|
|
33
33
|
!*** ./src/simpleDomControl/sdc_controller.js ***!
|
|
34
34
|
\************************************************/
|
|
35
|
-
|
|
35
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
36
36
|
|
|
37
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUF5RjtBQU9sRTtBQUVnQztBQUNDO0FBQ3RCO0FBRTNCLElBQUlXLE1BQU0sR0FBRyxFQUFFO0FBQ2YsSUFBSUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUV2QixTQUFTQyxPQUFPQSxDQUFBLEVBQUc7RUFDdEIsT0FBT0MsTUFBTSxDQUFDQyxJQUFJLENBQUNILGNBQWMsQ0FBQztBQUN0QztBQUdBLFNBQVNJLGFBQWFBLENBQUNDLGdCQUFnQixFQUFFQyxPQUFPLEVBQUU7RUFDOUNELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0UsTUFBTSxDQUFDUCxjQUFjLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ3RFRCxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUNHLE1BQU0sQ0FBQyxDQUFDQyxLQUFLLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxLQUFLO0lBQy9ELE9BQU9BLElBQUksQ0FBQ0MsT0FBTyxDQUFDSCxLQUFLLENBQUMsS0FBS0MsS0FBSztFQUN4QyxDQUFDLENBQUM7RUFDRixJQUFJRyxRQUFRLEdBQUcsSUFBSTtFQUNuQixPQUFPQSxRQUFRLEVBQUU7SUFDYkEsUUFBUSxHQUFHLEtBQUs7SUFDaEIsS0FBSyxJQUFJQyxHQUFHLElBQUlULGdCQUFnQixFQUFFO01BQzlCLEtBQUssSUFBSVUsTUFBTSxJQUFJZixjQUFjLENBQUNjLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZDLElBQUksQ0FBQ1QsZ0JBQWdCLENBQUNXLFFBQVEsQ0FBQ0QsTUFBTSxDQUFDLEVBQUU7VUFDcENWLGdCQUFnQixDQUFDWSxJQUFJLENBQUNGLE1BQU0sQ0FBQztVQUM3QkYsUUFBUSxHQUFHLElBQUk7UUFDbkI7TUFDSjtJQUNKO0VBQ0o7RUFDQSxPQUFPUixnQkFBZ0I7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FB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QUFLLENBQUNJLEdBQUcsQ0FBQ3ZELFVBQVUsQ0FBQ3FELEtBQUssQ0FBQztJQUMxQ0wsY0FBYyxDQUFDaEQsVUFBVSxDQUFDSCxJQUFJLENBQUNHLFVBQVUsQ0FBQztFQUM1QztFQUVBLE9BQU87SUFBQ2lELGdCQUFnQjtJQUFFRDtFQUFjLENBQUM7QUFDN0MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Byb21pc2VEdW1teUZhY3RvcnksIHRhZ05hbWVUb0NhbWVsQ2FzZSwgYWdpbGVBZ2dyZWdhdGlvbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIENPTlRST0xMRVJfQ0xBU1MsXG4gICAgZ2V0Q29udHJvbGxlcixcbiAgICBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcixcbiAgICByZWZyZXNoLFxuICAgIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7c2V0Q29udHJvbGxlckV2ZW50c30gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuXG5leHBvcnQgbGV0IEdsb2JhbCA9IFtdO1xuZXhwb3J0IGxldCBjb250cm9sbGVyTGlzdCA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFnTGlzdCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5cbmZ1bmN0aW9uIHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSkge1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBzdXBlclRhZ05hbWVMaXN0LmNvbmNhdChjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXSk7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4O1xuICAgIH0pO1xuICAgIGxldCBoYXNBZGRlZCA9IHRydWU7XG4gICAgd2hpbGUgKGhhc0FkZGVkKSB7XG4gICAgICAgIGhhc0FkZGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICAgICAgICAgIGlmICghc3VwZXJUYWdOYW1lTGlzdC5pbmNsdWRlcyhuZXdUYWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgICAgICAgICAgICBoYXNBZGRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdXBlclRhZ05hbWVMaXN0O1xufVxuXG4vKipcbiAqIHNldFBhcmVudENvbnRyb2xsZXIgc2V0cyB0aGUgcGFyZW50IGNvbnRyb2xsZXIgYXMgcHJvcGVydHk6ICdwYXJlbnRDb250cm9sbGVyJ1xuICogdG8gdGhlIGNoaWxkIGNvbnRyb2xsZXIuIEFsc28sIGl0IGFkZHMgdGhlIGNoaWxkIGNvbnRyb2xsZXIgdG8gdGhlIHByb3BlcnR5IGxpc3Q6XG4gKiAncGFyZW50Q29udHJvbGxlcicgdG8gdGhlIHBhcmVudCBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2UsIGNvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET00gb2YgdGhlIGNvbnRyb2xsZXJzIERPTVxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtIHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKSB7XG4gICAgaWYgKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKGNvbnRyb2xsZXIuX3RhZ05hbWUpO1xuICAgICAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0ucHVzaChjb250cm9sbGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKVxufVxuXG4vKipcbiAqIHJlc2V0Q2hpbGRyZW4gcmVzZXRzIGFsbCBjaGlsZHJlbiBvZiBhIGNvbnRyb2xsZXIuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRDaGlsZHJlbihwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyID0ge307XG4gICAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHByZXBhcmVNaXhpbnMoc3VwZXJUYWdOYW1lTGlzdCwgdGFnTmFtZSk7XG4gICAgZm9yIChsZXQgc3VwZXJUYWdOYW1lIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgbWl4aW5Db250cm9sbGVyQ2xhc3MucHVzaChjb250cm9sbGVyTGlzdFtzdXBlclRhZ05hbWVdWzBdKTtcbiAgICB9XG5cbiAgICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgKGFnaWxlQWdncmVnYXRpb24oY29udHJvbGxlckNsYXNzLCAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcykpKCk7XG4gICAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuICAgIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG5cbiAgICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeSBpdCBlaXRoZXIgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBvciB0YWtlcyBhIGdsb2JlIGluc3RhbmNlXG4gKiBkZXBlbmRpbmcgaWYgdGhlIGNvbnRyb2xsZXIgaXMgcmVnaXN0ZXJlZCBhcyBhIGdsb2JhbCBjb250cm9sbGVyLiBJdCBzZXRzIHRoZVxuICogJGNvbnRhaW5lciBvYmplY3QgdG8gdGhlIGpRdWVyeSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdGFnLlxuICpcbiAqIFJlbWVtYmVyIEdsb2JhbCBjb250cm9sbGVyIGNhbiBub3QgaGF2ZSBhIHN1cGVyIGNvbnRyb2xsZXIhXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIENvbnRyb2xsZXIgb2YgdGhlIHBhcmVudCBET01cbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudCAtIFRoZSBjdXJyZW50IERPTSBqUXVlcnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIC0gdGhlIHJlZ2lzdGVyZWQgdGFnIG5hbWUgb2YgdGhlIGN1cnJlbnQgRE9NXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuXG4gICAgaWYgKEdsb2JhbC5pbmNsdWRlcyh0YWdOYW1lKSkge1xuICAgICAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93W2dUYWdOYW1lXS4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiB3aW5kb3dbZ1RhZ05hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MgKSB7XG4gICAgY29uc3QgcHJvbV9jb250cm9sbGVyID0gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcilcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xuICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwpO1xuICAgICAgICB9KTtcblxuICAgIGlmIChjb250cm9sbGVyLmxvYWRfYXN5bmMpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9tX2NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5faXNFdmVudHNTZXQgPSBmYWxzZTtcbiAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHJldHVybiBjb250cm9sbGVyTGlzdFxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHByb2Nlc3MpIHtcbiAgICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gcGFyZW50TGlzdC5jb25jYXQocHJvY2Vzcy5jb250cm9sbGVyLnNsaWNlKDEpKTtcblxuICAgIGZvciAobGV0IGNvbiBvZiBjb250cm9sbGVyTGlzdCkge1xuICAgICAgICBzZXRDb250cm9sbGVyRXZlbnRzKGNvbik7XG4gICAgICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSZWZyZXNoUHJvY2VzcyhyZWZyZXNoUHJvY2VzcywgY29udHJvbGxlcikge1xuICAgIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgIHJlZnJlc2hQcm9jZXNzID0ge3V1aWRzOiBuZXcgU2V0KFtjb250cm9sbGVyLl91dWlkXSksIGNvbnRyb2xsZXI6IFtjb250cm9sbGVyXX07XG4gICAgfSBlbHNlIGlmICghcmVmcmVzaFByb2Nlc3MudXVpZHMuaGFzKGNvbnRyb2xsZXIuX3V1aWQpKSB7XG4gICAgICByZWZyZXNoUHJvY2Vzcy51dWlkcy5hZGQoY29udHJvbGxlci5fdXVpZCk7XG4gICAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2Vzc307XG59XG5cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJyZWZyZXNoIiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsInNldENvbnRyb2xsZXJFdmVudHMiLCJhcHAiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJPYmplY3QiLCJrZXlzIiwicHJlcGFyZU1peGlucyIsInN1cGVyVGFnTmFtZUxpc3QiLCJ0YWdOYW1lIiwiY29uY2F0IiwiZmlsdGVyIiwidmFsdWUiLCJpbmRleCIsInNlbGYiLCJpbmRleE9mIiwiaGFzQWRkZWQiLCJ0YWciLCJuZXdUYWciLCJpbmNsdWRlcyIsInB1c2giLCJzZXRQYXJlbnRDb250cm9sbGVyIiwicGFyZW50Q29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyTmFtZSIsIl90YWdOYW1lIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwicmVzZXRDaGlsZHJlbiIsImZpbmQiLCJlYWNoIiwiJHRoaXMiLCIkIiwiY0NvbnRyb2xsZXIiLCJjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIiwiJGVsZW1lbnQiLCJtaXhpbkNvbnRyb2xsZXJDbGFzcyIsInN1cGVyVGFnTmFtZSIsImNvbnRyb2xsZXJDbGFzcyIsIiRjb250YWluZXIiLCJjb250cm9sbGVyRmFjdG9yeSIsImdUYWdOYW1lIiwid2luZG93IiwicnVuQ29udHJvbGxlclNob3ciLCIkaHRtbCIsInRoZW4iLCJhcmdzIiwid2lsbFNob3ciLCJsb2FkUHJvbWlzZU9yQ29udGVudCIsIlByb21pc2UiLCJydW5Db250cm9sbGVyTG9hZCIsImh0bWwiLCJvbkxvYWQiLCJfb25Mb2FkRG9uZSIsImxvYWRQcm9taXNlIiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJwcm9jZXNzIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJnZXRQYXJlbnRMaXN0IiwiX2lzRXZlbnRzU2V0IiwidW5zaGlmdCIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInBhcmVudExpc3QiLCJzbGljZSIsImNvbiIsIm9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsInJlZnJlc2hQcm9jZXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIkJvb2xlYW4iLCJ1dWlkcyIsIlNldCIsIl91dWlkIiwiaGFzIiwiYWRkIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n\n}");
|
|
37
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Global: () => (/* binding */ Global),\n/* harmony export */ controllerFactory: () => (/* binding */ controllerFactory),\n/* harmony export */ controllerList: () => (/* binding */ controllerList),\n/* harmony export */ prepareRefreshProcess: () => (/* binding */ prepareRefreshProcess),\n/* harmony export */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList),\n/* harmony export */ updateEventAndTriggerOnRefresh: () => (/* binding */ updateEventAndTriggerOnRefresh)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n\n\n\n\n\nlet Global = [];\nlet controllerList = {};\nfunction tagList() {\n return Object.keys(controllerList);\n}\nfunction prepareMixins(superTagNameList, tagName) {\n superTagNameList = superTagNameList.concat(controllerList[tagName][1]);\n superTagNameList = superTagNameList.filter((value, index, self) => {\n return self.indexOf(value) === index;\n });\n let hasAdded = true;\n while (hasAdded) {\n hasAdded = false;\n for (let tag of superTagNameList) {\n for (let newTag of controllerList[tag][1]) {\n if (!superTagNameList.includes(newTag)) {\n superTagNameList.push(newTag);\n hasAdded = true;\n }\n }\n }\n }\n return superTagNameList;\n}\n\n/**\n * setParentController sets the parent controller as property: 'parentController'\n * to the child controller. Also, it adds the child controller to the property list:\n * 'parentController' to the parent controller\n *\n * @param {AbstractSDC} parentController - js controller instance, controller of the parent DOM of the controllers DOM\n * @param {AbstractSDC} controller - js controller instance\n * @return {AbstractSDC} - parentController\n */\nfunction setParentController(parentController, controller) {\n if (parentController) {\n let controllerName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(controller._tagName);\n if (!parentController._childController[controllerName]) {\n parentController._childController[controllerName] = [];\n }\n parentController._childController[controllerName].push(controller);\n }\n return controller._parentController = parentController;\n}\n\n/**\n * resetChildren resets all children of a controller.\n *\n * @param {AbstractSDC} parentController\n */\nfunction resetChildren(parentController) {\n parentController._childController = {};\n parentController.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const $this = $(this);\n const cController = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($this);\n if (cController === parentController) {\n setParentController(parentController, cController);\n }\n });\n}\n\n/**\n * controllerFactoryInstance it generates a controller instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * It handles the init parameter by the data values of the DOM.\n *\n * It handles the super extensions.\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactoryInstance(parentController, $element, tagName, superTagNameList) {\n let mixinControllerClass = [];\n superTagNameList = prepareMixins(superTagNameList, tagName);\n for (let superTagName of superTagNameList) {\n mixinControllerClass.push(controllerList[superTagName][0]);\n }\n let controllerClass = controllerList[tagName][0];\n let controller = new ((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.agileAggregation)(controllerClass, ...mixinControllerClass))();\n controller._tagName = tagName;\n setParentController(parentController, controller);\n controller.$container = $element;\n (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_2__.runOnInitWithParameter)($element, controller);\n return controller;\n}\n\n/**\n * controllerFactory it either generates a controller or takes a globe instance\n * depending if the controller is registered as a global controller. It sets the\n * $container object to the jQuery representation of the tag.\n *\n * Remember Global controller can not have a super controller!\n *\n * @param {AbstractSDC} parentController - Controller of the parent DOM\n * @param {jquery} $element - The current DOM jQuery\n * @param {string} tagName - the registered tag name of the current DOM\n * @param {Array<string>} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n if (Global.includes(tagName)) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (!window[gTagName]) {\n window[gTagName] = controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n }\n window[gTagName].$container = $element;\n return window[gTagName];\n }\n return controllerFactoryInstance(parentController, $element, tagName, superTagNameList);\n}\n\n/**\n * runControllerShow first runs onLoad and fill content for all sub\n * controller. Only if all the sub controller are loaded the willShow\n * control flow function gets called.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerShow(controller, $html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html).then(function (args) {\n args = args || true;\n if (controller.willShow) {\n let loadPromiseOrContent = controller.willShow();\n if (loadPromiseOrContent instanceof Promise) {\n return loadPromiseOrContent.then(function () {\n return args;\n });\n }\n }\n return args;\n });\n}\n\n/**\n * runControllerLoad Calls the onLoad function of the controller.\n * This function is called before the HTML is set to the page.\n * The parameter is a list of children of the tag and the registered tag.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @return {Promise<*>} - return of the onLoad function\n */\nfunction runControllerLoad(controller) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.loadFilesFromController)(controller).then(html => {\n if (!controller.onLoad || controller._onLoadDone) {\n return html;\n }\n controller._onLoadDone = true;\n let loadPromise = controller.onLoad(html);\n return (loadPromise || (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)()).then(() => {\n return html;\n });\n });\n}\n\n/**\n * runControlFlowFunctions runs the control flow functions:\n * 1. onLoad()\n * 2. fill content\n * 3. willShow(dom parameter)\n * 4. refresh()\n *\n * @param controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runControlFlowFunctions(controller, process) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller, process);\n }).catch(function ($html) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.runControllerFillContent)(controller, $html);\n });\n if (controller.load_async) {\n return Promise.resolve();\n }\n return prom_controller;\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {Object} process - Process object containing the refresh process\n */\nfunction runRefresh(controller, process) {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)(null, controller, process);\n}\nfunction getParentList(controller) {\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return controllerList;\n}\n\n/**\n *\n * @param {Object} process - Process object containing the refresh process\n */\nfunction updateEventAndTriggerOnRefresh(process) {\n const parentList = getParentList(process.controller[0]);\n const controllerList = parentList.concat(process.controller.slice(1));\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_3__.setControllerEvents)(con);\n con.onRefresh(process.controller[0]);\n }\n}\nfunction prepareRefreshProcess(refreshProcess, controller) {\n let isRunningProcess = Boolean(refreshProcess);\n if (!isRunningProcess) {\n refreshProcess = {\n uuids: new Set([controller._uuid]),\n controller: [controller]\n };\n } else if (!refreshProcess.uuids.has(controller._uuid)) {\n refreshProcess.uuids.add(controller._uuid);\n refreshProcess.controller.push(controller);\n }\n return {\n isRunningProcess,\n refreshProcess\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUl3QjtBQU9EO0FBRWtDO0FBQ0M7QUFDdEI7QUFFN0IsSUFBSVcsTUFBTSxHQUFHLEVBQUU7QUFDZixJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN4QixPQUFPQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsY0FBYyxDQUFDO0FBQ3BDO0FBRUEsU0FBU0ksYUFBYUEsQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRTtFQUNoREQsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDRSxNQUFNLENBQUNQLGNBQWMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEVELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0csTUFBTSxDQUFDLENBQUNDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEtBQUs7SUFDakUsT0FBT0EsSUFBSSxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxLQUFLQyxLQUFLO0VBQ3RDLENBQUMsQ0FBQztFQUNGLElBQUlHLFFBQVEsR0FBRyxJQUFJO0VBQ25CLE9BQU9BLFFBQVEsRUFBRTtJQUNmQSxRQUFRLEdBQUcsS0FBSztJQUNoQixLQUFLLElBQUlDLEdBQUcsSUFBSVQsZ0JBQWdCLEVBQUU7TUFDaEMsS0FBSyxJQUFJVSxNQUFNLElBQUlmLGNBQWMsQ0FBQ2MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDekMsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1csUUFBUSxDQUFDRCxNQUFNLENBQUMsRUFBRTtVQUN0Q1YsZ0JBQWdCLENBQUNZLElBQUksQ0FBQ0YsTUFBTSxDQUFDO1VBQzdCRixRQUFRLEdBQUcsSUFBSTtRQUNqQjtNQUNGO0lBQ0Y7RUFDRjtFQUNBLE9BQU9SLGdCQUFnQjtBQUN6Qjs7QUFFQTtBQUNBO0FBQ0E7QUFD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Q0csS0FBSyxDQUFDSSxHQUFHLENBQUN2RCxVQUFVLENBQUNxRCxLQUFLLENBQUM7SUFDMUNMLGNBQWMsQ0FBQ2hELFVBQVUsQ0FBQ0gsSUFBSSxDQUFDRyxVQUFVLENBQUM7RUFDNUM7RUFFQSxPQUFPO0lBQUVpRCxnQkFBZ0I7SUFBRUQ7RUFBZSxDQUFDO0FBQzdDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19jb250cm9sbGVyLmpzPzhhMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgcHJvbWlzZUR1bW15RmFjdG9yeSxcbiAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICBhZ2lsZUFnZ3JlZ2F0aW9uLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIENPTlRST0xMRVJfQ0xBU1MsXG4gIGdldENvbnRyb2xsZXIsXG4gIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyLFxuICByZWZyZXNoLFxuICBydW5Db250cm9sbGVyRmlsbENvbnRlbnQsXG59IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5cbmltcG9ydCB7IHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIgfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQgeyBzZXRDb250cm9sbGVyRXZlbnRzIH0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7IGFwcCB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5cbmV4cG9ydCBsZXQgR2xvYmFsID0gW107XG5leHBvcnQgbGV0IGNvbnRyb2xsZXJMaXN0ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdMaXN0KCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMoY29udHJvbGxlckxpc3QpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpIHtcbiAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuY29uY2F0KGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdKTtcbiAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuZmlsdGVyKCh2YWx1ZSwgaW5kZXgsIHNlbGYpID0+IHtcbiAgICByZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xuICBsZXQgaGFzQWRkZWQgPSB0cnVlO1xuICB3aGlsZSAoaGFzQWRkZWQpIHtcbiAgICBoYXNBZGRlZCA9IGZhbHNlO1xuICAgIGZvciAobGV0IHRhZyBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICBmb3IgKGxldCBuZXdUYWcgb2YgY29udHJvbGxlckxpc3RbdGFnXVsxXSkge1xuICAgICAgICBpZiAoIXN1cGVyVGFnTmFtZUxpc3QuaW5jbHVkZXMobmV3VGFnKSkge1xuICAgICAgICAgIHN1cGVyVGFnTmFtZUxpc3QucHVzaChuZXdUYWcpO1xuICAgICAgICAgIGhhc0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3VwZXJUYWdOYW1lTGlzdDtcbn1cblxuLyoqXG4gKiBzZXRQYXJlbnRDb250cm9sbGVyIHNldHMgdGhlIHBhcmVudCBjb250cm9sbGVyIGFzIHByb3BlcnR5OiAncGFyZW50Q29udHJvbGxlcidcbiAqIHRvIHRoZSBjaGlsZCBjb250cm9sbGVyLiBBbHNvLCBpdCBhZGRzIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvIHRoZSBwcm9wZXJ0eSBsaXN0OlxuICogJ3BhcmVudENvbnRyb2xsZXInIHRvIHRoZSBwYXJlbnQgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlLCBjb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NIG9mIHRoZSBjb250cm9sbGVycyBET01cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSBwYXJlbnRDb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcikge1xuICBpZiAocGFyZW50Q29udHJvbGxlcikge1xuICAgIGxldCBjb250cm9sbGVyTmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZShjb250cm9sbGVyLl90YWdOYW1lKTtcbiAgICBpZiAoIXBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0pIHtcbiAgICAgIHBhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjb250cm9sbGVyTmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY29udHJvbGxlck5hbWVdLnB1c2goY29udHJvbGxlcik7XG4gIH1cblxuICByZXR1cm4gKGNvbnRyb2xsZXIuX3BhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiByZXNldENoaWxkcmVuIHJlc2V0cyBhbGwgY2hpbGRyZW4gb2YgYSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q2hpbGRyZW4ocGFyZW50Q29udHJvbGxlcikge1xuICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgcGFyZW50Q29udHJvbGxlci5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICBjb25zdCBjQ29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJHRoaXMpO1xuICAgIGlmIChjQ29udHJvbGxlciA9PT0gcGFyZW50Q29udHJvbGxlcikge1xuICAgICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjQ29udHJvbGxlcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShcbiAgcGFyZW50Q29udHJvbGxlcixcbiAgJGVsZW1lbnQsXG4gIHRhZ05hbWUsXG4gIHN1cGVyVGFnTmFtZUxpc3QsXG4pIHtcbiAgbGV0IG1peGluQ29udHJvbGxlckNsYXNzID0gW107XG4gIHN1cGVyVGFnTmFtZUxpc3QgPSBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpO1xuICBmb3IgKGxldCBzdXBlclRhZ05hbWUgb2Ygc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgIG1peGluQ29udHJvbGxlckNsYXNzLnB1c2goY29udHJvbGxlckxpc3Rbc3VwZXJUYWdOYW1lXVswXSk7XG4gIH1cblxuICBsZXQgY29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gIGxldCBjb250cm9sbGVyID0gbmV3IChhZ2lsZUFnZ3JlZ2F0aW9uKFxuICAgIGNvbnRyb2xsZXJDbGFzcyxcbiAgICAuLi5taXhpbkNvbnRyb2xsZXJDbGFzcyxcbiAgKSkoKTtcbiAgY29udHJvbGxlci5fdGFnTmFtZSA9IHRhZ05hbWU7XG5cbiAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKTtcbiAgY29udHJvbGxlci4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gIHJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoJGVsZW1lbnQsIGNvbnRyb2xsZXIpO1xuXG4gIHJldHVybiBjb250cm9sbGVyO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5IGl0IGVpdGhlciBnZW5lcmF0ZXMgYSBjb250cm9sbGVyIG9yIHRha2VzIGEgZ2xvYmUgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogUmVtZW1iZXIgR2xvYmFsIGNvbnRyb2xsZXIgY2FuIG5vdCBoYXZlIGEgc3VwZXIgY29udHJvbGxlciFcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdCAtIHRhZyBuYW1lcyBvZiBzdXBlciBjb250cm9sbGVyXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSAgbmV3IENvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xsZXJGYWN0b3J5KFxuICBwYXJlbnRDb250cm9sbGVyLFxuICAkZWxlbWVudCxcbiAgdGFnTmFtZSxcbiAgc3VwZXJUYWdOYW1lTGlzdCxcbikge1xuICBpZiAoR2xvYmFsLmluY2x1ZGVzKHRhZ05hbWUpKSB7XG4gICAgbGV0IGdUYWdOYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpO1xuICAgIGlmICghd2luZG93W2dUYWdOYW1lXSkge1xuICAgICAgd2luZG93W2dUYWdOYW1lXSA9IGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UoXG4gICAgICAgIHBhcmVudENvbnRyb2xsZXIsXG4gICAgICAgICRlbGVtZW50LFxuICAgICAgICB0YWdOYW1lLFxuICAgICAgICBzdXBlclRhZ05hbWVMaXN0LFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3aW5kb3dbZ1RhZ05hbWVdLiRjb250YWluZXIgPSAkZWxlbWVudDtcbiAgICByZXR1cm4gd2luZG93W2dUYWdOYW1lXTtcbiAgfVxuXG4gIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKFxuICAgIHBhcmVudENvbnRyb2xsZXIsXG4gICAgJGVsZW1lbnQsXG4gICAgdGFnTmFtZSxcbiAgICBzdXBlclRhZ05hbWVMaXN0LFxuICApO1xufVxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJTaG93IGZpcnN0IHJ1bnMgb25Mb2FkIGFuZCBmaWxsIGNvbnRlbnQgZm9yIGFsbCBzdWJcbiAqIGNvbnRyb2xsZXIuIE9ubHkgaWYgYWxsIHRoZSBzdWIgY29udHJvbGxlciBhcmUgbG9hZGVkIHRoZSB3aWxsU2hvd1xuICogY29udHJvbCBmbG93IGZ1bmN0aW9uIGdldHMgY2FsbGVkLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGh0bWwgLSBqUXVlcnkgbG9hZGVkIGNvbnRlbnRcbiAqIEByZXR1cm4ge1Byb21pc2U8Kj59IC0gcmV0dXJuIG9mIHRoZSBvbkxvYWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpIHtcbiAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgIGFyZ3MgPSBhcmdzIHx8IHRydWU7XG4gICAgaWYgKGNvbnRyb2xsZXIud2lsbFNob3cpIHtcbiAgICAgIGxldCBsb2FkUHJvbWlzZU9yQ29udGVudCA9IGNvbnRyb2xsZXIud2lsbFNob3coKTtcbiAgICAgIGlmIChsb2FkUHJvbWlzZU9yQ29udGVudCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGxvYWRQcm9taXNlT3JDb250ZW50LnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJncztcbiAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbGxlckxvYWQgQ2FsbHMgdGhlIG9uTG9hZCBmdW5jdGlvbiBvZiB0aGUgY29udHJvbGxlci5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSB0aGUgSFRNTCBpcyBzZXQgdG8gdGhlIHBhZ2UuXG4gKiBUaGUgcGFyYW1ldGVyIGlzIGEgbGlzdCBvZiBjaGlsZHJlbiBvZiB0aGUgdGFnIGFuZCB0aGUgcmVnaXN0ZXJlZCB0YWcuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEByZXR1cm4ge1Byb21pc2U8Kj59IC0gcmV0dXJuIG9mIHRoZSBvbkxvYWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcnVuQ29udHJvbGxlckxvYWQoY29udHJvbGxlcikge1xuICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgIGlmICghY29udHJvbGxlci5vbkxvYWQgfHwgY29udHJvbGxlci5fb25Mb2FkRG9uZSkge1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgbGV0IGxvYWRQcm9taXNlID0gY29udHJvbGxlci5vbkxvYWQoaHRtbCk7XG4gICAgcmV0dXJuIChsb2FkUHJvbWlzZSB8fCBwcm9taXNlRHVtbXlGYWN0b3J5KCkpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIHJ1bnMgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnM6XG4gKiAxLiBvbkxvYWQoKVxuICogMi4gZmlsbCBjb250ZW50XG4gKiAzLiB3aWxsU2hvdyhkb20gcGFyYW1ldGVyKVxuICogNC4gcmVmcmVzaCgpXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIGNvbnN0IHByb21fY29udHJvbGxlciA9IHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpXG4gICAgLnRoZW4oZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICByZXR1cm4gcnVuQ29udHJvbGxlclNob3coY29udHJvbGxlciwgJGh0bWwpO1xuICAgIH0pXG4gICAgLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIHJ1blJlZnJlc2goY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICB9KTtcblxuICBpZiAoY29udHJvbGxlci5sb2FkX2FzeW5jKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHByb21fY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blJlZnJlc2goY29udHJvbGxlciwgcHJvY2Vzcykge1xuICByZXR1cm4gcmVmcmVzaChudWxsLCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50TGlzdChjb250cm9sbGVyKSB7XG4gIGxldCBjb250cm9sbGVyTGlzdCA9IFtdO1xuICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgIGNvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcjtcbiAgfVxuICByZXR1cm4gY29udHJvbGxlckxpc3Q7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocHJvY2Vzcykge1xuICBjb25zdCBwYXJlbnRMaXN0ID0gZ2V0UGFyZW50TGlzdChwcm9jZXNzLmNvbnRyb2xsZXJbMF0pO1xuICBjb25zdCBjb250cm9sbGVyTGlzdCA9IHBhcmVudExpc3QuY29uY2F0KHByb2Nlc3MuY29udHJvbGxlci5zbGljZSgxKSk7XG5cbiAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgc2V0Q29udHJvbGxlckV2ZW50cyhjb24pO1xuICAgIGNvbi5vblJlZnJlc2gocHJvY2Vzcy5jb250cm9sbGVyWzBdKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKHJlZnJlc2hQcm9jZXNzLCBjb250cm9sbGVyKSB7XG4gIGxldCBpc1J1bm5pbmdQcm9jZXNzID0gQm9vbGVhbihyZWZyZXNoUHJvY2Vzcyk7XG5cbiAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgcmVmcmVzaFByb2Nlc3MgPSB7XG4gICAgICB1dWlkczogbmV3IFNldChbY29udHJvbGxlci5fdXVpZF0pLFxuICAgICAgY29udHJvbGxlcjogW2NvbnRyb2xsZXJdLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoIXJlZnJlc2hQcm9jZXNzLnV1aWRzLmhhcyhjb250cm9sbGVyLl91dWlkKSkge1xuICAgIHJlZnJlc2hQcm9jZXNzLnV1aWRzLmFkZChjb250cm9sbGVyLl91dWlkKTtcbiAgICByZWZyZXNoUHJvY2Vzcy5jb250cm9sbGVyLnB1c2goY29udHJvbGxlcik7XG4gIH1cblxuICByZXR1cm4geyBpc1J1bm5pbmdQcm9jZXNzLCByZWZyZXNoUHJvY2VzcyB9O1xufVxuIl0sIm5hbWVzIjpbInByb21pc2VEdW1teUZhY3RvcnkiLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJsb2FkRmlsZXNGcm9tQ29udHJvbGxlciIsInJlZnJlc2giLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCJydW5PbkluaXRXaXRoUGFyYW1ldGVyIiwic2V0Q29udHJvbGxlckV2ZW50cyIsImFwcCIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsIk9iamVjdCIsImtleXMiLCJwcmVwYXJlTWl4aW5zIiwic3VwZXJUYWdOYW1lTGlzdCIsInRhZ05hbWUiLCJjb25jYXQiLCJmaWx0ZXIiLCJ2YWx1ZSIsImluZGV4Iiwic2VsZiIsImluZGV4T2YiLCJoYXNBZGRlZCIsInRhZyIsIm5ld1RhZyIsImluY2x1ZGVzIiwicHVzaCIsInNldFBhcmVudENvbnRyb2xsZXIiLCJwYXJlbnRDb250cm9sbGVyIiwiY29udHJvbGxlciIsImNvbnRyb2xsZXJOYW1lIiwiX3RhZ05hbWUiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJyZXNldENoaWxkcmVuIiwiZmluZCIsImVhY2giLCIkdGhpcyIsIiQiLCJjQ29udHJvbGxlciIsImNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UiLCIkZWxlbWVudCIsIm1peGluQ29udHJvbGxlckNsYXNzIiwic3VwZXJUYWdOYW1lIiwiY29udHJvbGxlckNsYXNzIiwiJGNvbnRhaW5lciIsImNvbnRyb2xsZXJGYWN0b3J5IiwiZ1RhZ05hbWUiLCJ3aW5kb3ciLCJydW5Db250cm9sbGVyU2hvdyIsIiRodG1sIiwidGhlbiIsImFyZ3MiLCJ3aWxsU2hvdyIsImxvYWRQcm9taXNlT3JDb250ZW50IiwiUHJvbWlzZSIsInJ1bkNvbnRyb2xsZXJMb2FkIiwiaHRtbCIsIm9uTG9hZCIsIl9vbkxvYWREb25lIiwibG9hZFByb21pc2UiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInByb2Nlc3MiLCJwcm9tX2NvbnRyb2xsZXIiLCJydW5SZWZyZXNoIiwiY2F0Y2giLCJsb2FkX2FzeW5jIiwicmVzb2x2ZSIsImdldFBhcmVudExpc3QiLCJfaXNFdmVudHNTZXQiLCJ1bnNoaWZ0IiwidXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoIiwicGFyZW50TGlzdCIsInNsaWNlIiwiY29uIiwib25SZWZyZXNoIiwicHJlcGFyZVJlZnJlc2hQcm9jZXNzIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIiwiQm9vbGVhbiIsInV1aWRzIiwiU2V0IiwiX3V1aWQiLCJoYXMiLCJhZGQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n\n}");
|
|
38
38
|
|
|
39
|
-
/***/ }
|
|
39
|
+
/***/ },
|
|
40
40
|
|
|
41
|
-
/***/ "./src/simpleDomControl/sdc_dom_events.js"
|
|
41
|
+
/***/ "./src/simpleDomControl/sdc_dom_events.js"
|
|
42
42
|
/*!************************************************!*\
|
|
43
43
|
!*** ./src/simpleDomControl/sdc_dom_events.js ***!
|
|
44
44
|
\************************************************/
|
|
45
|
-
|
|
45
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
46
46
|
|
|
47
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = ['onbeforeunload', 'onunload'];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction checkIfEventFits(ev_type, e, target) {\n let elementUnderMouse;\n switch (ev_type) {\n case \"mouseleave\":\n case \"mouseout\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n case \"mouseenter\":\n case \"mousein\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n default:\n return true;\n }\n ;\n}\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty('namespace') && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs && checkIfEventFits(ev_type, event, $elm[0])) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(' ').forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === 'function') {\n handler = attr;\n } else if (typeof controller[attr] === 'function') {\n handler = controller[attr];\n } else if (typeof attr === 'string' && attr.startsWith('this.event_')) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice('this.event_'.length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(' ');\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(' '));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZG9tX2V2ZW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBNEM7QUFFckMsTUFBTUMsb0JBQW9CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUM7QUFDM0QsTUFBTUMsY0FBYyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLE1BQU0sQ0FBQ0MsR0FBRyxJQUFJLEtBQUssQ0FBQ0MsSUFBSSxDQUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDTixvQkFBb0IsQ0FBQ1EsUUFBUSxDQUFDRixHQUFHLENBQUMsQ0FBQyxDQUFDRyxHQUFHLENBQUNDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUksU0FBU0MsZ0JBQWdCQSxDQUFDQyxPQUFPLEVBQUVDLENBQUMsRUFBRUMsTUFBTSxFQUFFO0VBQzFDLElBQUlDLGlCQUFpQjtFQUNyQixRQUFRSCxPQUFPO0lBQ1gsS0FBSyxZQUFZO0lBQ2pCLEtBQUssVUFBVTtNQUNYRyxpQkFBaUIsR0FBR0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQ0osQ0FBQyxDQUFDSyxPQUFPLEVBQUVMLENBQUMsQ0FBQ00sT0FBTyxDQUFDO01BQ25FLE9BQU9MLE1BQU0sS0FBS0MsaUJBQWlCLElBQUksQ0FBQ0QsTUFBTSxDQUFDTSxRQUFRLENBQUNMLGlCQUFpQixDQUFDO0lBQzlFLEtBQUssWUFBWTtJQUNqQixLQUFLLFNBQVM7TUFDVkEsaUJBQWlCLEdBQUdDLFFBQVEsQ0FBQ0MsZ0JBQWdCLENBQUNKLENBQUMsQ0FBQ0ssT0FBTyxFQUFFTCxDQUFDLENBQUNNLE9BQU8sQ0FBQztNQUNuRSxPQUFPTCxNQUFNLEtBQUtDLGlCQUFpQixJQUFJLENBQUNELE1BQU0sQ0FBQ00sUUFBUSxDQUFDTCxpQkFBaUIsQ0FBQztJQUM5RTtNQUNJLE9BQU8sSUFBSTtFQUNuQjtFQUFDO0FBQ0w7QUFFTyxTQUFTTSxrQkFB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Q0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFEO1VBRUosQ0FBQyxDQUFDO1FBQ047TUFDSjtJQUNKO0VBQ0o7RUFDQTtFQUNBO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldENvbnRyb2xsZXJ9IGZyb20gJy4vc2RjX3ZpZXcuanMnO1xuXG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0JMQUNLX0xJU1QgPSBbJ29uYmVmb3JldW5sb2FkJywgJ29udW5sb2FkJ107XG5leHBvcnQgY29uc3QgU1REX0VWRU5UX0xJU1QgPSBPYmplY3Qua2V5cyh3aW5kb3cpLmZpbHRlcihrZXkgPT4gL15vbi8udGVzdChrZXkpICYmICFTVERfRVZFTlRfQkxBQ0tfTElTVC5pbmNsdWRlcyhrZXkpKS5tYXAoeCA9PiB4LnNsaWNlKDIpKTtcblxuZnVuY3Rpb24gY2hlY2tJZkV2ZW50Rml0cyhldl90eXBlLCBlLCB0YXJnZXQpIHtcbiAgICBsZXQgZWxlbWVudFVuZGVyTW91c2U7XG4gICAgc3dpdGNoIChldl90eXBlKSB7XG4gICAgICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgICAgIGNhc2UgXCJtb3VzZW91dFwiOlxuICAgICAgICAgICAgZWxlbWVudFVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IGVsZW1lbnRVbmRlck1vdXNlICYmICF0YXJnZXQuY29udGFpbnMoZWxlbWVudFVuZGVyTW91c2UpO1xuICAgICAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgICAgICBjYXNlIFwibW91c2VpblwiOlxuICAgICAgICAgICAgZWxlbWVudFVuZGVyTW91c2UgPSBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGUuY2xpZW50WCwgZS5jbGllbnRZKTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgIT09IGVsZW1lbnRVbmRlck1vdXNlICYmICF0YXJnZXQuY29udGFpbnMoZWxlbWVudFVuZGVyTW91c2UpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICAgIGxldCBldl90eXBlID0gZXZlbnQudHlwZTtcbiAgICBpZiAoZXZlbnQuaGFzT3duUHJvcGVydHkoJ25hbWVzcGFjZScpICYmIGV2ZW50Lm5hbWVzcGFjZSAmJiBldmVudC5uYW1lc3BhY2UubGVuZ3RoKSBldl90eXBlICs9IGAuJHtldmVudC5uYW1lc3BhY2V9YDtcblxuICAgIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICAgIGxldCBjb250cm9sbGVyID0gbnVsbDtcbiAgICBsZXQgaXNfZG9uZSA9IGZhbHNlO1xuICAgIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gPSAoKSA9PiBpc19sYXN0X2VsZW0gPSB0cnVlO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbiA9ICgpID0+IGlzX2xhc3RfZWxlbSA9IGlzX2RvbmUgPSB0cnVlO1xuICAgIHdoaWxlICgkZWxtLmxlbmd0aCkge1xuICAgICAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgICAgIGlmIChhdHRycyAmJiBjaGVja0lmRXZlbnRGaXRzKGV2X3R5cGUsIGV2ZW50LCAkZWxtWzBdKSkge1xuICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sbGVyKSByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGF0dHJzLnNwbGl0KCcgJykuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXJbYXR0cl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyW2F0dHJdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBhdHRyID09PSAnc3RyaW5nJyAmJiBhdHRyLnN0YXJ0c1dpdGgoJ3RoaXMuZXZlbnRfJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBjb250cm9sbGVyLmdldEV2ZW50cygpW2V2X3R5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlciA9IGhhbmRsZXJbYXR0ci5zbGljZSgndGhpcy5ldmVudF8nLmxlbmd0aCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpc19sYXN0X2VsZW0pIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlclxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc19kb25lKSByZXR1cm47XG4gICAgICAgICRlbG0gPSAkZWxtLnBhcmVudCgpO1xuICAgIH1cblxuICAgIHJldHVybiB7cmVzOiB0cnVlfTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5pdEV2ZW50cygpIHtcbiAgICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICAgIFNURF9FVkVOVF9MSVNULmZvckVhY2goZXZfdHlwZSA9PiB7XG4gICAgICAgICR3aW5kb3cub2ZmKGV2X3R5cGUpLm9uKGV2X3R5cGUsIHdpbmRvd0V2ZW50SGFuZGxlcik7XG4gICAgfSk7XG59XG5cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0Q29udHJvbGxlckV2ZW50cyhjb250cm9sbGVyKSB7XG5cbiAgICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGV2ZW50cyA9IGNvbnRyb2xsZXIuZ2V0RXZlbnRzKCk7XG4gICAgZm9yIChsZXQgZXZfdHlwZSBpbiBldmVudHMpIHtcbiAgICAgICAgaWYgKGV2ZW50cy5oYXNPd25Qcm9wZXJ0eShldl90eXBlKSkge1xuICAgICAgICAgICAgbGV0IGV2ZW50TGlzdCA9IGV2ZW50c1tldl90eXBlXTtcbiAgICAgICAgICAgIGZvciAobGV0IGRvbVNlbGVjdG9yIGluIGV2ZW50TGlzdCkge1xuICAgICAgICAgICAgICAgIGlmIChldmVudExpc3QuaGFzT3duUHJvcGVydHkoZG9tU2VsZWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZmluZChkb21TZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgJGVsZW1lbnRzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBldmVudF9saXN0ID0gJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnRfbGlzdCkgZXZlbnRfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBldmVudF9saXN0ID0gZXZlbnRfbGlzdC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfbGlzdC5wdXNoKG5ld19rZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWAsIGV2ZW50X2xpc3Quam9pbignICcpKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUT0RPOiBJcyBpdCBuZWVkZWRcbiAgICAvL2NvbnRyb2xsZXIuX2lzRXZlbnRzU2V0ID0gdHJ1ZTtcbn0iXSwibmFtZXMiOlsiZ2V0Q29udHJvbGxlciIsIlNURF9FVkVOVF9CTEFDS19MSVNUIiwiU1REX0VWRU5UX0xJU1QiLCJPYmplY3QiLCJrZXlzIiwid2luZG93IiwiZmlsdGVyIiwia2V5IiwidGVzdCIsImluY2x1ZGVzIiwibWFwIiwieCIsInNsaWNlIiwiY2hlY2tJZkV2ZW50Rml0cyIsImV2X3R5cGUiLCJlIiwidGFyZ2V0IiwiZWxlbWVudFVuZGVyTW91c2UiLCJkb2N1bWVudCIsImVsZW1lbnRGcm9tUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsImNvbnRhaW5zIiwid2luZG93RXZlbnRIYW5kbGVyIiwiZXZlbnQiLCJ0eXBlIiwiaGFzT3duUHJvcGVydHkiLCJuYW1lc3BhY2UiLCJsZW5ndGgiLCIkZWxtIiwiJCIsImNvbnRyb2xsZXIiLCJpc19kb25lIiwiaXNfbGFzdF9lbGVtIiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwic3RvcFByb3BhZ2F0aW9uIiwiYXR0cnMiLCJhdHRyIiwic3BsaXQiLCJmb3JFYWNoIiwiaGFuZGxlciIsInN0YXJ0c1dpdGgiLCJnZXRFdmVudHMiLCJjYWxsIiwiX3BhcmVudENvbnRyb2xsZXIiLCJwYXJlbnQiLCJyZXMiLCJpbml0RXZlbnRzIiwiJHdpbmRvdyIsIm9mZiIsIm9uIiwic2V0Q29udHJvbGxlckV2ZW50cyIsIl9pc0V2ZW50c1NldCIsImV2ZW50cyIsImV2ZW50TGlzdCIsImRvbVNlbGVjdG9yIiwiZmluZCIsImVhY2giLCIkZWxlbWVudHMiLCJldmVudF9saXN0IiwibmV3X2tleSIsImluZGV4T2YiLCJwdXNoIiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n\n}");
|
|
47
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STD_EVENT_BLACK_LIST: () => (/* binding */ STD_EVENT_BLACK_LIST),\n/* harmony export */ STD_EVENT_LIST: () => (/* binding */ STD_EVENT_LIST),\n/* harmony export */ initEvents: () => (/* binding */ initEvents),\n/* harmony export */ setControllerEvents: () => (/* binding */ setControllerEvents),\n/* harmony export */ windowEventHandler: () => (/* binding */ windowEventHandler)\n/* harmony export */ });\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\nconst STD_EVENT_BLACK_LIST = [\"onbeforeunload\", \"onunload\"];\nconst STD_EVENT_LIST = Object.keys(window).filter(key => /^on/.test(key) && !STD_EVENT_BLACK_LIST.includes(key)).map(x => x.slice(2));\nfunction checkIfEventFits(ev_type, e, target) {\n let elementUnderMouse;\n switch (ev_type) {\n case \"mouseleave\":\n case \"mouseout\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n case \"mouseenter\":\n case \"mousein\":\n elementUnderMouse = document.elementFromPoint(e.clientX, e.clientY);\n return target !== elementUnderMouse && !target.contains(elementUnderMouse);\n default:\n return true;\n }\n}\nfunction windowEventHandler(event) {\n let ev_type = event.type;\n if (event.hasOwnProperty(\"namespace\") && event.namespace && event.namespace.length) ev_type += `.${event.namespace}`;\n let $elm = $(event.target);\n let controller = null;\n let is_done = false;\n let is_last_elem = false;\n event.stopImmediatePropagation = () => is_last_elem = true;\n event.stopPropagation = () => is_last_elem = is_done = true;\n while ($elm.length) {\n let attrs = $elm.attr(`sdc_${ev_type}`);\n if (attrs && checkIfEventFits(ev_type, event, $elm[0])) {\n if (!controller) {\n controller = (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_0__.getController)($elm);\n if (!controller) return;\n }\n while (controller) {\n attrs.split(\" \").forEach(attr => {\n if (is_done) return;\n let handler = null;\n if (typeof attr === \"function\") {\n handler = attr;\n } else if (typeof controller[attr] === \"function\") {\n handler = controller[attr];\n } else if (typeof attr === \"string\" && attr.startsWith(\"this.event_\")) {\n handler = controller.getEvents()[ev_type];\n if (!handler) {\n return;\n }\n handler = handler[attr.slice(\"this.event_\".length)];\n if (!handler) {\n return;\n }\n }\n handler && handler.call(controller, $elm, event);\n });\n if (is_last_elem) return;\n controller = controller._parentController;\n }\n }\n if (is_done) return;\n $elm = $elm.parent();\n }\n return {\n res: true\n };\n}\n\n/**\n *\n */\nfunction initEvents() {\n const $window = $(window);\n STD_EVENT_LIST.forEach(ev_type => {\n $window.off(ev_type).on(ev_type, windowEventHandler);\n });\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n */\nfunction setControllerEvents(controller) {\n if (controller._isEventsSet) {\n return;\n }\n const events = controller.getEvents();\n for (let ev_type in events) {\n if (events.hasOwnProperty(ev_type)) {\n let eventList = events[ev_type];\n for (let domSelector in eventList) {\n if (eventList.hasOwnProperty(domSelector)) {\n controller.find(domSelector).each(function () {\n let $elements = $(this);\n let event_list = $elements.attr(`sdc_${ev_type}`) || null;\n if (!event_list) event_list = [];else event_list = event_list.split(\" \");\n const new_key = `this.event_${domSelector}`;\n if (event_list.indexOf(new_key) === -1) {\n event_list.push(new_key);\n $elements.attr(`sdc_${ev_type}`, event_list.join(\" \"));\n }\n });\n }\n }\n }\n }\n // TODO: Is it needed\n //controller._isEventsSet = true;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0ksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hEO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtJQUNGO0VBQ0Y7RUFDQTtFQUNBO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2RvbV9ldmVudHMuanM/NDMzOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb250cm9sbGVyIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcblxuZXhwb3J0IGNvbnN0IFNURF9FVkVOVF9CTEFDS19MSVNUID0gW1wib25iZWZvcmV1bmxvYWRcIiwgXCJvbnVubG9hZFwiXTtcbmV4cG9ydCBjb25zdCBTVERfRVZFTlRfTElTVCA9IE9iamVjdC5rZXlzKHdpbmRvdylcbiAgLmZpbHRlcigoa2V5KSA9PiAvXm9uLy50ZXN0KGtleSkgJiYgIVNURF9FVkVOVF9CTEFDS19MSVNULmluY2x1ZGVzKGtleSkpXG4gIC5tYXAoKHgpID0+IHguc2xpY2UoMikpO1xuXG5mdW5jdGlvbiBjaGVja0lmRXZlbnRGaXRzKGV2X3R5cGUsIGUsIHRhcmdldCkge1xuICBsZXQgZWxlbWVudFVuZGVyTW91c2U7XG4gIHN3aXRjaCAoZXZfdHlwZSkge1xuICAgIGNhc2UgXCJtb3VzZWxlYXZlXCI6XG4gICAgY2FzZSBcIm1vdXNlb3V0XCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBjYXNlIFwibW91c2VlbnRlclwiOlxuICAgIGNhc2UgXCJtb3VzZWluXCI6XG4gICAgICBlbGVtZW50VW5kZXJNb3VzZSA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGFyZ2V0ICE9PSBlbGVtZW50VW5kZXJNb3VzZSAmJiAhdGFyZ2V0LmNvbnRhaW5zKGVsZW1lbnRVbmRlck1vdXNlKVxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0V2ZW50SGFuZGxlcihldmVudCkge1xuICBsZXQgZXZfdHlwZSA9IGV2ZW50LnR5cGU7XG4gIGlmIChcbiAgICBldmVudC5oYXNPd25Qcm9wZXJ0eShcIm5hbWVzcGFjZVwiKSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZSAmJlxuICAgIGV2ZW50Lm5hbWVzcGFjZS5sZW5ndGhcbiAgKVxuICAgIGV2X3R5cGUgKz0gYC4ke2V2ZW50Lm5hbWVzcGFjZX1gO1xuXG4gIGxldCAkZWxtID0gJChldmVudC50YXJnZXQpO1xuICBsZXQgY29udHJvbGxlciA9IG51bGw7XG4gIGxldCBpc19kb25lID0gZmFsc2U7XG4gIGxldCBpc19sYXN0X2VsZW0gPSBmYWxzZTtcbiAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uID0gKCkgPT4gKGlzX2xhc3RfZWxlbSA9IHRydWUpO1xuICBldmVudC5zdG9wUHJvcGFnYXRpb24gPSAoKSA9PiAoaXNfbGFzdF9lbGVtID0gaXNfZG9uZSA9IHRydWUpO1xuICB3aGlsZSAoJGVsbS5sZW5ndGgpIHtcbiAgICBsZXQgYXR0cnMgPSAkZWxtLmF0dHIoYHNkY18ke2V2X3R5cGV9YCk7XG4gICAgaWYgKGF0dHJzICYmIGNoZWNrSWZFdmVudEZpdHMoZXZfdHlwZSwgZXZlbnQsICRlbG1bMF0pKSB7XG4gICAgICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlciA9IGdldENvbnRyb2xsZXIoJGVsbSk7XG4gICAgICAgIGlmICghY29udHJvbGxlcikgcmV0dXJuO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXR0cnMuc3BsaXQoXCIgXCIpLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgICAgICBpZiAoaXNfZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIGxldCBoYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICBpZiAodHlwZW9mIGF0dHIgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgaGFuZGxlciA9IGF0dHI7XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlclthdHRyXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlclthdHRyXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGF0dHIgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGF0dHIuc3RhcnRzV2l0aChcInRoaXMuZXZlbnRfXCIpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gY29udHJvbGxlci5nZXRFdmVudHMoKVtldl90eXBlXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoYW5kbGVyID0gaGFuZGxlclthdHRyLnNsaWNlKFwidGhpcy5ldmVudF9cIi5sZW5ndGgpXTtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFuZGxlciAmJiBoYW5kbGVyLmNhbGwoY29udHJvbGxlciwgJGVsbSwgZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzX2xhc3RfZWxlbSkgcmV0dXJuO1xuICAgICAgICBjb250cm9sbGVyID0gY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzX2RvbmUpIHJldHVybjtcbiAgICAkZWxtID0gJGVsbS5wYXJlbnQoKTtcbiAgfVxuXG4gIHJldHVybiB7IHJlczogdHJ1ZSB9O1xufVxuXG4vKipcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0RXZlbnRzKCkge1xuICBjb25zdCAkd2luZG93ID0gJCh3aW5kb3cpO1xuICBTVERfRVZFTlRfTElTVC5mb3JFYWNoKChldl90eXBlKSA9PiB7XG4gICAgJHdpbmRvdy5vZmYoZXZfdHlwZSkub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRyb2xsZXJFdmVudHMoY29udHJvbGxlcikge1xuICBpZiAoY29udHJvbGxlci5faXNFdmVudHNTZXQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBldmVudHMgPSBjb250cm9sbGVyLmdldEV2ZW50cygpO1xuICBmb3IgKGxldCBldl90eXBlIGluIGV2ZW50cykge1xuICAgIGlmIChldmVudHMuaGFzT3duUHJvcGVydHkoZXZfdHlwZSkpIHtcbiAgICAgIGxldCBldmVudExpc3QgPSBldmVudHNbZXZfdHlwZV07XG4gICAgICBmb3IgKGxldCBkb21TZWxlY3RvciBpbiBldmVudExpc3QpIHtcbiAgICAgICAgaWYgKGV2ZW50TGlzdC5oYXNPd25Qcm9wZXJ0eShkb21TZWxlY3RvcikpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmZpbmQoZG9tU2VsZWN0b3IpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0ICRlbGVtZW50cyA9ICQodGhpcyk7XG4gICAgICAgICAgICBsZXQgZXZlbnRfbGlzdCA9ICRlbGVtZW50cy5hdHRyKGBzZGNfJHtldl90eXBlfWApIHx8IG51bGw7XG4gICAgICAgICAgICBpZiAoIWV2ZW50X2xpc3QpIGV2ZW50X2xpc3QgPSBbXTtcbiAgICAgICAgICAgIGVsc2UgZXZlbnRfbGlzdCA9IGV2ZW50X2xpc3Quc3BsaXQoXCIgXCIpO1xuICAgICAgICAgICAgY29uc3QgbmV3X2tleSA9IGB0aGlzLmV2ZW50XyR7ZG9tU2VsZWN0b3J9YDtcbiAgICAgICAgICAgIGlmIChldmVudF9saXN0LmluZGV4T2YobmV3X2tleSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgIGV2ZW50X2xpc3QucHVzaChuZXdfa2V5KTtcbiAgICAgICAgICAgICAgJGVsZW1lbnRzLmF0dHIoYHNkY18ke2V2X3R5cGV9YCwgZXZlbnRfbGlzdC5qb2luKFwiIFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVE9ETzogSXMgaXQgbmVlZGVkXG4gIC8vY29udHJvbGxlci5faXNFdmVudHNTZXQgPSB0cnVlO1xufVxuIl0sIm5hbWVzIjpbImdldENvbnRyb2xsZXIiLCJTVERfRVZFTlRfQkxBQ0tfTElTVCIsIlNURF9FVkVOVF9MSVNUIiwiT2JqZWN0Iiwia2V5cyIsIndpbmRvdyIsImZpbHRlciIsImtleSIsInRlc3QiLCJpbmNsdWRlcyIsIm1hcCIsIngiLCJzbGljZSIsImNoZWNrSWZFdmVudEZpdHMiLCJldl90eXBlIiwiZSIsInRhcmdldCIsImVsZW1lbnRVbmRlck1vdXNlIiwiZG9jdW1lbnQiLCJlbGVtZW50RnJvbVBvaW50IiwiY2xpZW50WCIsImNsaWVudFkiLCJjb250YWlucyIsIndpbmRvd0V2ZW50SGFuZGxlciIsImV2ZW50IiwidHlwZSIsImhhc093blByb3BlcnR5IiwibmFtZXNwYWNlIiwibGVuZ3RoIiwiJGVsbSIsIiQiLCJjb250cm9sbGVyIiwiaXNfZG9uZSIsImlzX2xhc3RfZWxlbSIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInN0b3BQcm9wYWdhdGlvbiIsImF0dHJzIiwiYXR0ciIsInNwbGl0IiwiZm9yRWFjaCIsImhhbmRsZXIiLCJzdGFydHNXaXRoIiwiZ2V0RXZlbnRzIiwiY2FsbCIsIl9wYXJlbnRDb250cm9sbGVyIiwicGFyZW50IiwicmVzIiwiaW5pdEV2ZW50cyIsIiR3aW5kb3ciLCJvZmYiLCJvbiIsInNldENvbnRyb2xsZXJFdmVudHMiLCJfaXNFdmVudHNTZXQiLCJldmVudHMiLCJldmVudExpc3QiLCJkb21TZWxlY3RvciIsImZpbmQiLCJlYWNoIiwiJGVsZW1lbnRzIiwiZXZlbnRfbGlzdCIsIm5ld19rZXkiLCJpbmRleE9mIiwicHVzaCIsImpvaW4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_dom_events.js\n\n}");
|
|
48
48
|
|
|
49
|
-
/***/ }
|
|
49
|
+
/***/ },
|
|
50
50
|
|
|
51
|
-
/***/ "./src/simpleDomControl/sdc_events.js"
|
|
51
|
+
/***/ "./src/simpleDomControl/sdc_events.js"
|
|
52
52
|
/*!********************************************!*\
|
|
53
53
|
!*** ./src/simpleDomControl/sdc_events.js ***!
|
|
54
54
|
\********************************************/
|
|
55
|
-
|
|
55
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
56
56
|
|
|
57
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log('No event: ' + name, controller);\n }\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log('No event handler: ' + name, controller);\n }\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n let list = [];\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n return Promise.all(list);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsR0FBR1MsT0FBTyxDQUFDUixNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3JDLElBQUlXLFVBQVUsR0FBR0YsT0FBTyxDQUFDVCxDQUFDLENBQUMsQ0FBQ0wsUUFBUSxDQUFDLENBQUNXLEtBQUssQ0FBQ0csT0FBTyxDQUFDVCxDQUFDLENBQUMsRUFBRUksSUFBSSxDQUFDO0lBQzdELElBQUksT0FBT08sVUFBVSxLQUFLLFdBQVcsRUFBRTtNQUNuQ0QsSUFBSSxDQUFDZCxJQUFJLENBQUNlLFVBQVUsQ0FBQztJQUN6QjtFQUNKO0VBRUEsT0FBT0MsT0FBTyxDQUFDQyxHQUFHLENBQUNILElBQUksQ0FBQztBQUM1QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzPzhiODgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9taXNlRHVtbXlGYWN0b3J5fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuXG4vKipcbiAqIEEgbGlzdCBvZiBoYW5kbGVyIChjb250cm9sbGVyKSBmb3IgdGhlIHJlZ2lzdGVyZWQgZXZlbnRzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaGFuZGxlckxpc3QgPSB7fTtcblxuLyoqXG4gKiBldmVudExpc3QgaXMgYSBtYXAgY29ubmVjdGlvbiB0aGUgZXZlbnQgdG8gYSByZXNwb25zaW5nIGZ1bmN0aW9uIG5hbWUuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBldmVudExpc3QgPSB7fTtcblxuLyoqXG4gKiBvbiBpcyBhIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGEgY29udHJvbGxlciB0byBhIGV2ZW50LiBUaGUgY29udHJvbGxlciBoYXMgdG9cbiAqIGltcGxlbWVudCB0aGUgdGhlIGhhbmRsZXIgZnVuY3Rpb24uIFRoZSBoYW5kbGVyIGZ1bmN0aW9ucyBieSBkZWZhdWx0IGhhcyB0aGUgc2FtZVxuICogbmFtZSBhcyB0aGUgZXZlbnQuIFlvdSBjYW4gdXNlIHRoZSBhcHAuZXZlbnRzLnNldEV2ZW50IGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGFcbiAqIGV2ZW50IHdpdGggYSBkaWZmZXJlbnQgbmFtZWQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSB0aGUgZXZlbnQgbmFtZSBTdHJpbmdcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSAgYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbihuYW1lLCBjb250cm9sbGVyKSB7XG4gICAgc2V0RXZlbnQobmFtZSk7XG4gICAgaWYgKCFldmVudExpc3QuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGNvbnNvbGUubG9nKCdObyBldmVudDogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGxldCBmdW5jTmFtZSA9IGV2ZW50TGlzdFtuYW1lXTtcbiAgICBpZiAoIWNvbnRyb2xsZXJbZnVuY05hbWVdKSB7XG4gICAgICAgIHJldHVybiBjb25zb2xlLmxvZygnTm8gZXZlbnQgaGFuZGxlcjogJyArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIGhhbmRsZXJMaXN0W25hbWVdLnB1c2goY29udHJvbGxlcik7XG59XG5cbi8qKlxuICogc2V0RXZlbnQgYWxsb3dzIHlvdSB0byByZWdpc3RlciBhIGV2ZW50IHdpdGggYSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50XG4gKiBuYW1lIGFzIHRoZSBldmVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIGV2ZW50IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmdW5jdGlvbk5hbWUgLSBmdW5jdGlvbiBuYW1lXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFdmVudChuYW1lLCBmdW5jdGlvbk5hbWUpIHtcbiAgICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgICAgICBmdW5jdGlvbk5hbWUgPSBuYW1lO1xuICAgIH1cblxuICAgIGlmICghZXZlbnRMaXN0W25hbWVdKSB7XG4gICAgICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgICAgaGFuZGxlckxpc3RbbmFtZV0gPSBbXTtcbiAgICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgICBmb3IgKGxldCBldmVudE5hbWUgaW4gaGFuZGxlckxpc3QpIHtcbiAgICAgICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlciA9PT0gaGFuZGxlckxpc3RbZXZlbnROYW1lXVtpXSkge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVyTGlzdFtldmVudE5hbWVdLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciB0cmlnZ2VycyB0aGUgZXZlbnQuIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIG9mIGFsbCByZWdpc3RlcmVkXG4gKiBjb250cm9sbGVyIGdldHMgY2FsbGVkLiBUaGUgcmV0dXJuZWQgUHJvbWlzZSByZXR1cm5zIGEgbGlzdCB3aXRoIGFsbFxuICogcmV0dXJuZWQgdmFsdWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn0gLSB3YWl0cyB0byByZXR1cm4gYWxsIHJldHVybiB2YWx1ZXMgb2YgdGhlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXIobmFtZSkge1xuICAgIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBuYW1lID0gYXJncy5zaGlmdCgpO1xuICAgIGlmKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiBwcm9taXNlRHVtbXlGYWN0b3J5KCk7XG4gICAgfVxuICAgIGxldCBoYW5kbGVyID0gaGFuZGxlckxpc3RbbmFtZV07XG4gICAgbGV0IGZ1bmNOYW1lID0gZXZlbnRMaXN0W25hbWVdO1xuXG4gICAgbGV0IGxpc3QgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGFuZGxlci5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgICAgICBpZiAodHlwZW9mIHJldHVybl92YWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgIGxpc3QucHVzaChyZXR1cm5fdmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn0iXSwibmFtZXMiOlsicHJvbWlzZUR1bW15RmFjdG9yeSIsImhhbmRsZXJMaXN0IiwiZXZlbnRMaXN0Iiwib24iLCJuYW1lIiwiY29udHJvbGxlciIsInNldEV2ZW50IiwiaGFzT3duUHJvcGVydHkiLCJjb25zb2xlIiwibG9nIiwiZnVuY05hbWUiLCJwdXNoIiwiZnVuY3Rpb25OYW1lIiwiYWxsT2ZmIiwiZXZlbnROYW1lIiwiaSIsImxlbmd0aCIsInNwbGljZSIsInRyaWdnZXIiLCJhcmdzIiwiQXJyYXkiLCJhcHBseSIsImFyZ3VtZW50cyIsInNoaWZ0IiwiaGFuZGxlciIsImxpc3QiLCJyZXR1cm5fdmFsIiwiUHJvbWlzZSIsImFsbCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n\n}");
|
|
57
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ allOff: () => (/* binding */ allOff),\n/* harmony export */ on: () => (/* binding */ on),\n/* harmony export */ setEvent: () => (/* binding */ setEvent),\n/* harmony export */ trigger: () => (/* binding */ trigger)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n/**\n * A list of handler (controller) for the registered events.\n * @type {{}}\n */\nlet handlerList = {};\n\n/**\n * eventList is a map connection the event to a responsing function name.\n * @type {{}}\n */\nlet eventList = {};\n\n/**\n * on is a function to register a controller to a event. The controller has to\n * implement the the handler function. The handler functions by default has the same\n * name as the event. You can use the app.events.setEvent function to register a\n * event with a different named function.\n *\n * @param {string} name - the event name String\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction on(name, controller) {\n setEvent(name);\n if (!eventList.hasOwnProperty(name)) {\n return console.log(\"No event: \" + name, controller);\n }\n let funcName = eventList[name];\n if (!controller[funcName]) {\n return console.log(\"No event handler: \" + name, controller);\n }\n handlerList[name].push(controller);\n}\n\n/**\n * setEvent allows you to register a event with a function with a different\n * name as the event.\n *\n * @param {string} name - event name\n * @param {string} functionName - function name\n */\nfunction setEvent(name, functionName) {\n if (!functionName) {\n functionName = name;\n }\n if (!eventList[name]) {\n eventList[name] = functionName;\n handlerList[name] = [];\n }\n}\n\n/**\n * allOff is to remove all events of the controller instance\n * ! important before destroying the instance.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n */\nfunction allOff(controller) {\n for (let eventName in handlerList) {\n if (handlerList.hasOwnProperty(eventName)) {\n for (let i = handlerList[eventName].length - 1; i >= 0; i--) {\n if (controller === handlerList[eventName][i]) {\n handlerList[eventName].splice(i, 1);\n }\n }\n }\n }\n}\n\n/**\n * trigger triggers the event. The handler function of all registered\n * controller gets called. The returned Promise returns a list with all\n * returned values.\n *\n * @param {string} name - event name\n * @returns {Promise<object>} - waits to return all return values of the handler\n */\nfunction trigger(name) {\n let args = Array.apply(null, arguments);\n name = args.shift();\n if (!handlerList.hasOwnProperty(name) || !eventList.hasOwnProperty(name)) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let handler = handlerList[name];\n let funcName = eventList[name];\n let list = [];\n for (let i = 0; i < handler.length; i++) {\n let return_val = handler[i][funcName].apply(handler[i], args);\n if (typeof return_val !== \"undefined\") {\n list.push(return_val);\n }\n }\n return Promise.all(list);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsRUFBRUEsQ0FBQyxHQUFHUyxPQUFPLENBQUNSLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDdkMsSUFBSVcsVUFBVSxHQUFHRixPQUFPLENBQUNULENBQUMsQ0FBQyxDQUFDTCxRQUFRLENBQUMsQ0FBQ1csS0FBSyxDQUFDRyxPQUFPLENBQUNULENBQUMsQ0FBQyxFQUFFSSxJQUFJLENBQUM7SUFDN0QsSUFBSSxPQUFPTyxVQUFVLEtBQUssV0FBVyxFQUFFO01BQ3JDRCxJQUFJLENBQUNkLElBQUksQ0FBQ2UsVUFBVSxDQUFDO0lBQ3ZCO0VBQ0Y7RUFFQSxPQUFPQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDO0FBQzFCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19ldmVudHMuanM/OGI4OCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlRHVtbXlGYWN0b3J5IH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbi8qKlxuICogQSBsaXN0IG9mIGhhbmRsZXIgKGNvbnRyb2xsZXIpIGZvciB0aGUgcmVnaXN0ZXJlZCBldmVudHMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBoYW5kbGVyTGlzdCA9IHt9O1xuXG4vKipcbiAqIGV2ZW50TGlzdCBpcyBhIG1hcCBjb25uZWN0aW9uIHRoZSBldmVudCB0byBhIHJlc3BvbnNpbmcgZnVuY3Rpb24gbmFtZS5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGV2ZW50TGlzdCA9IHt9O1xuXG4vKipcbiAqIG9uIGlzIGEgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYSBjb250cm9sbGVyIHRvIGEgZXZlbnQuIFRoZSBjb250cm9sbGVyIGhhcyB0b1xuICogaW1wbGVtZW50IHRoZSB0aGUgaGFuZGxlciBmdW5jdGlvbi4gVGhlIGhhbmRsZXIgZnVuY3Rpb25zIGJ5IGRlZmF1bHQgaGFzIHRoZSBzYW1lXG4gKiBuYW1lIGFzIHRoZSBldmVudC4gWW91IGNhbiB1c2UgdGhlIGFwcC5ldmVudHMuc2V0RXZlbnQgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYVxuICogZXZlbnQgd2l0aCBhIGRpZmZlcmVudCBuYW1lZCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIHRoZSBldmVudCBuYW1lIFN0cmluZ1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtICBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uKG5hbWUsIGNvbnRyb2xsZXIpIHtcbiAgc2V0RXZlbnQobmFtZSk7XG4gIGlmICghZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUubG9nKFwiTm8gZXZlbnQ6IFwiICsgbmFtZSwgY29udHJvbGxlcik7XG4gIH1cblxuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG4gIGlmICghY29udHJvbGxlcltmdW5jTmFtZV0pIHtcbiAgICByZXR1cm4gY29uc29sZS5sb2coXCJObyBldmVudCBoYW5kbGVyOiBcIiArIG5hbWUsIGNvbnRyb2xsZXIpO1xuICB9XG5cbiAgaGFuZGxlckxpc3RbbmFtZV0ucHVzaChjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBzZXRFdmVudCBhbGxvd3MgeW91IHRvIHJlZ2lzdGVyIGEgZXZlbnQgd2l0aCBhIGZ1bmN0aW9uIHdpdGggYSBkaWZmZXJlbnRcbiAqIG5hbWUgYXMgdGhlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gZXZlbnQgbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSAtIGZ1bmN0aW9uIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEV2ZW50KG5hbWUsIGZ1bmN0aW9uTmFtZSkge1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIGZ1bmN0aW9uTmFtZSA9IG5hbWU7XG4gIH1cblxuICBpZiAoIWV2ZW50TGlzdFtuYW1lXSkge1xuICAgIGV2ZW50TGlzdFtuYW1lXSA9IGZ1bmN0aW9uTmFtZTtcbiAgICBoYW5kbGVyTGlzdFtuYW1lXSA9IFtdO1xuICB9XG59XG5cbi8qKlxuICogYWxsT2ZmIGlzIHRvIHJlbW92ZSBhbGwgZXZlbnRzIG9mIHRoZSBjb250cm9sbGVyIGluc3RhbmNlXG4gKiAhIGltcG9ydGFudCBiZWZvcmUgZGVzdHJveWluZyB0aGUgaW5zdGFuY2UuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgaW5zdGFuY2Ugb2YgYSBKYXZhU2NyaXB0IGNvbnRyb2xsZXIgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsT2ZmKGNvbnRyb2xsZXIpIHtcbiAgZm9yIChsZXQgZXZlbnROYW1lIGluIGhhbmRsZXJMaXN0KSB7XG4gICAgaWYgKGhhbmRsZXJMaXN0Lmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSBoYW5kbGVyTGlzdFtldmVudE5hbWVdLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVyID09PSBoYW5kbGVyTGlzdFtldmVudE5hbWVdW2ldKSB7XG4gICAgICAgICAgaGFuZGxlckxpc3RbZXZlbnROYW1lXS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0cmlnZ2VyIHRyaWdnZXJzIHRoZSBldmVudC4gVGhlIGhhbmRsZXIgZnVuY3Rpb24gb2YgYWxsIHJlZ2lzdGVyZWRcbiAqIGNvbnRyb2xsZXIgZ2V0cyBjYWxsZWQuIFRoZSByZXR1cm5lZCBQcm9taXNlIHJldHVybnMgYSBsaXN0IHdpdGggYWxsXG4gKiByZXR1cm5lZCB2YWx1ZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBldmVudCBuYW1lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxvYmplY3Q+fSAtIHdhaXRzIHRvIHJldHVybiBhbGwgcmV0dXJuIHZhbHVlcyBvZiB0aGUgaGFuZGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpZ2dlcihuYW1lKSB7XG4gIGxldCBhcmdzID0gQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgbmFtZSA9IGFyZ3Muc2hpZnQoKTtcbiAgaWYgKCFoYW5kbGVyTGlzdC5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCAhZXZlbnRMaXN0Lmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgcmV0dXJuIHByb21pc2VEdW1teUZhY3RvcnkoKTtcbiAgfVxuICBsZXQgaGFuZGxlciA9IGhhbmRsZXJMaXN0W25hbWVdO1xuICBsZXQgZnVuY05hbWUgPSBldmVudExpc3RbbmFtZV07XG5cbiAgbGV0IGxpc3QgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgcmV0dXJuX3ZhbCA9IGhhbmRsZXJbaV1bZnVuY05hbWVdLmFwcGx5KGhhbmRsZXJbaV0sIGFyZ3MpO1xuICAgIGlmICh0eXBlb2YgcmV0dXJuX3ZhbCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgbGlzdC5wdXNoKHJldHVybl92YWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLmFsbChsaXN0KTtcbn1cbiJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwiaGFuZGxlckxpc3QiLCJldmVudExpc3QiLCJvbiIsIm5hbWUiLCJjb250cm9sbGVyIiwic2V0RXZlbnQiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnNvbGUiLCJsb2ciLCJmdW5jTmFtZSIsInB1c2giLCJmdW5jdGlvbk5hbWUiLCJhbGxPZmYiLCJldmVudE5hbWUiLCJpIiwibGVuZ3RoIiwic3BsaWNlIiwidHJpZ2dlciIsImFyZ3MiLCJBcnJheSIsImFwcGx5IiwiYXJndW1lbnRzIiwic2hpZnQiLCJoYW5kbGVyIiwibGlzdCIsInJldHVybl92YWwiLCJQcm9taXNlIiwiYWxsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_events.js\n\n}");
|
|
58
58
|
|
|
59
|
-
/***/ }
|
|
59
|
+
/***/ },
|
|
60
60
|
|
|
61
|
-
/***/ "./src/simpleDomControl/sdc_main.js"
|
|
61
|
+
/***/ "./src/simpleDomControl/sdc_main.js"
|
|
62
62
|
/*!******************************************!*\
|
|
63
63
|
!*** ./src/simpleDomControl/sdc_main.js ***!
|
|
64
64
|
\******************************************/
|
|
65
|
-
|
|
65
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
66
66
|
|
|
67
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n 'classname': 'class'\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === 'string') {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data('handler', element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith('on')) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass('_bind_to_update_handler _with_handler');\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return '';\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || '',\n LANGUAGE_CODE: window.LANGUAGE_CODE || 'en',\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || '0.0',\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $('<div></div>');\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, '');\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n * @param overwrite\n */\n register: (Controller, overwrite = false) => {\n let tagName = app.controllerToTag(Controller);\n if (!_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] || overwrite) {\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n }\n return {\n addMixin: (...mixins) => {}\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, params, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || 'api';\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a['url-link']) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)('onNavLink', a['url-link']);\n } else {\n window.location.href = a['url'];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === 'redirect') {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container, controller);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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VUFBVSxDQUFDO01BQ3pCLElBQUksQ0FBQzhDLGdCQUFnQixFQUFFO1FBQ3JCL0gsa0ZBQThCLENBQUMrRCxjQUFjLENBQUM7TUFDaEQ7TUFDQSxPQUFPa0IsVUFBVTtJQUNuQixDQUFDLENBQUM7RUFFSixDQUFDO0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0V2RixPQUFPLEVBQUVBLENBQUNzSSxJQUFJLEVBQUVDLGNBQWMsS0FBSztJQUNqQyxPQUFPdkkscURBQU8sQ0FBQ3NJLElBQUksRUFBRUMsY0FBYyxDQUFDO0VBQ3RDO0FBQ0YsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfbWFpbi5qcz8wOGZjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNhbWVsQ2FzZVRvVGFnTmFtZSxcbiAgZ2V0Qm9keSxcbiAgdXBsb2FkRmlsZUZvcm1EYXRhLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7XG4gIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICByZWxvYWRIVE1MQ29udHJvbGxlcixcbiAgREFUQV9DT05UUk9MTEVSX0tFWSxcbiAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVmcmVzaFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7XG4gIEdsb2JhbCxcbiAgY29udHJvbGxlckxpc3QsXG4gIHRhZ0xpc3QsXG4gIHJlc2V0Q2hpbGRyZW4sXG4gIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCxcbiAgcHJlcGFyZVJlZnJlc2hQcm9jZXNzXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge2luaXRFdmVudHMsIFNURF9FVkVOVF9MSVNULCB3aW5kb3dFdmVudEhhbmRsZXJ9IGZyb20gXCIuL3NkY19kb21fZXZlbnRzLmpzXCI7XG5pbXBvcnQge3JlY29uY2lsZX0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gIGxldCAkbmV3X2VsZW0sIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICRuZXdfZWxlbSA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbGVtZW50KSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGB0aGlzLiR7ZWxlbWVudC5uYW1lfWA7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgIGlzX3NlbGYgPSB0cnVlXG4gIH1cblxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoUFJPUEVSVElFU19VUERBVEVbay50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIGsgPSBQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNfc2VsZikge1xuICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICB9XG5cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn1cblxud2luZG93LnNkY0RvbSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBwcm9wcywgLi4uY2hpbGRyZW4pIHtcbiAgaWYgKCF0YWdOYW1lKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0ICRuZXdfZWxlbSA9IHNkY0RvbUZyYWdtZW50KHRhZ05hbWUsIHByb3BzKTtcbiAgZm9yIChjb25zdCBjIG9mIGNoaWxkcmVuKSB7XG4gICAgJG5ld19lbGVtLmFwcGVuZChjKTtcbiAgfVxuICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCAnJyxcbiAgTEFOR1VBR0VfQ09ERTogd2luZG93LkxBTkdVQUdFX0NPREUgfHwgJ2VuJyxcbiAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgVkVSU0lPTjogd2luZG93LlZFUlNJT04gfHwgJzAuMCcsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpID8gZXZlbnQudHlwZSA6IGV2ZW50O1xuICAgICAgICAgIGlmICghU1REX0VWRU5UX0xJU1QuaW5jbHVkZXMoZXZfdHlwZSkpIHtcbiAgICAgICAgICAgIFNURF9FVkVOVF9MSVNULnB1c2goZXZfdHlwZSk7XG4gICAgICAgICAgICAkKHdpbmRvdykub24oZXZfdHlwZSwgd2luZG93RXZlbnRIYW5kbGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFwcC5fb3JpZ2luX3RyaWdnZXIuY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJCgnPGRpdj48L2Rpdj4nKTtcbiAgICBHbG9iYWwuZm9yRWFjaCgodGFnTmFtZSkgPT4ge1xuICAgICAgY29uc3QgQ29udHJvbGxlckNsYXNzID0gY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMF07XG4gICAgICAkZ2xvYmFsRGl2LmFwcGVuZChgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmApO1xuICAgIH0pO1xuXG4gICAgY29uc3Qge3JlZnJlc2hQcm9jZXNzfSA9IHByZXBhcmVSZWZyZXNoUHJvY2VzcyhudWxsLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuXG4gICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGdsb2JhbERpdiwgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCBnZXRCb2R5KCksIGFwcC5yb290Q29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfVxuICAgICQuZm4uc2FmZUVtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlRW1wdHkoJCh0aGlzKSk7XG4gICAgfVxuICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICB9XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgJycpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqL1xuICByZWdpc3Rlckdsb2JhbDogKENvbnRyb2xsZXIpID0+IHtcbiAgICBhcHAucmVnaXN0ZXIoQ29udHJvbGxlcik7XG4gICAgbGV0IHRhZ05hbWUgPSBDb250cm9sbGVyLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICBHbG9iYWwucHVzaCh0YWdOYW1lKTtcbiAgfSxcblxuICBjbGVhbkNhY2hlOiAoKSA9PiB7XG4gICAgY2xlYW5DYWNoZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVcbiAgICovXG4gIHJlZ2lzdGVyOiAoQ29udHJvbGxlciwgb3ZlcndyaXRlID0gZmFsc2UpID0+IHtcbiAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgaWYgKCFjb250cm9sbGVyTGlzdFt0YWdOYW1lXSB8fCBvdmVyd3JpdGUpIHtcbiAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gbWl4aW5zIENvbnRyb2xsZXIgdGFnIG5hbWVzXG4gICAgICAgICAqL1xuICAgICAgICBhZGRNaXhpbjogKC4uLm1peGlucykgPT4ge1xuICAgICAgICAgIGZvciAobGV0IG1peGluIG9mIG1peGlucykge1xuICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7fVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuICBwb3N0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5DU1JGX1RPS0VOID0gYXBwLkNTUkZfVE9LRU47XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICogQHJldHVybiB7UHJvbWlzZX1cbiAgICovXG4gIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgIGNvbnN0IHAgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXR1cm4gbWV0aG9kKHVybCwgYXJncykudGhlbigoYSwgYiwgYykgPT4ge1xuICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVsndXJsJ107XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBhID0gYS5yZXNwb25zZUpTT047XG4gICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGEsIGIsIGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcDtcblxuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgIC50aGVuKHJlc29sdmUpLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cblxuICAvKipcbiAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERvbVxuICAgKi9cbiAgc2FmZVJlbW92ZTogKCRlbGVtKSA9PiB7XG4gICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAkZWxlbS5maW5kKGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29udHJvbGxlciA9ICQodGhpcykuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICAgICAgY29udHJvbGxlciAmJiBjb250cm9sbGVyLnJlbW92ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICovXG4gIHJlbG9hZENvbnRyb2xsZXI6IChjb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgfSk7XG4gIH0sXG5cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJHZpcnR1YWxOb2RlXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkcmVhbE5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAgICovXG4gIHJlY29uY2lsZTogKGNvbnRyb2xsZXIsICR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlID0gbnVsbCwgcHJvY2VzcyA9IG51bGwpID0+IHtcbiAgICBpZiAoISRyZWFsTm9kZSkge1xuICAgICAgbGV0ICR0ZW1wID0gY29udHJvbGxlci4kY29udGFpbmVyLmNsb25lKCkuZW1wdHkoKTtcbiAgICAgICR0ZW1wLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICAkdGVtcC5yZW1vdmVDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgICAgICR0ZW1wLmFwcGVuZCgkdmlydHVhbE5vZGUpO1xuICAgICAgJHZpcnR1YWxOb2RlID0gJHRlbXA7XG4gICAgfVxuXG4gICAgJHJlYWxOb2RlID0gJHJlYWxOb2RlID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgIGNvbnN0IHtyZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2Vzc30gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MocHJvY2VzcywgY29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVmcmVzaCgkdmlydHVhbE5vZGUsIGNvbnRyb2xsZXIsIHJlZnJlc2hQcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSk7XG4gICAgICByZXNldENoaWxkcmVuKGNvbnRyb2xsZXIpO1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9KTtcblxuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgcmV0dXJuIHJlZnJlc2goJGRvbSwgbGVhZkNvbnRyb2xsZXIpO1xuICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsIm92ZXJ3cml0ZSIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n\n}");
|
|
67
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ app: () => (/* binding */ app)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n/* harmony import */ var _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AbstractSDC.js */ \"./src/simpleDomControl/AbstractSDC.js\");\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sdc_dom_events.js */ \"./src/simpleDomControl/sdc_dom_events.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sdc_server_call.js */ \"./src/simpleDomControl/sdc_server_call.js\");\n\n\n\n\n\n\n\n\nconst PROPERTIES_UPDATE = {\n classname: \"class\"\n};\nlet sdcDomFragment = function (element, props) {\n let $new_elem,\n is_self = false;\n if (typeof element === \"string\") {\n $new_elem = $(document.createElement(element));\n } else {\n const tagName = `this.${element.name}`;\n $new_elem = $(document.createElement(tagName));\n $new_elem.data(\"handler\", element);\n is_self = true;\n }\n if (props) {\n Object.entries(props).forEach(([k, v]) => {\n if (k.startsWith(\"on\")) {\n $new_elem[0].addEventListener(k.substring(2).toLowerCase(), v);\n } else {\n if (PROPERTIES_UPDATE[k.toLowerCase()]) {\n k = PROPERTIES_UPDATE[k.toLowerCase()];\n }\n $new_elem[0].setAttribute(k, v);\n }\n });\n }\n if (is_self) {\n $new_elem.addClass(\"_bind_to_update_handler _with_handler\");\n }\n return $new_elem;\n};\nwindow.sdcDom = function (tagName, props, ...children) {\n if (!tagName) {\n return \"\";\n }\n const $new_elem = sdcDomFragment(tagName, props);\n for (const c of children) {\n $new_elem.append(c);\n }\n return $new_elem;\n};\nlet app = {\n CSRF_TOKEN: window.CSRF_TOKEN || \"\",\n LANGUAGE_CODE: window.LANGUAGE_CODE || \"en\",\n DEBUG: window.DEBUG || false,\n VERSION: window.VERSION || \"0.0\",\n tagNames: [],\n Global: _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global,\n rootController: null,\n globalRootController: null,\n _isInit: false,\n _origin_trigger: null,\n _globalControllerClasses: [],\n init_sdc: () => {\n if (!app._isInit) {\n app._isInit = true;\n if (!app._origin_trigger) {\n app._origin_trigger = $.fn.trigger;\n $.fn.trigger = function (event) {\n const ev_type = {}.hasOwnProperty.call(event, \"type\") ? event.type : event;\n if (!_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.includes(ev_type)) {\n _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.STD_EVENT_LIST.push(ev_type);\n $(window).on(ev_type, _sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.windowEventHandler);\n }\n return app._origin_trigger.call(this, event);\n };\n app.updateJquery();\n } else {\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.close)();\n }\n (0,_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_6__.isConnected)();\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.initEvents)();\n app.rootController = app.rootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n app.globalRootController = app.globalRootController || new _AbstractSDC_js__WEBPACK_IMPORTED_MODULE_2__.AbstractSDC();\n }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n const $globalDiv = $(\"<div></div>\");\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.forEach(tagName => {\n const ControllerClass = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][0];\n $globalDiv.append(`<${ControllerClass.prototype._tagName}></${ControllerClass.prototype._tagName}>`);\n });\n const {\n refreshProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(null, app.rootController);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $globalDiv, app.globalRootController, refreshProcess).then(() => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController, refreshProcess).then(res => {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n return res;\n });\n });\n },\n updateJquery: () => {\n $.fn.safeReplace = function ($elem) {\n return app.safeReplace($(this), $elem);\n };\n $.fn.safeEmpty = function () {\n return app.safeEmpty($(this));\n };\n $.fn.safeRemove = function () {\n return app.safeRemove($(this));\n };\n },\n controllerToTag: Controller => {\n let tagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(Controller.name);\n return tagName.replace(/-controller$/, \"\");\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n registerGlobal: Controller => {\n app.register(Controller);\n let tagName = Controller.prototype._tagName;\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global.push(tagName);\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n * @param overwrite\n */\n register: (Controller, overwrite = false) => {\n let tagName = app.controllerToTag(Controller);\n if (!_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] || overwrite) {\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [Controller, []];\n Controller.prototype._tagName = tagName;\n return {\n /**\n *\n * @param {Array<string>} mixins Controller tag names\n */\n addMixin: (...mixins) => {\n for (let mixin of mixins) {\n let mixinName;\n if (typeof mixin === \"string\") {\n mixinName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.camelCaseToTagName)(mixin);\n } else if (mixin) {\n mixinName = app.controllerToTag(mixin);\n }\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName][1].push(mixinName);\n }\n }\n };\n }\n return {\n addMixin: (...mixins) => {}\n };\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n post: (controller, url, args) => {\n if (!args) {\n args = {};\n }\n args.CSRF_TOKEN = app.CSRF_TOKEN;\n return app.ajax(controller, url, args, $.post);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @return {Promise}\n */\n get: (controller, url, args) => {\n return app.ajax(controller, url, args, $.get);\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {string} url\n * @param {object} args\n * @param {function} method $.get or $.post\n * @return {Promise}\n */\n ajax: (controller, url, args, method) => {\n if (!args) {\n args = {};\n }\n args.VERSION = app.VERSION;\n args._method = args._method || \"api\";\n const p = new Promise((resolve, reject) => {\n return method(url, args).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === \"redirect\") {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)(\"onNavLink\", a[\"url-link\"]);\n } else {\n p.then(() => {\n app.refresh(controller.$container);\n });\n }\n }).catch(reject);\n });\n return p;\n },\n submitFormAndUpdateView: (controller, form, url, method) => {\n let formData = new FormData(form);\n const redirector = a => {\n if (a[\"url-link\"]) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_5__.trigger)(\"onNavLink\", a[\"url-link\"]);\n } else {\n window.location.href = a[\"url\"];\n }\n };\n const p = new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then((a, b, c) => {\n resolve(a, b, c);\n if (a.status === \"redirect\") {\n redirector(a);\n } else {\n p.then(() => {\n app.refresh(controller.$container, controller);\n });\n }\n }).catch((a, b, c) => {\n if (a.status === 301) {\n a = a.responseJSON;\n redirector(a);\n resolve(a, b, c);\n } else {\n reject(a, b, c);\n }\n });\n });\n return p;\n },\n submitForm: (form, url, method) => {\n let formData = new FormData(form);\n return new Promise((resolve, reject) => {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uploadFileFormData)(formData, url || form.action, method || form.method).then(resolve).catch(reject);\n });\n },\n /**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\n getController: $elem => (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.getController)($elem),\n /**\n * safeEmpty removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM container to be emptyed\n */\n safeEmpty: $elem => {\n let $children = $elem.children();\n $children.each(function (_, element) {\n let $element = $(element);\n app.safeRemove($element);\n });\n return $elem;\n },\n /**\n * safeReplace removes all content of a dom\n * and deletes all child controller safely.\n *\n * @param $elem - jQuery DOM to be repleaced\n * @param $new - jQuery new DOM container\n */\n safeReplace: ($elem, $new) => {\n $new.insertBefore($elem);\n return app.safeRemove($elem);\n },\n /**\n * safeRemove removes a dom and deletes all child controller safely.\n *\n * @param $elem - jQuery Dom\n */\n safeRemove: $elem => {\n $elem.each(function () {\n let $this = $(this);\n if ($this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`)) {\n $this.data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`).remove();\n }\n });\n $elem.find(`.${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS}`).each(function () {\n const controller = $(this).data(`${_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY}`);\n controller && controller.remove();\n });\n return $elem.remove();\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @return {Promise<jQuery>}\n */\n reloadController: controller => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadHTMLController)(controller).then(html => {\n let $html = $(html);\n return app.reconcile(controller, $html);\n });\n },\n /**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $virtualNode\n * @param {jquery} $realNode\n * @param {Object} process - Process object containing the refresh process\n */\n reconcile: (controller, $virtualNode, $realNode = null, process = null) => {\n if (!$realNode) {\n let $temp = controller.$container.clone().empty();\n $temp.data(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY, null);\n $temp.removeClass(_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.CONTROLLER_CLASS);\n $temp.append($virtualNode);\n $virtualNode = $temp;\n }\n $realNode = $realNode ?? controller.$container;\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.prepareRefreshProcess)(process, controller);\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($virtualNode, controller, refreshProcess).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reconcile)($virtualNode, $realNode);\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.resetChildren)(controller);\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @return {Promise<void>}\n */\n refresh: ($dom, leafController = null) => {\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.refresh)($dom, leafController);\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q21GLFVBQVUsQ0FBQztNQUN6QixJQUFJLENBQUM2QyxnQkFBZ0IsRUFBRTtRQUNyQi9ILGtGQUE4QixDQUFDZ0UsY0FBYyxDQUFDO01BQ2hEO01BQ0EsT0FBT2tCLFVBQVU7SUFDbkIsQ0FBQyxDQUFDO0VBQ0osQ0FBQztFQUVEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNFeEYsT0FBTyxFQUFFQSxDQUFDc0ksSUFBSSxFQUFFQyxjQUFjLEdBQUcsSUFBSSxLQUFLO0lBQ3hDLE9BQU92SSxxREFBTyxDQUFDc0ksSUFBSSxFQUFFQyxjQUFjLENBQUM7RUFDdEM7QUFDRixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY2FtZWxDYXNlVG9UYWdOYW1lLFxuICBnZXRCb2R5LFxuICB1cGxvYWRGaWxlRm9ybURhdGEsXG59IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtcbiAgcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIsXG4gIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICBEQVRBX0NPTlRST0xMRVJfS0VZLFxuICBDT05UUk9MTEVSX0NMQVNTLFxuICBnZXRDb250cm9sbGVyLFxuICBjbGVhbkNhY2hlLFxuICByZWZyZXNoLFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RTREMgfSBmcm9tIFwiLi9BYnN0cmFjdFNEQy5qc1wiO1xuaW1wb3J0IHtcbiAgR2xvYmFsLFxuICBjb250cm9sbGVyTGlzdCxcbiAgdGFnTGlzdCxcbiAgcmVzZXRDaGlsZHJlbixcbiAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoLFxuICBwcmVwYXJlUmVmcmVzaFByb2Nlc3MsXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQge1xuICBpbml0RXZlbnRzLFxuICBTVERfRVZFTlRfTElTVCxcbiAgd2luZG93RXZlbnRIYW5kbGVyLFxufSBmcm9tIFwiLi9zZGNfZG9tX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHsgcmVjb25jaWxlIH0gZnJvbSBcIi4vc2RjX3ZpZXcuanNcIjtcbmltcG9ydCB7IHRyaWdnZXIgfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQgeyBpc0Nvbm5lY3RlZCwgY2xvc2UgfSBmcm9tIFwiLi9zZGNfc2VydmVyX2NhbGwuanNcIjtcblxuY29uc3QgUFJPUEVSVElFU19VUERBVEUgPSB7IGNsYXNzbmFtZTogXCJjbGFzc1wiIH07XG5cbmxldCBzZGNEb21GcmFnbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBwcm9wcykge1xuICBsZXQgJG5ld19lbGVtLFxuICAgIGlzX3NlbGYgPSBmYWxzZTtcbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG4gICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpO1xuICAgICRuZXdfZWxlbS5kYXRhKFwiaGFuZGxlclwiLCBlbGVtZW50KTtcbiAgICBpc19zZWxmID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChwcm9wcykge1xuICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgIGlmIChrLnN0YXJ0c1dpdGgoXCJvblwiKSkge1xuICAgICAgICAkbmV3X2VsZW1bMF0uYWRkRXZlbnRMaXN0ZW5lcihrLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChQUk9QRVJUSUVTX1VQREFURVtrLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cbiAgICAgICAgJG5ld19lbGVtWzBdLnNldEF0dHJpYnV0ZShrLCB2KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChpc19zZWxmKSB7XG4gICAgJG5ld19lbGVtLmFkZENsYXNzKFwiX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlclwiKTtcbiAgfVxuXG4gIHJldHVybiAkbmV3X2VsZW07XG59O1xuXG53aW5kb3cuc2RjRG9tID0gZnVuY3Rpb24gKHRhZ05hbWUsIHByb3BzLCAuLi5jaGlsZHJlbikge1xuICBpZiAoIXRhZ05hbWUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICBjb25zdCAkbmV3X2VsZW0gPSBzZGNEb21GcmFnbWVudCh0YWdOYW1lLCBwcm9wcyk7XG4gIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICRuZXdfZWxlbS5hcHBlbmQoYyk7XG4gIH1cbiAgcmV0dXJuICRuZXdfZWxlbTtcbn07XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICBDU1JGX1RPS0VOOiB3aW5kb3cuQ1NSRl9UT0tFTiB8fCBcIlwiLFxuICBMQU5HVUFHRV9DT0RFOiB3aW5kb3cuTEFOR1VBR0VfQ09ERSB8fCBcImVuXCIsXG4gIERFQlVHOiB3aW5kb3cuREVCVUcgfHwgZmFsc2UsXG4gIFZFUlNJT046IHdpbmRvdy5WRVJTSU9OIHx8IFwiMC4wXCIsXG4gIHRhZ05hbWVzOiBbXSxcbiAgR2xvYmFsOiBHbG9iYWwsXG4gIHJvb3RDb250cm9sbGVyOiBudWxsLFxuICBnbG9iYWxSb290Q29udHJvbGxlcjogbnVsbCxcbiAgX2lzSW5pdDogZmFsc2UsXG4gIF9vcmlnaW5fdHJpZ2dlcjogbnVsbCxcbiAgX2dsb2JhbENvbnRyb2xsZXJDbGFzc2VzOiBbXSxcblxuICBpbml0X3NkYzogKCkgPT4ge1xuICAgIGlmICghYXBwLl9pc0luaXQpIHtcbiAgICAgIGFwcC5faXNJbml0ID0gdHJ1ZTtcbiAgICAgIGlmICghYXBwLl9vcmlnaW5fdHJpZ2dlcikge1xuICAgICAgICBhcHAuX29yaWdpbl90cmlnZ2VyID0gJC5mbi50cmlnZ2VyO1xuICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICBjb25zdCBldl90eXBlID0ge30uaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgXCJ0eXBlXCIpXG4gICAgICAgICAgICA/IGV2ZW50LnR5cGVcbiAgICAgICAgICAgIDogZXZlbnQ7XG4gICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXBwLl9vcmlnaW5fdHJpZ2dlci5jYWxsKHRoaXMsIGV2ZW50KTtcbiAgICAgICAgfTtcblxuICAgICAgICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9zZSgpO1xuICAgICAgfVxuXG4gICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgIGFwcC5nbG9iYWxSb290Q29udHJvbGxlciA9IGFwcC5nbG9iYWxSb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICB9XG5cbiAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICBjb25zdCAkZ2xvYmFsRGl2ID0gJChcIjxkaXY+PC9kaXY+XCIpO1xuICAgIEdsb2JhbC5mb3JFYWNoKCh0YWdOYW1lKSA9PiB7XG4gICAgICBjb25zdCBDb250cm9sbGVyQ2xhc3MgPSBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVswXTtcbiAgICAgICRnbG9iYWxEaXYuYXBwZW5kKFxuICAgICAgICBgPCR7Q29udHJvbGxlckNsYXNzLnByb3RvdHlwZS5fdGFnTmFtZX0+PC8ke0NvbnRyb2xsZXJDbGFzcy5wcm90b3R5cGUuX3RhZ05hbWV9PmAsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWZyZXNoUHJvY2VzcyB9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKG51bGwsIGFwcC5yb290Q29udHJvbGxlcik7XG5cbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICBhcHAudGFnTmFtZXMsXG4gICAgICAkZ2xvYmFsRGl2LFxuICAgICAgYXBwLmdsb2JhbFJvb3RDb250cm9sbGVyLFxuICAgICAgcmVmcmVzaFByb2Nlc3MsXG4gICAgKS50aGVuKCgpID0+IHtcbiAgICAgIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICAgICAgYXBwLnRhZ05hbWVzLFxuICAgICAgICBnZXRCb2R5KCksXG4gICAgICAgIGFwcC5yb290Q29udHJvbGxlcixcbiAgICAgICAgcmVmcmVzaFByb2Nlc3MsXG4gICAgICApLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gocmVmcmVzaFByb2Nlc3MpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlSnF1ZXJ5OiAoKSA9PiB7XG4gICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgfTtcbiAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgIH07XG4gICAgJC5mbi5zYWZlUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGFwcC5zYWZlUmVtb3ZlKCQodGhpcykpO1xuICAgIH07XG4gIH0sXG5cbiAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgcmV0dXJuIHRhZ05hbWUucmVwbGFjZSgvLWNvbnRyb2xsZXIkLywgXCJcIik7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICovXG4gIHJlZ2lzdGVyR2xvYmFsOiAoQ29udHJvbGxlcikgPT4ge1xuICAgIGFwcC5yZWdpc3RlcihDb250cm9sbGVyKTtcbiAgICBsZXQgdGFnTmFtZSA9IENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lO1xuICAgIEdsb2JhbC5wdXNoKHRhZ05hbWUpO1xuICB9LFxuXG4gIGNsZWFuQ2FjaGU6ICgpID0+IHtcbiAgICBjbGVhbkNhY2hlKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICogQHBhcmFtIG92ZXJ3cml0ZVxuICAgKi9cbiAgcmVnaXN0ZXI6IChDb250cm9sbGVyLCBvdmVyd3JpdGUgPSBmYWxzZSkgPT4ge1xuICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICBpZiAoIWNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdIHx8IG92ZXJ3cml0ZSkge1xuICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbQ29udHJvbGxlciwgW11dO1xuICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICovXG4gICAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7XG4gICAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW5OYW1lO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICBtaXhpbk5hbWUgPSBjYW1lbENhc2VUb1RhZ05hbWUobWl4aW4pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICBtaXhpbk5hbWUgPSBhcHAuY29udHJvbGxlclRvVGFnKG1peGluKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdLnB1c2gobWl4aW5OYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHt9LFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IHt9O1xuICAgIH1cblxuICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQucG9zdCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgYXJncywgJC5nZXQpO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cbiAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICBhcmdzID0ge307XG4gICAgfVxuXG4gICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgYXJncy5fbWV0aG9kID0gYXJncy5fbWV0aG9kIHx8IFwiYXBpXCI7XG5cbiAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IFwicmVkaXJlY3RcIikge1xuICAgICAgICAgICAgdHJpZ2dlcihcIm9uTmF2TGlua1wiLCBhW1widXJsLWxpbmtcIl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2gocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICBpZiAoYVtcInVybC1saW5rXCJdKSB7XG4gICAgICAgIHRyaWdnZXIoXCJvbk5hdkxpbmtcIiwgYVtcInVybC1saW5rXCJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYVtcInVybFwiXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsIHx8IGZvcm0uYWN0aW9uLCBtZXRob2QgfHwgZm9ybS5tZXRob2QpXG4gICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IFwicmVkaXJlY3RcIikge1xuICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgaWYgKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwgfHwgZm9ybS5hY3Rpb24sIG1ldGhvZCB8fCBmb3JtLm1ldGhvZClcbiAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgLmNhdGNoKHJlamVjdCk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICovXG4gIGdldENvbnRyb2xsZXI6ICgkZWxlbSkgPT4gZ2V0Q29udHJvbGxlcigkZWxlbSksXG5cbiAgLyoqXG4gICAqIHNhZmVFbXB0eSByZW1vdmVzIGFsbCBjb250ZW50IG9mIGEgZG9tXG4gICAqIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICpcbiAgICogQHBhcmFtICRlbGVtIC0galF1ZXJ5IERPTSBjb250YWluZXIgdG8gYmUgZW1wdHllZFxuICAgKi9cbiAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICBsZXQgJGNoaWxkcmVuID0gJGVsZW0uY2hpbGRyZW4oKTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgIGFwcC5zYWZlUmVtb3ZlKCRlbGVtZW50KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbTtcbiAgfSxcblxuICAvKipcbiAgICogc2FmZVJlcGxhY2UgcmVtb3ZlcyBhbGwgY29udGVudCBvZiBhIGRvbVxuICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBET00gdG8gYmUgcmVwbGVhY2VkXG4gICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAqL1xuICBzYWZlUmVwbGFjZTogKCRlbGVtLCAkbmV3KSA9PiB7XG4gICAgJG5ldy5pbnNlcnRCZWZvcmUoJGVsZW0pO1xuICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIHNhZmVSZW1vdmUgcmVtb3ZlcyBhIGRvbSBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAqXG4gICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICovXG4gIHNhZmVSZW1vdmU6ICgkZWxlbSkgPT4ge1xuICAgICRlbGVtLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGlmICgkdGhpcy5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCkpIHtcbiAgICAgICAgJHRoaXMuZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApLnJlbW92ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZWxlbS5yZW1vdmUoKTtcbiAgfSxcblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAqL1xuICByZWxvYWRDb250cm9sbGVyOiAoY29udHJvbGxlcikgPT4ge1xuICAgIHJldHVybiByZWxvYWRIVE1MQ29udHJvbGxlcihjb250cm9sbGVyKS50aGVuKChodG1sKSA9PiB7XG4gICAgICBsZXQgJGh0bWwgPSAkKGh0bWwpO1xuICAgICAgcmV0dXJuIGFwcC5yZWNvbmNpbGUoY29udHJvbGxlciwgJGh0bWwpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAqIEBwYXJhbSB7anF1ZXJ5fSAkdmlydHVhbE5vZGVcbiAgICogQHBhcmFtIHtqcXVlcnl9ICRyZWFsTm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICAgKi9cbiAgcmVjb25jaWxlOiAoY29udHJvbGxlciwgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsLCBwcm9jZXNzID0gbnVsbCkgPT4ge1xuICAgIGlmICghJHJlYWxOb2RlKSB7XG4gICAgICBsZXQgJHRlbXAgPSBjb250cm9sbGVyLiRjb250YWluZXIuY2xvbmUoKS5lbXB0eSgpO1xuICAgICAgJHRlbXAuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgICR0ZW1wLnJlbW92ZUNsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgICAgJHRlbXAuYXBwZW5kKCR2aXJ0dWFsTm9kZSk7XG4gICAgICAkdmlydHVhbE5vZGUgPSAkdGVtcDtcbiAgICB9XG5cbiAgICAkcmVhbE5vZGUgPSAkcmVhbE5vZGUgPz8gY29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gICAgY29uc3QgeyByZWZyZXNoUHJvY2VzcywgaXNSdW5uaW5nUHJvY2VzcyB9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKFxuICAgICAgcHJvY2VzcyxcbiAgICAgIGNvbnRyb2xsZXIsXG4gICAgKTtcblxuICAgIHJldHVybiByZWZyZXNoKCR2aXJ0dWFsTm9kZSwgY29udHJvbGxlciwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKCkgPT4ge1xuICAgICAgcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKTtcbiAgICAgIHJlc2V0Q2hpbGRyZW4oY29udHJvbGxlcik7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge2pxdWVyeX0gJGRvbVxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBsZWFmQ29udHJvbGxlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgcmVmcmVzaDogKCRkb20sIGxlYWZDb250cm9sbGVyID0gbnVsbCkgPT4ge1xuICAgIHJldHVybiByZWZyZXNoKCRkb20sIGxlYWZDb250cm9sbGVyKTtcbiAgfSxcbn07XG4iXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJEQVRBX0NPTlRST0xMRVJfS0VZIiwiQ09OVFJPTExFUl9DTEFTUyIsImdldENvbnRyb2xsZXIiLCJjbGVhbkNhY2hlIiwicmVmcmVzaCIsIkFic3RyYWN0U0RDIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwicmVzZXRDaGlsZHJlbiIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsInByZXBhcmVSZWZyZXNoUHJvY2VzcyIsImluaXRFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJjbGFzc25hbWUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsImdsb2JhbFJvb3RDb250cm9sbGVyIiwiX2lzSW5pdCIsIl9vcmlnaW5fdHJpZ2dlciIsIl9nbG9iYWxDb250cm9sbGVyQ2xhc3NlcyIsImluaXRfc2RjIiwiZm4iLCJldmVudCIsImV2X3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0eXBlIiwiaW5jbHVkZXMiLCJwdXNoIiwib24iLCJ1cGRhdGVKcXVlcnkiLCIkZ2xvYmFsRGl2IiwiQ29udHJvbGxlckNsYXNzIiwicHJvdG90eXBlIiwiX3RhZ05hbWUiLCJyZWZyZXNoUHJvY2VzcyIsInRoZW4iLCJyZXMiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJyZWdpc3RlciIsIm92ZXJ3cml0ZSIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwiY29udHJvbGxlciIsInVybCIsImFyZ3MiLCJhamF4IiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImEiLCJiIiwic3RhdHVzIiwiJGNvbnRhaW5lciIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwicHJvY2VzcyIsIiR0ZW1wIiwiY2xvbmUiLCJlbXB0eSIsInJlbW92ZUNsYXNzIiwiaXNSdW5uaW5nUHJvY2VzcyIsIiRkb20iLCJsZWFmQ29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n\n}");
|
|
68
68
|
|
|
69
|
-
/***/ }
|
|
69
|
+
/***/ },
|
|
70
70
|
|
|
71
|
-
/***/ "./src/simpleDomControl/
|
|
71
|
+
/***/ "./src/simpleDomControl/sdc_model.js"
|
|
72
|
+
/*!*******************************************!*\
|
|
73
|
+
!*** ./src/simpleDomControl/sdc_model.js ***!
|
|
74
|
+
\*******************************************/
|
|
75
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
76
|
+
|
|
77
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SdcQuerySet: () => (/* binding */ SdcQuerySet),\n/* harmony export */ \"default\": () => (/* binding */ SdcModel)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_socket.js */ \"./src/simpleDomControl/sdc_socket.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nconst CONNECTING_REQUEST_ID = \"_connecting_process\";\nclass SdcModelError extends Error {\n constructor(props) {\n if (typeof props === 'string') {\n props = {\n msg: props,\n is_error: true,\n header: 'Error'\n };\n }\n super(props.msg);\n this.msg = props.msg;\n this.header = props.header;\n this.is_error = props.is_error;\n this.html = props.html;\n }\n}\nclass FileLoaded {\n constructor({\n name,\n url\n }) {\n this.name = name;\n this.url = url;\n this.content = null;\n }\n async load(force = false) {\n if (force || !this.content) {\n this.content = await new Promise((resolve, reject) => {\n $.get(this.url).then(resolve).catch(() => {\n resolve('');\n });\n });\n }\n return this.content;\n }\n async text() {\n return this.load();\n }\n static isValid(value) {\n return value !== null && typeof value === \"object\" && !Array.isArray(value) && !(value instanceof File) && typeof value.url === \"string\" && typeof value.name === \"string\";\n }\n}\n\n/**\n * Normalize an incoming primary key value.\n *\n * `-1` is used throughout this module as the sentinel for \"new object / no pk\".\n *\n * @param {*} pk\n * @returns {number}\n */\nfunction normalizePk(pk) {\n const normalizedPk = parseInt(pk ?? -1, 10);\n return Number.isNaN(normalizedPk) ? -1 : normalizedPk;\n}\nclass SdcQuerySet {\n /**\n * Lightweight client-side collection wrapper around the SDC model websocket.\n *\n * The queryset exposes array-like access through a proxy while also keeping\n * track of socket state and outstanding requests for that model.\n *\n * @param {string} modelName\n * @param {object} modelQuery\n */\n constructor(modelName, modelQuery = {}) {\n this.valuesList = [];\n this.loaded = false;\n this.modelName = modelName;\n this.modelQuery = modelQuery ?? {};\n this._onNoOpenRequests = [];\n this._isConnected = false;\n this._isConnectingProcess = false;\n this._autoReconnect = true;\n this.socket = null;\n // Request resolvers are stored by websocket event id until the server responds.\n this.openRequest = {};\n this.modelId = 0;\n this.onUpdate = () => {};\n this.onCreate = () => {};\n return new Proxy(this, {\n get(target, prop) {\n if (typeof prop !== \"symbol\" && !isNaN(prop)) {\n return target.valuesList[prop];\n }\n return target[prop];\n },\n set(target, prop, value) {\n if (!isNaN(prop)) {\n target.valuesList[prop] = value;\n return true;\n }\n target[prop] = value;\n return true;\n }\n });\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.valuesList.length) {\n return {\n value: this.valuesList[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n set on_create(handler) {\n this.onCreate = handler;\n }\n set on_update(handler) {\n this.onUpdate = handler;\n }\n\n /**\n *\n *\n * @param {Array<integr|string>|integer|SdcModel|SdcQuerySet|string} ids\n */\n setIds(ids) {\n if (ids === null || ids === \"\" || Array.isArray(ids) && ids.length === 0) {\n this.valuesList = [];\n return this.valuesList;\n } else if (ids instanceof SdcQuerySet) {\n this.valuesList = structuredClone(ids.valuesList);\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n } else if (ids instanceof SdcModel) {\n this.valuesList = [structuredClone(ids)];\n this.valuesList.forEach(value => value._setQuerySet(this, true));\n return this.valuesList;\n }\n let numList,\n numId = Number.NaN;\n if (Number.isInteger(ids)) {\n numId = ids;\n } else if (ids instanceof Array) {\n const tempNumList = ids.map(x => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList;\n }\n } else if (typeof ids === \"string\") {\n const tempNumList = ids.split(',').map(x => parseInt(x));\n if (!tempNumList.some(Number.isNaN)) {\n numList = tempNumList;\n } else {\n numId = parseInt(ids);\n }\n }\n if (!Number.isNaN(numId)) {\n const newModel = this.new();\n newModel.id = numId;\n } else if (numList) {\n this.valuesList = this.valuesList.filter(item => numList.includes(item.id));\n const valueIds = this.getIds();\n numList.filter(x => !valueIds.includes(x)).forEach(id => {\n this.valuesList.push(new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))({\n id\n }));\n });\n }\n return this.valuesList;\n }\n getIds() {\n return this.valuesList.map(x => x.id);\n }\n\n /**\n * Number of model instances currently present in the queryset cache.\n *\n * @returns {number}\n */\n get length() {\n return this.valuesList.length;\n }\n\n /**\n * Resolve a model instance by id, loading the queryset first if needed.\n *\n * @param {*} id\n * @returns {SdcModel|null}\n */\n byId(id) {\n if (id !== null) {\n const normalizedId = normalizePk(id);\n return this.valuesList.find(elm => elm.id === normalizedId) ?? null;\n }\n return null;\n }\n\n /**\n * Merge additional query constraints into the current queryset.\n *\n * @param {object} modelQuery\n * @returns {SdcQuerySet}\n */\n setFilter(modelQuery) {\n this.modelQuery = modelQuery;\n return this;\n }\n addFilter(modelQuery) {\n this.modelQuery = Object.assign({}, this.modelQuery, modelQuery);\n return this;\n }\n\n /**\n * @param {?object} values\n * @returns {SdcModel}\n */\n new(values = {}) {\n const newModel = new ((0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName))(values);\n newModel._setQuerySet(this, false);\n this.valuesList.push(newModel);\n return newModel;\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @returns {Promise<SdcQuerySet>}\n */\n load(modelQuery = null) {\n this.valuesList = [];\n this.modelQuery = modelQuery ?? this.modelQuery;\n return this._sendLoad();\n }\n\n /**\n * Load model instances matching the current query into the queryset cache.\n *\n * @param {?object} modelQuery\n * @param {?SdcModel} item\n * @returns {Promise<SdcQuerySet>}\n */\n update({\n modelQuery = null,\n item = null\n }) {\n this.modelQuery = modelQuery ?? this.modelQuery;\n let loadQuery = item ? {\n pk: item.id\n } : this.modelQuery;\n return this._sendLoad(loadQuery);\n }\n\n /**\n *\n * @param pk {integr}\n * @param elem {SdcModel}\n * @returns {Promise<unknown>}\n */\n delete({\n pk = null,\n elem = null\n }) {\n pk = !elem ? pk : elem.id;\n if (pk === null) {\n throw new Error(\"pk or elem must be set\");\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"delete\",\n event_id: id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n pk\n }\n }));\n this.openRequest[id] = [resolve, reject];\n });\n });\n }\n\n /**\n * Request the server-side queryset data over the model websocket.\n *\n * @returns {Promise<*>}\n */\n _sendLoad(loadQuery = null) {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"load\",\n event_id: id,\n args: {\n model_name: this.modelName,\n model_query: loadQuery ?? this.modelQuery\n }\n }));\n this.openRequest[id] = [data => {\n this.loaded = true;\n resolve(data);\n }, reject];\n });\n });\n }\n\n /**\n * Render the list-view endpoint for the current model.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendListView({\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this.view({\n modelQuery,\n cbResolve,\n cbReject,\n templateContext,\n eventType: \"list_view\"\n });\n }\n\n /**\n * Render a named model view and append its HTML to a container element.\n *\n * @param {object} options\n * @returns {*}\n */\n view({\n viewName = \"html_list_template\",\n modelQuery = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n eventType = \"named_view\"\n }) {\n let $divList = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id: id,\n args: {\n view_name: viewName,\n model_name: this.modelName,\n model_query: modelQuery,\n template_context: templateContext\n }\n }));\n this.openRequest[id] = [data => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $divList;\n }\n\n /**\n * Render the detail-view endpoint for a single model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _sendDetailView({\n pk = null,\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n pk = normalizePk(pk);\n let $divList = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"detail_view\",\n event_id: id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n pk,\n template_context: templateContext\n }\n }));\n this.openRequest[id] = [data => {\n $divList.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divList);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $divList;\n }\n\n /**\n * Fetch a model form fragment and attach the SDC form metadata expected by\n * the rest of the client.\n *\n * @param {string} eventType\n * @param {SdcModel} modelObj\n */\n getForm({\n modelObj,\n eventType,\n formName,\n $divForm,\n cbResolve,\n cbReject,\n formId\n }) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n const pk = modelObj.id ?? -1;\n this.isConnected().then(() => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: eventType,\n event_id: id,\n args: {\n model_name: this.modelName,\n pk,\n form_name: formName\n }\n }));\n });\n const className = pk === null || pk === -1 ? \"create\" : \"edit\";\n this.openRequest[id] = [data => {\n $divForm.append(data.html);\n let $form = $divForm.closest(\"form\").addClass(`sdc-model-${className}-form sdc-model-form ${formId}`).data(\"model\", modelObj).data(\"model_pk\", pk).data(\"form_name\", formName);\n modelObj.addForm($form);\n if ($form.length > 0 && !$form[0].hasAttribute(\"sdc_submit\")) {\n $form.attr(\"sdc_submit\", \"submitModelFormDistributor\");\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.refresh($divForm).then(() => null);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n }\n\n /**\n * Fetch a single model instance matching the current query.\n *\n * @param {?object} modelQuery\n * @param {?boolean} doNotLoad true if modelQuery contains id or pk and object does not need to be loaded.\n * @returns {Promise<SdcModel>}\n */\n async get(modelQuery = null, doNotLoad = false) {\n if (doNotLoad) {\n const id = modelQuery?.id ?? modelQuery?.pk;\n return this.byId(id) ?? this.new(modelQuery || this.modelQuery);\n }\n await this.load(modelQuery);\n if (this.length !== 1) {\n throw new Error(`model query returns ${this.length} but only 1 expected.`);\n }\n return this.valuesList[0];\n }\n detailView({\n pk,\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._sendDetailView({\n pk,\n cbResolve,\n cbReject,\n templateContext\n });\n }\n listView({\n modelQuery = {},\n searchValues = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._sendListView({\n modelQuery: Object.assign({}, this.modelQuery, modelQuery, {\n '__search_values': searchValues\n }),\n cbResolve,\n cbReject,\n templateContext\n });\n }\n save({\n pk = null,\n formName = \"edit_form\",\n data = null\n } = {}) {\n const normPk = normalizePk(pk);\n return this.isConnected().then(() => {\n let elemList;\n if (normPk > -1) {\n const elem = this.byId(normPk);\n if (!elem) {\n return Promise.reject(new SdcModelError(`Element not found with ID: ${normPk}`));\n }\n elemList = [elem];\n } else {\n elemList = this.valuesList;\n }\n let pList = [];\n elemList.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n pList.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n const sendData = data ? {\n ...data\n } : elem.serialize();\n sendData.pk = elem.id;\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"save\",\n event_id: id,\n args: {\n form_name: formName,\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: sendData,\n pk: sendData.pk,\n files: files\n }\n }));\n this.openRequest[id] = [res => {\n let data = typeof res.data.instance === \"string\" ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(pList);\n });\n }\n\n /**\n *\n * @param elem {?SdcModel}\n * @param data {?object}\n * @returns {Promise<unknown>}\n */\n create({\n elem = null,\n data = null\n } = {}) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n if (!elem) {\n elem = this.new(data);\n }\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"create\",\n event_id: id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery,\n data: data ?? elem?.serialize() ?? {},\n files: files\n }\n }));\n this.openRequest[id] = [res => {\n let data = typeof res.data.instance === \"string\" ? JSON.parse(res.data.instance) : res.data.instance;\n if (elem) {\n elem.id = data[0]?.pk || data[0]?.id;\n }\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n\n /**\n * Ensure the websocket is open and has completed the server-side connect\n * handshake before issuing model requests.\n *\n * Multiple callers can arrive while a connection attempt is already in\n * progress. In that case they are queued behind the same synthetic request id.\n *\n * @returns {Promise<void>}\n */\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._isConnected) {\n resolve();\n } else if (!this._isConnectingProcess || !this.openRequest[CONNECTING_REQUEST_ID]) {\n this._isConnectingProcess = true;\n this.openRequest[CONNECTING_REQUEST_ID] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolveOrigin, rejectOrigin] = this.openRequest[CONNECTING_REQUEST_ID];\n this.openRequest[CONNECTING_REQUEST_ID] = [() => {\n resolveOrigin();\n resolve();\n }, () => {\n rejectOrigin();\n reject();\n }];\n }\n });\n }\n\n /**\n * Close the websocket and disable automatic reconnect for this queryset.\n */\n close() {\n if (this.socket) {\n this._autoReconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this[\"socket\"];\n }\n this.valuesList.forEach(elem => {\n elem._onClose();\n });\n }\n\n /**\n * Upload attached `File` values in fixed-size chunks before save/create calls.\n *\n * @param {SdcModel} elem\n * @returns {Promise<object>}\n */\n _readFiles(elem) {\n let toSolve = [];\n let files = {};\n if (!elem) {\n return Promise.resolve(files);\n }\n Object.keys(elem.constructor.fields).forEach(key => {\n const value = elem[key];\n if (value instanceof File) {\n toSolve.push(new Promise(async (resolve, reject) => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.openRequest[id] = [resolve, reject];\n const buffer = await value.arrayBuffer();\n let result = new Uint8Array(buffer);\n let numberOfChunks = Math.ceil(result.length / MAX_FILE_UPLOAD);\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < numberOfChunks; ++i) {\n const chunk = Array.from(result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)));\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"upload\",\n event_id: id,\n args: {\n chunk,\n idx: i,\n number_of_chunks: numberOfChunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.modelName,\n model_query: this.modelQuery\n }\n }));\n }\n }));\n }\n });\n return Promise.all(toSolve).then(() => {\n return files;\n });\n }\n\n /**\n * Route websocket responses to the matching pending request and update local\n * state when the server sends model payloads.\n *\n * @param {MessageEvent} e\n */\n async _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][1](new SdcModelError(data));\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushErrorMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.type === \"connect\") {\n this.openRequest[CONNECTING_REQUEST_ID][1](new SdcModelError(data));\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n this._autoReconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"pushMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.type === \"connect\") {\n this._isConnected = true;\n this._isConnectingProcess = false;\n this.openRequest[CONNECTING_REQUEST_ID][0](data);\n this._closeOpenRequest(CONNECTING_REQUEST_ID);\n } else if ([\"load\", \"named_view\", \"detail_view\"].includes(data.type)) {\n const jsonRes = JSON.parse(data.args.data);\n data.args.data = await this._parseServerRes(jsonRes);\n } else if (data.type === \"on_update\" || data.type === \"on_create\") {\n const jsonRes = JSON.parse(data.args.data);\n let obj = await this._parseServerRes(jsonRes);\n let cb;\n if (data.type === \"on_create\") {\n cb = this.onCreate;\n } else {\n cb = this.onUpdate;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.openRequest.hasOwnProperty(data.event_id)) {\n this.openRequest[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n\n /**\n * Wait until all in-flight websocket requests for this queryset are resolved.\n *\n * @returns {Promise<void>}\n */\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.openRequest).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n\n /**\n * Remove a completed request and wake any `noOpenRequests()` waiters when the\n * request map becomes empty.\n *\n * @param {string} eventId\n */\n _closeOpenRequest(eventId) {\n delete this.openRequest[eventId];\n if (Object.keys(this.openRequest).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n\n /**\n * Establish the raw websocket connection for this queryset.\n *\n * @returns {Promise<void>}\n */\n _connectToServer() {\n return new Promise(resolve => {\n const modelIdentifier = `${this.modelName}` + (this.modelId > 0 ? `/${this.modelId}` : \"\");\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${modelIdentifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${modelIdentifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.modelName}, ${this.modelId}) Socket closed unexpectedly`);\n this._isConnected = false;\n for (const [_key, value] of Object.entries(this.openRequest)) {\n value[1](e);\n }\n this.openRequest = {};\n setTimeout(() => {\n if (this._autoReconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._isConnected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n\n /**\n * Perform the application-level connect handshake once the websocket opens.\n *\n * @returns {Promise<*>}\n */\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: \"model\",\n event_type: \"connect\",\n event_id: id,\n args: {\n model_name: this.modelName,\n model_query: this.modelQuery\n }\n }));\n this.openRequest[id] = [resolve, reject];\n });\n }\n\n /**\n * Convert the backend model payload into locally tracked model objects.\n *\n * @param {Array<object>} results\n */\n _parseServerRes(results) {\n const newModels = [];\n for (const x of results) {\n const ModelClass = (0,_sdc_socket_js__WEBPACK_IMPORTED_MODULE_1__.getModel)(this.modelName);\n if (!ModelClass) {\n throw new Error(`${this.modelName} is no SdcModel. mybe the models ar not importad.`);\n }\n const newModel = new ModelClass({\n 'id': x.pk ?? x.id,\n ...x.fields\n });\n const currentModel = this.byId(newModel.id);\n if (currentModel) {\n currentModel.setValues(newModel);\n newModels.push(currentModel);\n } else {\n this.valuesList.push(newModel);\n newModel._setQuerySet(this, true);\n newModels.push(newModel);\n }\n }\n this.valuesList.sort((a, b) => a._id - b._id);\n return newModels;\n }\n}\nclass SdcModel {\n static fields = {};\n\n /**\n * Base model wrapper used by SDC model registrations.\n *\n * @param {string} modelName\n */\n constructor(modelName) {\n this._id = null;\n this._forms = [];\n this.loaded = false;\n this.formId = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n this.modelName = modelName;\n }\n\n /**\n *\n * @param {object?} modelQuerySet\n * @param {AbstractSDC} parent\n * @returns {SdcQuerySet}\n */\n static querySet(modelQuerySet = null, parent = null) {\n if (!parent) {\n return new SdcQuerySet(this.modeName, modelQuerySet);\n }\n return parent.querySet(this.modeName, modelQuerySet);\n }\n addForm($form) {\n // Remove old listeners if form already set\n const onChange = this._onChange.bind(this);\n this._forms.push($form);\n if ($form) {\n // Attach delegated event handler to all inputs\n $form.on(\"input.formWatcher change.formWatcher\", \"input, select, textarea\", onChange);\n }\n }\n _onChange(event) {\n const {\n name\n } = event.target;\n if (this.constructor.fields[name]) {\n this[`set${name}`]((0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(event.target));\n }\n }\n _updateForm(fieldName) {\n const self = this;\n this._forms.forEach($form => {\n $form.find(`[name=\"${fieldName}\"]`).each(function () {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(this, self[fieldName]);\n });\n });\n }\n setValues(data = {}) {\n throw new Error(\"setValues() must be implemented by subclass\");\n }\n\n /**\n * Attach the queryset that owns this model instance.\n *\n * @param {SdcQuerySet} querySet\n * @param {boolean} isLoaded\n */\n _setQuerySet(querySet, isLoaded) {\n this._querySet = new WeakRef(querySet);\n this.loaded = isLoaded;\n }\n save({\n formName = \"edit_form\",\n data = null\n } = {}) {\n return this._querySet.deref().save({\n pk: this.id,\n formName,\n data\n });\n }\n create({\n data = null\n } = {}) {\n return this._querySet.deref().create({\n elem: this,\n data\n });\n }\n delete() {\n return this._querySet.deref().delete({\n elem: this\n });\n }\n load() {\n return this._querySet.deref().update({\n item: this\n });\n }\n get id() {\n return this._id;\n }\n set pk(data) {\n this._id = data;\n }\n get pk() {\n return this._id;\n }\n close() {\n return this._querySet.deref().close();\n }\n _onClose() {\n Object.keys(this.constructor.fields).filter(x => this[`_${x}`] instanceof SdcQuerySet).forEach(x => this[`_${x}`].close());\n }\n\n /**\n * Request the server-rendered detail view for this model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n detailView({\n cbResolve = null,\n cbReject = null,\n templateContext = {}\n }) {\n return this._querySet.deref().detailView({\n pk: this.id,\n cbResolve,\n cbReject,\n templateContext\n });\n }\n serialize() {\n return Object.entries(this.constructor.fields).reduce((acc, [key, val]) => {\n const value = this[key];\n if (value instanceof SdcQuerySet) {\n if (val.many_to_many || val.one_to_many) {\n acc[key] = value.getIds();\n } else {\n const allIds = value.getIds();\n if (allIds.length > 0) {\n acc[key] = allIds[0];\n } else {\n acc[key] = null;\n }\n }\n } else if (val.is_relation && value instanceof SdcModel) {\n acc[key] = value.id ?? null;\n } else {\n acc[key] = value;\n }\n return acc;\n }, {});\n }\n toJson() {\n const res = {};\n for (let key in this.constructor.fields) {\n const value = this[key];\n if (value instanceof File) {\n res[key] = value.name;\n } else if (value instanceof SdcModel) {\n res[key] = value.id;\n } else if (value instanceof SdcQuerySet) {\n res[key] = value.getIds();\n } else {\n res[key] = value;\n }\n }\n return res;\n }\n\n /**\n * Backwards-compatible alias for syncing values from a form into the model.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n\n /**\n * Resolve the form collection associated with this model instance.\n *\n * @param {*} $forms\n * @returns {*}\n */\n _resolveForms($forms) {\n if (!$forms || !$forms.hasClass(this.formId)) {\n return $(`.${this.formId}`);\n }\n return $forms;\n }\n\n /**\n * Copy the current model state into matching form fields.\n *\n * @param {*} $forms\n */\n syncModelToForm($forms) {\n $forms = this._resolveForms($forms);\n const self = this;\n const fields = this.constructor.fields;\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk) {\n return;\n }\n for (let formItem of this.elements) {\n let name = formItem.name;\n if (name && name !== \"\" && !!fields[name]) {\n (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.setValueInField)(formItem, self[name]);\n }\n }\n });\n }\n\n /**\n * Copy matching form values back onto the current model instance.\n *\n * Hidden inputs are parsed to their original primitive type when possible.\n *\n * @param {*} $forms\n * @returns {*}\n */\n syncForm($forms) {\n $forms = this._resolveForms($forms);\n const self = this;\n const fields = this.constructor.fields;\n const returnValue = {};\n function setValueInForm(name, value) {\n if (!!fields[name]) {\n self[name] = value;\n }\n returnValue[name] = value;\n }\n $forms.each(function () {\n const pk = normalizePk($(this).data(\"model_pk\"));\n if (self.id !== pk && (self.id !== null || pk !== -1)) {\n return;\n }\n for (let formItem of this.elements) {\n setValueInForm(formItem.name, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getValueFromField)(formItem));\n }\n return self;\n });\n return returnValue;\n }\n\n /**\n * Render the correct server-side form for this model state.\n *\n * @param {object} options\n * @returns {*}\n */\n form({\n cbResolve = null,\n cbReject = null\n } = {}) {\n if (this.id === null || this.id === -1) {\n return this._createForm({\n cbReject,\n cbResolve\n });\n }\n return this._editForm({\n cbReject,\n cbResolve\n });\n }\n\n /**\n * Render the create form for a new model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _createForm({\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $(\"<div>\");\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"create_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Render the edit form for an existing model instance.\n *\n * @param {object} options\n * @returns {*}\n */\n _editForm({\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $(\"<div>\");\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"edit_form\",\n formName: null,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Render a named server-side form for this model.\n *\n * @param {object} options\n * @returns {*}\n */\n namedForm({\n formName,\n cbResolve = null,\n cbReject = null\n }) {\n let $divForm = $('<div class=\"container-fluid\">');\n this._querySet.deref().getForm({\n modelObj: this,\n eventType: \"named_form\",\n formName,\n $divForm,\n cbResolve,\n cbReject,\n formId: this.formId\n });\n return $divForm;\n }\n\n /**\n * Validate a field value using the supplied field config.\n *\n * @param {*} value\n * @param {object} config\n */\n validate(value, config) {\n const err = validateField(value, config);\n if (err) throw new Error(err);\n }\n\n /**\n * Convert a raw input value into the shape expected by the field config.\n *\n * @param {*} value\n * @param {object} config\n * @returns {*}\n */\n parseValue(value, config) {\n const {\n type\n } = config;\n switch (type) {\n case \"CharField\":\n case \"TeextField\":\n case \"UUIDField\":\n case \"EmailField\":\n return `${value}`;\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n return parseInt(value, 10);\n case \"FloatField\":\n case \"DecimalField\":\n if (typeof value !== \"number\") {\n return \"Must be a number\";\n }\n break;\n case \"BooleanField\":\n return !!value;\n case \"DateField\":\n case \"DateTimeField\":\n return Date.parse(value);\n case \"URLField\":\n return new URL(value);\n case \"FileField\":\n if (value == null) {\n return null;\n }\n if (typeof value === \"string\") {\n return null;\n }\n if (FileLoaded.isValid(value)) {\n return new FileLoaded(value);\n }\n if (value instanceof FileLoaded) {\n return new FileLoaded(value);\n }\n if (typeof File !== \"undefined\" && value instanceof File) {\n if (config.max_size && value.size > config.max_size) {\n return `File too large (max ${config.max_size} bytes)`;\n }\n if (config.allowed_types && !config.allowed_types.includes(value.type)) {\n return `Invalid file type (${value.type})`;\n }\n return value;\n }\n break;\n case \"JSONField\":\n if (typeof value === \"object\") {\n return value;\n }\n if (typeof value === \"string\") {\n return JSON.parse(value);\n }\n break;\n default:\n break;\n }\n return value;\n }\n}\n\n/**\n * Validate a field value against the field metadata received from the backend.\n *\n * @param {*} value\n * @param {object} config\n * @returns {?string}\n */\nfunction validateField(value, config) {\n const {\n type,\n required,\n max_length: maxLength,\n is_relation: isRelation,\n many_to_many: manyToMany,\n one_to_many: oneToMany,\n many_to_one: manyToOne,\n one_to_one: oneToOne,\n related_model: relatedModel\n } = config;\n void isRelation;\n if (required) {\n if (value === null || value === undefined || value === \"\") {\n return \"This field is required\";\n }\n }\n if (value === null || value === undefined || value === \"\") {\n return null;\n }\n if (manyToMany || oneToMany || manyToOne || oneToOne) {\n if (!(value instanceof SdcQuerySet) || value.modelName !== relatedModel) {\n if (typeof value !== \"object\" && Number.isNaN(parseInt(value))) {\n return \"Must be object or ID\";\n }\n return null;\n }\n }\n switch (type) {\n case \"CharField\":\n case \"TextField\":\n if (typeof value !== \"string\") {\n return \"Must be a string\";\n }\n if (maxLength && value.length > maxLength) {\n return `Max length is ${maxLength}`;\n }\n break;\n case \"IntegerField\":\n case \"AutoField\":\n case \"BigIntegerField\":\n if (!Number.isInteger(value)) {\n return \"Must be an integer\";\n }\n break;\n case \"FloatField\":\n case \"DecimalField\":\n if (typeof value !== \"number\") {\n return \"Must be a number\";\n }\n break;\n case \"BooleanField\":\n if (typeof value !== \"boolean\") {\n return \"Must be a boolean\";\n }\n break;\n case \"DateField\":\n case \"DateTimeField\":\n if (isNaN(Date.parse(value))) {\n return \"Must be a valid date\";\n }\n break;\n case \"EmailField\":\n if (typeof value !== \"string\" || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value)) {\n return \"Invalid email\";\n }\n break;\n case \"URLField\":\n try {\n new URL(value);\n } catch {\n return \"Invalid URL\";\n }\n break;\n case \"UUIDField\":\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(value)) {\n return \"Invalid UUID\";\n }\n break;\n case \"JSONField\":\n if (typeof value !== \"object\") {\n return \"Must be JSON object\";\n }\n break;\n case \"FileField\":\n if (!FileLoaded.isValid(value) && !(value instanceof File) && !(value instanceof FileLoaded)) {\n return \"Must be a valid file\";\n }\n break;\n default:\n break;\n }\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFFRixLQUFLLFlBQVk7TUFDZixJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyw0QkFBNEIsQ0FBQzRQLElBQUksQ0FBQzVQLEtBQUssQ0FBQyxFQUFFO1FBQzFFLE9BQU8sZUFBZTtNQUN4QjtNQUNBO0lBRUYsS0FBSyxVQUFVO01BQ2IsSUFBSTtRQUNGLElBQUk0TyxHQUFHLENBQUM1TyxLQUFLLENBQUM7TUFDaEIsQ0FBQyxDQUFDLE1BQU07UUFDTixPQUFPLGFBQWE7TUFDdEI7TUFDQTtJQUVGLEtBQUssV0FBVztNQUNkLElBQUksQ0FBQywyRUFBMkUsQ0FBQzRQLElBQUksQ0FBQzVQLEtBQUssQ0FBQyxFQUFFO1FBQzVGLE9BQU8sY0FBYztNQUN2QjtNQUNBO0lBRUYsS0FBSyxXQUFXO01BQ2QsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU8scUJBQXFCO01BQzlCO01BQ0E7SUFDRixLQUFLLFdBQVc7TUFDZCxJQUFJLENBQUNmLFVBQVUsQ0FBQ2MsT0FBTyxDQUFDQyxLQUFLLENBQUMsSUFBSSxFQUFFQSxLQUFLLFlBQVlHLElBQUksQ0FBQyxJQUFJLEVBQUVILEtBQUssWUFBWWYsVUFBVSxDQUFDLEVBQUU7UUFDNUYsT0FBTyxzQkFBc0I7TUFDL0I7TUFDQTtJQUNGO01BQ0U7RUFDSjtFQUVBLE9BQU8sSUFBSTtBQUNiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tb2RlbC5qcz80NDM2Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z2V0VmFsdWVGcm9tRmllbGQsIHNldFZhbHVlSW5GaWVsZCwgdXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7Z2V0TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIlxuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5jb25zdCBDT05ORUNUSU5HX1JFUVVFU1RfSUQgPSBcIl9jb25uZWN0aW5nX3Byb2Nlc3NcIjtcblxuY2xhc3MgU2RjTW9kZWxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBpZiAodHlwZW9mIHByb3BzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIG1zZzogcHJvcHMsXG4gICAgICAgIGlzX2Vycm9yOiB0cnVlLFxuICAgICAgICBoZWFkZXI6ICdFcnJvcidcbiAgICAgIH1cbiAgICB9XG4gICAgc3VwZXIocHJvcHMubXNnKVxuICAgIHRoaXMubXNnID0gcHJvcHMubXNnO1xuICAgIHRoaXMuaGVhZGVyID0gcHJvcHMuaGVhZGVyO1xuICAgIHRoaXMuaXNfZXJyb3IgPSBwcm9wcy5pc19lcnJvcjtcbiAgICB0aGlzLmh0bWwgPSBwcm9wcy5odG1sO1xuICB9XG59XG5cbmNsYXNzIEZpbGVMb2FkZWQge1xuICBjb25zdHJ1Y3Rvcih7bmFtZSwgdXJsfSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy51cmwgPSB1cmw7XG4gICAgdGhpcy5jb250ZW50ID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxvYWQoZm9yY2UgPSBmYWxzZSkge1xuICAgIGlmIChmb3JjZSB8fCAhdGhpcy5jb250ZW50KSB7XG4gICAgICB0aGlzLmNvbnRlbnQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICQuZ2V0KHRoaXMudXJsKS50aGVuKHJlc29sdmUpLmNhdGNoKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoJycpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQ7XG4gIH1cblxuICBhc3luYyB0ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmxvYWQoKTtcbiAgfVxuXG4gIHN0YXRpYyBpc1ZhbGlkKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgICAgISh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpICYmXG4gICAgICB0eXBlb2YgdmFsdWUudXJsID09PSBcInN0cmluZ1wiICYmXG4gICAgICB0eXBlb2YgdmFsdWUubmFtZSA9PT0gXCJzdHJpbmdcIlxuICAgICk7XG4gIH1cblxuXG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFuIGluY29taW5nIHByaW1hcnkga2V5IHZhbHVlLlxuICpcbiAqIGAtMWAgaXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgbW9kdWxlIGFzIHRoZSBzZW50aW5lbCBmb3IgXCJuZXcgb2JqZWN0IC8gbm8gcGtcIi5cbiAqXG4gKiBAcGFyYW0geyp9IHBrXG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQayhwaykge1xuICBjb25zdCBub3JtYWxpemVkUGsgPSBwYXJzZUludChwayA/PyAtMSwgMTApO1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKG5vcm1hbGl6ZWRQaykgPyAtMSA6IG5vcm1hbGl6ZWRQaztcbn1cblxuZXhwb3J0IGNsYXNzIFNkY1F1ZXJ5U2V0IHtcbiAgLyoqXG4gICAqIExpZ2h0d2VpZ2h0IGNsaWVudC1zaWRlIGNvbGxlY3Rpb24gd3JhcHBlciBhcm91bmQgdGhlIFNEQyBtb2RlbCB3ZWJzb2NrZXQuXG4gICAqXG4gICAqIFRoZSBxdWVyeXNldCBleHBvc2VzIGFycmF5LWxpa2UgYWNjZXNzIHRocm91Z2ggYSBwcm94eSB3aGlsZSBhbHNvIGtlZXBpbmdcbiAgICogdHJhY2sgb2Ygc29ja2V0IHN0YXRlIGFuZCBvdXRzdGFuZGluZyByZXF1ZXN0cyBmb3IgdGhhdCBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbW9kZWxRdWVyeVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZWxOYW1lLCBtb2RlbFF1ZXJ5ID0ge30pIHtcbiAgICB0aGlzLnZhbHVlc0xpc3QgPSBbXTtcbiAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgIHRoaXMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnkgPz8ge307XG4gICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuX2F1dG9SZWNvbm5lY3QgPSB0cnVlO1xuICAgIHRoaXMuc29ja2V0ID0gbnVsbDtcbiAgICAvLyBSZXF1ZXN0IHJlc29sdmVycyBhcmUgc3RvcmVkIGJ5IHdlYnNvY2tldCBldmVudCBpZCB1bnRpbCB0aGUgc2VydmVyIHJlc3BvbmRzLlxuICAgIHRoaXMub3BlblJlcXVlc3QgPSB7fTtcbiAgICB0aGlzLm1vZGVsSWQgPSAwO1xuICAgIHRoaXMub25VcGRhdGUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLm9uQ3JlYXRlID0gKCkgPT4ge1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSBcInN5bWJvbFwiICYmICFpc05hTihwcm9wKSkge1xuICAgICAgICAgIHJldHVybiB0YXJnZXQudmFsdWVzTGlzdFtwcm9wXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0W3Byb3BdO1xuICAgICAgfSxcblxuICAgICAgc2V0KHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc05hTihwcm9wKSkge1xuICAgICAgICAgIHRhcmdldC52YWx1ZXNMaXN0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgbGV0IGlkeCA9IC0xO1xuICAgIHJldHVybiB7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICsraWR4O1xuICAgICAgICBpZiAoaWR4IDwgdGhpcy52YWx1ZXNMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMudmFsdWVzTGlzdFtpZHhdLCBkb25lOiBmYWxzZX07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBzZXQgb25fY3JlYXRlKGhhbmRsZXIpIHtcbiAgICB0aGlzLm9uQ3JlYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldCBvbl91cGRhdGUoaGFuZGxlcikge1xuICAgIHRoaXMub25VcGRhdGUgPSBoYW5kbGVyO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8aW50ZWdyfHN0cmluZz58aW50ZWdlcnxTZGNNb2RlbHxTZGNRdWVyeVNldHxzdHJpbmd9IGlkc1xuICAgKi9cbiAgc2V0SWRzKGlkcykge1xuXG4gICAgaWYgKGlkcyA9PT0gbnVsbCB8fCBpZHMgPT09IFwiXCIgfHwgQXJyYXkuaXNBcnJheShpZHMpICYmIGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMudmFsdWVzTGlzdCA9IFtdO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdDtcbiAgICB9IGVsc2UgaWYgKGlkcyBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB7XG4gICAgICB0aGlzLnZhbHVlc0xpc3QgPSBzdHJ1Y3R1cmVkQ2xvbmUoaWRzLnZhbHVlc0xpc3QpO1xuICAgICAgdGhpcy52YWx1ZXNMaXN0LmZvckVhY2godmFsdWUgPT4gdmFsdWUuX3NldFF1ZXJ5U2V0KHRoaXMsIHRydWUpKTtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3Q7XG4gICAgfSBlbHNlIGlmIChpZHMgaW5zdGFuY2VvZiBTZGNNb2RlbCkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gW3N0cnVjdHVyZWRDbG9uZShpZHMpXTtcbiAgICAgIHRoaXMudmFsdWVzTGlzdC5mb3JFYWNoKHZhbHVlID0+IHZhbHVlLl9zZXRRdWVyeVNldCh0aGlzLCB0cnVlKSk7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0O1xuICAgIH1cblxuICAgIGxldCBudW1MaXN0LCBudW1JZCA9IE51bWJlci5OYU47XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIoaWRzKSkge1xuICAgICAgbnVtSWQgPSBpZHM7XG4gICAgfSBlbHNlIGlmIChpZHMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgY29uc3QgdGVtcE51bUxpc3QgPSBpZHMubWFwKCh4KSA9PiBwYXJzZUludCh4KSk7XG4gICAgICBpZiAoIXRlbXBOdW1MaXN0LnNvbWUoTnVtYmVyLmlzTmFOKSkge1xuICAgICAgICBudW1MaXN0ID0gdGVtcE51bUxpc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaWRzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBjb25zdCB0ZW1wTnVtTGlzdCA9IGlkcy5zcGxpdCgnLCcpLm1hcCgoeCkgPT4gcGFyc2VJbnQoeCkpO1xuICAgICAgaWYgKCF0ZW1wTnVtTGlzdC5zb21lKE51bWJlci5pc05hTikpIHtcbiAgICAgICAgbnVtTGlzdCA9IHRlbXBOdW1MaXN0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBudW1JZCA9IHBhcnNlSW50KGlkcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtSWQpKSB7XG4gICAgICBjb25zdCBuZXdNb2RlbCA9IHRoaXMubmV3KCk7XG4gICAgICBuZXdNb2RlbC5pZCA9IG51bUlkO1xuICAgIH0gZWxzZSBpZiAobnVtTGlzdCkge1xuICAgICAgdGhpcy52YWx1ZXNMaXN0ID0gdGhpcy52YWx1ZXNMaXN0LmZpbHRlcigoaXRlbSkgPT4gbnVtTGlzdC5pbmNsdWRlcyhpdGVtLmlkKSk7XG4gICAgICBjb25zdCB2YWx1ZUlkcyA9IHRoaXMuZ2V0SWRzKCk7XG4gICAgICBudW1MaXN0LmZpbHRlcih4ID0+ICF2YWx1ZUlkcy5pbmNsdWRlcyh4KSkuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZXNMaXN0LnB1c2gobmV3IChnZXRNb2RlbCh0aGlzLm1vZGVsTmFtZSkpKHtpZH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52YWx1ZXNMaXN0O1xuICB9XG5cbiAgZ2V0SWRzKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3QubWFwKHggPT4geC5pZCk7XG4gIH1cblxuICAvKipcbiAgICogTnVtYmVyIG9mIG1vZGVsIGluc3RhbmNlcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgcXVlcnlzZXQgY2FjaGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc0xpc3QubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBtb2RlbCBpbnN0YW5jZSBieSBpZCwgbG9hZGluZyB0aGUgcXVlcnlzZXQgZmlyc3QgaWYgbmVlZGVkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGlkXG4gICAqIEByZXR1cm5zIHtTZGNNb2RlbHxudWxsfVxuICAgKi9cbiAgYnlJZChpZCkge1xuICAgIGlmIChpZCAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZElkID0gbm9ybWFsaXplUGsoaWQpO1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdC5maW5kKChlbG0pID0+IGVsbS5pZCA9PT0gbm9ybWFsaXplZElkKSA/PyBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlIGFkZGl0aW9uYWwgcXVlcnkgY29uc3RyYWludHMgaW50byB0aGUgY3VycmVudCBxdWVyeXNldC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHJldHVybnMge1NkY1F1ZXJ5U2V0fVxuICAgKi9cbiAgc2V0RmlsdGVyKG1vZGVsUXVlcnkpIHtcbiAgICB0aGlzLm1vZGVsUXVlcnkgPSBtb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWRkRmlsdGVyKG1vZGVsUXVlcnkpIHtcbiAgICB0aGlzLm1vZGVsUXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsUXVlcnksIG1vZGVsUXVlcnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7P29iamVjdH0gdmFsdWVzXG4gICAqIEByZXR1cm5zIHtTZGNNb2RlbH1cbiAgICovXG4gIG5ldyh2YWx1ZXMgPSB7fSkge1xuICAgIGNvbnN0IG5ld01vZGVsID0gbmV3IChnZXRNb2RlbCh0aGlzLm1vZGVsTmFtZSkpKHZhbHVlcyk7XG4gICAgbmV3TW9kZWwuX3NldFF1ZXJ5U2V0KHRoaXMsIGZhbHNlKTtcbiAgICB0aGlzLnZhbHVlc0xpc3QucHVzaChuZXdNb2RlbCk7XG4gICAgcmV0dXJuIG5ld01vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbW9kZWwgaW5zdGFuY2VzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IGludG8gdGhlIHF1ZXJ5c2V0IGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHJldHVybnMge1Byb21pc2U8U2RjUXVlcnlTZXQ+fVxuICAgKi9cbiAgbG9hZChtb2RlbFF1ZXJ5ID0gbnVsbCkge1xuICAgIHRoaXMudmFsdWVzTGlzdCA9IFtdO1xuICAgIHRoaXMubW9kZWxRdWVyeSA9IG1vZGVsUXVlcnkgPz8gdGhpcy5tb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9hZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgbW9kZWwgaW5zdGFuY2VzIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5IGludG8gdGhlIHF1ZXJ5c2V0IGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHBhcmFtIHs/U2RjTW9kZWx9IGl0ZW1cbiAgICogQHJldHVybnMge1Byb21pc2U8U2RjUXVlcnlTZXQ+fVxuICAgKi9cbiAgdXBkYXRlKHttb2RlbFF1ZXJ5ID0gbnVsbCwgaXRlbSA9IG51bGx9KSB7XG4gICAgdGhpcy5tb2RlbFF1ZXJ5ID0gbW9kZWxRdWVyeSA/PyB0aGlzLm1vZGVsUXVlcnk7XG4gICAgbGV0IGxvYWRRdWVyeSA9IGl0ZW0gPyB7cGs6IGl0ZW0uaWR9IDogdGhpcy5tb2RlbFF1ZXJ5O1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9hZChsb2FkUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBwayB7aW50ZWdyfVxuICAgKiBAcGFyYW0gZWxlbSB7U2RjTW9kZWx9XG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHVua25vd24+fVxuICAgKi9cbiAgZGVsZXRlKHtwayA9IG51bGwsIGVsZW0gPSBudWxsfSkge1xuICAgIHBrID0gIWVsZW0gPyBwayA6IGVsZW0uaWQ7XG4gICAgaWYgKHBrID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwayBvciBlbGVtIG11c3QgYmUgc2V0XCIpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgICBldmVudF90eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgICAgcGssXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBzZXJ2ZXItc2lkZSBxdWVyeXNldCBkYXRhIG92ZXIgdGhlIG1vZGVsIHdlYnNvY2tldC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XG4gICAqL1xuICBfc2VuZExvYWQobG9hZFF1ZXJ5ID0gbnVsbCkge1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogXCJsb2FkXCIsXG4gICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogbG9hZFF1ZXJ5ID8/IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtpZF0gPSBbKGRhdGEpPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LCByZWplY3RdO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBsaXN0LXZpZXcgZW5kcG9pbnQgZm9yIHRoZSBjdXJyZW50IG1vZGVsLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIF9zZW5kTGlzdFZpZXcoe1xuICAgICAgICAgICAgICAgICAgbW9kZWxRdWVyeSA9IHt9LFxuICAgICAgICAgICAgICAgICAgY2JSZXNvbHZlID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgIGNiUmVqZWN0ID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29udGV4dCA9IHt9LFxuICAgICAgICAgICAgICAgIH0pIHtcbiAgICByZXR1cm4gdGhpcy52aWV3KHtcbiAgICAgIG1vZGVsUXVlcnksXG4gICAgICBjYlJlc29sdmUsXG4gICAgICBjYlJlamVjdCxcbiAgICAgIHRlbXBsYXRlQ29udGV4dCxcbiAgICAgIGV2ZW50VHlwZTogXCJsaXN0X3ZpZXdcIixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgYSBuYW1lZCBtb2RlbCB2aWV3IGFuZCBhcHBlbmQgaXRzIEhUTUwgdG8gYSBjb250YWluZXIgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICB2aWV3KHtcbiAgICAgICAgIHZpZXdOYW1lID0gXCJodG1sX2xpc3RfdGVtcGxhdGVcIixcbiAgICAgICAgIG1vZGVsUXVlcnkgPSB7fSxcbiAgICAgICAgIGNiUmVzb2x2ZSA9IG51bGwsXG4gICAgICAgICBjYlJlamVjdCA9IG51bGwsXG4gICAgICAgICB0ZW1wbGF0ZUNvbnRleHQgPSB7fSxcbiAgICAgICAgIGV2ZW50VHlwZSA9IFwibmFtZWRfdmlld1wiLFxuICAgICAgIH0pIHtcbiAgICBsZXQgJGRpdkxpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgIGV2ZW50X3R5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgdmlld19uYW1lOiB2aWV3TmFtZSxcbiAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgbW9kZWxfcXVlcnk6IG1vZGVsUXVlcnksXG4gICAgICAgICAgICB0ZW1wbGF0ZV9jb250ZXh0OiB0ZW1wbGF0ZUNvbnRleHQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wZW5SZXF1ZXN0W2lkXSA9IFtcbiAgICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgICAkZGl2TGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2TGlzdCk7XG4gICAgICAgICAgY2JSZXNvbHZlICYmIGNiUmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgIGNiUmVqZWN0ICYmIGNiUmVqZWN0KHJlcyk7XG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZMaXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgZGV0YWlsLXZpZXcgZW5kcG9pbnQgZm9yIGEgc2luZ2xlIG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIF9zZW5kRGV0YWlsVmlldyh7XG4gICAgICAgICAgICAgICAgICAgIHBrID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY2JSZXNvbHZlID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgY2JSZWplY3QgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnRleHQgPSB7fSxcbiAgICAgICAgICAgICAgICAgIH0pIHtcbiAgICBwayA9IG5vcm1hbGl6ZVBrKHBrKTtcbiAgICBsZXQgJGRpdkxpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiBcIm1vZGVsXCIsXG4gICAgICAgICAgZXZlbnRfdHlwZTogXCJkZXRhaWxfdmlld1wiLFxuICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgICBwayxcbiAgICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHQ6IHRlbXBsYXRlQ29udGV4dCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICk7XG5cbiAgICAgIHRoaXMub3BlblJlcXVlc3RbaWRdID0gW1xuICAgICAgICAoZGF0YSkgPT4ge1xuICAgICAgICAgICRkaXZMaXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZMaXN0KTtcbiAgICAgICAgICBjYlJlc29sdmUgJiYgY2JSZXNvbHZlKGRhdGEpO1xuICAgICAgICB9LFxuICAgICAgICAocmVzKSA9PiB7XG4gICAgICAgICAgY2JSZWplY3QgJiYgY2JSZWplY3QocmVzKTtcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdkxpc3Q7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBtb2RlbCBmb3JtIGZyYWdtZW50IGFuZCBhdHRhY2ggdGhlIFNEQyBmb3JtIG1ldGFkYXRhIGV4cGVjdGVkIGJ5XG4gICAqIHRoZSByZXN0IG9mIHRoZSBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFR5cGVcbiAgICogQHBhcmFtIHtTZGNNb2RlbH0gbW9kZWxPYmpcbiAgICovXG4gIGdldEZvcm0oe21vZGVsT2JqLCBldmVudFR5cGUsIGZvcm1OYW1lLCAkZGl2Rm9ybSwgY2JSZXNvbHZlLCBjYlJlamVjdCwgZm9ybUlkfSkge1xuICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgY29uc3QgcGsgPSBtb2RlbE9iai5pZCA/PyAtMTtcbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZXZlbnQ6IFwibW9kZWxcIixcbiAgICAgICAgICBldmVudF90eXBlOiBldmVudFR5cGUsXG4gICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgcGssXG4gICAgICAgICAgICBmb3JtX25hbWU6IGZvcm1OYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/IFwiY3JlYXRlXCIgOiBcImVkaXRcIjtcblxuICAgIHRoaXMub3BlblJlcXVlc3RbaWRdID0gW1xuICAgICAgKGRhdGEpID0+IHtcbiAgICAgICAgJGRpdkZvcm0uYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgIGxldCAkZm9ybSA9ICRkaXZGb3JtXG4gICAgICAgICAgLmNsb3Nlc3QoXCJmb3JtXCIpXG4gICAgICAgICAgLmFkZENsYXNzKFxuICAgICAgICAgICAgYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke2Zvcm1JZH1gLFxuICAgICAgICAgIClcbiAgICAgICAgICAuZGF0YShcIm1vZGVsXCIsIG1vZGVsT2JqKVxuICAgICAgICAgIC5kYXRhKFwibW9kZWxfcGtcIiwgcGspXG4gICAgICAgICAgLmRhdGEoXCJmb3JtX25hbWVcIiwgZm9ybU5hbWUpO1xuICAgICAgICBtb2RlbE9iai5hZGRGb3JtKCRmb3JtKTtcbiAgICAgICAgaWYgKCRmb3JtLmxlbmd0aCA+IDAgJiYgISRmb3JtWzBdLmhhc0F0dHJpYnV0ZShcInNkY19zdWJtaXRcIikpIHtcbiAgICAgICAgICAkZm9ybS5hdHRyKFwic2RjX3N1Ym1pdFwiLCBcInN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwLnJlZnJlc2goJGRpdkZvcm0pLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIGNiUmVzb2x2ZSAmJiBjYlJlc29sdmUoZGF0YSk7XG4gICAgICB9LFxuICAgICAgKHJlcykgPT4ge1xuICAgICAgICBjYlJlamVjdCAmJiBjYlJlamVjdChyZXMpO1xuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgc2luZ2xlIG1vZGVsIGluc3RhbmNlIG1hdGNoaW5nIHRoZSBjdXJyZW50IHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1vZGVsUXVlcnlcbiAgICogQHBhcmFtIHs/Ym9vbGVhbn0gZG9Ob3RMb2FkIHRydWUgaWYgbW9kZWxRdWVyeSBjb250YWlucyBpZCBvciBwayBhbmQgb2JqZWN0IGRvZXMgbm90IG5lZWQgdG8gYmUgbG9hZGVkLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTZGNNb2RlbD59XG4gICAqL1xuICBhc3luYyBnZXQobW9kZWxRdWVyeSA9IG51bGwsIGRvTm90TG9hZCA9IGZhbHNlKSB7XG4gICAgaWYgKGRvTm90TG9hZCkge1xuICAgICAgY29uc3QgaWQgPSBtb2RlbFF1ZXJ5Py5pZCA/PyBtb2RlbFF1ZXJ5Py5waztcbiAgICAgIHJldHVybiB0aGlzLmJ5SWQoaWQpID8/IHRoaXMubmV3KG1vZGVsUXVlcnkgfHwgdGhpcy5tb2RlbFF1ZXJ5KTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5sb2FkKG1vZGVsUXVlcnkpO1xuICAgIGlmICh0aGlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBtb2RlbCBxdWVyeSByZXR1cm5zICR7dGhpcy5sZW5ndGh9IGJ1dCBvbmx5IDEgZXhwZWN0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzTGlzdFswXTtcbiAgfVxuXG4gIGRldGFpbFZpZXcoe3BrLCBjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGwsIHRlbXBsYXRlQ29udGV4dCA9IHt9fSkge1xuICAgIHJldHVybiB0aGlzLl9zZW5kRGV0YWlsVmlldyh7XG4gICAgICBwayxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgdGVtcGxhdGVDb250ZXh0LFxuICAgIH0pO1xuICB9XG5cbiAgbGlzdFZpZXcoe21vZGVsUXVlcnkgPSB7fSwgc2VhcmNoVmFsdWVzID0ge30sIGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCwgdGVtcGxhdGVDb250ZXh0ID0ge319KSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMaXN0Vmlldyh7XG4gICAgICBtb2RlbFF1ZXJ5OiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsUXVlcnksIG1vZGVsUXVlcnksIHsgJ19fc2VhcmNoX3ZhbHVlcyc6IHNlYXJjaFZhbHVlcyB9KSxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgdGVtcGxhdGVDb250ZXh0LFxuICAgIH0pO1xuICB9XG5cbiAgc2F2ZSh7cGsgPSBudWxsLCBmb3JtTmFtZSA9IFwiZWRpdF9mb3JtXCIsIGRhdGEgPSBudWxsfSA9IHt9KSB7XG4gICAgY29uc3Qgbm9ybVBrID0gbm9ybWFsaXplUGsocGspO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBsZXQgZWxlbUxpc3Q7XG4gICAgICBpZiAobm9ybVBrID4gLTEpIHtcbiAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMuYnlJZChub3JtUGspO1xuICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFNkY01vZGVsRXJyb3IoYEVsZW1lbnQgbm90IGZvdW5kIHdpdGggSUQ6ICR7bm9ybVBrfWApKTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtTGlzdCA9IFtlbGVtXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1MaXN0ID0gdGhpcy52YWx1ZXNMaXN0O1xuICAgICAgfVxuICAgICAgbGV0IHBMaXN0ID0gW107XG4gICAgICBlbGVtTGlzdC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgIHBMaXN0LnB1c2goXG4gICAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHNlbmREYXRhID0gZGF0YSA/IHsuLi5kYXRhfSA6IGVsZW0uc2VyaWFsaXplKCk7XG4gICAgICAgICAgICAgIHNlbmREYXRhLnBrID0gZWxlbS5pZDtcbiAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogXCJzYXZlXCIsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxOYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBzZW5kRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGs6IHNlbmREYXRhLnBrLFxuICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXMsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RbaWRdID0gW1xuICAgICAgICAgICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID1cbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICAgIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICByZXMuZGF0YS5pbnN0YW5jZSA9IHRoaXMuX3BhcnNlU2VydmVyUmVzKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBMaXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZWxlbSB7P1NkY01vZGVsfVxuICAgKiBAcGFyYW0gZGF0YSB7P29iamVjdH1cbiAgICogQHJldHVybnMge1Byb21pc2U8dW5rbm93bj59XG4gICAqL1xuICBjcmVhdGUoe2VsZW0gPSBudWxsLCBkYXRhID0gbnVsbH0gPSB7fSkge1xuICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgaWYgKCFlbGVtKSB7XG4gICAgICBlbGVtID0gdGhpcy5uZXcoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWFkRmlsZXMoZWxlbSkudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICBldmVudF90eXBlOiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbFF1ZXJ5LFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgPz8gZWxlbT8uc2VyaWFsaXplKCkgPz8ge30sXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RbaWRdID0gW1xuICAgICAgICAgICAgKHJlcykgPT4ge1xuICAgICAgICAgICAgICBsZXQgZGF0YSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgICA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICBpZiAoZWxlbSkge1xuICAgICAgICAgICAgICAgIGVsZW0uaWQgPSBkYXRhWzBdPy5wayB8fCBkYXRhWzBdPy5pZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXMuZGF0YS5pbnN0YW5jZSA9IHRoaXMuX3BhcnNlU2VydmVyUmVzKGRhdGEpWzBdO1xuICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoZSB3ZWJzb2NrZXQgaXMgb3BlbiBhbmQgaGFzIGNvbXBsZXRlZCB0aGUgc2VydmVyLXNpZGUgY29ubmVjdFxuICAgKiBoYW5kc2hha2UgYmVmb3JlIGlzc3VpbmcgbW9kZWwgcmVxdWVzdHMuXG4gICAqXG4gICAqIE11bHRpcGxlIGNhbGxlcnMgY2FuIGFycml2ZSB3aGlsZSBhIGNvbm5lY3Rpb24gYXR0ZW1wdCBpcyBhbHJlYWR5IGluXG4gICAqIHByb2dyZXNzLiBJbiB0aGF0IGNhc2UgdGhleSBhcmUgcXVldWVkIGJlaGluZCB0aGUgc2FtZSBzeW50aGV0aWMgcmVxdWVzdCBpZC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBpc0Nvbm5lY3RlZCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzQ29ubmVjdGVkKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICF0aGlzLl9pc0Nvbm5lY3RpbmdQcm9jZXNzIHx8XG4gICAgICAgICF0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF1cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9pc0Nvbm5lY3RpbmdQcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtDT05ORUNUSU5HX1JFUVVFU1RfSURdID0gWygpID0+IHtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICB9XTtcbiAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgW3Jlc29sdmVPcmlnaW4sIHJlamVjdE9yaWdpbl0gPVxuICAgICAgICAgIHRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXTtcbiAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtDT05ORUNUSU5HX1JFUVVFU1RfSURdID0gW1xuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVPcmlnaW4oKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlamVjdE9yaWdpbigpO1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgd2Vic29ja2V0IGFuZCBkaXNhYmxlIGF1dG9tYXRpYyByZWNvbm5lY3QgZm9yIHRoaXMgcXVlcnlzZXQuXG4gICAqL1xuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuX2F1dG9SZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICB9O1xuICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgIGRlbGV0ZSB0aGlzW1wic29ja2V0XCJdO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVzTGlzdC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICBlbGVtLl9vbkNsb3NlKClcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGxvYWQgYXR0YWNoZWQgYEZpbGVgIHZhbHVlcyBpbiBmaXhlZC1zaXplIGNodW5rcyBiZWZvcmUgc2F2ZS9jcmVhdGUgY2FsbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7U2RjTW9kZWx9IGVsZW1cbiAgICogQHJldHVybnMge1Byb21pc2U8b2JqZWN0Pn1cbiAgICovXG4gIF9yZWFkRmlsZXMoZWxlbSkge1xuICAgIGxldCB0b1NvbHZlID0gW107XG4gICAgbGV0IGZpbGVzID0ge307XG4gICAgaWYgKCFlbGVtKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZpbGVzKTtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMoZWxlbS5jb25zdHJ1Y3Rvci5maWVsZHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBlbGVtW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHRvU29sdmUucHVzaChcbiAgICAgICAgICBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuUmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcblxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdmFsdWUuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgICAgICAgICAgbGV0IG51bWJlck9mQ2h1bmtzID0gTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpO1xuICAgICAgICAgICAgZmlsZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkNodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNodW5rID0gQXJyYXkuZnJvbShyZXN1bHQuc2xpY2UoXG4gICAgICAgICAgICAgICAgTUFYX0ZJTEVfVVBMT0FEICogaSxcbiAgICAgICAgICAgICAgICBNQVhfRklMRV9VUExPQUQgKiAoaSArIDEpLFxuICAgICAgICAgICAgICApKTtcbiAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogXCJ1cGxvYWRcIixcbiAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyT2ZDaHVua3MsXG4gICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxRdWVyeSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9Tb2x2ZSkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgd2Vic29ja2V0IHJlc3BvbnNlcyB0byB0aGUgbWF0Y2hpbmcgcGVuZGluZyByZXF1ZXN0IGFuZCB1cGRhdGUgbG9jYWxcbiAgICogc3RhdGUgd2hlbiB0aGUgc2VydmVyIHNlbmRzIG1vZGVsIHBheWxvYWRzLlxuICAgKlxuICAgKiBAcGFyYW0ge01lc3NhZ2VFdmVudH0gZVxuICAgKi9cbiAgYXN5bmMgX29uTWVzc2FnZShlKSB7XG4gICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLm9wZW5SZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZGF0YS5ldmVudF9pZF1bMV0obmV3IFNkY01vZGVsRXJyb3IoZGF0YSkpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoXCJwdXNoRXJyb3JNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbQ09OTkVDVElOR19SRVFVRVNUX0lEXVsxXShuZXcgU2RjTW9kZWxFcnJvcihkYXRhKSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoQ09OTkVDVElOR19SRVFVRVNUX0lEKTtcbiAgICAgICAgdGhpcy5fYXV0b1JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgdHJpZ2dlcihcInB1c2hNc2dcIiwgZGF0YS5oZWFkZXIgfHwgXCJcIiwgZGF0YS5tc2cgfHwgXCJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwiY29ubmVjdFwiKSB7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNDb25uZWN0aW5nUHJvY2VzcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5SZXF1ZXN0W0NPTk5FQ1RJTkdfUkVRVUVTVF9JRF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoQ09OTkVDVElOR19SRVFVRVNUX0lEKTtcbiAgICAgIH0gZWxzZSBpZiAoW1wibG9hZFwiLCBcIm5hbWVkX3ZpZXdcIiwgXCJkZXRhaWxfdmlld1wiXS5pbmNsdWRlcyhkYXRhLnR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGpzb25SZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBhd2FpdCB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uUmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcIm9uX3VwZGF0ZVwiIHx8IGRhdGEudHlwZSA9PT0gXCJvbl9jcmVhdGVcIikge1xuICAgICAgICBjb25zdCBqc29uUmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG5cbiAgICAgICAgbGV0IG9iaiA9IGF3YWl0IHRoaXMuX3BhcnNlU2VydmVyUmVzKGpzb25SZXMpO1xuICAgICAgICBsZXQgY2I7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gXCJvbl9jcmVhdGVcIikge1xuICAgICAgICAgIGNiID0gdGhpcy5vbkNyZWF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYiA9IHRoaXMub25VcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjYihvYmopO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IG9iajtcbiAgICAgIH1cblxuICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZTtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBkYXRhLmRhdGEuaW5zdGFuY2UgPSBKU09OLnBhcnNlKGRhdGEuZGF0YS5pbnN0YW5jZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wZW5SZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgdW50aWwgYWxsIGluLWZsaWdodCB3ZWJzb2NrZXQgcmVxdWVzdHMgZm9yIHRoaXMgcXVlcnlzZXQgYXJlIHJlc29sdmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIG5vT3BlblJlcXVlc3RzKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3BlblJlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzLnB1c2gocmVzb2x2ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgY29tcGxldGVkIHJlcXVlc3QgYW5kIHdha2UgYW55IGBub09wZW5SZXF1ZXN0cygpYCB3YWl0ZXJzIHdoZW4gdGhlXG4gICAqIHJlcXVlc3QgbWFwIGJlY29tZXMgZW1wdHkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudElkXG4gICAqL1xuICBfY2xvc2VPcGVuUmVxdWVzdChldmVudElkKSB7XG4gICAgZGVsZXRlIHRoaXMub3BlblJlcXVlc3RbZXZlbnRJZF07XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3BlblJlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKCh4KSA9PiB4KCkpO1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFc3RhYmxpc2ggdGhlIHJhdyB3ZWJzb2NrZXQgY29ubmVjdGlvbiBmb3IgdGhpcyBxdWVyeXNldC5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBfY29ubmVjdFRvU2VydmVyKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxJZGVudGlmaWVyID1cbiAgICAgICAgYCR7dGhpcy5tb2RlbE5hbWV9YCArICh0aGlzLm1vZGVsSWQgPiAwID8gYC8ke3RoaXMubW9kZWxJZH1gIDogXCJcIik7XG4gICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gbmV3IFdlYlNvY2tldChcbiAgICAgICAgICBgd3NzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxJZGVudGlmaWVyfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoXG4gICAgICAgICAgYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxJZGVudGlmaWVyfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9ubWVzc2FnZSA9IHRoaXMuX29uTWVzc2FnZS5iaW5kKHRoaXMpO1xuXG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgU0RDIE1vZGVsICgke3RoaXMubW9kZWxOYW1lfSwgJHt0aGlzLm1vZGVsSWR9KSBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseWAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2lzQ29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wZW5SZXF1ZXN0KSkge1xuICAgICAgICAgIHZhbHVlWzFdKGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlblJlcXVlc3QgPSB7fTtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fYXV0b1JlY29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGFwcGxpY2F0aW9uLWxldmVsIGNvbm5lY3QgaGFuZHNoYWtlIG9uY2UgdGhlIHdlYnNvY2tldCBvcGVucy5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2U8Kj59XG4gICAqL1xuICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogXCJtb2RlbFwiLFxuICAgICAgICAgIGV2ZW50X3R5cGU6IFwiY29ubmVjdFwiLFxuICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsTmFtZSxcbiAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsUXVlcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB0aGlzLm9wZW5SZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGJhY2tlbmQgbW9kZWwgcGF5bG9hZCBpbnRvIGxvY2FsbHkgdHJhY2tlZCBtb2RlbCBvYmplY3RzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5PG9iamVjdD59IHJlc3VsdHNcbiAgICovXG4gIF9wYXJzZVNlcnZlclJlcyhyZXN1bHRzKSB7XG4gICAgY29uc3QgbmV3TW9kZWxzID0gW11cbiAgICBmb3IgKGNvbnN0IHggb2YgcmVzdWx0cykge1xuICAgICAgY29uc3QgTW9kZWxDbGFzcyA9IGdldE1vZGVsKHRoaXMubW9kZWxOYW1lKTtcbiAgICAgIGlmKCFNb2RlbENsYXNzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm1vZGVsTmFtZX0gaXMgbm8gU2RjTW9kZWwuIG15YmUgdGhlIG1vZGVscyBhciBub3QgaW1wb3J0YWQuYCk7XG4gICAgICB9XG4gICAgICBjb25zdCBuZXdNb2RlbCA9IG5ldyBNb2RlbENsYXNzKHsnaWQnOiB4LnBrID8/IHguaWQsIC4uLnguZmllbGRzfSk7XG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSB0aGlzLmJ5SWQobmV3TW9kZWwuaWQpO1xuICAgICAgaWYgKGN1cnJlbnRNb2RlbCkge1xuICAgICAgICBjdXJyZW50TW9kZWwuc2V0VmFsdWVzKG5ld01vZGVsKTtcbiAgICAgICAgbmV3TW9kZWxzLnB1c2goY3VycmVudE1vZGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWVzTGlzdC5wdXNoKG5ld01vZGVsKTtcbiAgICAgICAgbmV3TW9kZWwuX3NldFF1ZXJ5U2V0KHRoaXMsIHRydWUpO1xuICAgICAgICBuZXdNb2RlbHMucHVzaChuZXdNb2RlbCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudmFsdWVzTGlzdC5zb3J0KChhLCBiKSA9PiBhLl9pZCAtIGIuX2lkKTtcbiAgICByZXR1cm4gbmV3TW9kZWxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNkY01vZGVsIHtcbiAgc3RhdGljIGZpZWxkcyA9IHt9O1xuXG4gIC8qKlxuICAgKiBCYXNlIG1vZGVsIHdyYXBwZXIgdXNlZCBieSBTREMgbW9kZWwgcmVnaXN0cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZVxuICAgKi9cbiAgY29uc3RydWN0b3IobW9kZWxOYW1lKSB7XG4gICAgdGhpcy5faWQgPSBudWxsO1xuICAgIHRoaXMuX2Zvcm1zID0gW107XG4gICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZvcm1JZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubW9kZWxOYW1lID0gbW9kZWxOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0P30gbW9kZWxRdWVyeVNldFxuICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRcbiAgICogQHJldHVybnMge1NkY1F1ZXJ5U2V0fVxuICAgKi9cbiAgc3RhdGljIHF1ZXJ5U2V0KG1vZGVsUXVlcnlTZXQgPSBudWxsLCBwYXJlbnQgPSBudWxsKSB7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybiBuZXcgU2RjUXVlcnlTZXQodGhpcy5tb2RlTmFtZSwgbW9kZWxRdWVyeVNldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNldCh0aGlzLm1vZGVOYW1lLCBtb2RlbFF1ZXJ5U2V0KTtcbiAgfVxuXG4gIGFkZEZvcm0oJGZvcm0pIHtcbiAgICAvLyBSZW1vdmUgb2xkIGxpc3RlbmVycyBpZiBmb3JtIGFscmVhZHkgc2V0XG4gICAgY29uc3Qgb25DaGFuZ2UgPSB0aGlzLl9vbkNoYW5nZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5fZm9ybXMucHVzaCgkZm9ybSk7XG5cbiAgICBpZiAoJGZvcm0pIHtcbiAgICAgIC8vIEF0dGFjaCBkZWxlZ2F0ZWQgZXZlbnQgaGFuZGxlciB0byBhbGwgaW5wdXRzXG4gICAgICAkZm9ybS5vbihcbiAgICAgICAgXCJpbnB1dC5mb3JtV2F0Y2hlciBjaGFuZ2UuZm9ybVdhdGNoZXJcIixcbiAgICAgICAgXCJpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYVwiLFxuICAgICAgICBvbkNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBfb25DaGFuZ2UoZXZlbnQpIHtcbiAgICBjb25zdCB7bmFtZX0gPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IuZmllbGRzW25hbWVdKSB7XG4gICAgICB0aGlzW2BzZXQke25hbWV9YF0oZ2V0VmFsdWVGcm9tRmllbGQoZXZlbnQudGFyZ2V0KSk7XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZUZvcm0oZmllbGROYW1lKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5fZm9ybXMuZm9yRWFjaCgoJGZvcm0pID0+IHtcbiAgICAgICRmb3JtLmZpbmQoYFtuYW1lPVwiJHtmaWVsZE5hbWV9XCJdYCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNldFZhbHVlSW5GaWVsZCh0aGlzLCBzZWxmW2ZpZWxkTmFtZV0pXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldFZhbHVlcyhkYXRhID0ge30pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXRWYWx1ZXMoKSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaCB0aGUgcXVlcnlzZXQgdGhhdCBvd25zIHRoaXMgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7U2RjUXVlcnlTZXR9IHF1ZXJ5U2V0XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb2FkZWRcbiAgICovXG4gIF9zZXRRdWVyeVNldChxdWVyeVNldCwgaXNMb2FkZWQpIHtcbiAgICB0aGlzLl9xdWVyeVNldCA9IG5ldyBXZWFrUmVmKHF1ZXJ5U2V0KTtcbiAgICB0aGlzLmxvYWRlZCA9IGlzTG9hZGVkO1xuICB9XG5cbiAgc2F2ZSh7Zm9ybU5hbWUgPSBcImVkaXRfZm9ybVwiLCBkYXRhID0gbnVsbH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLnNhdmUoe3BrOiB0aGlzLmlkLCBmb3JtTmFtZSwgZGF0YX0pO1xuICB9XG5cbiAgY3JlYXRlKHtkYXRhID0gbnVsbH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmNyZWF0ZSh7ZWxlbTogdGhpcywgZGF0YX0pO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmRlbGV0ZSh7ZWxlbTogdGhpc30pO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS51cGRhdGUoe2l0ZW06IHRoaXN9KTtcbiAgfVxuXG4gIGdldCBpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBzZXQgcGsoZGF0YSkge1xuICAgIHRoaXMuX2lkID0gZGF0YTtcbiAgfVxuXG4gIGdldCBwaygpIHtcbiAgICByZXR1cm4gdGhpcy5faWQ7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5jbG9zZSgpO1xuICB9XG5cbiAgX29uQ2xvc2UoKSB7XG4gICAgT2JqZWN0LmtleXModGhpcy5jb25zdHJ1Y3Rvci5maWVsZHMpXG4gICAgICAuZmlsdGVyKCh4KSA9PiB0aGlzW2BfJHt4fWBdIGluc3RhbmNlb2YgU2RjUXVlcnlTZXQpXG4gICAgICAuZm9yRWFjaCgoeCkgPT4gdGhpc1tgXyR7eH1gXS5jbG9zZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBzZXJ2ZXItcmVuZGVyZWQgZGV0YWlsIHZpZXcgZm9yIHRoaXMgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgZGV0YWlsVmlldyh7Y2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsLCB0ZW1wbGF0ZUNvbnRleHQgPSB7fX0pIHtcbiAgICByZXR1cm4gdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5kZXRhaWxWaWV3KHtwazogdGhpcy5pZCwgY2JSZXNvbHZlLCBjYlJlamVjdCwgdGVtcGxhdGVDb250ZXh0fSk7XG4gIH1cblxuICBzZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuY29uc3RydWN0b3IuZmllbGRzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsXSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tleV07XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZGNRdWVyeVNldCkge1xuICAgICAgICBpZiAodmFsLm1hbnlfdG9fbWFueSB8fCB2YWwub25lX3RvX21hbnkpIHtcbiAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlLmdldElkcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFsbElkcyA9IHZhbHVlLmdldElkcygpO1xuICAgICAgICAgIGlmIChhbGxJZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgYWNjW2tleV0gPSBhbGxJZHNbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1trZXldID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh2YWwuaXNfcmVsYXRpb24gJiYgdmFsdWUgaW5zdGFuY2VvZiBTZGNNb2RlbCkge1xuICAgICAgICBhY2Nba2V5XSA9IHZhbHVlLmlkID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30pO1xuICB9XG5cbiAgdG9Kc29uKCkge1xuICAgIGNvbnN0IHJlcyA9IHt9XG4gICAgZm9yIChsZXQga2V5IGluIHRoaXMuY29uc3RydWN0b3IuZmllbGRzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICByZXNba2V5XSA9IHZhbHVlLm5hbWU7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2RjTW9kZWwpIHtcbiAgICAgICAgcmVzW2tleV0gPSB2YWx1ZS5pZDtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBTZGNRdWVyeVNldCkge1xuICAgICAgICByZXNba2V5XSA9IHZhbHVlLmdldElkcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGZvciBzeW5jaW5nIHZhbHVlcyBmcm9tIGEgZm9ybSBpbnRvIHRoZSBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHsqfSAkZm9ybXNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBzeW5jRm9ybVRvTW9kZWwoJGZvcm1zKSB7XG4gICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBmb3JtIGNvbGxlY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gJGZvcm1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgX3Jlc29sdmVGb3JtcygkZm9ybXMpIHtcbiAgICBpZiAoISRmb3JtcyB8fCAhJGZvcm1zLmhhc0NsYXNzKHRoaXMuZm9ybUlkKSkge1xuICAgICAgcmV0dXJuICQoYC4ke3RoaXMuZm9ybUlkfWApO1xuICAgIH1cblxuICAgIHJldHVybiAkZm9ybXM7XG4gIH1cblxuICAvKipcbiAgICogQ29weSB0aGUgY3VycmVudCBtb2RlbCBzdGF0ZSBpbnRvIG1hdGNoaW5nIGZvcm0gZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0geyp9ICRmb3Jtc1xuICAgKi9cbiAgc3luY01vZGVsVG9Gb3JtKCRmb3Jtcykge1xuICAgICRmb3JtcyA9IHRoaXMuX3Jlc29sdmVGb3JtcygkZm9ybXMpO1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5jb25zdHJ1Y3Rvci5maWVsZHM7XG4gICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGsgPSBub3JtYWxpemVQaygkKHRoaXMpLmRhdGEoXCJtb2RlbF9wa1wiKSk7XG4gICAgICBpZiAoc2VsZi5pZCAhPT0gcGspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBmb3JtSXRlbSBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgIGxldCBuYW1lID0gZm9ybUl0ZW0ubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gXCJcIiAmJiAhIWZpZWxkc1tuYW1lXSkge1xuICAgICAgICAgIHNldFZhbHVlSW5GaWVsZChmb3JtSXRlbSwgc2VsZltuYW1lXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgbWF0Y2hpbmcgZm9ybSB2YWx1ZXMgYmFjayBvbnRvIHRoZSBjdXJyZW50IG1vZGVsIGluc3RhbmNlLlxuICAgKlxuICAgKiBIaWRkZW4gaW5wdXRzIGFyZSBwYXJzZWQgdG8gdGhlaXIgb3JpZ2luYWwgcHJpbWl0aXZlIHR5cGUgd2hlbiBwb3NzaWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHsqfSAkZm9ybXNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBzeW5jRm9ybSgkZm9ybXMpIHtcbiAgICAkZm9ybXMgPSB0aGlzLl9yZXNvbHZlRm9ybXMoJGZvcm1zKTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuY29uc3RydWN0b3IuZmllbGRzO1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0ge31cblxuICAgIGZ1bmN0aW9uIHNldFZhbHVlSW5Gb3JtKG5hbWUsIHZhbHVlKSB7XG4gICAgICBpZiAoISFmaWVsZHNbbmFtZV0pIHtcbiAgICAgICAgc2VsZltuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuVmFsdWVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwayA9IG5vcm1hbGl6ZVBrKCQodGhpcykuZGF0YShcIm1vZGVsX3BrXCIpKTtcbiAgICAgIGlmIChzZWxmLmlkICE9PSBwayAmJiAoc2VsZi5pZCAhPT0gbnVsbCB8fCBwayAhPT0gLTEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgZm9ybUl0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICBzZXRWYWx1ZUluRm9ybShmb3JtSXRlbS5uYW1lLCBnZXRWYWx1ZUZyb21GaWVsZChmb3JtSXRlbSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VsZjtcbiAgICB9KTtcblxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGNvcnJlY3Qgc2VydmVyLXNpZGUgZm9ybSBmb3IgdGhpcyBtb2RlbCBzdGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBmb3JtKHtjYlJlc29sdmUgPSBudWxsLCBjYlJlamVjdCA9IG51bGx9ID0ge30pIHtcbiAgICBpZiAodGhpcy5pZCA9PT0gbnVsbCB8fCB0aGlzLmlkID09PSAtMSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZUZvcm0oe2NiUmVqZWN0LCBjYlJlc29sdmV9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRGb3JtKHtjYlJlamVjdCwgY2JSZXNvbHZlfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBjcmVhdGUgZm9ybSBmb3IgYSBuZXcgbW9kZWwgaW5zdGFuY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgX2NyZWF0ZUZvcm0oe2NiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbH0pIHtcbiAgICBsZXQgJGRpdkZvcm0gPSAkKFwiPGRpdj5cIik7XG4gICAgdGhpcy5fcXVlcnlTZXQuZGVyZWYoKS5nZXRGb3JtKHtcbiAgICAgIG1vZGVsT2JqOiB0aGlzLFxuICAgICAgZXZlbnRUeXBlOiBcImNyZWF0ZV9mb3JtXCIsXG4gICAgICBmb3JtTmFtZTogbnVsbCxcbiAgICAgICRkaXZGb3JtLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciB0aGUgZWRpdCBmb3JtIGZvciBhbiBleGlzdGluZyBtb2RlbCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBfZWRpdEZvcm0oe2NiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbH0pIHtcbiAgICBsZXQgJGRpdkZvcm0gPSAkKFwiPGRpdj5cIik7XG5cbiAgICB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmdldEZvcm0oe1xuICAgICAgbW9kZWxPYmo6IHRoaXMsXG4gICAgICBldmVudFR5cGU6IFwiZWRpdF9mb3JtXCIsXG4gICAgICBmb3JtTmFtZTogbnVsbCxcbiAgICAgICRkaXZGb3JtLFxuICAgICAgY2JSZXNvbHZlLFxuICAgICAgY2JSZWplY3QsXG4gICAgICBmb3JtSWQ6IHRoaXMuZm9ybUlkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZGb3JtO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhIG5hbWVkIHNlcnZlci1zaWRlIGZvcm0gZm9yIHRoaXMgbW9kZWwuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgbmFtZWRGb3JtKHtmb3JtTmFtZSwgY2JSZXNvbHZlID0gbnVsbCwgY2JSZWplY3QgPSBudWxsfSkge1xuICAgIGxldCAkZGl2Rm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICB0aGlzLl9xdWVyeVNldC5kZXJlZigpLmdldEZvcm0oe1xuICAgICAgbW9kZWxPYmo6IHRoaXMsXG4gICAgICBldmVudFR5cGU6IFwibmFtZWRfZm9ybVwiLFxuICAgICAgZm9ybU5hbWUsXG4gICAgICAkZGl2Rm9ybSxcbiAgICAgIGNiUmVzb2x2ZSxcbiAgICAgIGNiUmVqZWN0LFxuICAgICAgZm9ybUlkOiB0aGlzLmZvcm1JZCxcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2Rm9ybTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGZpZWxkIHZhbHVlIHVzaW5nIHRoZSBzdXBwbGllZCBmaWVsZCBjb25maWcuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICAgKi9cbiAgdmFsaWRhdGUodmFsdWUsIGNvbmZpZykge1xuICAgIGNvbnN0IGVyciA9IHZhbGlkYXRlRmllbGQodmFsdWUsIGNvbmZpZyk7XG4gICAgaWYgKGVycikgdGhyb3cgbmV3IEVycm9yKGVycik7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBhIHJhdyBpbnB1dCB2YWx1ZSBpbnRvIHRoZSBzaGFwZSBleHBlY3RlZCBieSB0aGUgZmllbGQgY29uZmlnLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuICBwYXJzZVZhbHVlKHZhbHVlLCBjb25maWcpIHtcbiAgICBjb25zdCB7XG4gICAgICB0eXBlXG4gICAgfSA9IGNvbmZpZztcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBcIkNoYXJGaWVsZFwiOlxuICAgICAgY2FzZSBcIlRlZXh0RmllbGRcIjpcbiAgICAgIGNhc2UgXCJVVUlERmllbGRcIjpcbiAgICAgIGNhc2UgXCJFbWFpbEZpZWxkXCI6XG4gICAgICAgIHJldHVybiBgJHt2YWx1ZX1gO1xuXG4gICAgICBjYXNlIFwiSW50ZWdlckZpZWxkXCI6XG4gICAgICBjYXNlIFwiQXV0b0ZpZWxkXCI6XG4gICAgICBjYXNlIFwiQmlnSW50ZWdlckZpZWxkXCI6XG4gICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuXG4gICAgICBjYXNlIFwiRmxvYXRGaWVsZFwiOlxuICAgICAgY2FzZSBcIkRlY2ltYWxGaWVsZFwiOlxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIG51bWJlclwiO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiQm9vbGVhbkZpZWxkXCI6XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuXG4gICAgICBjYXNlIFwiRGF0ZUZpZWxkXCI6XG4gICAgICBjYXNlIFwiRGF0ZVRpbWVGaWVsZFwiOlxuICAgICAgICByZXR1cm4gRGF0ZS5wYXJzZSh2YWx1ZSk7XG5cbiAgICAgIGNhc2UgXCJVUkxGaWVsZFwiOlxuICAgICAgICByZXR1cm4gbmV3IFVSTCh2YWx1ZSk7XG5cbiAgICAgIGNhc2UgXCJGaWxlRmllbGRcIjpcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChGaWxlTG9hZGVkLmlzVmFsaWQodmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGaWxlTG9hZGVkKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGVMb2FkZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEZpbGVMb2FkZWQodmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBGaWxlICE9PSBcInVuZGVmaW5lZFwiICYmIHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgIGlmIChjb25maWcubWF4X3NpemUgJiYgdmFsdWUuc2l6ZSA+IGNvbmZpZy5tYXhfc2l6ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGBGaWxlIHRvbyBsYXJnZSAobWF4ICR7Y29uZmlnLm1heF9zaXplfSBieXRlcylgO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb25maWcuYWxsb3dlZF90eXBlcyAmJiAhY29uZmlnLmFsbG93ZWRfdHlwZXMuaW5jbHVkZXModmFsdWUudHlwZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBgSW52YWxpZCBmaWxlIHR5cGUgKCR7dmFsdWUudHlwZX0pYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJKU09ORmllbGRcIjpcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIGZpZWxkIHZhbHVlIGFnYWluc3QgdGhlIGZpZWxkIG1ldGFkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGJhY2tlbmQuXG4gKlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICogQHJldHVybnMgez9zdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRmllbGQodmFsdWUsIGNvbmZpZykge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICByZXF1aXJlZCxcbiAgICBtYXhfbGVuZ3RoOiBtYXhMZW5ndGgsXG4gICAgaXNfcmVsYXRpb246IGlzUmVsYXRpb24sXG4gICAgbWFueV90b19tYW55OiBtYW55VG9NYW55LFxuICAgIG9uZV90b19tYW55OiBvbmVUb01hbnksXG4gICAgbWFueV90b19vbmU6IG1hbnlUb09uZSxcbiAgICBvbmVfdG9fb25lOiBvbmVUb09uZSxcbiAgICByZWxhdGVkX21vZGVsOiByZWxhdGVkTW9kZWwsXG4gIH0gPSBjb25maWc7XG5cbiAgdm9pZCBpc1JlbGF0aW9uO1xuXG4gIGlmIChyZXF1aXJlZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBcIlwiKSB7XG4gICAgICByZXR1cm4gXCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkXCI7XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChtYW55VG9NYW55IHx8IG9uZVRvTWFueSB8fCBtYW55VG9PbmUgfHwgb25lVG9PbmUpIHtcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB8fCB2YWx1ZS5tb2RlbE5hbWUgIT09IHJlbGF0ZWRNb2RlbCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiBOdW1iZXIuaXNOYU4ocGFyc2VJbnQodmFsdWUpKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIG9iamVjdCBvciBJRFwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBcIkNoYXJGaWVsZFwiOlxuICAgIGNhc2UgXCJUZXh0RmllbGRcIjpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIHN0cmluZ1wiO1xuICAgICAgfVxuICAgICAgaWYgKG1heExlbmd0aCAmJiB2YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGBNYXggbGVuZ3RoIGlzICR7bWF4TGVuZ3RofWA7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJJbnRlZ2VyRmllbGRcIjpcbiAgICBjYXNlIFwiQXV0b0ZpZWxkXCI6XG4gICAgY2FzZSBcIkJpZ0ludGVnZXJGaWVsZFwiOlxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gXCJNdXN0IGJlIGFuIGludGVnZXJcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkZsb2F0RmllbGRcIjpcbiAgICBjYXNlIFwiRGVjaW1hbEZpZWxkXCI6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSBudW1iZXJcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkJvb2xlYW5GaWVsZFwiOlxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIGJvb2xlYW5cIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIkRhdGVGaWVsZFwiOlxuICAgIGNhc2UgXCJEYXRlVGltZUZpZWxkXCI6XG4gICAgICBpZiAoaXNOYU4oRGF0ZS5wYXJzZSh2YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBcIk11c3QgYmUgYSB2YWxpZCBkYXRlXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJFbWFpbEZpZWxkXCI6XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiIHx8ICEvXlteXFxzQF0rQFteXFxzQF0rXFwuW15cXHNAXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIGVtYWlsXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJVUkxGaWVsZFwiOlxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3IFVSTCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBVUkxcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIlVVSURGaWVsZFwiOlxuICAgICAgaWYgKCEvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBVVUlEXCI7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJKU09ORmllbGRcIjpcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBKU09OIG9iamVjdFwiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcIkZpbGVGaWVsZFwiOlxuICAgICAgaWYgKCFGaWxlTG9hZGVkLmlzVmFsaWQodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRmlsZUxvYWRlZCkpIHtcbiAgICAgICAgcmV0dXJuIFwiTXVzdCBiZSBhIHZhbGlkIGZpbGVcIjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuIl0sIm5hbWVzIjpbImdldFZhbHVlRnJvbUZpZWxkIiwic2V0VmFsdWVJbkZpZWxkIiwidXVpZHY0IiwiZ2V0TW9kZWwiLCJhcHAiLCJ0cmlnZ2VyIiwiTUFYX0ZJTEVfVVBMT0FEIiwiQ09OTkVDVElOR19SRVFVRVNUX0lEIiwiU2RjTW9kZWxFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIm1zZyIsImlzX2Vycm9yIiwiaGVhZGVyIiwiaHRtbCIsIkZpbGVMb2FkZWQiLCJuYW1lIiwidXJsIiwiY29udGVudCIsImxvYWQiLCJmb3JjZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiJCIsImdldCIsInRoZW4iLCJjYXRjaCIsInRleHQiLCJpc1ZhbGlkIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJGaWxlIiwibm9ybWFsaXplUGsiLCJwayIsIm5vcm1hbGl6ZWRQayIsInBhcnNlSW50IiwiTnVtYmVyIiwiaXNOYU4iLCJTZGNRdWVyeVNldCIsIm1vZGVsTmFtZSIsIm1vZGVsUXVlcnkiLCJ2YWx1ZXNMaXN0IiwibG9hZGVkIiwiX29uTm9PcGVuUmVxdWVzdHMiLCJfaXNDb25uZWN0ZWQiLCJfaXNDb25uZWN0aW5nUHJvY2VzcyIsIl9hdXRvUmVjb25uZWN0Iiwic29ja2V0Iiwib3BlblJlcXVlc3QiLCJtb2RlbElkIiwib25VcGRhdGUiLCJvbkNyZWF0ZSIsIlByb3h5IiwidGFyZ2V0IiwicHJvcCIsInNldCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImxlbmd0aCIsImRvbmUiLCJvbl9jcmVhdGUiLCJoYW5kbGVyIiwib25fdXBkYXRlIiwic2V0SWRzIiwiaWRzIiwic3RydWN0dXJlZENsb25lIiwiZm9yRWFjaCIsIl9zZXRRdWVyeVNldCIsIlNkY01vZGVsIiwibnVtTGlzdCIsIm51bUlkIiwiTmFOIiwiaXNJbnRlZ2VyIiwidGVtcE51bUxpc3QiLCJtYXAiLCJ4Iiwic29tZSIsInNwbGl0IiwibmV3TW9kZWwiLCJuZXciLCJpZCIsImZpbHRlciIsIml0ZW0iLCJpbmNsdWRlcyIsInZhbHVlSWRzIiwiZ2V0SWRzIiwicHVzaCIsImJ5SWQiLCJub3JtYWxpemVkSWQiLCJmaW5kIiwiZWxtIiwic2V0RmlsdGVyIiwiYWRkRmlsdGVyIiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWVzIiwiX3NlbmRMb2FkIiwidXBkYXRlIiwibG9hZFF1ZXJ5IiwiZGVsZXRlIiwiZWxlbSIsImlzQ29ubmVjdGVkIiwic2VuZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJldmVudCIsImV2ZW50X3R5cGUiLCJldmVudF9pZCIsImFyZ3MiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJkYXRhIiwiX3NlbmRMaXN0VmlldyIsImNiUmVzb2x2ZSIsImNiUmVqZWN0IiwidGVtcGxhdGVDb250ZXh0IiwidmlldyIsImV2ZW50VHlwZSIsInZpZXdOYW1lIiwiJGRpdkxpc3QiLCJ2aWV3X25hbWUiLCJ0ZW1wbGF0ZV9jb250ZXh0IiwiYXBwZW5kIiwicmVmcmVzaCIsInJlcyIsIl9zZW5kRGV0YWlsVmlldyIsImdldEZvcm0iLCJtb2RlbE9iaiIsImZvcm1OYW1lIiwiJGRpdkZvcm0iLCJmb3JtSWQiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCIkZm9ybSIsImNsb3Nlc3QiLCJhZGRDbGFzcyIsImFkZEZvcm0iLCJoYXNBdHRyaWJ1dGUiLCJhdHRyIiwiZG9Ob3RMb2FkIiwiZGV0YWlsVmlldyIsImxpc3RWaWV3Iiwic2VhcmNoVmFsdWVzIiwic2F2ZSIsIm5vcm1QayIsImVsZW1MaXN0IiwicExpc3QiLCJfcmVhZEZpbGVzIiwiZmlsZXMiLCJzZW5kRGF0YSIsInNlcmlhbGl6ZSIsImluc3RhbmNlIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVPcmlnaW4iLCJyZWplY3RPcmlnaW4iLCJjbG9zZSIsIm9uY2xvc2UiLCJfb25DbG9zZSIsInRvU29sdmUiLCJrZXlzIiwiZmllbGRzIiwia2V5IiwiYnVmZmVyIiwiYXJyYXlCdWZmZXIiLCJyZXN1bHQiLCJVaW50OEFycmF5IiwibnVtYmVyT2ZDaHVua3MiLCJNYXRoIiwiY2VpbCIsImZpbGVfbmFtZSIsImZpZWxkX25hbWUiLCJjb250ZW50X2xlbmd0aCIsInNpemUiLCJpIiwiY2h1bmsiLCJmcm9tIiwic2xpY2UiLCJudW1iZXJfb2ZfY2h1bmtzIiwiY29udGVudF90eXBlIiwidHlwZSIsIl9vbk1lc3NhZ2UiLCJlIiwiaGFzT3duUHJvcGVydHkiLCJfY2xvc2VPcGVuUmVxdWVzdCIsImpzb25SZXMiLCJvYmoiLCJjYiIsIm5vT3BlblJlcXVlc3RzIiwiZXZlbnRJZCIsIm1vZGVsSWRlbnRpZmllciIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiYmluZCIsImNvbnNvbGUiLCJlcnJvciIsIl9rZXkiLCJlbnRyaWVzIiwic2V0VGltZW91dCIsIm9uZXJyb3IiLCJlcnIiLCJvbm9wZW4iLCJyZXN1bHRzIiwibmV3TW9kZWxzIiwiTW9kZWxDbGFzcyIsImN1cnJlbnRNb2RlbCIsInNldFZhbHVlcyIsInNvcnQiLCJhIiwiYiIsIl9pZCIsIl9mb3JtcyIsInF1ZXJ5U2V0IiwibW9kZWxRdWVyeVNldCIsInBhcmVudCIsIm1vZGVOYW1lIiwib25DaGFuZ2UiLCJfb25DaGFuZ2UiLCJvbiIsIl91cGRhdGVGb3JtIiwiZmllbGROYW1lIiwic2VsZiIsImVhY2giLCJpc0xvYWRlZCIsIl9xdWVyeVNldCIsIldlYWtSZWYiLCJkZXJlZiIsInJlZHVjZSIsImFjYyIsInZhbCIsIm1hbnlfdG9fbWFueSIsIm9uZV90b19tYW55IiwiYWxsSWRzIiwiaXNfcmVsYXRpb24iLCJ0b0pzb24iLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsIl9yZXNvbHZlRm9ybXMiLCJoYXNDbGFzcyIsInN5bmNNb2RlbFRvRm9ybSIsImZvcm1JdGVtIiwiZWxlbWVudHMiLCJyZXR1cm5WYWx1ZSIsInNldFZhbHVlSW5Gb3JtIiwiZm9ybSIsIl9jcmVhdGVGb3JtIiwiX2VkaXRGb3JtIiwibmFtZWRGb3JtIiwidmFsaWRhdGUiLCJjb25maWciLCJ2YWxpZGF0ZUZpZWxkIiwicGFyc2VWYWx1ZSIsIkRhdGUiLCJVUkwiLCJtYXhfc2l6ZSIsImFsbG93ZWRfdHlwZXMiLCJyZXF1aXJlZCIsIm1heF9sZW5ndGgiLCJtYXhMZW5ndGgiLCJpc1JlbGF0aW9uIiwibWFueVRvTWFueSIsIm9uZVRvTWFueSIsIm1hbnlfdG9fb25lIiwibWFueVRvT25lIiwib25lX3RvX29uZSIsIm9uZVRvT25lIiwicmVsYXRlZF9tb2RlbCIsInJlbGF0ZWRNb2RlbCIsInVuZGVmaW5lZCIsInRlc3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_model.js\n\n}");
|
|
78
|
+
|
|
79
|
+
/***/ },
|
|
80
|
+
|
|
81
|
+
/***/ "./src/simpleDomControl/sdc_params.js"
|
|
72
82
|
/*!********************************************!*\
|
|
73
83
|
!*** ./src/simpleDomControl/sdc_params.js ***!
|
|
74
84
|
\********************************************/
|
|
75
|
-
|
|
85
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
76
86
|
|
|
77
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ prepareData: () => (/* binding */ prepareData),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\n\nfunction prepareData(data, paramNameList = []) {\n const data_json_key = 'SDC_JSON_MODEL=[';\n return Object.fromEntries(Object.entries(data).filter(([key, element]) => {\n return key !== _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY && !paramNameList.includes(key);\n }).map(([key, element]) => {\n if (typeof element === 'string' && element.startsWith(data_json_key)) {\n try {\n const {\n pk,\n fields\n } = JSON.parse(element.slice(data_json_key.length, -1));\n return [key, {\n ...fields,\n id: pk,\n pk\n }];\n } catch {}\n }\n return [key, element];\n }));\n}\nfunction getParamList(paramNameList, $element) {\n let returnList;\n if (!paramNameList) {\n paramNameList = [];\n }\n let data = $element.data();\n let restData = prepareData(data, paramNameList);\n returnList = [];\n for (let i = 0; i < paramNameList.length; i++) {\n let data_name = paramNameList[i];\n if (data.hasOwnProperty(data_name)) {\n returnList.push(data[data_name]);\n } else {\n returnList.push('undefined');\n }\n }\n returnList.push(restData);\n return returnList;\n}\nfunction parseParamNameList(list, controller = null) {\n let values = [];\n for (let i = 0; i < list.length; i++) {\n let tempValue = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.checkIfParamNumberBoolOrString)(list[i], controller);\n values.push(tempValue);\n }\n return values;\n}\nfunction getDomTagParamsWithList(paramNameList, $element, controller = null) {\n let paramList = getParamList(paramNameList, $element);\n return parseParamNameList(paramList, controller);\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $element\n * @param applyController\n * @returns {boolean}\n */\nfunction reg_runOnInitWithParameter(controller, $element, applyController) {\n if (!controller) {\n return false;\n } else if (typeof controller.onInit !== 'function') {\n return false;\n }\n let paramNameList;\n if (typeof controller._on_init_params === 'function') {\n paramNameList = controller._on_init_params();\n } else {\n paramNameList = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getParamsNameOfFunction)(controller.onInit);\n }\n let initParams = getDomTagParamsWithList(paramNameList, $element, applyController._parentController);\n controller.onInit.apply(applyController, initParams);\n if (applyController === controller) {\n for (let mixinKey in controller._mixins) {\n reg_runOnInitWithParameter(controller._mixins[mixinKey], $element, applyController);\n }\n }\n}\nfunction runOnInitWithParameter($element, controller) {\n reg_runOnInitWithParameter(controller, $element, controller);\n}\nfunction getUrlParam(controller, $element) {\n return getDomTagParamsWithList(controller._urlParams, $element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMzREssMEJBQTBCLENBQUNMLFVBQVUsRUFBRVQsUUFBUSxFQUFFUyxVQUFVLENBQUM7QUFDOUQ7QUFFTyxTQUFTZSxXQUFXQSxDQUFDZixVQUFVLEVBQUVULFFBQVEsRUFBRTtFQUNoRCxPQUFPWSx1QkFBdUIsQ0FBQ0gsVUFBVSxDQUFDZ0IsVUFBVSxFQUFFekIsUUFBUSxDQUFDO0FBQ2pFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19wYXJhbXMuanM/ZTRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dldFBhcmFtc05hbWVPZkZ1bmN0aW9uLCBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmd9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtEQVRBX0NPTlRST0xMRVJfS0VZfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlRGF0YShkYXRhLCBwYXJhbU5hbWVMaXN0ID0gW10pIHtcbiAgY29uc3QgZGF0YV9qc29uX2tleSA9ICdTRENfSlNPTl9NT0RFTD1bJ1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZpbHRlcigoW2tleSwgZWxlbWVudF0pID0+IHtcbiAgICAgIHJldHVybiBrZXkgIT09IERBVEFfQ09OVFJPTExFUl9LRVkgJiYgIXBhcmFtTmFtZUxpc3QuaW5jbHVkZXMoa2V5KTtcbiAgICB9KS5tYXAoKFtrZXksIGVsZW1lbnRdKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnICYmIGVsZW1lbnQuc3RhcnRzV2l0aChkYXRhX2pzb25fa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtwaywgZmllbGRzfSA9IEpTT04ucGFyc2UoZWxlbWVudC5zbGljZShkYXRhX2pzb25fa2V5Lmxlbmd0aCwgLTEpKTtcbiAgICAgICAgICByZXR1cm4gW2tleSwge1xuICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgICAgaWQ6IHBrLFxuICAgICAgICAgICAgcGtcbiAgICAgICAgICB9XTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBba2V5LCBlbGVtZW50XTtcbiAgICB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbUxpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQpIHtcbiAgbGV0IHJldHVybkxpc3Q7XG4gIGlmICghcGFyYW1OYW1lTGlzdCkge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBbXTtcbiAgfVxuXG4gIGxldCBkYXRhID0gJGVsZW1lbnQuZGF0YSgpO1xuICBsZXQgcmVzdERhdGEgPSBwcmVwYXJlRGF0YShkYXRhLCBwYXJhbU5hbWVMaXN0KTtcblxuICByZXR1cm5MaXN0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1OYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBkYXRhX25hbWUgPSBwYXJhbU5hbWVMaXN0W2ldO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoZGF0YV9uYW1lKSkge1xuICAgICAgcmV0dXJuTGlzdC5wdXNoKGRhdGFbZGF0YV9uYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkxpc3QucHVzaCgndW5kZWZpbmVkJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuTGlzdC5wdXNoKHJlc3REYXRhKVxuICByZXR1cm4gcmV0dXJuTGlzdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbU5hbWVMaXN0KGxpc3QsIGNvbnRyb2xsZXIgPSBudWxsKSB7XG4gIGxldCB2YWx1ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdGVtcFZhbHVlID0gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKGxpc3RbaV0sIGNvbnRyb2xsZXIpO1xuICAgIHZhbHVlcy5wdXNoKHRlbXBWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5mdW5jdGlvbiBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgbGV0IHBhcmFtTGlzdCA9IGdldFBhcmFtTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCk7XG4gIHJldHVybiBwYXJzZVBhcmFtTmFtZUxpc3QocGFyYW1MaXN0LCBjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50XG4gKiBAcGFyYW0gYXBwbHlDb250cm9sbGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVnX3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoY29udHJvbGxlciwgJGVsZW1lbnQsIGFwcGx5Q29udHJvbGxlcikge1xuICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmICh0eXBlb2YgY29udHJvbGxlci5vbkluaXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBsZXQgcGFyYW1OYW1lTGlzdDtcbiAgaWYgKHR5cGVvZiBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcygpO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihjb250cm9sbGVyLm9uSW5pdCk7XG4gIH1cblxuXG4gIGxldCBpbml0UGFyYW1zID0gZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQsIGFwcGx5Q29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlcik7XG4gIGNvbnRyb2xsZXIub25Jbml0LmFwcGx5KGFwcGx5Q29udHJvbGxlciwgaW5pdFBhcmFtcyk7XG4gIGlmIChhcHBseUNvbnRyb2xsZXIgPT09IGNvbnRyb2xsZXIpIHtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0sICRlbGVtZW50LCBhcHBseUNvbnRyb2xsZXIpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcnVuT25Jbml0V2l0aFBhcmFtZXRlcigkZWxlbWVudCwgY29udHJvbGxlcikge1xuICByZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlcihjb250cm9sbGVyLCAkZWxlbWVudCwgY29udHJvbGxlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRVcmxQYXJhbShjb250cm9sbGVyLCAkZWxlbWVudCkge1xuICByZXR1cm4gZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QoY29udHJvbGxlci5fdXJsUGFyYW1zLCAkZWxlbWVudCk7XG59Il0sIm5hbWVzIjpbImdldFBhcmFtc05hbWVPZkZ1bmN0aW9uIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsInByZXBhcmVEYXRhIiwiZGF0YSIsInBhcmFtTmFtZUxpc3QiLCJkYXRhX2pzb25fa2V5IiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJlbnRyaWVzIiwiZmlsdGVyIiwia2V5IiwiZWxlbWVudCIsImluY2x1ZGVzIiwibWFwIiwic3RhcnRzV2l0aCIsInBrIiwiZmllbGRzIiwiSlNPTiIsInBhcnNlIiwic2xpY2UiLCJsZW5ndGgiLCJpZCIsImdldFBhcmFtTGlzdCIsIiRlbGVtZW50IiwicmV0dXJuTGlzdCIsInJlc3REYXRhIiwiaSIsImRhdGFfbmFtZSIsImhhc093blByb3BlcnR5IiwicHVzaCIsInBhcnNlUGFyYW1OYW1lTGlzdCIsImxpc3QiLCJjb250cm9sbGVyIiwidmFsdWVzIiwidGVtcFZhbHVlIiwiZ2V0RG9tVGFnUGFyYW1zV2l0aExpc3QiLCJwYXJhbUxpc3QiLCJyZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImFwcGx5Q29udHJvbGxlciIsIm9uSW5pdCIsIl9vbl9pbml0X3BhcmFtcyIsImluaXRQYXJhbXMiLCJfcGFyZW50Q29udHJvbGxlciIsImFwcGx5IiwibWl4aW5LZXkiLCJfbWl4aW5zIiwicnVuT25Jbml0V2l0aFBhcmFtZXRlciIsImdldFVybFBhcmFtIiwiX3VybFBhcmFtcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_params.js\n\n}");
|
|
87
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getUrlParam: () => (/* binding */ getUrlParam),\n/* harmony export */ prepareData: () => (/* binding */ prepareData),\n/* harmony export */ runOnInitWithParameter: () => (/* binding */ runOnInitWithParameter)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_view.js */ \"./src/simpleDomControl/sdc_view.js\");\n\n\nfunction prepareData(data, paramNameList = []) {\n const data_json_key = \"SDC_JSON_MODEL=[\";\n return Object.fromEntries(Object.entries(data).filter(([key, element]) => {\n return key !== _sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.DATA_CONTROLLER_KEY && !paramNameList.includes(key);\n }).map(([key, element]) => {\n if (typeof element === \"string\" && element.startsWith(data_json_key)) {\n try {\n const {\n pk,\n fields\n } = JSON.parse(element.slice(data_json_key.length, -1));\n return [key, {\n ...fields,\n id: pk,\n pk\n }];\n } catch {}\n }\n return [key, element];\n }));\n}\nfunction getParamList(paramNameList, $element) {\n let returnList;\n if (!paramNameList) {\n paramNameList = [];\n }\n let data = $element.data();\n let restData = prepareData(data, paramNameList);\n returnList = [];\n for (let i = 0; i < paramNameList.length; i++) {\n let data_name = paramNameList[i];\n if (data.hasOwnProperty(data_name)) {\n returnList.push(data[data_name]);\n } else {\n returnList.push(\"undefined\");\n }\n }\n returnList.push(restData);\n return returnList;\n}\nfunction parseParamNameList(list, controller = null) {\n let values = [];\n for (let i = 0; i < list.length; i++) {\n let tempValue = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.checkIfParamNumberBoolOrString)(list[i], controller);\n values.push(tempValue);\n }\n return values;\n}\nfunction getDomTagParamsWithList(paramNameList, $element, controller = null) {\n let paramList = getParamList(paramNameList, $element);\n return parseParamNameList(paramList, controller);\n}\n\n/**\n *\n * @param {AbstractSDC} controller\n * @param {jquery} $element\n * @param applyController\n * @returns {boolean}\n */\nfunction reg_runOnInitWithParameter(controller, $element, applyController) {\n if (!controller) {\n return false;\n } else if (typeof controller.onInit !== \"function\") {\n return false;\n }\n let paramNameList;\n if (typeof controller._on_init_params === \"function\") {\n paramNameList = controller._on_init_params();\n } else {\n paramNameList = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getParamsNameOfFunction)(controller.onInit);\n }\n let initParams = getDomTagParamsWithList(paramNameList, $element, applyController._parentController);\n controller.onInit.apply(applyController, initParams);\n if (applyController === controller) {\n for (let mixinKey in controller._mixins) {\n reg_runOnInitWithParameter(controller._mixins[mixinKey], $element, applyController);\n }\n }\n}\nfunction runOnInitWithParameter($element, controller) {\n reg_runOnInitWithParameter(controller, $element, controller);\n}\nfunction getUrlParam(controller, $element) {\n return getDomTagParamsWithList(controller._urlParams, $element);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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RTtFQUMzREssMEJBQTBCLENBQUNMLFVBQVUsRUFBRVQsUUFBUSxFQUFFUyxVQUFVLENBQUM7QUFDOUQ7QUFFTyxTQUFTZSxXQUFXQSxDQUFDZixVQUFVLEVBQUVULFFBQVEsRUFBRTtFQUNoRCxPQUFPWSx1QkFBdUIsQ0FBQ0gsVUFBVSxDQUFDZ0IsVUFBVSxFQUFFekIsUUFBUSxDQUFDO0FBQ2pFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19wYXJhbXMuanM/ZTRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbixcbiAgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxufSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7IERBVEFfQ09OVFJPTExFUl9LRVkgfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZURhdGEoZGF0YSwgcGFyYW1OYW1lTGlzdCA9IFtdKSB7XG4gIGNvbnN0IGRhdGFfanNvbl9rZXkgPSBcIlNEQ19KU09OX01PREVMPVtcIjtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhkYXRhKVxuICAgICAgLmZpbHRlcigoW2tleSwgZWxlbWVudF0pID0+IHtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gREFUQV9DT05UUk9MTEVSX0tFWSAmJiAhcGFyYW1OYW1lTGlzdC5pbmNsdWRlcyhrZXkpO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKFtrZXksIGVsZW1lbnRdKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtZW50LnN0YXJ0c1dpdGgoZGF0YV9qc29uX2tleSkpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBwaywgZmllbGRzIH0gPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICBlbGVtZW50LnNsaWNlKGRhdGFfanNvbl9rZXkubGVuZ3RoLCAtMSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4uZmllbGRzLFxuICAgICAgICAgICAgICAgIGlkOiBwayxcbiAgICAgICAgICAgICAgICBwayxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBba2V5LCBlbGVtZW50XTtcbiAgICAgIH0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJhbUxpc3QocGFyYW1OYW1lTGlzdCwgJGVsZW1lbnQpIHtcbiAgbGV0IHJldHVybkxpc3Q7XG4gIGlmICghcGFyYW1OYW1lTGlzdCkge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBbXTtcbiAgfVxuXG4gIGxldCBkYXRhID0gJGVsZW1lbnQuZGF0YSgpO1xuICBsZXQgcmVzdERhdGEgPSBwcmVwYXJlRGF0YShkYXRhLCBwYXJhbU5hbWVMaXN0KTtcblxuICByZXR1cm5MaXN0ID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1OYW1lTGlzdC5sZW5ndGg7IGkrKykge1xuICAgIGxldCBkYXRhX25hbWUgPSBwYXJhbU5hbWVMaXN0W2ldO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoZGF0YV9uYW1lKSkge1xuICAgICAgcmV0dXJuTGlzdC5wdXNoKGRhdGFbZGF0YV9uYW1lXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkxpc3QucHVzaChcInVuZGVmaW5lZFwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm5MaXN0LnB1c2gocmVzdERhdGEpO1xuICByZXR1cm4gcmV0dXJuTGlzdDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbU5hbWVMaXN0KGxpc3QsIGNvbnRyb2xsZXIgPSBudWxsKSB7XG4gIGxldCB2YWx1ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgdGVtcFZhbHVlID0gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKGxpc3RbaV0sIGNvbnRyb2xsZXIpO1xuICAgIHZhbHVlcy5wdXNoKHRlbXBWYWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5mdW5jdGlvbiBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgbGV0IHBhcmFtTGlzdCA9IGdldFBhcmFtTGlzdChwYXJhbU5hbWVMaXN0LCAkZWxlbWVudCk7XG4gIHJldHVybiBwYXJzZVBhcmFtTmFtZUxpc3QocGFyYW1MaXN0LCBjb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50XG4gKiBAcGFyYW0gYXBwbHlDb250cm9sbGVyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gcmVnX3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXIoY29udHJvbGxlciwgJGVsZW1lbnQsIGFwcGx5Q29udHJvbGxlcikge1xuICBpZiAoIWNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNvbnRyb2xsZXIub25Jbml0ICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgbGV0IHBhcmFtTmFtZUxpc3Q7XG4gIGlmICh0eXBlb2YgY29udHJvbGxlci5fb25faW5pdF9wYXJhbXMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBjb250cm9sbGVyLl9vbl9pbml0X3BhcmFtcygpO1xuICB9IGVsc2Uge1xuICAgIHBhcmFtTmFtZUxpc3QgPSBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihjb250cm9sbGVyLm9uSW5pdCk7XG4gIH1cblxuICBsZXQgaW5pdFBhcmFtcyA9IGdldERvbVRhZ1BhcmFtc1dpdGhMaXN0KFxuICAgIHBhcmFtTmFtZUxpc3QsXG4gICAgJGVsZW1lbnQsXG4gICAgYXBwbHlDb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyLFxuICApO1xuICBjb250cm9sbGVyLm9uSW5pdC5hcHBseShhcHBseUNvbnRyb2xsZXIsIGluaXRQYXJhbXMpO1xuICBpZiAoYXBwbHlDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICByZWdfcnVuT25Jbml0V2l0aFBhcmFtZXRlcihcbiAgICAgICAgY29udHJvbGxlci5fbWl4aW5zW21peGluS2V5XSxcbiAgICAgICAgJGVsZW1lbnQsXG4gICAgICAgIGFwcGx5Q29udHJvbGxlcixcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBydW5PbkluaXRXaXRoUGFyYW1ldGVyKCRlbGVtZW50LCBjb250cm9sbGVyKSB7XG4gIHJlZ19ydW5PbkluaXRXaXRoUGFyYW1ldGVyKGNvbnRyb2xsZXIsICRlbGVtZW50LCBjb250cm9sbGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFBhcmFtKGNvbnRyb2xsZXIsICRlbGVtZW50KSB7XG4gIHJldHVybiBnZXREb21UYWdQYXJhbXNXaXRoTGlzdChjb250cm9sbGVyLl91cmxQYXJhbXMsICRlbGVtZW50KTtcbn1cbiJdLCJuYW1lcyI6WyJnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbiIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJwcmVwYXJlRGF0YSIsImRhdGEiLCJwYXJhbU5hbWVMaXN0IiwiZGF0YV9qc29uX2tleSIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsImZpbHRlciIsImtleSIsImVsZW1lbnQiLCJpbmNsdWRlcyIsIm1hcCIsInN0YXJ0c1dpdGgiLCJwayIsImZpZWxkcyIsIkpTT04iLCJwYXJzZSIsInNsaWNlIiwibGVuZ3RoIiwiaWQiLCJnZXRQYXJhbUxpc3QiLCIkZWxlbWVudCIsInJldHVybkxpc3QiLCJyZXN0RGF0YSIsImkiLCJkYXRhX25hbWUiLCJoYXNPd25Qcm9wZXJ0eSIsInB1c2giLCJwYXJzZVBhcmFtTmFtZUxpc3QiLCJsaXN0IiwiY29udHJvbGxlciIsInZhbHVlcyIsInRlbXBWYWx1ZSIsImdldERvbVRhZ1BhcmFtc1dpdGhMaXN0IiwicGFyYW1MaXN0IiwicmVnX3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXIiLCJhcHBseUNvbnRyb2xsZXIiLCJvbkluaXQiLCJfb25faW5pdF9wYXJhbXMiLCJpbml0UGFyYW1zIiwiX3BhcmVudENvbnRyb2xsZXIiLCJhcHBseSIsIm1peGluS2V5IiwiX21peGlucyIsInJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIiLCJnZXRVcmxQYXJhbSIsIl91cmxQYXJhbXMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_params.js\n\n}");
|
|
78
88
|
|
|
79
|
-
/***/ }
|
|
89
|
+
/***/ },
|
|
80
90
|
|
|
81
|
-
/***/ "./src/simpleDomControl/sdc_server_call.js"
|
|
91
|
+
/***/ "./src/simpleDomControl/sdc_server_call.js"
|
|
82
92
|
/*!*************************************************!*\
|
|
83
93
|
!*** ./src/simpleDomControl/sdc_server_call.js ***!
|
|
84
94
|
\*************************************************/
|
|
85
|
-
|
|
95
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
86
96
|
|
|
87
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\nfunction callServer(app, controller, parsedContentUrl, funcName, args) {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketCallServer(app, controller, funcName, args);\n } else {\n return postCallServer(parsedContentUrl, funcName, args);\n }\n}\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== 'object' && Array.isArray(args) && args === null) {\n args = {\n 'arg0': args\n };\n }\n args = {\n 'data': JSON.stringify(args),\n '_sdc_func_name': funcName,\n '_method': 'sdc_server_call'\n };\n return $.post({\n url: parsedContentUrl,\n data: args,\n beforeSend: function (xhr, settings) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }).then(res => {\n const data = res['_return_data'];\n _handle_response(data);\n return data;\n }).catch(res => {\n const data = res.responseJSON;\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\n}\nfunction socketCallServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: 'sdc_call',\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n _handle_response(data);\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error('SDC Socket closed unexpectedly');\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error('Socket encountered error: ', err.message, 'Closing socket');\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction _handle_response(data) {\n if (!data) {\n data = {};\n }\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type && data.type === 'sdc_recall') {\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === 'sdc_event') {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === 'sdc_redirect') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('onNavLink', data.link);\n }\n }\n}\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction socketIsConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0M7QUFDRTtBQUV4QyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUMxRSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDNUQsQ0FBQyxNQUFNO0lBQ0gsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDM0Q7QUFFSjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUMxQixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ25DLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDOUIsQ0FBQyxNQUFNO0lBQ0gsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQ2hDO0FBQ0o7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDcEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNuQ1EsV0FBVyxDQUFDLENBQUM7RUFDakI7QUFDSjtBQUVBLFNBQVNOLGNBQWNBLENBQUNOLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUN0RCxJQUFHLE9BQU9BLElBQUksS0FBSyxRQUFRLElBQUlXLEtBQUssQ0FBQ0MsT0FBTyxDQUFDWixJQUFJLENBQUMsSUFBSUEsSUFBSSxLQUFLLElBQUksRUFBRTtJQUNqRUEsSUFBSSxHQUFHO01B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LElBQUksQ0FBQ3VDLElBQUksS0FBSyxjQUFjLEVBQUU7TUFDbERuRSx1REFBTyxDQUFDLFdBQVcsRUFBRTRCLElBQUksQ0FBQ3lDLElBQUksQ0FBQztJQUNuQztFQUNKO0FBQ0o7QUFFQSxTQUFTakQsV0FBV0EsQ0FBQSxFQUFHO0VBQ25CLElBQUluQixZQUFZLEVBQUU7SUFDZEEsWUFBWSxHQUFHLEtBQUs7SUFDcEIsSUFBSTtNQUNBRSxVQUFVLENBQUNnQixLQUFLLENBQUMsQ0FBQztJQUN0QixDQUFDLENBQUMsT0FBT2dDLENBQUMsRUFBRSxDQUVaO0VBRUo7QUFDSjtBQUVBLFNBQVNuQyxpQkFBaUJBLENBQUEsRUFBRztFQUV6QixPQUFPLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBQzVCLElBQUlqQixZQUFZLEVBQUU7TUFDZCxPQUFPaUIsT0FBTyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxNQUFNLElBQUloQixhQUFhLEVBQUU7TUFDdEIwRCxVQUFVLENBQUMsTUFBTTtRQUNiN0MsV0FBVyxDQUFDLENBQUMsQ0FBQ21CLElBQUksQ0FBQyxNQUFNO1VBQ3JCaEIsT0FBTyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUM7TUFDTixDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQ1gsQ0FBQyxNQUFNO01BQ0gsT0FBT0EsT0FBTyxDQUFDMkIsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM5QjtFQUNKLENBQUMsQ0FBQztBQUNOIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcz9jM2UzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsXG5sZXQgT1BFTl9SRVFVRVNUUyA9IHt9O1xuXG5leHBvcnQgZnVuY3Rpb24gY2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0Q2FsbFNlcnZlcihhcHAsIGNvbnRyb2xsZXIsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpO1xuICAgIH1cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKSB7XG4gICAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgICAgICByZXR1cm4gc29ja2V0SXNDb25uZWN0ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICAgICAgc29ja2V0Q2xvc2UoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKSB7XG4gICAgaWYodHlwZW9mIGFyZ3MgIT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncyA9PT0gbnVsbCkge1xuICAgICAgICBhcmdzID0geydhcmcwJzogYXJnc31cbiAgICB9XG4gICAgYXJncyA9IHtcbiAgICAgICAgJ2RhdGEnOiBKU09OLnN0cmluZ2lmeShhcmdzKSxcbiAgICAgICAgJ19zZGNfZnVuY19uYW1lJzogZnVuY05hbWUsICdfbWV0aG9kJzogJ3NkY19zZXJ2ZXJfY2FsbCdcbiAgICB9XG4gICAgcmV0dXJuICQucG9zdCh7XG4gICAgICAgIHVybDogcGFyc2VkQ29udGVudFVybCxcbiAgICAgICAgZGF0YTogYXJncyxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1DU1JGVG9rZW5cIiwgd2luZG93LkNTUkZfVE9LRU4pO1xuICAgICAgICB9XG4gICAgfSkudGhlbigocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXNbJ19yZXR1cm5fZGF0YSddO1xuICAgICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaCgocmVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByZXMucmVzcG9uc2VKU09OO1xuICAgICAgICBkYXRhLmlzX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgdGhyb3cgcmVzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzb2NrZXRDYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcblxuICAgIGxldCBpZCA9IHV1aWR2NCgpO1xuICAgIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgIFNEQ19TT0NLRVQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ3NkY19jYWxsJyxcbiAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBmdW5jTmFtZSxcbiAgICAgICAgICAgIGFyZ3M6IGFyZ3NcbiAgICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgT1BFTl9SRVFVRVNUU1tpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gX2Nvbm5lY3QoKSB7XG4gICAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBTRENfU09DS0VUID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIFNEQ19TT0NLRVQub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShlLmRhdGEpO1xuICAgICAgICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uY2xvc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoSVNfQ09OTkVDVEVEKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU0RDIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE9QRU5fUkVRVUVTVFMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2tleV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9jb25uZWN0KCk7XG4gICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfTtcblxuICAgICAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTb2NrZXQgZW5jb3VudGVyZWQgZXJyb3I6ICcsIGVyci5tZXNzYWdlLCAnQ2xvc2luZyBzb2NrZXQnKTtcbiAgICAgICAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIFNEQ19TT0NLRVQub25vcGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgSVNfQ09OTkVDVEVEID0gdHJ1ZTtcbiAgICAgICAgICAgIElTX0NPTk5FQ1RJTkcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSkge1xuICAgIGlmKCFkYXRhKSB7XG4gICAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhLmlkICYmIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF0pIHtcbiAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMV0oZGF0YS5kYXRhIHx8IG51bGwpO1xuICAgICAgICAgICAgZGVsZXRlIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSAmJiBkYXRhLnR5cGUgPT09ICdzZGNfcmVjYWxsJykge1xuICAgICAgICAgICAgaWYgKGRhdGEuaWQgJiYgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICAgICAgICAgIE9QRU5fUkVRVUVTVFNbZGF0YS5pZF1bMF0oZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX2V2ZW50Jykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gZGF0YS5ldmVudDtcbiAgICAgICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoZXZlbnQsIGRhdGEucGF5bG9hZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSAnc2RjX3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgZGF0YS5saW5rKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0Q2xvc2UoKSB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICBJU19DT05ORUNURUQgPSBmYWxzZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuXG4gICAgICAgIH1cblxuICAgIH1cbn1cblxuZnVuY3Rpb24gc29ja2V0SXNDb25uZWN0ZWQoKSB7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChJU19DT05ORUNUSU5HKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoX2Nvbm5lY3QoKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0iXSwibmFtZXMiOlsidXVpZHY0IiwidHJpZ2dlciIsIklTX0NPTk5FQ1RFRCIsIklTX0NPTk5FQ1RJTkciLCJTRENfU09DS0VUIiwiT1BFTl9SRVFVRVNUUyIsImNhbGxTZXJ2ZXIiLCJhcHAiLCJjb250cm9sbGVyIiwicGFyc2VkQ29udGVudFVybCIsImZ1bmNOYW1lIiwiYXJncyIsIndpbmRvdyIsIlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUIiwic29ja2V0Q2FsbFNlcnZlciIsInBvc3RDYWxsU2VydmVyIiwiaXNDb25uZWN0ZWQiLCJzb2NrZXRJc0Nvbm5lY3RlZCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2xvc2UiLCJzb2NrZXRDbG9zZSIsIkFycmF5IiwiaXNBcnJheSIsIkpTT04iLCJzdHJpbmdpZnkiLCIkIiwicG9zdCIsInVybCIsImRhdGEiLCJiZWZvcmVTZW5kIiwieGhyIiwic2V0dGluZ3MiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiQ1NSRl9UT0tFTiIsInRoZW4iLCJyZXMiLCJfaGFuZGxlX3Jlc3BvbnNlIiwiY2F0Y2giLCJyZXNwb25zZUpTT04iLCJpc19lcnJvciIsImlkIiwic2VuZCIsImV2ZW50IiwiZnVuY3Rpb24iLCJyZWplY3QiLCJfY29ubmVjdCIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiZSIsInBhcnNlIiwib25jbG9zZSIsImNvbnNvbGUiLCJlcnJvciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInNldFRpbWVvdXQiLCJvbmVycm9yIiwiZXJyIiwibWVzc2FnZSIsIm9ub3BlbiIsIm1zZyIsImhlYWRlciIsInR5cGUiLCJwYXlsb2FkIiwibGluayJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n\n}");
|
|
97
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ callServer: () => (/* binding */ callServer),\n/* harmony export */ close: () => (/* binding */ close),\n/* harmony export */ isConnected: () => (/* binding */ isConnected)\n/* harmony export */ });\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\nlet IS_CONNECTED = false;\nlet IS_CONNECTING = false;\nlet SDC_SOCKET = null;\nlet OPEN_REQUESTS = {};\nfunction callServer(app, controller, parsedContentUrl, funcName, args) {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketCallServer(app, controller, funcName, args);\n } else {\n return postCallServer(parsedContentUrl, funcName, args);\n }\n}\nfunction isConnected() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n return socketIsConnected();\n } else {\n return Promise.resolve(true);\n }\n}\nfunction close() {\n if (window.SERVER_CALL_VIA_WEB_SOCKET) {\n socketClose();\n }\n}\nfunction postCallServer(parsedContentUrl, funcName, args) {\n if (typeof args !== \"object\" && Array.isArray(args) && args === null) {\n args = {\n arg0: args\n };\n }\n args = {\n data: JSON.stringify(args),\n _sdc_func_name: funcName,\n _method: \"sdc_server_call\"\n };\n return $.post({\n url: parsedContentUrl,\n data: args,\n beforeSend: function (xhr, settings) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }).then(res => {\n const data = res[\"_return_data\"];\n _handle_response(data);\n return data;\n }).catch(res => {\n const data = res.responseJSON;\n data.is_error = true;\n _handle_response(data);\n throw res;\n });\n}\nfunction socketCallServer(app, controller, funcName, args) {\n let id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.uuidv4)();\n isConnected().then(() => {\n SDC_SOCKET.send(JSON.stringify({\n event: \"sdc_call\",\n id: id,\n controller: controller,\n app: app,\n function: funcName,\n args: args\n }));\n });\n return new Promise((resolve, reject) => {\n OPEN_REQUESTS[id] = [resolve, reject];\n });\n}\nfunction _connect() {\n IS_CONNECTING = true;\n return new Promise(resolve => {\n if (window.location.protocol === \"https:\") {\n SDC_SOCKET = new WebSocket(`wss://${window.location.host}/sdc_ws/ws/`);\n } else {\n SDC_SOCKET = new WebSocket(`ws://${window.location.host}/sdc_ws/ws/`);\n }\n SDC_SOCKET.onmessage = function (e) {\n let data = JSON.parse(e.data);\n _handle_response(data);\n };\n SDC_SOCKET.onclose = function () {\n if (IS_CONNECTED) {\n console.error(\"SDC Socket closed unexpectedly\");\n }\n IS_CONNECTED = false;\n for (const [key, value] of Object.entries(OPEN_REQUESTS)) {\n value[1]({});\n delete OPEN_REQUESTS[key];\n }\n setTimeout(() => {\n _connect();\n }, 1000);\n };\n SDC_SOCKET.onerror = function (err) {\n console.error(\"Socket encountered error: \", err.message, \"Closing socket\");\n if (IS_CONNECTED) {\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n };\n SDC_SOCKET.onopen = function () {\n IS_CONNECTED = true;\n IS_CONNECTING = false;\n resolve();\n };\n });\n}\nfunction _handle_response(data) {\n if (!data) {\n data = {};\n }\n if (data.is_error) {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(\"pushErrorMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][1](data.data || null);\n delete OPEN_REQUESTS[data.id];\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(\"pushMsg\", data.header || \"\", data.msg || \"\");\n }\n if (data.type && data.type === \"sdc_recall\") {\n if (data.id && OPEN_REQUESTS[data.id]) {\n OPEN_REQUESTS[data.id][0](data.data);\n delete OPEN_REQUESTS[data.id];\n }\n } else if (data.type && data.type === \"sdc_event\") {\n let event = data.event;\n if (event) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(event, data.payload);\n }\n } else if (data.type && data.type === \"sdc_redirect\") {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)(\"onNavLink\", data.link);\n }\n }\n}\nfunction socketClose() {\n if (IS_CONNECTED) {\n IS_CONNECTED = false;\n try {\n SDC_SOCKET.close();\n } catch (e) {}\n }\n}\nfunction socketIsConnected() {\n return new Promise(resolve => {\n if (IS_CONNECTED) {\n return resolve();\n } else if (IS_CONNECTING) {\n setTimeout(() => {\n isConnected().then(() => {\n resolve();\n });\n }, 200);\n } else {\n return resolve(_connect());\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc2VydmVyX2NhbGwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBd0M7QUFDRTtBQUUxQyxJQUFJRSxZQUFZLEdBQUcsS0FBSztBQUN4QixJQUFJQyxhQUFhLEdBQUcsS0FBSztBQUN6QixJQUFJQyxVQUFVLEdBQUcsSUFBSTtBQUNyQixJQUFJQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBRWYsU0FBU0MsVUFBVUEsQ0FBQ0MsR0FBRyxFQUFFQyxVQUFVLEVBQUVDLGdCQUFnQixFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRTtFQUM1RSxJQUFJQyxNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ3JDLE9BQU9DLGdCQUFnQixDQUFDUCxHQUFHLEVBQUVDLFVBQVUsRUFBRUUsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDMUQsQ0FBQyxNQUFNO0lBQ0wsT0FBT0ksY0FBYyxDQUFDTixnQkFBZ0IsRUFBRUMsUUFBUSxFQUFFQyxJQUFJLENBQUM7RUFDekQ7QUFDRjtBQUVPLFNBQVNLLFdBQVdBLENBQUEsRUFBRztFQUM1QixJQUFJSixNQUFNLENBQUNDLDBCQUEwQixFQUFFO0lBQ3JDLE9BQU9JLGlCQUFpQixDQUFDLENBQUM7RUFDNUIsQ0FBQyxNQUFNO0lBQ0wsT0FBT0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0VBQzlCO0FBQ0Y7QUFFTyxTQUFTQyxLQUFLQSxDQUFBLEVBQUc7RUFDdEIsSUFBSVIsTUFBTSxDQUFDQywwQkFBMEIsRUFBRTtJQUNyQ1EsV0FBVyxDQUFDLENBQUM7RUFDZjtBQUNGO0FBRUEsU0FBU04sY0FBY0EsQ0FBQ04sZ0JBQWdCLEVBQUVDLFFBQVEsRUFBRUMsSUFBSSxFQUFFO0VBQ3hELElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsSUFBSVcsS0FBSyxDQUFDQyxPQUFPLENBQUNaLElBQUksQ0FBQyxJQUFJQSxJQUFJLEtBQUssSUFBSSxFQUFFO0lBQ3BFQSxJQUFJLEdBQUc7TUFB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LElBQUksQ0FBQzhDLElBQUksSUFBSTlDLElBQUksQ0FBQzhDLElBQUksS0FBSyxjQUFjLEVBQUU7TUFDcER0RSx1REFBTyxDQUFDLFdBQVcsRUFBRXdCLElBQUksQ0FBQ2dELElBQUksQ0FBQztJQUNqQztFQUNGO0FBQ0Y7QUFFQSxTQUFTcEQsV0FBV0EsQ0FBQSxFQUFHO0VBQ3JCLElBQUluQixZQUFZLEVBQUU7SUFDaEJBLFlBQVksR0FBRyxLQUFLO0lBQ3BCLElBQUk7TUFDRkUsVUFBVSxDQUFDZ0IsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9tQyxDQUFDLEVBQUUsQ0FBQztFQUNmO0FBQ0Y7QUFFQSxTQUFTdEMsaUJBQWlCQSxDQUFBLEVBQUc7RUFDM0IsT0FBTyxJQUFJQyxPQUFPLENBQUVDLE9BQU8sSUFBSztJQUM5QixJQUFJakIsWUFBWSxFQUFFO01BQ2hCLE9BQU9pQixPQUFPLENBQUMsQ0FBQztJQUNsQixDQUFDLE1BQU0sSUFBSWhCLGFBQWEsRUFBRTtNQUN4QjZELFVBQVUsQ0FBQyxNQUFNO1FBQ2ZoRCxXQUFXLENBQUMsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDLE1BQU07VUFDdkJuQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQztNQUNKLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDVCxDQUFDLE1BQU07TUFDTCxPQUFPQSxPQUFPLENBQUM4QixRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVCO0VBQ0YsQ0FBQyxDQUFDO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NlcnZlcl9jYWxsLmpzP2MzZTMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyIH0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG5sZXQgSVNfQ09OTkVDVEVEID0gZmFsc2U7XG5sZXQgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xubGV0IFNEQ19TT0NLRVQgPSBudWxsO1xubGV0IE9QRU5fUkVRVUVTVFMgPSB7fTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBwYXJzZWRDb250ZW50VXJsLCBmdW5jTmFtZSwgYXJncykge1xuICBpZiAod2luZG93LlNFUlZFUl9DQUxMX1ZJQV9XRUJfU09DS0VUKSB7XG4gICAgcmV0dXJuIHNvY2tldENhbGxTZXJ2ZXIoYXBwLCBjb250cm9sbGVyLCBmdW5jTmFtZSwgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBvc3RDYWxsU2VydmVyKHBhcnNlZENvbnRlbnRVcmwsIGZ1bmNOYW1lLCBhcmdzKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb25uZWN0ZWQoKSB7XG4gIGlmICh3aW5kb3cuU0VSVkVSX0NBTExfVklBX1dFQl9TT0NLRVQpIHtcbiAgICByZXR1cm4gc29ja2V0SXNDb25uZWN0ZWQoKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgaWYgKHdpbmRvdy5TRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCkge1xuICAgIHNvY2tldENsb3NlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9zdENhbGxTZXJ2ZXIocGFyc2VkQ29udGVudFVybCwgZnVuY05hbWUsIGFyZ3MpIHtcbiAgaWYgKHR5cGVvZiBhcmdzICE9PSBcIm9iamVjdFwiICYmIEFycmF5LmlzQXJyYXkoYXJncykgJiYgYXJncyA9PT0gbnVsbCkge1xuICAgIGFyZ3MgPSB7IGFyZzA6IGFyZ3MgfTtcbiAgfVxuICBhcmdzID0ge1xuICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLFxuICAgIF9zZGNfZnVuY19uYW1lOiBmdW5jTmFtZSxcbiAgICBfbWV0aG9kOiBcInNkY19zZXJ2ZXJfY2FsbFwiLFxuICB9O1xuICByZXR1cm4gJC5wb3N0KHtcbiAgICB1cmw6IHBhcnNlZENvbnRlbnRVcmwsXG4gICAgZGF0YTogYXJncyxcbiAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyLCBzZXR0aW5ncykge1xuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgfSxcbiAgfSlcbiAgICAudGhlbigocmVzKSA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gcmVzW1wiX3JldHVybl9kYXRhXCJdO1xuICAgICAgX2hhbmRsZV9yZXNwb25zZShkYXRhKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0pXG4gICAgLmNhdGNoKChyZXMpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSByZXMucmVzcG9uc2VKU09OO1xuICAgICAgZGF0YS5pc19lcnJvciA9IHRydWU7XG4gICAgICBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpO1xuICAgICAgdGhyb3cgcmVzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBzb2NrZXRDYWxsU2VydmVyKGFwcCwgY29udHJvbGxlciwgZnVuY05hbWUsIGFyZ3MpIHtcbiAgbGV0IGlkID0gdXVpZHY0KCk7XG4gIGlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgU0RDX1NPQ0tFVC5zZW5kKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudDogXCJzZGNfY2FsbFwiLFxuICAgICAgICBpZDogaWQsXG4gICAgICAgIGNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIGFwcDogYXBwLFxuICAgICAgICBmdW5jdGlvbjogZnVuY05hbWUsXG4gICAgICAgIGFyZ3M6IGFyZ3MsXG4gICAgICB9KSxcbiAgICApO1xuICB9KTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIE9QRU5fUkVRVUVTVFNbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfY29ubmVjdCgpIHtcbiAgSVNfQ09OTkVDVElORyA9IHRydWU7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3Mvd3MvYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFNEQ19TT0NLRVQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy93cy9gKTtcbiAgICB9XG5cbiAgICBTRENfU09DS0VULm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgIF9oYW5kbGVfcmVzcG9uc2UoZGF0YSk7XG4gICAgfTtcblxuICAgIFNEQ19TT0NLRVQub25jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChJU19DT05ORUNURUQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIlNEQyBTb2NrZXQgY2xvc2VkIHVuZXhwZWN0ZWRseVwiKTtcbiAgICAgIH1cbiAgICAgIElTX0NPTk5FQ1RFRCA9IGZhbHNlO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoT1BFTl9SRVFVRVNUUykpIHtcbiAgICAgICAgdmFsdWVbMV0oe30pO1xuICAgICAgICBkZWxldGUgT1BFTl9SRVFVRVNUU1trZXldO1xuICAgICAgfVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgX2Nvbm5lY3QoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH07XG5cbiAgICBTRENfU09DS0VULm9uZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBcIlNvY2tldCBlbmNvdW50ZXJlZCBlcnJvcjogXCIsXG4gICAgICAgIGVyci5tZXNzYWdlLFxuICAgICAgICBcIkNsb3Npbmcgc29ja2V0XCIsXG4gICAgICApO1xuICAgICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIFNEQ19TT0NLRVQuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgU0RDX1NPQ0tFVC5vbm9wZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBJU19DT05ORUNURUQgPSB0cnVlO1xuICAgICAgSVNfQ09OTkVDVElORyA9IGZhbHNlO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBfaGFuZGxlX3Jlc3BvbnNlKGRhdGEpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgZGF0YSA9IHt9O1xuICB9XG4gIGlmIChkYXRhLmlzX2Vycm9yKSB7XG4gICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICB0cmlnZ2VyKFwicHVzaEVycm9yTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgIH1cbiAgICBpZiAoZGF0YS5pZCAmJiBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdKSB7XG4gICAgICBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdWzFdKGRhdGEuZGF0YSB8fCBudWxsKTtcbiAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgIHRyaWdnZXIoXCJwdXNoTXNnXCIsIGRhdGEuaGVhZGVyIHx8IFwiXCIsIGRhdGEubXNnIHx8IFwiXCIpO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnR5cGUgJiYgZGF0YS50eXBlID09PSBcInNkY19yZWNhbGxcIikge1xuICAgICAgaWYgKGRhdGEuaWQgJiYgT1BFTl9SRVFVRVNUU1tkYXRhLmlkXSkge1xuICAgICAgICBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdWzBdKGRhdGEuZGF0YSk7XG4gICAgICAgIGRlbGV0ZSBPUEVOX1JFUVVFU1RTW2RhdGEuaWRdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gXCJzZGNfZXZlbnRcIikge1xuICAgICAgbGV0IGV2ZW50ID0gZGF0YS5ldmVudDtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICB0cmlnZ2VyKGV2ZW50LCBkYXRhLnBheWxvYWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlICYmIGRhdGEudHlwZSA9PT0gXCJzZGNfcmVkaXJlY3RcIikge1xuICAgICAgdHJpZ2dlcihcIm9uTmF2TGlua1wiLCBkYXRhLmxpbmspO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzb2NrZXRDbG9zZSgpIHtcbiAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgIElTX0NPTk5FQ1RFRCA9IGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBTRENfU09DS0VULmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxufVxuXG5mdW5jdGlvbiBzb2NrZXRJc0Nvbm5lY3RlZCgpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKElTX0NPTk5FQ1RFRCkge1xuICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICB9IGVsc2UgaWYgKElTX0NPTk5FQ1RJTkcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCAyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZShfY29ubmVjdCgpKTtcbiAgICB9XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbInV1aWR2NCIsInRyaWdnZXIiLCJJU19DT05ORUNURUQiLCJJU19DT05ORUNUSU5HIiwiU0RDX1NPQ0tFVCIsIk9QRU5fUkVRVUVTVFMiLCJjYWxsU2VydmVyIiwiYXBwIiwiY29udHJvbGxlciIsInBhcnNlZENvbnRlbnRVcmwiLCJmdW5jTmFtZSIsImFyZ3MiLCJ3aW5kb3ciLCJTRVJWRVJfQ0FMTF9WSUFfV0VCX1NPQ0tFVCIsInNvY2tldENhbGxTZXJ2ZXIiLCJwb3N0Q2FsbFNlcnZlciIsImlzQ29ubmVjdGVkIiwic29ja2V0SXNDb25uZWN0ZWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNsb3NlIiwic29ja2V0Q2xvc2UiLCJBcnJheSIsImlzQXJyYXkiLCJhcmcwIiwiZGF0YSIsIkpTT04iLCJzdHJpbmdpZnkiLCJfc2RjX2Z1bmNfbmFtZSIsIl9tZXRob2QiLCIkIiwicG9zdCIsInVybCIsImJlZm9yZVNlbmQiLCJ4aHIiLCJzZXR0aW5ncyIsInNldFJlcXVlc3RIZWFkZXIiLCJDU1JGX1RPS0VOIiwidGhlbiIsInJlcyIsIl9oYW5kbGVfcmVzcG9uc2UiLCJjYXRjaCIsInJlc3BvbnNlSlNPTiIsImlzX2Vycm9yIiwiaWQiLCJzZW5kIiwiZXZlbnQiLCJmdW5jdGlvbiIsInJlamVjdCIsIl9jb25uZWN0IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJlIiwicGFyc2UiLCJvbmNsb3NlIiwiY29uc29sZSIsImVycm9yIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwic2V0VGltZW91dCIsIm9uZXJyb3IiLCJlcnIiLCJtZXNzYWdlIiwib25vcGVuIiwibXNnIiwiaGVhZGVyIiwidHlwZSIsInBheWxvYWQiLCJsaW5rIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_server_call.js\n\n}");
|
|
88
98
|
|
|
89
|
-
/***/ }
|
|
99
|
+
/***/ },
|
|
90
100
|
|
|
91
|
-
/***/ "./src/simpleDomControl/sdc_socket.js"
|
|
101
|
+
/***/ "./src/simpleDomControl/sdc_socket.js"
|
|
92
102
|
/*!********************************************!*\
|
|
93
103
|
!*** ./src/simpleDomControl/sdc_socket.js ***!
|
|
94
104
|
\********************************************/
|
|
95
|
-
|
|
105
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
96
106
|
|
|
97
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Model: () => (/* binding */ Model)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n\n\n\nconst MAX_FILE_UPLOAD = 25000;\nclass SubModel {\n constructor(pk, model) {\n this.pk = pk;\n this._model = model;\n }\n\n /**\n * SDC Model Name\n * @param {string} model\n */\n set model(model) {\n this._model = model;\n }\n get model() {\n return this._model;\n }\n\n /**\n * Load the sub model.\n *\n * @param {AbstractSDC} controller\n * @returns {Model}\n */\n load(controller) {\n if (!this._model) {\n throw new TypeError(\"Model is not set!!\");\n }\n if (this.pk instanceof Array) {\n return controller.newModel(this._model, {\n pk__in: this.pk\n });\n }\n return controller.newModel(this._model, {\n pk: this.pk\n });\n }\n}\nconst ModelProxyHandler = {\n get(target, key) {\n const value = target[key] ?? undefined;\n if (value instanceof SubModel) {\n if (!value.pk && value.pk !== 0) {\n return null;\n }\n let newVal;\n if (value.pk instanceof Array) {\n newVal = value.pk.slice();\n } else {\n newVal = new Number(value.pk);\n }\n newVal.load = value.load.bind(value);\n return newVal;\n }\n return value;\n },\n set(target, key, value) {\n if (key in target) {\n const oldVal = target[key];\n if (oldVal instanceof SubModel) {\n if (value.hasOwnProperty('pk')) {\n oldVal.pk = value.pk;\n } else {\n try {\n oldVal.pk = JSON.parse(value);\n } catch {\n oldVal.pk = value;\n }\n }\n } else {\n target[key] = value;\n }\n } else {\n target[key] = value;\n }\n return true;\n }\n};\nfunction parse_hidden_inputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === 'true';\n } else if (value === 'undefined') {\n return undefined;\n } else if (value.toLowerCase() === 'none') {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nclass Model {\n /**\n *\n * @param model_name {string}\n * @param model_query {json}\n */\n constructor(model_name, model_query = {}) {\n this._onNoOpenRequests = [];\n this.values_list = [];\n this.values = {};\n this.model_name = model_name;\n this.model_query = model_query;\n this._is_connected = false;\n this._is_conneting_process = false;\n this._auto_reconnect = true;\n this.socket = null;\n this.open_request = {};\n this.on_update = () => {};\n this.on_create = () => {};\n this.form_id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n }\n [Symbol.iterator]() {\n let idx = -1;\n return {\n next: () => {\n ++idx;\n if (idx < this.values_list.length) {\n return {\n value: this.values_list[idx],\n done: false\n };\n }\n return {\n value: null,\n done: true\n };\n }\n };\n }\n length() {\n return this.values_list.length;\n }\n byPk(pk) {\n if (pk !== null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let elem = this.values_list.find(elm => elm.pk === pk);\n if (!elem) {\n elem = new Proxy({\n pk: pk\n }, ModelProxyHandler);\n this.values_list.push(elem);\n }\n return elem;\n }\n return {\n pk: pk\n };\n }\n filter(model_query) {\n this.model_query = Object.assign({}, this.model_query, model_query);\n return this;\n }\n load() {\n return this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'load',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n listView(filter = {}, cbResolve = null, cbReject = null, templateContext = {}) {\n return this.view({\n filter,\n cbResolve,\n cbReject,\n templateContext,\n event_type: 'list_view'\n });\n }\n view({\n viewName = 'html_list_template',\n filter = {},\n cbResolve = null,\n cbReject = null,\n templateContext = {},\n event_type = 'named_view'\n }) {\n let $div_list = $('<div class=\"container-fluid\">');\n this.isConnected().then(() => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type,\n event_id: id,\n args: {\n view_name: viewName,\n model_name: this.model_name,\n model_query: this.model_query,\n filter,\n template_context: templateContext\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cbResolve && cbResolve(data);\n }, res => {\n cbReject && cbReject(res);\n }];\n });\n return $div_list;\n }\n detailView(pk = null, cb_resolve = null, cb_reject = null, template_context = {}) {\n pk = pk ?? -1;\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let $div_list = $('<div class=\"container-fluid\">');\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n load_promise.then(() => {\n if (pk === -1) {\n pk = this.values_list[0].pk;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'detail_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk,\n template_context\n }\n }));\n this.open_request[id] = [data => {\n $div_list.append(data.html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_list);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n });\n return $div_list;\n }\n syncFormToModel($forms) {\n return this.syncForm($forms);\n }\n syncModelToForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n let self = this;\n $forms.each(function () {\n let pk = $(this).data('model_pk');\n let instance = null;\n if (pk === -1 && (self.values.pk === undefined || self.values.pk === -1)) {\n instance = self.values;\n } else if (pk !== undefined && pk !== null) {\n instance = self.byPk(pk);\n }\n if (!instance) {\n return;\n }\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file') {\n if (instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\n }\n } else {\n $(form_item).val(instance[name]);\n }\n }\n }\n });\n }\n syncForm($forms) {\n if (!$forms || !$forms.hasClass(this.form_id)) {\n $forms = $(`.${this.form_id}`);\n }\n const self = this;\n let instances = [];\n $forms.each(function () {\n let $form = $(this);\n let pk = $form.data('model_pk');\n let instance = self.byPk(pk);\n for (let form_item of this.elements) {\n let name = form_item.name;\n if (name && name !== '') {\n if (form_item.type === 'hidden') {\n instance[name] = parse_hidden_inputs($(form_item).val());\n } else if (form_item.type === 'checkbox') {\n instance[name] = form_item.checked;\n } else if (form_item.type === 'file') {\n instance[name] = form_item.files[0];\n } else {\n instance[name] = $(form_item).val();\n }\n }\n }\n instances.push(instance);\n return instance;\n });\n if (this.values_list.length <= 1 && instances.length > 0) {\n this.values = instances.at(-1);\n }\n return instances;\n }\n createForm(cb_resolve = null, cb_reject = null) {\n let $div_form = $('<div>');\n this.isConnected().then(() => {\n this._getForm(null, 'create_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n editForm(pk = -1, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div>');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'edit_form', null, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n namedForm(pk = -1, formName, cb_resolve = null, cb_reject = null) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n let load_promise;\n if (this.values_list.length !== 0) {\n load_promise = this.isConnected();\n } else {\n load_promise = this.load();\n }\n let $div_form = $('<div class=\"container-fluid\">');\n load_promise.then(() => {\n if (pk <= -1) {\n pk = this.values_list.at(pk).pk;\n }\n this._getForm(pk, 'named_form', formName, $div_form, cb_resolve, cb_reject);\n });\n return $div_form;\n }\n _getForm(pk, event_type, formName, $div_form, cb_resolve, cb_reject) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: event_type,\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk,\n form_name: formName\n }\n }));\n const className = pk === null || pk === -1 ? 'create' : 'edit';\n this.open_request[id] = [data => {\n $div_form.append(data.html);\n let $form = $div_form.closest('form').addClass(`sdc-model-${className}-form sdc-model-form ${this.form_id}`).data('model', this).data('model_pk', pk).data('form_name', formName);\n if ($form.length > 0 && !$form[0].hasAttribute('sdc_submit')) {\n $form.attr('sdc_submit', 'submitModelFormDistributor');\n }\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.refresh($div_form);\n cb_resolve && cb_resolve(data);\n }, res => {\n cb_reject && cb_reject(res);\n }];\n }\n new() {\n return new Promise((resolve, reject) => {\n const $form = $('<form>').append(this.createForm(() => {\n this.syncFormToModel($form);\n resolve();\n }, reject));\n });\n }\n save(pk = -1, fromName = 'edit_form') {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n return this.isConnected().then(() => {\n let elem_list;\n if (pk > -1) {\n elem_list = [this.byPk(pk)];\n } else {\n elem_list = this.values_list;\n }\n let p_list = [];\n elem_list.forEach(elem => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n p_list.push(new Promise((resolve, reject) => {\n this._readFiles(elem).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'save',\n event_id: id,\n args: {\n form_name: fromName,\n model_name: this.model_name,\n model_query: this.model_query,\n data: elem,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n res.data.instance = this._parseServerRes(data);\n resolve(res);\n }, reject];\n });\n }));\n });\n return Promise.all(p_list);\n });\n }\n create(values = this.values) {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this._readFiles(values).then(files => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'create',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n data: values,\n files: files\n }\n }));\n this.open_request[id] = [res => {\n let data = typeof res.data.instance === 'string' ? JSON.parse(res.data.instance) : res.data.instance;\n if (this.values?.pk === -1) {\n this.values_list = [];\n this.values = null;\n }\n res.data.instance = this._parseServerRes(data)[0];\n resolve(res);\n }, reject];\n });\n });\n });\n }\n delete(pk = -1) {\n pk = parseInt(pk);\n if (isNaN(pk)) {\n pk = -1;\n }\n if (pk === -1) pk = this.values?.pk;\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return this.isConnected().then(() => {\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'delete',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n pk: pk\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n });\n }\n isConnected() {\n return new Promise((resolve, reject) => {\n if (this._is_connected) {\n resolve();\n } else if (!this._is_conneting_process || !this.open_request['_connecting_process']) {\n this._is_conneting_process = true;\n this.open_request['_connecting_process'] = [() => {}, () => {}];\n this._connectToServer().then(() => {\n resolve(this._checkConnection());\n });\n } else {\n const [resolve_origin, reject_origin] = this.open_request['_connecting_process'];\n this.open_request['_connecting_process'] = [() => {\n resolve_origin();\n resolve();\n }, () => {\n reject_origin();\n reject();\n }];\n }\n });\n }\n close() {\n if (this.socket) {\n this._auto_reconnect = false;\n this.socket.onclose = () => {};\n this.socket.close();\n delete this['socket'];\n }\n }\n clean() {\n this.values_list = [];\n this.values = {};\n return this;\n }\n _readFiles(elem) {\n let to_solve = [];\n 100;\n let files = {};\n for (const [key, value] of Object.entries(elem)) {\n if (value instanceof File) {\n to_solve.push(new Promise((resolve, reject) => {\n ((key, value) => {\n let reader = new FileReader();\n reader.onload = e => {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n this.open_request[id] = [resolve, reject];\n let result = e.target.result;\n let number_of_chunks = parseInt(Math.ceil(result.length / MAX_FILE_UPLOAD));\n files[key] = {\n id: id,\n file_name: value.name,\n field_name: key,\n content_length: value.size\n };\n for (let i = 0; i < number_of_chunks; ++i) {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'upload',\n event_id: id,\n args: {\n chunk: result.slice(MAX_FILE_UPLOAD * i, MAX_FILE_UPLOAD * (i + 1)),\n idx: i,\n number_of_chunks: number_of_chunks,\n file_name: value.name,\n field_name: key,\n content_length: value.size,\n content_type: value.type,\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n }\n };\n reader.onerror = () => {\n reject();\n };\n reader.readAsBinaryString(value);\n })(key, value);\n }));\n }\n }\n return Promise.all(to_solve).then(() => {\n return files;\n });\n }\n _onMessage(e) {\n let data = JSON.parse(e.data);\n if (data.is_error) {\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][1](data);\n this._closeOpenRequest(data.event_id);\n }\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushErrorMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this.open_request['_connecting_process'][1](data);\n this._closeOpenRequest('_connecting_process');\n this._auto_reconnect = false;\n this.socket.close();\n }\n } else {\n if (data.msg || data.header) {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_1__.trigger)('pushMsg', data.header || '', data.msg || '');\n }\n if (data.type === 'connect') {\n this._is_connected = true;\n this._is_conneting_process = false;\n this.open_request['_connecting_process'][0](data);\n this._closeOpenRequest('_connecting_process');\n } else if (['load', 'named_view', 'detail_view'].includes(data.type)) {\n const json_res = JSON.parse(data.args.data);\n this.values_list = [];\n data.args.data = this._parseServerRes(json_res);\n } else if (data.type === 'on_update' || data.type === 'on_create') {\n const json_res = JSON.parse(data.args.data);\n let obj = this._parseServerRes(json_res);\n let cb;\n if (data.type === 'on_create') {\n cb = this.on_create;\n } else {\n cb = this.on_update;\n }\n cb(obj);\n data.args.data = obj;\n }\n let instance = data.data?.instance;\n if (instance) {\n data.data.instance = JSON.parse(data.data.instance);\n }\n if (this.open_request.hasOwnProperty(data.event_id)) {\n this.open_request[data.event_id][0](data);\n this._closeOpenRequest(data.event_id);\n }\n }\n }\n noOpenRequests() {\n return new Promise(resolve => {\n if (Object.keys(this.open_request).length === 0) {\n return resolve();\n }\n this._onNoOpenRequests.push(resolve);\n });\n }\n _closeOpenRequest(event_id) {\n delete this.open_request[event_id];\n if (Object.keys(this.open_request).length === 0) {\n this._onNoOpenRequests.forEach(x => x());\n this._onNoOpenRequests = [];\n }\n }\n _connectToServer() {\n return new Promise(resolve => {\n const model_identifier = `${this.model_name}` + (this.model_id > 0 ? `/${this.model_id}` : '');\n if (window.location.protocol === \"https:\") {\n this.socket = new WebSocket(`wss://${window.location.host}/sdc_ws/model/${model_identifier}`);\n } else {\n this.socket = new WebSocket(`ws://${window.location.host}/sdc_ws/model/${model_identifier}`);\n }\n this.socket.onmessage = this._onMessage.bind(this);\n this.socket.onclose = e => {\n console.error(`SDC Model (${this.model_name}, ${this.model_id}) Socket closed unexpectedly`);\n this._is_connected = false;\n for (const [_key, value] of Object.entries(this.open_request)) {\n value[1](e);\n }\n this.open_request = {};\n setTimeout(() => {\n if (this._auto_reconnect) {\n this._connectToServer().then(() => {});\n }\n }, 1000);\n };\n this.socket.onerror = err => {\n console.error(`Model Socket encountered error: ${err} Closing socket`);\n if (this._is_connected) {\n try {\n this.socket.close();\n } catch (e) {}\n }\n };\n this.socket.onopen = () => {\n resolve();\n };\n });\n }\n _checkConnection() {\n const id = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_2__.uuidv4)();\n return new Promise((resolve, reject) => {\n this.socket.send(JSON.stringify({\n event: 'model',\n event_type: 'connect',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query\n }\n }));\n this.open_request[id] = [resolve, reject];\n });\n }\n _parseServerRes(res) {\n let updated = [];\n for (let json_data of res) {\n const pk = json_data.pk;\n const obj = this.byPk(pk);\n for (const [k, v] of Object.entries(json_data.fields)) {\n if (v && typeof v === 'object' && v['__is_sdc_model__']) {\n obj[k] = new SubModel(v['pk'], v['model']);\n } else {\n obj[k] = v;\n }\n }\n updated.push(obj);\n }\n if (this.values_list.length === 1) {\n this.values = this.values_list.at(-1);\n } else {\n this.values = {};\n }\n return updated;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBa0M7QUFDTTtBQUNGO0FBRXRDLE1BQU1HLGVBQWUsR0FBRyxLQUFLO0FBRzdCLE1BQU1DLFFBQVEsQ0FBQztFQUViQyxXQUFXQSxDQUFDQyxFQUFFLEVBQUVDLEtBQUssRUFBRTtJQUNyQixJQUFJLENBQUNELEVBQUUsR0FBR0EsRUFBRTtJQUNaLElBQUksQ0FBQ0UsTUFBTSxHQUFHRCxLQUFLO0VBQ3JCOztFQUVBO0FBQ0Y7QUFDQTtBQUNBO0VBQ0UsSUFBSUEsS0FBS0EsQ0FBQ0EsS0FBSyxFQUFFO0lBQ2YsSUFBSSxDQUFDQyxNQUFNLEdBQUdELEtBQUs7RUFDckI7RUFFQSxJQUFJQSxLQUFLQSxDQUFBLEVBQUc7SUFDVixPQUFPLElBQUksQ0FBQ0MsTUFBTTtFQUNwQjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRUMsSUFBSUEsQ0FBQ0MsVUFBVSxFQUFFO0lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ2hCLE1BQU0sSUFBSUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDO0lBQzNDO0lBQ0EsSUFBSSxJQUFJLENBQUNMLEVBQUUsWUFBWU0sS0FBSyxFQUFFO01BQzVCLE9BQU9GLFVBQVUsQ0FBQ0csUUFBUSxDQUFDLElBQUksQ0FBQ0wsTUFBTSxFQUFFO1FBQUNNLE1BQU0sRUFBRSxJQUFJLENBQUNSO01BQUUsQ0FBQyxDQUFDO0lBQzVEO0lBQ0EsT0FBT0ksVUFBVSxDQUFDRyxRQUFRLENBQUMsSUFBSSxDQUFDTCxNQUFNLEVBQUU7TUFBQ0YsRUFBRSxFQUFFLElBQUksQ0FBQ0E7SUFBRSxDQUFDLENBQUM7RUFDeEQ7QUFDRjtBQUVBLE1BQU1TLGlCQUFpQixHQUFHO0VBQ3hCQyxHQUFHQSxDQUFDQyxNQUFNLEVBQUVDLEdBQUcsRUFBRTtJQUNmLE1BQU1DLEtBQUssR0FBR0YsTUFBTSxDQUFDQyxHQUFHLENBQUMsSUFBSUUsU0FBUztJQUN0QyxJQUFJRCxLQUFLLFlBQVlmLFFBQVEsRUFBRTtNQUM3QixJQUFJLENBQUNlLEtBQUssQ0FBQ2IsRUFBRSxJQUFJYSxLQUFLLENBQUNiLEVBQUUsS0FBSyxDQUFDLEVBQUU7UUFDL0IsT0FBTyxJQUFJO01BQ2I7TUFDQSxJQUFJZSxNQUFNO01BQ1YsSUFBSUYsS0FBSyxDQUFDYixFQUFFLFlBQVlNLEtBQUssRUFBRTtRQUM3QlMsTUFBTSxHQUFHRixLQUFLLENBQUNiLEVBQUUsQ0FBQ2dCLEtBQUssQ0FBQyxDQUFDO01BQzNCLENBQUMsTUFBTTtRQUNMRCxNQUFNLEdBQUcsSUFBSUUsTUFBTSxDQUFDSixLQUFLLENBQUNiLEVBQUUsQ0FBQztNQUMvQjtNQUNBZSxNQUFNLENBQUNaLElBQUksR0FBR1UsS0FBSyxDQUFDVixJQUFJLENBQUNlLElBQUksQ0FBQ0wsS0FBSyxDQUFDO01BQ3BDLE9BQU9FLE1BQU07SUFDZjtJQUNBLE9BQU9GLEtBQUs7RUFDZCxDQUFDO0VBQ0RNLEdBQUdBLENBQUNSLE1BQU0sRUFBRUMsR0FBRyxFQUFFQyxLQUFLLEVBQUU7SUFDdEIsSUFBSUQsR0FBRyxJQUFJRCxNQUFNLEVBQUU7TUFDakIsTUFBTVMsTUFBTSxHQUFHVCxNQUFNLENBQUNDLEdBQUcsQ0FBQztNQUMxQixJQUFJUSxNQUFNLFlBQVl0QixRQUFRLEVBQUU7UUFDOUIsSUFBSWUsS0FBSyxDQUFDUSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDOUJELE1BQU0sQ0FBQ3BCLEVBQUUsR0FBR2EsS0FBSyxDQUFDYixFQUFFO1FBQ3RCLENBQUMsTUFBTTtVQUNMLElBQUk7WUFDRm9CLE1BQU0sQ0FBQ3BCLEVBQUUsR0FBR3NCLElBQUksQ0FBQ0MsS0FBSyxDQUFDVixLQUFLLENBQUM7VUFDL0IsQ0FBQyxDQUFDLE1BQU07WUFDTk8sTUFBTSxDQUFDcEIsRUFBRSxHQUFHYSxLQUFLO1VBQ25CO1FBRUY7TUFDRixDQUFDLE1BQU07UUFDTEYsTUFBTSxDQUFDQyxHQUFHLENBQUMsR0FBR0MsS0FBSztNQUNyQjtJQUNGLENBQUMsTUFBTTtNQUNMRixNQUFNLENBQUNDLEdBQUcsQ0FBQyxHQUFHQyxLQUFLO0lBQ3JCO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7QUFDRixDQUFDO0FBR0QsU0FBU1csbUJBQW1CQSxDQUFDWCxLQUFLLEVBQUU7RUFFbEMsSUFBSVksVUFBVSxHQUFHLGVBQWU7RUFDaEMsSUFBSUMsUUFBUSxHQUFHLFNBQVM7RUFDeEIsSUFBSUMsU0FBUyxHQUFHLGdCQUFnQjtFQUNoQyxJQUFJQyxXQUFXLEdBQUcsK0JBQStCO0VBR2pELElBQUlmLEtBQUssQ0FBQ2dCLFdBQVcsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQ0gsU0FBUyxDQUFDLEVBQUU7SUFDeEMsT0FBT2QsS0FBSyxDQUFDZ0IsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNO0VBQ3ZDLENBQUMsTUFBTSxJQUFJaEIsS0FBSyxLQUFLLFdBQVcsRUFBRTtJQUNoQyxPQUFPQyxTQUFTO0VBQ2xCLENBQUMsTUFBTSxJQUFJRCxLQUFLLENBQUNnQixXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUN6QyxPQUFPLElBQUk7RUFDYixDQUFDLE1BQU0sSUFBSWhCLEtBQUssQ0FBQ2lCLEtBQUssQ0FBQ0osUUFBUSxDQUFDLEVBQUU7SUFDaEMsT0FBT0ssUUFBUSxDQUFDbEIsS0FBSyxDQUFDO0VBQ3hCLENBQUMsTUFBTSxJQUFJQSxLQUFLLENBQUNpQixLQUFLLENBQUNMLFVBQVUsQ0FBQyxFQUFFO0lBQ2xDLE9BQU9PLFVBQVUsQ0FBQ25CLEtBQUssQ0FBQztFQUMxQixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDaUIsS0FBSyxDQUFDRixXQUFXLENBQUMsRUFBRTtJQUNuQyxPQUFPZixLQUFLLENBQUNvQixTQUFTLENBQUMsQ0FBQyxFQUFFcEIsS0FBSyxDQUFDcUIsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM3QztFQUNBLE9BQU9yQixLQUFLO0FBQ2Q7QUFHTyxNQUFNc0IsS0FBSyxDQUFDO0VBQ2pCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRXBDLFdBQVdBLENBQUNxQyxVQUFVLEVBQUVDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUN4QyxJQUFJLENBQUNDLGlCQUFpQixHQUFHLEVBQUU7SUFDM0IsSUFBSSxDQUFDQyxXQUFXLEdBQUcsRUFBRTtJQUNyQixJQUFJLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDQyxXQUFXLEdBQUdBLFdBQVc7SUFDOUIsSUFBSSxDQUFDSSxhQUFhLEdBQUcsS0FBSztJQUMxQixJQUFJLENBQUNDLHFCQUFxQixHQUFHLEtBQUs7SUFDbEMsSUFBSSxDQUFDQyxlQUFlLEdBQUcsSUFBSTtJQUMzQixJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJO0lBQ2xCLElBQUksQ0FBQ0MsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUN0QixJQUFJLENBQUNDLFNBQVMsR0FBRyxNQUFNLENBQ3ZCLENBQUM7SUFDRCxJQUFJLENBQUNDLFNBQVMsR0FBRyxNQUFNLENBQ3ZCLENBQUM7SUFFRCxJQUFJLENBQUNDLE9BQU8sR0FBR3BELHFEQUFNLENBQUMsQ0FBQztFQUN6QjtFQUVBLENBQUNxRCxNQUFNLENBQUNDLFFBQVEsSUFBSTtJQUNsQixJQUFJQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osT0FBTztNQUNMQyxJQUFJLEVBQUVBLENBQUEsS0FBTTtRQUNWLEVBQUVELEdBQUc7UUFDTCxJQUFJQSxHQUFHLEdBQUcsSUFBSSxDQUFDWixXQUFXLENBQUNMLE1BQU0sRUFBRTtVQUNqQyxPQUFPO1lBQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDMEIsV0FBVyxDQUFDWSxHQUFHLENBQUM7WUFBRUUsSUFBSSxFQUFFO1VBQUssQ0FBQztRQUNwRDtRQUNBLE9BQU87VUFBQ3hDLEtBQUssRUFBRSxJQUFJO1VBQUV3QyxJQUFJLEVBQUU7UUFBSSxDQUFDO01BQ2xDO0lBQ0YsQ0FBQztFQUNIO0VBRUFuQixNQUFNQSxDQUFBLEVBQUc7SUFDUCxPQUFPLElBQUksQ0FBQ0ssV0FBVyxDQUFDTCxNQUFNO0VBQ2hDO0VBRUFvQixJQUFJQSxDQUFDdEQsRUFBRSxFQUFFO0lBQ1AsSUFBSUEsRUFBRSxLQUFLLElBQUksRUFBRTtNQUNmQSxFQUFFLEdBQUcrQixRQUFRLENBQUMvQixFQUFFLENBQUM7TUFDakIsSUFBSXVELEtBQUssQ0FBQ3ZELEVBQUUsQ0FBQyxFQUFFO1FBQ2JBLEVBQUUsR0FBRyxDQUFDLENBQUM7TUFDVDtNQUNBLElBQUl3RCxJQUFJLEdBQUcsSUFBSSxDQUFDakIsV0FBVyxDQUFDa0IsSUFBSSxDQUFDQyxHQUFHLElBQUlBLEdBQUcsQ0FBQzFELEVBQUUsS0FBS0EsRUFBRSxDQUFDO01BQ3RELElBQUksQ0FBQ3dELElBQUksRUFBRTtRQUNUQSxJQUFJLEdBQUcsSUFBSUcsS0FBSyxDQUFDO1VBQUMzRCxFQUFFLEVBQUVBO1FBQUUsQ0FBQyxFQUFFUyxpQkFBaUIsQ0FBQztRQUM3QyxJQUFJLENBQUM4QixXQUFXLENBQUNxQixJQUFJLENBQUNKLElBQUksQ0FBQztNQUM3QjtNQUNBLE9BQU9BLElBQUk7SUFDYjtJQUNBLE9BQU87TUFBQ3hELEVBQUUsRUFBRUE7SUFBRSxDQUFDO0VBRWpCO0VBRUE2RCxNQUFNQSxDQUFDeEIsV0FBVyxFQUFFO0lBQ2xCLElBQUksQ0FBQ0EsV0FBVyxHQUFHeUIsTUFBTSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDMUIsV0FBVyxFQUFFQSxXQUFXLENBQUM7SUFDbkUsT0FBTyxJQUFJO0VBQ2I7RUFFQWxDLElBQUlBLENBQUEsRUFBRztJQUNMLE9BQU8sSUFBSSxDQUFDNkQsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDbkMsTUFBTUMsRUFBRSxHQUFHdEUscURBQU0sQ0FBQyxDQUFDO01BQ25CLE9BQU8sSUFBSXVFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUN0QyxJQUFJLENBQUN6QixNQUFNLENBQUMwQixJQUFJLENBQUNoRCxJQUFJLENBQUNpRCxTQUFTLENBQUM7VUFDOUJDLEtBQUssRUFBRSxPQUFPO1VBQ2RDLFVBQVUsRUFBRSxNQUFNO1VBQ2xCQyxRQUFRLEVBQUVSLEVBQUU7VUFDWlMsSUFBSSxFQUFFO1lBQ0p2QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO1lBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQTtVQUNwQjtRQUNGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDUSxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFDRSxPQUFPLEVBQUVDLE1BQU0sQ0FBQztNQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSjtFQUVBTyxRQUFRQSxDQUFDZixNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUVnQixTQUFTLEdBQUcsSUFBSSxFQUFFQyxRQUFRLEdBQUcsSUFBSSxFQUFFQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUU7SUFDN0UsT0FBTyxJQUFJLENBQUNDLElBQUksQ0FBQztNQUFDbkIsTUFBTTtNQUFFZ0IsU0FBUztNQUFFQyxRQUFRO01BQUVDLGVBQWU7TUFBRU4sVUFBVSxFQUFFO0lBQVcsQ0FBQyxDQUFDO0VBQzNGO0VBRUFPLElBQUlBLENBQUM7SUFDRUMsUUFBUSxHQUFHLG9CQUFvQjtJQUMvQnBCLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDWGdCLFNBQVMsR0FBRyxJQUFJO0lBQ2hCQyxRQUFRLEdBQUcsSUFBSTtJQUNmQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCTixVQUFVLEdBQUc7RUFDZixDQUFDLEVBQUU7SUFDTixJQUFJUyxTQUFTLEdBQUdDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztJQUNsRCxJQUFJLENBQUNuQixXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUM1QixNQUFNQyxFQUFFLEdBQUd0RSxxREFBTSxDQUFDLENBQUM7TUFDbkIsSUFBSSxDQUFDZ0QsTUFBTSxDQUFDMEIsSUFBSSxDQUFDaEQsSUFBSSxDQUFDaUQsU0FBUyxDQUFDO1FBQzlCQyxLQUFLLEVBQUUsT0FBTztRQUNkQyxVQUFVO1FBQ1ZDLFFBQVEsRUFBRVIsRUFBRTtRQUNaUyxJQUFJLEVBQUU7VUFDSlMsU0FBUyxFQUFFSCxRQUFRO1VBQ25CN0MsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtVQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0EsV0FBVztVQUM3QndCLE1BQU07VUFDTndCLGdCQUFnQixFQUFFTjtRQUNwQjtNQUNGLENBQUMsQ0FBQyxDQUFDO01BRUgsSUFBSSxDQUFDbEMsWUFBWSxDQUFDcUIsRUFBRSxDQUFDLEdBQUcsQ0FBRW9CLElBQUksSUFBSztRQUNqQ0osU0FBUyxDQUFDSyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO1FBQzNCOUYsNkNBQUcsQ0FBQytGLE9BQU8sQ0FBQ1AsU0FBUyxDQUFDO1FBQ3RCTCxTQUFTLElBQUlBLFNBQVMsQ0FBQ1MsSUFBSSxDQUFDO01BQzlCLENBQUMsRUFBR0ksR0FBRyxJQUFLO1FBQ1ZaLFFBQVEsSUFBSUEsUUFBUSxDQUFDWSxHQUFHLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0lBRUosQ0FBQyxDQUFDO0lBRUYsT0FBT1IsU0FBUztFQUNsQjtFQUVBUyxVQUFVQSxDQUFDM0YsRUFBRSxHQUFHLElBQUksRUFBRTRGLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUVSLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ2hGckYsRUFBRSxHQUFHQSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2JBLEVBQUUsR0FBRytCLFFBQVEsQ0FBQy9CLEVBQUUsQ0FBQztJQUNqQixJQUFJdUQsS0FBSyxDQUFDdkQsRUFBRSxDQUFDLEVBQUU7TUFDYkEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNUO0lBQ0EsSUFBSWtGLFNBQVMsR0FBR0MsQ0FBQyxDQUFDLCtCQUErQixDQUFDO0lBRWxELElBQUlXLFlBQVk7SUFDaEIsSUFBSSxJQUFJLENBQUN2RCxXQUFXLENBQUNMLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDakM0RCxZQUFZLEdBQUcsSUFBSSxDQUFDOUIsV0FBVyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxNQUFNO01BQ0w4QixZQUFZLEdBQUcsSUFBSSxDQUFDM0YsSUFBSSxDQUFDLENBQUM7SUFDNUI7SUFFQTJGLFlBQVksQ0FBQzdCLElBQUksQ0FBQyxNQUFNO01BQ3RCLElBQUlqRSxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDYkEsRUFBRSxHQUFHLElBQUksQ0FBQ3VDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQ3ZDLEVBQUU7TUFDN0I7TUFDQSxNQUFNa0UsRUFBRSxHQUFHdEUscURBQU0sQ0FBQyxDQUFDO01BQ25CLElBQUksQ0FBQ2dELE1BQU0sQ0FBQzBCLElBQUksQ0FBQ2hELElBQUksQ0FBQ2lELFNBQVMsQ0FBQztRQUM5QkMsS0FBSyxFQUFFLE9BQU87UUFDZEMsVUFBVSxFQUFFLGFBQWE7UUFDekJDLFFBQVEsRUFBRVIsRUFBRTtRQUNaUyxJQUFJLEVBQUU7VUFDSnZDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7VUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7VUFDN0JyQyxFQUFFO1VBQ0ZxRjtRQUNGO01BQ0YsQ0FBQyxDQUFDLENBQUM7TUFFSCxJQUFJLENBQUN4QyxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFFb0IsSUFBSSxJQUFLO1FBQ2pDSixTQUFTLENBQUNLLE1BQU0sQ0FBQ0QsSUFBSSxDQUFDRSxJQUFJLENBQUM7UUFDM0I5Riw2Q0FBRyxDQUFDK0YsT0FBTyxDQUFDUCxTQUFTLENBQUM7UUFDdEJVLFVBQVUsSUFBSUEsVUFBVSxDQUFDTixJQUFJLENBQUM7TUFDaEMsQ0FBQyxFQUFHSSxHQUFHLElBQUs7UUFDVkcsU0FBUyxJQUFJQSxTQUFTLENBQUNILEdBQUcsQ0FBQztNQUM3QixDQUFDLENBQUM7SUFFSixDQUFDLENBQUM7SUFFRixPQUFPUixTQUFTO0VBQ2xCO0VBRUFhLGVBQWVBLENBQUNDLE1BQU0sRUFBRTtJQUN0QixPQUFPLElBQUksQ0FBQ0MsUUFBUSxDQUFDRCxNQUFNLENBQUM7RUFDOUI7RUFFQUUsZUFBZUEsQ0FBQ0YsTUFBTSxFQUFFO0lBQ3RCLElBQUksQ0FBQ0EsTUFBTSxJQUFJLENBQUNBLE1BQU0sQ0FBQ0csUUFBUSxDQUFDLElBQUksQ0FBQ25ELE9BQU8sQ0FBQyxFQUFFO01BQzdDZ0QsTUFBTSxHQUFHYixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUNuQyxPQUFPLEVBQUUsQ0FBQztJQUNoQztJQUVBLElBQUlvRCxJQUFJLEdBQUcsSUFBSTtJQUNmSixNQUFNLENBQUNLLElBQUksQ0FBQyxZQUFZO01BQ3RCLElBQUlyRyxFQUFFLEdBQUdtRixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUNHLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDakMsSUFBSWdCLFFBQVEsR0FBRyxJQUFJO01BQ25CLElBQUd0RyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUtvRyxJQUFJLENBQUM1RCxNQUFNLENBQUN4QyxFQUFFLEtBQUtjLFNBQVMsSUFBSXNGLElBQUksQ0FBQzVELE1BQU0sQ0FBQ3hDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3ZFc0csUUFBUSxHQUFHRixJQUFJLENBQUM1RCxNQUFNO01BQ3hCLENBQUMsTUFBTSxJQUFHeEMsRUFBRSxLQUFLYyxTQUFTLElBQUlkLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDekNzRyxRQUFRLEdBQUdGLElBQUksQ0FBQzlDLElBQUksQ0FBQ3RELEVBQUUsQ0FBQztNQUMxQjtNQUNBLElBQUksQ0FBQ3NHLFFBQVEsRUFBRTtRQUNiO01BQ0Y7TUFFQSxLQUFLLElBQUlDLFNBQVMsSUFBSSxJQUFJLENBQUNDLFFBQVEsRUFBRTtRQUNuQyxJQUFJQyxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0UsSUFBSTtRQUN6QixJQUFJQSxJQUFJLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7VUFDdkIsSUFBSUYsU0FBUyxDQUFDRyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ2pDSCxTQUFTLENBQUNJLE9BQU8sR0FBR0wsUUFBUSxDQUFDRyxJQUFJLENBQUM7VUFDcEMsQ0FBQyxNQUFNLElBQUlGLFNBQVMsQ0FBQ0csSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNwQyxJQUFHSixRQUFRLENBQUNHLElBQUksQ0FBQyxZQUFZRyxJQUFJLEVBQUU7Y0FDakMsSUFBSUMsU0FBUyxHQUFHLElBQUlDLFlBQVksQ0FBQyxDQUFDO2NBQ2xDRCxTQUFTLENBQUNFLEtBQUssQ0FBQ0MsR0FBRyxDQUFDVixRQUFRLENBQUNHLElBQUksQ0FBQyxDQUFDO2NBQ25DRixTQUFTLENBQUNVLEtBQUssR0FBR0osU0FBUztZQUM3QjtVQUNGLENBQUMsTUFBTTtZQUNMMUIsQ0FBQyxDQUFDb0IsU0FBUyxDQUFDLENBQUNXLEdBQUcsQ0FBQ1osUUFBUSxDQUFDRyxJQUFJLENBQUMsQ0FBQztVQUNsQztRQUNGO01BQ0Y7SUFDRixDQUFDLENBQUM7RUFFSjtFQUVBUixRQUFRQSxDQUFDRCxNQUFNLEVBQUU7SUFDZixJQUFJLENBQUNBLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFFBQVEsQ0FBQyxJQUFJLENBQUNuRCxPQUFPLENBQUMsRUFBRTtNQUM3Q2dELE1BQU0sR0FBR2IsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDbkMsT0FBTyxFQUFFLENBQUM7SUFDaEM7SUFFQSxNQUFNb0QsSUFBSSxHQUFHLElBQUk7SUFDakIsSUFBSWUsU0FBUyxHQUFHLEVBQUU7SUFFbEJuQixNQUFNLENBQUNLLElBQUksQ0FBQyxZQUFZO01BQ3RCLElBQUllLEtBQUssR0FBR2pDLENBQUMsQ0FBQyxJQUFJLENBQUM7TUFDbkIsSUFBSW5GLEVBQUUsR0FBR29ILEtBQUssQ0FBQzlCLElBQUksQ0FBQyxVQUFVLENBQUM7TUFDL0IsSUFBSWdCLFFBQVEsR0FBR0YsSUFBSSxDQUFDOUMsSUFBSSxDQUFDdEQsRUFBRSxDQUFDO01BQzVCLEtBQUssSUFBSXVHLFNBQVMsSUFBSSxJQUFJLENBQUNDLFFBQVEsRUFBRTtRQUNuQyxJQUFJQyxJQUFJLEdBQUdGLFNBQVMsQ0FBQ0UsSUFBSTtRQUN6QixJQUFJQSxJQUFJLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7VUFDdkIsSUFBSUYsU0FBUyxDQUFDRyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQy9CSixRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHakYsbUJBQW1CLENBQUMyRCxDQUFDLENBQUNvQixTQUFTLENBQUMsQ0FBQ1csR0FBRyxDQUFDLENBQUMsQ0FBQztVQUMxRCxDQUFDLE1BQU0sSUFBSVgsU0FBUyxDQUFDRyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQ3hDSixRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHRixTQUFTLENBQUNJLE9BQU87VUFDcEMsQ0FBQyxNQUFNLElBQUlKLFNBQVMsQ0FBQ0csSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNwQ0osUUFBUSxDQUFDRyxJQUFJLENBQUMsR0FBR0YsU0FBUyxDQUFDVSxLQUFLLENBQUMsQ0FBQyxDQUFDO1VBQ3JDLENBQUMsTUFBTTtZQUNMWCxRQUFRLENBQUNHLElBQUksQ0FBQyxHQUFHdEIsQ0FBQyxDQUFDb0IsU0FBUyxDQUFDLENBQUNXLEdBQUcsQ0FBQyxDQUFDO1VBQ3JDO1FBQ0Y7TUFDRjtNQUVBQyxTQUFTLENBQUN2RCxJQUFJLENBQUMwQyxRQUFRLENBQUM7TUFDeEIsT0FBT0EsUUFBUTtJQUNqQixDQUFDLENBQUM7SUFFRixJQUFJLElBQUksQ0FBQy9ELFdBQVcsQ0FBQ0wsTUFBTSxJQUFJLENBQUMsSUFBSWlGLFNBQVMsQ0FBQ2pGLE1BQU0sR0FBRyxDQUFDLEVBQUU7TUFDeEQsSUFBSSxDQUFDTSxNQUFNLEdBQUcyRSxTQUFTLENBQUNFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoQztJQUVBLE9BQU9GLFNBQVM7RUFFbEI7RUFFQUcsVUFBVUEsQ0FBQzFCLFVBQVUsR0FBRyxJQUFJLEVBQUVDLFNBQVMsR0FBRyxJQUFJLEVBQUU7SUFDOUMsSUFBSTBCLFNBQVMsR0FBR3BDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDMUIsSUFBSSxDQUFDbkIsV0FBVyxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLE1BQU07TUFDNUIsSUFBSSxDQUFDdUQsUUFBUSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFRCxTQUFTLEVBQUUzQixVQUFVLEVBQUVDLFNBQVMsQ0FBQztJQUM1RSxDQUFDLENBQUM7SUFFRixPQUFPMEIsU0FBUztFQUNsQjtFQUVBRSxRQUFRQSxDQUFDekgsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFNEYsVUFBVSxHQUFHLElBQUksRUFBRUMsU0FBUyxHQUFHLElBQUksRUFBRTtJQUNyRDdGLEVBQUUsR0FBRytCLFFBQVEsQ0FBQy9CLEVBQUUsQ0FBQztJQUNqQixJQUFJdUQsS0FBSyxDQUFDdkQsRUFBRSxDQUFDLEVBQUU7TUFDYkEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNUO0lBQ0EsSUFBSThGLFlBQVk7SUFDaEIsSUFBSSxJQUFJLENBQUN2RCxXQUFXLENBQUNMLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDakM0RCxZQUFZLEdBQUcsSUFBSSxDQUFDOUIsV0FBVyxDQUFDLENBQUM7SUFDbkMsQ0FBQyxNQUFNO01BQ0w4QixZQUFZLEdBQUcsSUFBSSxDQUFDM0YsSUFBSSxDQUFDLENBQUM7SUFDNUI7SUFFQSxJQUFJb0gsU0FBUyxHQUFHcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUUxQlcsWUFBWSxDQUFDN0IsSUFBSSxDQUFDLE1BQU07TUFDdEIsSUFBSWpFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUNaQSxFQUFFLEdBQUcsSUFBSSxDQUFDdUMsV0FBVyxDQUFDOEUsRUFBRSxDQUFDckgsRUFBRSxDQUFDLENBQUNBLEVBQUU7TUFDakM7TUFFQSxJQUFJLENBQUN3SCxRQUFRLENBQUN4SCxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRXVILFNBQVMsRUFBRTNCLFVBQVUsRUFBRUMsU0FBUyxDQUFDO0lBQ3hFLENBQUMsQ0FBQztJQUVGLE9BQU8wQixTQUFTO0VBQ2xCO0VBRUFHLFNBQVNBLENBQUMxSCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUySCxRQUFRLEVBQUUvQixVQUFVLEdBQUcsSUFBSSxFQUFFQyxTQUFTLEdBQUcsSUFBSSxFQUFFO0lBQ2hFN0YsRUFBRSxHQUFHK0IsUUFBUSxDQUFDL0IsRUFBRSxDQUFDO0lBQ2pCLElBQUl1RCxLQUFLLENBQUN2RCxFQUFFLENBQUMsRUFBRTtNQUNiQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1Q7SUFDQSxJQUFJOEYsWUFBWTtJQUNoQixJQUFJLElBQUksQ0FBQ3ZELFdBQVcsQ0FBQ0wsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNqQzRELFlBQVksR0FBRyxJQUFJLENBQUM5QixXQUFXLENBQUMsQ0FBQztJQUNuQyxDQUFDLE1BQU07TUFDTDhCLFlBQVksR0FBRyxJQUFJLENBQUMzRixJQUFJLENBQUMsQ0FBQztJQUM1QjtJQUVBLElBQUlvSCxTQUFTLEdBQUdwQyxDQUFDLENBQUMsZ0NBQWdDLENBQUM7SUFFbkRXLFlBQVksQ0FBQzdCLElBQUksQ0FBQyxNQUFNO01BQ3RCLElBQUlqRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7UUFDWkEsRUFBRSxHQUFHLElBQUksQ0FBQ3VDLFdBQVcsQ0FBQzhFLEVBQUUsQ0FBQ3JILEVBQUUsQ0FBQyxDQUFDQSxFQUFFO01BQ2pDO01BRUEsSUFBSSxDQUFDd0gsUUFBUSxDQUFDeEgsRUFBRSxFQUFFLFlBQVksRUFBRTJILFFBQVEsRUFBRUosU0FBUyxFQUFFM0IsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDN0UsQ0FBQyxDQUFDO0lBRUYsT0FBTzBCLFNBQVM7RUFDbEI7RUFHQUMsUUFBUUEsQ0FBQ3hILEVBQUUsRUFBRXlFLFVBQVUsRUFBRWtELFFBQVEsRUFBRUosU0FBUyxFQUFFM0IsVUFBVSxFQUFFQyxTQUFTLEVBQUU7SUFDbkU3RixFQUFFLEdBQUcrQixRQUFRLENBQUMvQixFQUFFLENBQUM7SUFDakIsSUFBSXVELEtBQUssQ0FBQ3ZELEVBQUUsQ0FBQyxFQUFFO01BQ2JBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVDtJQUNBLE1BQU1rRSxFQUFFLEdBQUd0RSxxREFBTSxDQUFDLENBQUM7SUFDbkIsSUFBSSxDQUFDZ0QsTUFBTSxDQUFDMEIsSUFBSSxDQUFDaEQsSUFBSSxDQUFDaUQsU0FBUyxDQUFDO01BQzlCQyxLQUFLLEVBQUUsT0FBTztNQUNkQyxVQUFVLEVBQUVBLFVBQVU7TUFDdEJDLFFBQVEsRUFBRVIsRUFBRTtNQUNaUyxJQUFJLEVBQUU7UUFDSnZDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7UUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7UUFDN0JyQyxFQUFFLEVBQUVBLEVBQUU7UUFDTjRILFNBQVMsRUFBRUQ7TUFDYjtJQUNGLENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTUUsU0FBUyxHQUFHN0gsRUFBRSxLQUFLLElBQUksSUFBSUEsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxNQUFNO0lBRTlELElBQUksQ0FBQzZDLFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUVvQixJQUFJLElBQUs7TUFDakNpQyxTQUFTLENBQUNoQyxNQUFNLENBQUNELElBQUksQ0FBQ0UsSUFBSSxDQUFDO01BQzNCLElBQUk0QixLQUFLLEdBQUdHLFNBQVMsQ0FBQ08sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUNsQ0MsUUFBUSxDQUFDLGFBQWFGLFNBQVMsd0JBQXdCLElBQUksQ0FBQzdFLE9BQU8sRUFBRSxDQUFDLENBQ3RFc0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FDbkJBLElBQUksQ0FBQyxVQUFVLEVBQUV0RixFQUFFLENBQUMsQ0FDcEJzRixJQUFJLENBQUMsV0FBVyxFQUFFcUMsUUFBUSxDQUFDO01BQzlCLElBQUlQLEtBQUssQ0FBQ2xGLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQ2tGLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQzVEWixLQUFLLENBQUNhLElBQUksQ0FBQyxZQUFZLEVBQUUsNEJBQTRCLENBQUM7TUFDeEQ7TUFFQXZJLDZDQUFHLENBQUMrRixPQUFPLENBQUM4QixTQUFTLENBQUM7TUFDdEIzQixVQUFVLElBQUlBLFVBQVUsQ0FBQ04sSUFBSSxDQUFDO0lBQ2hDLENBQUMsRUFBR0ksR0FBRyxJQUFLO01BQ1ZHLFNBQVMsSUFBSUEsU0FBUyxDQUFDSCxHQUFHLENBQUM7SUFDN0IsQ0FBQyxDQUFDO0VBQ0o7RUFFQXdDLEdBQUdBLENBQUEsRUFBRztJQUNKLE9BQU8sSUFBSS9ELE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztNQUN0QyxNQUFNK0MsS0FBSyxHQUFHakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDK0IsVUFBVSxDQUFDLE1BQU07UUFDckQsSUFBSSxDQUFDdkIsZUFBZSxDQUFDcUIsS0FBSyxDQUFDO1FBQzNCaEQsT0FBTyxDQUFDLENBQUM7TUFDWCxDQUFDLEVBQUVDLE1BQU0sQ0FBQyxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0VBQ0o7RUFFQThELElBQUlBLENBQUNuSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUVvSSxRQUFRLEdBQUcsV0FBVyxFQUFFO0lBQ3BDcEksRUFBRSxHQUFHK0IsUUFBUSxDQUFDL0IsRUFBRSxDQUFDO0lBQ2pCLElBQUl1RCxLQUFLLENBQUN2RCxFQUFFLENBQUMsRUFBRTtNQUNiQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1Q7SUFDQSxPQUFPLElBQUksQ0FBQ2dFLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ25DLElBQUlvRSxTQUFTO01BQ2IsSUFBSXJJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUNYcUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDL0UsSUFBSSxDQUFDdEQsRUFBRSxDQUFDLENBQUM7TUFDN0IsQ0FBQyxNQUFNO1FBQ0xxSSxTQUFTLEdBQUcsSUFBSSxDQUFDOUYsV0FBVztNQUM5QjtNQUNBLElBQUkrRixNQUFNLEdBQUcsRUFBRTtNQUNmRCxTQUFTLENBQUNFLE9BQU8sQ0FBRS9FLElBQUksSUFBSztRQUMxQixNQUFNVSxFQUFFLEdBQUd0RSxxREFBTSxDQUFDLENBQUM7UUFDbkIwSSxNQUFNLENBQUMxRSxJQUFJLENBQUMsSUFBSU8sT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQzNDLElBQUksQ0FBQ21FLFVBQVUsQ0FBQ2hGLElBQUksQ0FBQyxDQUFDUyxJQUFJLENBQUVnRCxLQUFLLElBQUs7WUFDcEMsSUFBSSxDQUFDckUsTUFBTSxDQUFDMEIsSUFBSSxDQUFDaEQsSUFBSSxDQUFDaUQsU0FBUyxDQUFDO2NBQzlCQyxLQUFLLEVBQUUsT0FBTztjQUNkQyxVQUFVLEVBQUUsTUFBTTtjQUNsQkMsUUFBUSxFQUFFUixFQUFFO2NBQ1pTLElBQUksRUFBRTtnQkFDSmlELFNBQVMsRUFBRVEsUUFBUTtnQkFDbkJoRyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO2dCQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0EsV0FBVztnQkFDN0JpRCxJQUFJLEVBQUU5QixJQUFJO2dCQUNWeUQsS0FBSyxFQUFFQTtjQUNUO1lBQ0YsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUNwRSxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFFd0IsR0FBRyxJQUFLO2NBQ2hDLElBQUlKLElBQUksR0FBRyxPQUFPSSxHQUFHLENBQUNKLElBQUksQ0FBQ2dCLFFBQVEsS0FBSyxRQUFRLEdBQUdoRixJQUFJLENBQUNDLEtBQUssQ0FBQ21FLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZ0IsUUFBUSxDQUFDLEdBQUdaLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZ0IsUUFBUTtjQUNwR1osR0FBRyxDQUFDSixJQUFJLENBQUNnQixRQUFRLEdBQUcsSUFBSSxDQUFDbUMsZUFBZSxDQUFDbkQsSUFBSSxDQUFDO2NBQzlDbEIsT0FBTyxDQUFDc0IsR0FBRyxDQUFDO1lBQ2QsQ0FBQyxFQUFFckIsTUFBTSxDQUFDO1VBQ1osQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7TUFDTCxDQUFDLENBQUM7TUFFRixPQUFPRixPQUFPLENBQUN1RSxHQUFHLENBQUNKLE1BQU0sQ0FBQztJQUM1QixDQUFDLENBQUM7RUFDSjtFQUVBSyxNQUFNQSxDQUFDbkcsTUFBTSxHQUFHLElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQzNCLE1BQU0wQixFQUFFLEdBQUd0RSxxREFBTSxDQUFDLENBQUM7SUFDbkIsT0FBTyxJQUFJLENBQUNvRSxXQUFXLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtNQUNuQyxPQUFPLElBQUlFLE9BQU8sQ0FBQyxDQUFDQyxPQUFPLEVBQUVDLE1BQU0sS0FBSztRQUN0QyxJQUFJLENBQUNtRSxVQUFVLENBQUNoRyxNQUFNLENBQUMsQ0FBQ3lCLElBQUksQ0FBRWdELEtBQUssSUFBSztVQUN0QyxJQUFJLENBQUNyRSxNQUFNLENBQUMwQixJQUFJLENBQUNoRCxJQUFJLENBQUNpRCxTQUFTLENBQUM7WUFDOUJDLEtBQUssRUFBRSxPQUFPO1lBQ2RDLFVBQVUsRUFBRSxRQUFRO1lBQ3BCQyxRQUFRLEVBQUVSLEVBQUU7WUFDWlMsSUFBSSxFQUFFO2NBQ0p2QyxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO2NBQzNCQyxXQUFXLEVBQUUsSUFBSSxDQUFDQSxXQUFXO2NBQzdCaUQsSUFBSSxFQUFFOUMsTUFBTTtjQUNaeUUsS0FBSyxFQUFFQTtZQUNUO1VBQ0YsQ0FBQyxDQUFDLENBQUM7VUFFSCxJQUFJLENBQUNwRSxZQUFZLENBQUNxQixFQUFFLENBQUMsR0FBRyxDQUFFd0IsR0FBRyxJQUFLO1lBQ2hDLElBQUlKLElBQUksR0FBRyxPQUFPSSxHQUFHLENBQUNKLElBQUksQ0FBQ2dCLFFBQVEsS0FBSyxRQUFRLEdBQUdoRixJQUFJLENBQUNDLEtBQUssQ0FBQ21FLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZ0IsUUFBUSxDQUFDLEdBQUdaLEdBQUcsQ0FBQ0osSUFBSSxDQUFDZ0IsUUFBUTtZQUNwRyxJQUFJLElBQUksQ0FBQzlELE1BQU0sRUFBRXhDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtjQUMxQixJQUFJLENBQUN1QyxXQUFXLEdBQUcsRUFBRTtjQUNyQixJQUFJLENBQUNDLE1BQU0sR0FBRyxJQUFJO1lBQ3BCO1lBQ0FrRCxHQUFHLENBQUNKLElBQUksQ0FBQ2dCLFFBQVEsR0FBRyxJQUFJLENBQUNtQyxlQUFlLENBQUNuRCxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakRsQixPQUFPLENBQUNzQixHQUFHLENBQUM7VUFDZCxDQUFDLEVBQUVyQixNQUFNLENBQUM7UUFDWixDQUFDLENBQUM7TUFDSixDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7RUFDSjtFQUVBdUUsTUFBTUEsQ0FBQzVJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtJQUNkQSxFQUFFLEdBQUcrQixRQUFRLENBQUMvQixFQUFFLENBQUM7SUFDakIsSUFBSXVELEtBQUssQ0FBQ3ZELEVBQUUsQ0FBQyxFQUFFO01BQ2JBLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVDtJQUNBLElBQUlBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRUEsRUFBRSxHQUFHLElBQUksQ0FBQ3dDLE1BQU0sRUFBRXhDLEVBQUU7SUFDbkMsTUFBTWtFLEVBQUUsR0FBR3RFLHFEQUFNLENBQUMsQ0FBQztJQUNuQixPQUFPLElBQUksQ0FBQ29FLFdBQVcsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxNQUFNO01BQ25DLE9BQU8sSUFBSUUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3RDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ2hELElBQUksQ0FBQ2lELFNBQVMsQ0FBQztVQUM5QkMsS0FBSyxFQUFFLE9BQU87VUFDZEMsVUFBVSxFQUFFLFFBQVE7VUFDcEJDLFFBQVEsRUFBRVIsRUFBRTtVQUNaUyxJQUFJLEVBQUU7WUFDSnZDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7WUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBLFdBQVc7WUFDN0JyQyxFQUFFLEVBQUVBO1VBQ047UUFDRixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQzZDLFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUNFLE9BQU8sRUFBRUMsTUFBTSxDQUFDO01BQzNDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztFQUNKO0VBRUFMLFdBQVdBLENBQUEsRUFBRztJQUNaLE9BQU8sSUFBSUcsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3RDLElBQUksSUFBSSxDQUFDNUIsYUFBYSxFQUFFO1FBQ3RCMkIsT0FBTyxDQUFDLENBQUM7TUFDWCxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQzFCLHFCQUFxQixJQUFJLENBQUMsSUFBSSxDQUFDRyxZQUFZLENBQUMscUJBQXFCLENBQUMsRUFBRTtRQUNuRixJQUFJLENBQUNILHFCQUFxQixHQUFHLElBQUk7UUFDakMsSUFBSSxDQUFDRyxZQUFZLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FDbEQsQ0FBQyxFQUFFLE1BQU0sQ0FDVCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUNnRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM1RSxJQUFJLENBQUMsTUFBTTtVQUNqQ0csT0FBTyxDQUFDLElBQUksQ0FBQzBFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUM7TUFDSixDQUFDLE1BQU07UUFDTCxNQUFNLENBQUNDLGNBQWMsRUFBRUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDbkcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO1FBQ2hGLElBQUksQ0FBQ0EsWUFBWSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FDekMsTUFBTTtVQUNKa0csY0FBYyxDQUFDLENBQUM7VUFDaEIzRSxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsRUFDRCxNQUFNO1VBQ0o0RSxhQUFhLENBQUMsQ0FBQztVQUNmM0UsTUFBTSxDQUFDLENBQUM7UUFDVixDQUFDLENBQ0Y7TUFDSDtJQUNGLENBQUMsQ0FBQztFQUNKO0VBRUE0RSxLQUFLQSxDQUFBLEVBQUc7SUFDTixJQUFJLElBQUksQ0FBQ3JHLE1BQU0sRUFBRTtNQUNmLElBQUksQ0FBQ0QsZUFBZSxHQUFHLEtBQUs7TUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNzRyxPQUFPLEdBQUcsTUFBTSxDQUM1QixDQUFDO01BQ0QsSUFBSSxDQUFDdEcsTUFBTSxDQUFDcUcsS0FBSyxDQUFDLENBQUM7TUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCO0VBQ0Y7RUFFQUUsS0FBS0EsQ0FBQSxFQUFHO0lBQ04sSUFBSSxDQUFDNUcsV0FBVyxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hCLE9BQU8sSUFBSTtFQUNiO0VBRUFnRyxVQUFVQSxDQUFDaEYsSUFBSSxFQUFFO0lBQ2YsSUFBSTRGLFFBQVEsR0FBRyxFQUFFO0lBQ2pCLEdBQUc7SUFDSCxJQUFJbkMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLEtBQUssTUFBTSxDQUFDckcsR0FBRyxFQUFFQyxLQUFLLENBQUMsSUFBSWlELE1BQU0sQ0FBQ3VGLE9BQU8sQ0FBQzdGLElBQUksQ0FBQyxFQUFFO01BQy9DLElBQUkzQyxLQUFLLFlBQVkrRixJQUFJLEVBQUU7UUFDekJ3QyxRQUFRLENBQUN4RixJQUFJLENBQUMsSUFBSU8sT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1VBQzdDLENBQUMsQ0FBQ3pELEdBQUcsRUFBRUMsS0FBSyxLQUFLO1lBQ2YsSUFBSXlJLE1BQU0sR0FBRyxJQUFJQyxVQUFVLENBQUMsQ0FBQztZQUM3QkQsTUFBTSxDQUFDRSxNQUFNLEdBQUdDLENBQUMsSUFBSTtjQUNuQixNQUFNdkYsRUFBRSxHQUFHdEUscURBQU0sQ0FBQyxDQUFDO2NBQ25CLElBQUksQ0FBQ2lELFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUNFLE9BQU8sRUFBRUMsTUFBTSxDQUFDO2NBRXpDLElBQUlxRixNQUFNLEdBQUdELENBQUMsQ0FBQzlJLE1BQU0sQ0FBQytJLE1BQU07Y0FDNUIsSUFBSUMsZ0JBQWdCLEdBQUc1SCxRQUFRLENBQUM2SCxJQUFJLENBQUNDLElBQUksQ0FBQ0gsTUFBTSxDQUFDeEgsTUFBTSxHQUFHckMsZUFBZSxDQUFDLENBQUM7Y0FDM0VvSCxLQUFLLENBQUNyRyxHQUFHLENBQUMsR0FBRztnQkFDWHNELEVBQUUsRUFBRUEsRUFBRTtnQkFDTjRGLFNBQVMsRUFBRWpKLEtBQUssQ0FBQzRGLElBQUk7Z0JBQ3JCc0QsVUFBVSxFQUFFbkosR0FBRztnQkFDZm9KLGNBQWMsRUFBRW5KLEtBQUssQ0FBQ29KO2NBQ3hCLENBQUM7Y0FDRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBR1AsZ0JBQWdCLEVBQUUsRUFBRU8sQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUN0SCxNQUFNLENBQUMwQixJQUFJLENBQUNoRCxJQUFJLENBQUNpRCxTQUFTLENBQUM7a0JBQzlCQyxLQUFLLEVBQUUsT0FBTztrQkFDZEMsVUFBVSxFQUFFLFFBQVE7a0JBQ3BCQyxRQUFRLEVBQUVSLEVBQUU7a0JBQ1pTLElBQUksRUFBRTtvQkFDSndGLEtBQUssRUFBRVQsTUFBTSxDQUFDMUksS0FBSyxDQUFDbkIsZUFBZSxHQUFHcUssQ0FBQyxFQUFFckssZUFBZSxJQUFJcUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNuRS9HLEdBQUcsRUFBRStHLENBQUM7b0JBQ05QLGdCQUFnQixFQUFFQSxnQkFBZ0I7b0JBQ2xDRyxTQUFTLEVBQUVqSixLQUFLLENBQUM0RixJQUFJO29CQUNyQnNELFVBQVUsRUFBRW5KLEdBQUc7b0JBQ2ZvSixjQUFjLEVBQUVuSixLQUFLLENBQUNvSixJQUFJO29CQUMxQkcsWUFBWSxFQUFFdkosS0FBSyxDQUFDNkYsSUFBSTtvQkFDeEJ0RSxVQUFVLEVBQUUsSUFBSSxDQUFDQSxVQUFVO29CQUMzQkMsV0FBVyxFQUFFLElBQUksQ0FBQ0E7a0JBQ3BCO2dCQUNGLENBQUMsQ0FBQyxDQUFDO2NBQ0w7WUFDRixDQUFDO1lBQ0RpSCxNQUFNLENBQUNlLE9BQU8sR0FBRyxNQUFNO2NBQ3JCaEcsTUFBTSxDQUFDLENBQUM7WUFDVixDQUFDO1lBQ0RpRixNQUFNLENBQUNnQixrQkFBa0IsQ0FBQ3pKLEtBQUssQ0FBQztVQUNsQyxDQUFDLEVBQUVELEdBQUcsRUFBRUMsS0FBSyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO01BQ0w7SUFDRjtJQUVBLE9BQU9zRCxPQUFPLENBQUN1RSxHQUFHLENBQUNVLFFBQVEsQ0FBQyxDQUFDbkYsSUFBSSxDQUFDLE1BQU07TUFDdEMsT0FBT2dELEtBQUs7SUFDZCxDQUFDLENBQUM7RUFDSjtFQUVBc0QsVUFBVUEsQ0FBQ2QsQ0FBQyxFQUFFO0lBQ1osSUFBSW5FLElBQUksR0FBR2hFLElBQUksQ0FBQ0MsS0FBSyxDQUFDa0ksQ0FBQyxDQUFDbkUsSUFBSSxDQUFDO0lBQzdCLElBQUlBLElBQUksQ0FBQ2tGLFFBQVEsRUFBRTtNQUNqQixJQUFJLElBQUksQ0FBQzNILFlBQVksQ0FBQ3hCLGNBQWMsQ0FBQ2lFLElBQUksQ0FBQ1osUUFBUSxDQUFDLEVBQUU7UUFDbkQsSUFBSSxDQUFDN0IsWUFBWSxDQUFDeUMsSUFBSSxDQUFDWixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ21GLGlCQUFpQixDQUFDbkYsSUFBSSxDQUFDWixRQUFRLENBQUM7TUFDdkM7TUFDQSxJQUFJWSxJQUFJLENBQUNvRixHQUFHLElBQUlwRixJQUFJLENBQUNxRixNQUFNLEVBQUU7UUFDM0JoTCx1REFBTyxDQUFDLGNBQWMsRUFBRTJGLElBQUksQ0FBQ3FGLE1BQU0sSUFBSSxFQUFFLEVBQUVyRixJQUFJLENBQUNvRixHQUFHLElBQUksRUFBRSxDQUFDO01BQzVEO01BRUEsSUFBSXBGLElBQUksQ0FBQ29CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDM0IsSUFBSSxDQUFDN0QsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5QyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDbUYsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFDN0MsSUFBSSxDQUFDOUgsZUFBZSxHQUFHLEtBQUs7UUFDNUIsSUFBSSxDQUFDQyxNQUFNLENBQUNxRyxLQUFLLENBQUMsQ0FBQztNQUNyQjtJQUNGLENBQUMsTUFBTTtNQUVMLElBQUkzRCxJQUFJLENBQUNvRixHQUFHLElBQUlwRixJQUFJLENBQUNxRixNQUFNLEVBQUU7UUFDM0JoTCx1REFBTyxDQUFDLFNBQVMsRUFBRTJGLElBQUksQ0FBQ3FGLE1BQU0sSUFBSSxFQUFFLEVBQUVyRixJQUFJLENBQUNvRixHQUFHLElBQUksRUFBRSxDQUFDO01BQ3ZEO01BRUEsSUFBSXBGLElBQUksQ0FBQ29CLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDM0IsSUFBSSxDQUFDakUsYUFBYSxHQUFHLElBQUk7UUFDekIsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxLQUFLO1FBQ2xDLElBQUksQ0FBQ0csWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUN5QyxJQUFJLENBQUM7UUFDakQsSUFBSSxDQUFDbUYsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7TUFDL0MsQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDRyxRQUFRLENBQUN0RixJQUFJLENBQUNvQixJQUFJLENBQUMsRUFBRTtRQUNwRSxNQUFNbUUsUUFBUSxHQUFHdkosSUFBSSxDQUFDQyxLQUFLLENBQUMrRCxJQUFJLENBQUNYLElBQUksQ0FBQ1csSUFBSSxDQUFDO1FBQzNDLElBQUksQ0FBQy9DLFdBQVcsR0FBRyxFQUFFO1FBQ3JCK0MsSUFBSSxDQUFDWCxJQUFJLENBQUNXLElBQUksR0FBRyxJQUFJLENBQUNtRCxlQUFlLENBQUNvQyxRQUFRLENBQUM7TUFFakQsQ0FBQyxNQUFNLElBQUl2RixJQUFJLENBQUNvQixJQUFJLEtBQUssV0FBVyxJQUFJcEIsSUFBSSxDQUFDb0IsSUFBSSxLQUFLLFdBQVcsRUFBRTtRQUNqRSxNQUFNbUUsUUFBUSxHQUFHdkosSUFBSSxDQUFDQyxLQUFLLENBQUMrRCxJQUFJLENBQUNYLElBQUksQ0FBQ1csSUFBSSxDQUFDO1FBRTNDLElBQUl3RixHQUFHLEdBQUcsSUFBSSxDQUFDckMsZUFBZSxDQUFDb0MsUUFBUSxDQUFDO1FBQ3hDLElBQUlFLEVBQUU7UUFFTixJQUFJekYsSUFBSSxDQUFDb0IsSUFBSSxLQUFLLFdBQVcsRUFBRTtVQUM3QnFFLEVBQUUsR0FBRyxJQUFJLENBQUNoSSxTQUFTO1FBQ3JCLENBQUMsTUFBTTtVQUNMZ0ksRUFBRSxHQUFHLElBQUksQ0FBQ2pJLFNBQVM7UUFDckI7UUFFQWlJLEVBQUUsQ0FBQ0QsR0FBRyxDQUFDO1FBQ1B4RixJQUFJLENBQUNYLElBQUksQ0FBQ1csSUFBSSxHQUFHd0YsR0FBRztNQUV0QjtNQUVBLElBQUl4RSxRQUFRLEdBQUdoQixJQUFJLENBQUNBLElBQUksRUFBRWdCLFFBQVE7TUFDbEMsSUFBSUEsUUFBUSxFQUFFO1FBQ1poQixJQUFJLENBQUNBLElBQUksQ0FBQ2dCLFFBQVEsR0FBR2hGLElBQUksQ0FBQ0MsS0FBSyxDQUFDK0QsSUFBSSxDQUFDQSxJQUFJLENBQUNnQixRQUFRLENBQUM7TUFDckQ7TUFFQSxJQUFJLElBQUksQ0FBQ3pELFlBQVksQ0FBQ3hCLGNBQWMsQ0FBQ2lFLElBQUksQ0FBQ1osUUFBUSxDQUFDLEVBQUU7UUFDbkQsSUFBSSxDQUFDN0IsWUFBWSxDQUFDeUMsSUFBSSxDQUFDWixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQ21GLGlCQUFpQixDQUFDbkYsSUFBSSxDQUFDWixRQUFRLENBQUM7TUFDdkM7SUFDRjtFQUNGO0VBRUFzRyxjQUFjQSxDQUFBLEVBQUc7SUFDZixPQUFPLElBQUk3RyxPQUFPLENBQUNDLE9BQU8sSUFBSTtNQUM1QixJQUFJTixNQUFNLENBQUNtSCxJQUFJLENBQUMsSUFBSSxDQUFDcEksWUFBWSxDQUFDLENBQUNYLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0MsT0FBT2tDLE9BQU8sQ0FBQyxDQUFDO01BQ2xCO01BRUEsSUFBSSxDQUFDOUIsaUJBQWlCLENBQUNzQixJQUFJLENBQUNRLE9BQU8sQ0FBQztJQUN0QyxDQUFDLENBQUM7RUFDSjtFQUVBcUcsaUJBQWlCQSxDQUFDL0YsUUFBUSxFQUFFO0lBQzFCLE9BQU8sSUFBSSxDQUFDN0IsWUFBWSxDQUFDNkIsUUFBUSxDQUFDO0lBQ2xDLElBQUlaLE1BQU0sQ0FBQ21ILElBQUksQ0FBQyxJQUFJLENBQUNwSSxZQUFZLENBQUMsQ0FBQ1gsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUMvQyxJQUFJLENBQUNJLGlCQUFpQixDQUFDaUcsT0FBTyxDQUFDMkMsQ0FBQyxJQUFJQSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3hDLElBQUksQ0FBQzVJLGlCQUFpQixHQUFHLEVBQUU7SUFDN0I7RUFFRjtFQUVBdUcsZ0JBQWdCQSxDQUFBLEVBQUc7SUFDakIsT0FBTyxJQUFJMUUsT0FBTyxDQUFFQyxPQUFPLElBQUs7TUFFOUIsTUFBTStHLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDL0ksVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDZ0osUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQ0EsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO01BQzlGLElBQUlDLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDQyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ3pDLElBQUksQ0FBQzNJLE1BQU0sR0FBRyxJQUFJNEksU0FBUyxDQUFDLFNBQVNILE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRyxJQUFJLGlCQUFpQk4sZ0JBQWdCLEVBQUUsQ0FBQztNQUMvRixDQUFDLE1BQU07UUFDTCxJQUFJLENBQUN2SSxNQUFNLEdBQUcsSUFBSTRJLFNBQVMsQ0FBQyxRQUFRSCxNQUFNLENBQUNDLFFBQVEsQ0FBQ0csSUFBSSxpQkFBaUJOLGdCQUFnQixFQUFFLENBQUM7TUFDOUY7TUFHQSxJQUFJLENBQUN2SSxNQUFNLENBQUM4SSxTQUFTLEdBQUcsSUFBSSxDQUFDbkIsVUFBVSxDQUFDckosSUFBSSxDQUFDLElBQUksQ0FBQztNQUVsRCxJQUFJLENBQUMwQixNQUFNLENBQUNzRyxPQUFPLEdBQUlPLENBQUMsSUFBSztRQUMzQmtDLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDeEosVUFBVSxLQUFLLElBQUksQ0FBQ2dKLFFBQVEsOEJBQThCLENBQUM7UUFDNUYsSUFBSSxDQUFDM0ksYUFBYSxHQUFHLEtBQUs7UUFDMUIsS0FBSyxNQUFNLENBQUNvSixJQUFJLEVBQUVoTCxLQUFLLENBQUMsSUFBSWlELE1BQU0sQ0FBQ3VGLE9BQU8sQ0FBQyxJQUFJLENBQUN4RyxZQUFZLENBQUMsRUFBRTtVQUM3RGhDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzRJLENBQUMsQ0FBQztRQUNiO1FBQ0EsSUFBSSxDQUFDNUcsWUFBWSxHQUFHLENBQUMsQ0FBQztRQUV0QmlKLFVBQVUsQ0FBQyxNQUFNO1VBQ2YsSUFBSSxJQUFJLENBQUNuSixlQUFlLEVBQUU7WUFDeEIsSUFBSSxDQUFDa0csZ0JBQWdCLENBQUMsQ0FBQyxDQUFDNUUsSUFBSSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxDQUFDO1VBQ0o7UUFDRixDQUFDLEVBQUUsSUFBSSxDQUFDO01BQ1YsQ0FBQztNQUVELElBQUksQ0FBQ3JCLE1BQU0sQ0FBQ3lILE9BQU8sR0FBSTBCLEdBQUcsSUFBSztRQUM3QkosT0FBTyxDQUFDQyxLQUFLLENBQUMsbUNBQW1DRyxHQUFHLGlCQUFpQixDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDdEosYUFBYSxFQUFFO1VBQ3RCLElBQUk7WUFDRixJQUFJLENBQUNHLE1BQU0sQ0FBQ3FHLEtBQUssQ0FBQyxDQUFDO1VBQ3JCLENBQUMsQ0FBQyxPQUFPUSxDQUFDLEVBQUUsQ0FFWjtRQUNGO01BQ0YsQ0FBQztNQUdELElBQUksQ0FBQzdHLE1BQU0sQ0FBQ29KLE1BQU0sR0FBRyxNQUFNO1FBQ3pCNUgsT0FBTyxDQUFDLENBQUM7TUFDWCxDQUFDO0lBQ0gsQ0FBQyxDQUFDO0VBRUo7RUFFQTBFLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2pCLE1BQU01RSxFQUFFLEdBQUd0RSxxREFBTSxDQUFDLENBQUM7SUFDbkIsT0FBTyxJQUFJdUUsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO01BQ3RDLElBQUksQ0FBQ3pCLE1BQU0sQ0FBQzBCLElBQUksQ0FBQ2hELElBQUksQ0FBQ2lELFNBQVMsQ0FBQztRQUM5QkMsS0FBSyxFQUFFLE9BQU87UUFDZEMsVUFBVSxFQUFFLFNBQVM7UUFDckJDLFFBQVEsRUFBRVIsRUFBRTtRQUNaUyxJQUFJLEVBQUU7VUFDSnZDLFVBQVUsRUFBRSxJQUFJLENBQUNBLFVBQVU7VUFDM0JDLFdBQVcsRUFBRSxJQUFJLENBQUNBO1FBQ3BCO01BQ0YsQ0FBQyxDQUFDLENBQUM7TUFFSCxJQUFJLENBQUNRLFlBQVksQ0FBQ3FCLEVBQUUsQ0FBQyxHQUFHLENBQUNFLE9BQU8sRUFBRUMsTUFBTSxDQUFDO0lBQzNDLENBQUMsQ0FBQztFQUNKO0VBRUFvRSxlQUFlQSxDQUFDL0MsR0FBRyxFQUFFO0lBQ25CLElBQUl1RyxPQUFPLEdBQUcsRUFBRTtJQUNoQixLQUFLLElBQUlDLFNBQVMsSUFBSXhHLEdBQUcsRUFBRTtNQUN6QixNQUFNMUYsRUFBRSxHQUFHa00sU0FBUyxDQUFDbE0sRUFBRTtNQUN2QixNQUFNOEssR0FBRyxHQUFHLElBQUksQ0FBQ3hILElBQUksQ0FBQ3RELEVBQUUsQ0FBQztNQUN6QixLQUFLLE1BQU0sQ0FBQ21NLENBQUMsRUFBRUMsQ0FBQyxDQUFDLElBQUl0SSxNQUFNLENBQUN1RixPQUFPLENBQUM2QyxTQUFTLENBQUNHLE1BQU0sQ0FBQyxFQUFFO1FBQ3JELElBQUlELENBQUMsSUFBSSxPQUFPQSxDQUFDLEtBQUssUUFBUSxJQUFJQSxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRTtVQUN2RHRCLEdBQUcsQ0FBQ3FCLENBQUMsQ0FBQyxHQUFHLElBQUlyTSxRQUFRLENBQUNzTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUVBLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QyxDQUFDLE1BQU07VUFDTHRCLEdBQUcsQ0FBQ3FCLENBQUMsQ0FBQyxHQUFHQyxDQUFDO1FBQ1o7TUFDRjtNQUVBSCxPQUFPLENBQUNySSxJQUFJLENBQUNrSCxHQUFHLENBQUM7SUFDbkI7SUFFQSxJQUFJLElBQUksQ0FBQ3ZJLFdBQVcsQ0FBQ0wsTUFBTSxLQUFLLENBQUMsRUFBRTtNQUNqQyxJQUFJLENBQUNNLE1BQU0sR0FBRyxJQUFJLENBQUNELFdBQVcsQ0FBQzhFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDLE1BQU07TUFDTCxJQUFJLENBQUM3RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCO0lBRUEsT0FBT3lKLE9BQU87RUFFaEI7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzP2FkYmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge3V1aWR2NH0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5cbmNvbnN0IE1BWF9GSUxFX1VQTE9BRCA9IDI1MDAwO1xuXG5cbmNsYXNzIFN1Yk1vZGVsIHtcblxuICBjb25zdHJ1Y3RvcihwaywgbW9kZWwpIHtcbiAgICB0aGlzLnBrID0gcGs7XG4gICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTREMgTW9kZWwgTmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxcbiAgICovXG4gIHNldCBtb2RlbChtb2RlbCkge1xuICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gIH1cblxuICBnZXQgbW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAqL1xuICBsb2FkKGNvbnRyb2xsZXIpIHtcbiAgICBpZiAoIXRoaXMuX21vZGVsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTW9kZWwgaXMgbm90IHNldCEhXCIpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wayBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICByZXR1cm4gY29udHJvbGxlci5uZXdNb2RlbCh0aGlzLl9tb2RlbCwge3BrX19pbjogdGhpcy5wa30pO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbGxlci5uZXdNb2RlbCh0aGlzLl9tb2RlbCwge3BrOiB0aGlzLnBrfSk7XG4gIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gIGdldCh0YXJnZXQsIGtleSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN1Yk1vZGVsKSB7XG4gICAgICBpZiAoIXZhbHVlLnBrICYmIHZhbHVlLnBrICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG4gICAgICBsZXQgbmV3VmFsO1xuICAgICAgaWYgKHZhbHVlLnBrIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgbmV3VmFsID0gdmFsdWUucGsuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1ZhbCA9IG5ldyBOdW1iZXIodmFsdWUucGspO1xuICAgICAgfVxuICAgICAgbmV3VmFsLmxvYWQgPSB2YWx1ZS5sb2FkLmJpbmQodmFsdWUpO1xuICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBzZXQodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKGtleSBpbiB0YXJnZXQpIHtcbiAgICAgIGNvbnN0IG9sZFZhbCA9IHRhcmdldFtrZXldO1xuICAgICAgaWYgKG9sZFZhbCBpbnN0YW5jZW9mIFN1Yk1vZGVsKSB7XG4gICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgncGsnKSkge1xuICAgICAgICAgIG9sZFZhbC5wayA9IHZhbHVlLnBrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBvbGRWYWwucGsgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIG9sZFZhbC5wayA9IHZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHBhcnNlX2hpZGRlbl9pbnB1dHModmFsdWUpIHtcblxuICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cblxuICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJztcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cblxuZXhwb3J0IGNsYXNzIE1vZGVsIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmd9XG4gICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7anNvbn1cbiAgICovXG4gIGNvbnN0cnVjdG9yKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30pIHtcbiAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICB0aGlzLm1vZGVsX3F1ZXJ5ID0gbW9kZWxfcXVlcnk7XG4gICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IHRydWU7XG4gICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgdGhpcy5vbl91cGRhdGUgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICB9O1xuXG4gICAgdGhpcy5mb3JtX2lkID0gdXVpZHY0KCk7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICBsZXQgaWR4ID0gLTE7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgKytpZHg7XG4gICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiB7dmFsdWU6IHRoaXMudmFsdWVzX2xpc3RbaWR4XSwgZG9uZTogZmFsc2V9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7dmFsdWU6IG51bGwsIGRvbmU6IHRydWV9O1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoO1xuICB9XG5cbiAgYnlQayhwaykge1xuICAgIGlmIChwayAhPT0gbnVsbCkge1xuICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgIHBrID0gLTE7XG4gICAgICB9XG4gICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgZWxlbSA9IG5ldyBQcm94eSh7cGs6IHBrfSwgTW9kZWxQcm94eUhhbmRsZXIpO1xuICAgICAgICB0aGlzLnZhbHVlc19saXN0LnB1c2goZWxlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgcmV0dXJuIHtwazogcGt9O1xuXG4gIH1cblxuICBmaWx0ZXIobW9kZWxfcXVlcnkpIHtcbiAgICB0aGlzLm1vZGVsX3F1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5tb2RlbF9xdWVyeSwgbW9kZWxfcXVlcnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiUmVzb2x2ZSA9IG51bGwsIGNiUmVqZWN0ID0gbnVsbCwgdGVtcGxhdGVDb250ZXh0ID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy52aWV3KHtmaWx0ZXIsIGNiUmVzb2x2ZSwgY2JSZWplY3QsIHRlbXBsYXRlQ29udGV4dCwgZXZlbnRfdHlwZTogJ2xpc3Rfdmlldyd9KVxuICB9XG5cbiAgdmlldyh7XG4gICAgICAgICB2aWV3TmFtZSA9ICdodG1sX2xpc3RfdGVtcGxhdGUnLFxuICAgICAgICAgZmlsdGVyID0ge30sXG4gICAgICAgICBjYlJlc29sdmUgPSBudWxsLFxuICAgICAgICAgY2JSZWplY3QgPSBudWxsLFxuICAgICAgICAgdGVtcGxhdGVDb250ZXh0ID0ge30sXG4gICAgICAgICBldmVudF90eXBlID0gJ25hbWVkX3ZpZXcnXG4gICAgICAgfSkge1xuICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgZXZlbnRfdHlwZSxcbiAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgdmlld19uYW1lOiB2aWV3TmFtZSxcbiAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgZmlsdGVyLFxuICAgICAgICAgIHRlbXBsYXRlX2NvbnRleHQ6IHRlbXBsYXRlQ29udGV4dFxuICAgICAgICB9XG4gICAgICB9KSk7XG5cbiAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAkZGl2X2xpc3QuYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgIGNiUmVzb2x2ZSAmJiBjYlJlc29sdmUoZGF0YSk7XG4gICAgICB9LCAocmVzKSA9PiB7XG4gICAgICAgIGNiUmVqZWN0ICYmIGNiUmVqZWN0KHJlcyk7XG4gICAgICB9XTtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZfbGlzdDtcbiAgfVxuXG4gIGRldGFpbFZpZXcocGsgPSBudWxsLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCwgdGVtcGxhdGVfY29udGV4dCA9IHt9KSB7XG4gICAgcGsgPSBwayA/PyAtMTtcbiAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICBwayA9IC0xO1xuICAgIH1cbiAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgfVxuXG4gICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHBrID09PSAtMSkge1xuICAgICAgICBwayA9IHRoaXMudmFsdWVzX2xpc3RbMF0ucGtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgIGV2ZW50X3R5cGU6ICdkZXRhaWxfdmlldycsXG4gICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgYXJnczoge1xuICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICBwayxcbiAgICAgICAgICB0ZW1wbGF0ZV9jb250ZXh0XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9saXN0KTtcbiAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICB9XTtcblxuICAgIH0pO1xuXG4gICAgcmV0dXJuICRkaXZfbGlzdDtcbiAgfVxuXG4gIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICByZXR1cm4gdGhpcy5zeW5jRm9ybSgkZm9ybXMpO1xuICB9XG5cbiAgc3luY01vZGVsVG9Gb3JtKCRmb3Jtcykge1xuICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgIH1cblxuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICBsZXQgaW5zdGFuY2UgPSBudWxsO1xuICAgICAgaWYocGsgPT09IC0xICYmIChzZWxmLnZhbHVlcy5wayA9PT0gdW5kZWZpbmVkIHx8IHNlbGYudmFsdWVzLnBrID09PSAtMSkpIHtcbiAgICAgICAgaW5zdGFuY2UgPSBzZWxmLnZhbHVlcztcbiAgICAgIH0gZWxzZSBpZihwayAhPT0gdW5kZWZpbmVkICYmIHBrICE9PSBudWxsKSB7XG4gICAgICAgIGluc3RhbmNlID0gc2VsZi5ieVBrKHBrKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9PSAnJykge1xuICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgIGlmKGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICBsZXQgY29udGFpbmVyID0gbmV3IERhdGFUcmFuc2ZlcigpO1xuICAgICAgICAgICAgICBjb250YWluZXIuaXRlbXMuYWRkKGluc3RhbmNlW25hbWVdKTtcbiAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkKGZvcm1faXRlbSkudmFsKGluc3RhbmNlW25hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgaWYgKCEkZm9ybXMgfHwgISRmb3Jtcy5oYXNDbGFzcyh0aGlzLmZvcm1faWQpKSB7XG4gICAgICAkZm9ybXMgPSAkKGAuJHt0aGlzLmZvcm1faWR9YCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgbGV0IGluc3RhbmNlcyA9IFtdO1xuXG4gICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgbGV0ICRmb3JtID0gJCh0aGlzKTtcbiAgICAgIGxldCBwayA9ICRmb3JtLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmb3JtX2l0ZW0ubmFtZTtcbiAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IHBhcnNlX2hpZGRlbl9pbnB1dHMoJChmb3JtX2l0ZW0pLnZhbCgpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IGZvcm1faXRlbS5jaGVja2VkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gJChmb3JtX2l0ZW0pLnZhbCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZXM7XG5cbiAgfVxuXG4gIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICBsZXQgJGRpdl9mb3JtID0gJCgnPGRpdj4nKTtcbiAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9nZXRGb3JtKG51bGwsICdjcmVhdGVfZm9ybScsIG51bGwsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2X2Zvcm07XG4gIH1cblxuICBlZGl0Rm9ybShwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2PicpO1xuXG4gICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gJGRpdl9mb3JtO1xuICB9XG5cbiAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgIH1cblxuICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2dldEZvcm0ocGssICduYW1lZF9mb3JtJywgZm9ybU5hbWUsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICB9KTtcblxuICAgIHJldHVybiAkZGl2X2Zvcm07XG4gIH1cblxuXG4gIF9nZXRGb3JtKHBrLCBldmVudF90eXBlLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpIHtcbiAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICBwayA9IC0xO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICBldmVudF90eXBlOiBldmVudF90eXBlLFxuICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgYXJnczoge1xuICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICBwazogcGssXG4gICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICBjb25zdCBjbGFzc05hbWUgPSBwayA9PT0gbnVsbCB8fCBwayA9PT0gLTEgPyAnY3JlYXRlJyA6ICdlZGl0JztcblxuICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKVxuICAgICAgICAuYWRkQ2xhc3MoYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke3RoaXMuZm9ybV9pZH1gKVxuICAgICAgICAuZGF0YSgnbW9kZWwnLCB0aGlzKVxuICAgICAgICAuZGF0YSgnbW9kZWxfcGsnLCBwaylcbiAgICAgICAgLmRhdGEoJ2Zvcm1fbmFtZScsIGZvcm1OYW1lKTtcbiAgICAgIGlmICgkZm9ybS5sZW5ndGggPiAwICYmICEkZm9ybVswXS5oYXNBdHRyaWJ1dGUoJ3NkY19zdWJtaXQnKSkge1xuICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgIH1cblxuICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICB9LCAocmVzKSA9PiB7XG4gICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgfV07XG4gIH1cblxuICBuZXcoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0ICRmb3JtID0gJCgnPGZvcm0+JykuYXBwZW5kKHRoaXMuY3JlYXRlRm9ybSgoKSA9PiB7XG4gICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSwgcmVqZWN0KSk7XG4gICAgfSlcbiAgfVxuXG4gIHNhdmUocGsgPSAtMSwgZnJvbU5hbWUgPSAnZWRpdF9mb3JtJykge1xuICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgIHBrID0gLTE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICBsZXQgZWxlbV9saXN0O1xuICAgICAgaWYgKHBrID4gLTEpIHtcbiAgICAgICAgZWxlbV9saXN0ID0gW3RoaXMuYnlQayhwayldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgIH1cbiAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcF9saXN0LnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZnJvbU5hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgIGRhdGE6IGVsZW0sXG4gICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgcmVzLmRhdGEuaW5zdGFuY2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSkgOiByZXMuZGF0YS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpO1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRlKHZhbHVlcyA9IHRoaXMudmFsdWVzKSB7XG4gICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fcmVhZEZpbGVzKHZhbHVlcykudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXM/LnBrID09PSAtMSkge1xuICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSlbMF07XG4gICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZGVsZXRlKHBrID0gLTEpIHtcbiAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICBwayA9IC0xO1xuICAgIH1cbiAgICBpZiAocGsgPT09IC0xKSBwayA9IHRoaXMudmFsdWVzPy5waztcbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICBldmVudF90eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICBwazogcGtcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaXNDb25uZWN0ZWQoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgfHwgIXRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10pIHtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICB9XVxuICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRoaXMuX2NoZWNrQ29ubmVjdGlvbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBbcmVzb2x2ZV9vcmlnaW4sIHJlamVjdF9vcmlnaW5dID0gdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXTtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXSA9IFtcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlX29yaWdpbigpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0X29yaWdpbigpO1xuICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnNvY2tldC5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgfTtcbiAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICBkZWxldGUgdGhpc1snc29ja2V0J107XG4gICAgfVxuICB9XG5cbiAgY2xlYW4oKSB7XG4gICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfcmVhZEZpbGVzKGVsZW0pIHtcbiAgICBsZXQgdG9fc29sdmUgPSBbXTtcbiAgICAxMDBcbiAgICBsZXQgZmlsZXMgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVsZW0pKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICgoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuXG4gICAgICAgICAgICAgIGxldCByZXN1bHQgPSBlLnRhcmdldC5yZXN1bHQ7XG4gICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgZmlsZV9uYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJfb2ZfY2h1bmtzOyArK2kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIGNodW5rOiByZXN1bHQuc2xpY2UoTUFYX0ZJTEVfVVBMT0FEICogaSwgTUFYX0ZJTEVfVVBMT0FEICogKGkgKyAxKSksXG4gICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyX29mX2NodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgZmlsZV9uYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50X3R5cGU6IHZhbHVlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodmFsdWUpO1xuICAgICAgICAgIH0pKGtleSwgdmFsdWUpO1xuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGZpbGVzXG4gICAgfSk7XG4gIH1cblxuICBfb25NZXNzYWdlKGUpIHtcbiAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICBpZiAoZGF0YS5pc19lcnJvcikge1xuICAgICAgaWYgKHRoaXMub3Blbl9yZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoJ3B1c2hFcnJvck1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgdGhpcy5fY2xvc2VPcGVuUmVxdWVzdCgnX2Nvbm5lY3RpbmdfcHJvY2VzcycpO1xuICAgICAgfSBlbHNlIGlmIChbJ2xvYWQnLCAnbmFtZWRfdmlldycsICdkZXRhaWxfdmlldyddLmluY2x1ZGVzKGRhdGEudHlwZSkpIHtcbiAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IHRoaXMuX3BhcnNlU2VydmVyUmVzKGpzb25fcmVzKTtcblxuICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdvbl91cGRhdGUnIHx8IGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICBsZXQgb2JqID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuICAgICAgICBsZXQgY2I7XG5cbiAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICBjYiA9IHRoaXMub25fY3JlYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiID0gdGhpcy5vbl91cGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjYihvYmopO1xuICAgICAgICBkYXRhLmFyZ3MuZGF0YSA9IG9iajtcblxuICAgICAgfVxuXG4gICAgICBsZXQgaW5zdGFuY2UgPSBkYXRhLmRhdGE/Lmluc3RhbmNlXG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMub3Blbl9yZXF1ZXN0KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgX2Nsb3NlT3BlblJlcXVlc3QoZXZlbnRfaWQpIHtcbiAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzLmZvckVhY2goeCA9PiB4KCkpO1xuICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cyA9IFtdO1xuICAgIH1cblxuICB9XG5cbiAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblxuICAgICAgY29uc3QgbW9kZWxfaWRlbnRpZmllciA9IGAke3RoaXMubW9kZWxfbmFtZX1gICsgKHRoaXMubW9kZWxfaWQgPiAwID8gYC8ke3RoaXMubW9kZWxfaWR9YCA6ICcnKTtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgPT09IFwiaHR0cHM6XCIpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3R9L3NkY193cy9tb2RlbC8ke21vZGVsX2lkZW50aWZpZXJ9YCk7XG4gICAgICB9XG5cblxuICAgICAgdGhpcy5zb2NrZXQub25tZXNzYWdlID0gdGhpcy5fb25NZXNzYWdlLmJpbmQodGhpcyk7XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBTREMgTW9kZWwgKCR7dGhpcy5tb2RlbF9uYW1lfSwgJHt0aGlzLm1vZGVsX2lkfSkgU29ja2V0IGNsb3NlZCB1bmV4cGVjdGVkbHlgKTtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgW19rZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLm9wZW5fcmVxdWVzdCkpIHtcbiAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9hdXRvX3JlY29ubmVjdCkge1xuICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zb2NrZXQub25lcnJvciA9IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzX2Nvbm5lY3RlZCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuXG4gICAgICB0aGlzLnNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICB9XG5cbiAgX2NoZWNrQ29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgIGV2ZW50X3R5cGU6ICdjb25uZWN0JyxcbiAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0pKTtcblxuICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgfSk7XG4gIH1cblxuICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgbGV0IHVwZGF0ZWQgPSBbXTtcbiAgICBmb3IgKGxldCBqc29uX2RhdGEgb2YgcmVzKSB7XG4gICAgICBjb25zdCBwayA9IGpzb25fZGF0YS5waztcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMuYnlQayhwayk7XG4gICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhqc29uX2RhdGEuZmllbGRzKSkge1xuICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgdlsnX19pc19zZGNfbW9kZWxfXyddKSB7XG4gICAgICAgICAgb2JqW2tdID0gbmV3IFN1Yk1vZGVsKHZbJ3BrJ10sIHZbJ21vZGVsJ10pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqW2tdID0gdjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGVkLnB1c2gob2JqKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgfVxufSJdLCJuYW1lcyI6WyJhcHAiLCJ0cmlnZ2VyIiwidXVpZHY0IiwiTUFYX0ZJTEVfVVBMT0FEIiwiU3ViTW9kZWwiLCJjb25zdHJ1Y3RvciIsInBrIiwibW9kZWwiLCJfbW9kZWwiLCJsb2FkIiwiY29udHJvbGxlciIsIlR5cGVFcnJvciIsIkFycmF5IiwibmV3TW9kZWwiLCJwa19faW4iLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwic2xpY2UiLCJOdW1iZXIiLCJiaW5kIiwic2V0Iiwib2xkVmFsIiwiaGFzT3duUHJvcGVydHkiLCJKU09OIiwicGFyc2UiLCJwYXJzZV9oaWRkZW5faW5wdXRzIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiTW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJfb25Ob09wZW5SZXF1ZXN0cyIsInZhbHVlc19saXN0IiwidmFsdWVzIiwiX2lzX2Nvbm5lY3RlZCIsIl9pc19jb25uZXRpbmdfcHJvY2VzcyIsIl9hdXRvX3JlY29ubmVjdCIsInNvY2tldCIsIm9wZW5fcmVxdWVzdCIsIm9uX3VwZGF0ZSIsIm9uX2NyZWF0ZSIsImZvcm1faWQiLCJTeW1ib2wiLCJpdGVyYXRvciIsImlkeCIsIm5leHQiLCJkb25lIiwiYnlQayIsImlzTmFOIiwiZWxlbSIsImZpbmQiLCJlbG0iLCJQcm94eSIsInB1c2giLCJmaWx0ZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpc0Nvbm5lY3RlZCIsInRoZW4iLCJpZCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2VuZCIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXZlbnRfdHlwZSIsImV2ZW50X2lkIiwiYXJncyIsImxpc3RWaWV3IiwiY2JSZXNvbHZlIiwiY2JSZWplY3QiLCJ0ZW1wbGF0ZUNvbnRleHQiLCJ2aWV3Iiwidmlld05hbWUiLCIkZGl2X2xpc3QiLCIkIiwidmlld19uYW1lIiwidGVtcGxhdGVfY29udGV4dCIsImRhdGEiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJoYXNBdHRyaWJ1dGUiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImZyb21OYW1lIiwiZWxlbV9saXN0IiwicF9saXN0IiwiZm9yRWFjaCIsIl9yZWFkRmlsZXMiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwiY29udGVudF90eXBlIiwib25lcnJvciIsInJlYWRBc0JpbmFyeVN0cmluZyIsIl9vbk1lc3NhZ2UiLCJpc19lcnJvciIsIl9jbG9zZU9wZW5SZXF1ZXN0IiwibXNnIiwiaGVhZGVyIiwiaW5jbHVkZXMiLCJqc29uX3JlcyIsIm9iaiIsImNiIiwibm9PcGVuUmVxdWVzdHMiLCJrZXlzIiwieCIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n\n}");
|
|
107
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ getModel: () => (/* binding */ getModel),\n/* harmony export */ registerModel: () => (/* binding */ registerModel)\n/* harmony export */ });\nconst registeredModels = {};\nfunction registerModel(name, classObj) {\n registeredModels[name] = classObj;\n}\nfunction getModel(name) {\n return registeredModels[name];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsTUFBTUEsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBRzNCLFNBQVNDLGFBQWFBLENBQUNDLElBQUksRUFBRUMsUUFBUSxFQUFFO0VBQ3JDSCxnQkFBZ0IsQ0FBQ0UsSUFBSSxDQUFDLEdBQUdDLFFBQVE7QUFDbkM7QUFFQSxTQUFTQyxRQUFRQSxDQUFDRixJQUFJLEVBQUU7RUFDdEIsT0FBT0YsZ0JBQWdCLENBQUNFLElBQUksQ0FBQztBQUMvQiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfc29ja2V0LmpzP2FkYmMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcmVnaXN0ZXJlZE1vZGVscyA9IHt9O1xuXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTW9kZWwobmFtZSwgY2xhc3NPYmopIHtcbiAgcmVnaXN0ZXJlZE1vZGVsc1tuYW1lXSA9IGNsYXNzT2JqO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RlbChuYW1lKSB7XG4gIHJldHVybiByZWdpc3RlcmVkTW9kZWxzW25hbWVdO1xufVxuXG5cbmV4cG9ydCB7XG4gIHJlZ2lzdGVyTW9kZWwsXG4gIGdldE1vZGVsLFxufSJdLCJuYW1lcyI6WyJyZWdpc3RlcmVkTW9kZWxzIiwicmVnaXN0ZXJNb2RlbCIsIm5hbWUiLCJjbGFzc09iaiIsImdldE1vZGVsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n\n}");
|
|
98
108
|
|
|
99
|
-
/***/ }
|
|
109
|
+
/***/ },
|
|
100
110
|
|
|
101
|
-
/***/ "./src/simpleDomControl/sdc_test_utils.js"
|
|
111
|
+
/***/ "./src/simpleDomControl/sdc_test_utils.js"
|
|
102
112
|
/*!************************************************!*\
|
|
103
113
|
!*** ./src/simpleDomControl/sdc_test_utils.js ***!
|
|
104
114
|
\************************************************/
|
|
105
|
-
|
|
115
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
106
116
|
|
|
107
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\n/* harmony export */ getCsrfToken: () => (/* binding */ getCsrfToken),\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n;\n\nlet spy = [],\n _originAjax;\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n spy.push(jest.spyOn($, 'ajax'));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n}\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== '') {\n const cookies = document.cookie.split(';');\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === name + '=') {\n return decodeURIComponent(cookie.substring(name.length + 1));\n }\n }\n }\n return '';\n}\n\n/**\n * Returns the CSRF token\n */\nfunction getCsrfToken() {\n return getCookie('csrftoken');\n}\n\n/**\n *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n if (!afterLifecycle) {\n return children;\n }\n const origenRefresh = children[0].onRefresh;\n const refreshSpy = jest.spyOn(children[0], 'onRefresh');\n return new Promise(resolve => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\n}\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = '') {\n setDefaults();\n const $body = $('body');\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $('<div></div>').append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQzJCLE1BQU0sQ0FBQ29CLFdBQVcsQ0FBQztFQUUxRHZCLEtBQUssQ0FBQ0csTUFBTSxDQUFDMEIsYUFBYSxDQUFDO0VBQzNCNUQsNkNBQUcsQ0FBQ21DLE9BQU8sR0FBRyxLQUFLO0VBQ25CbkMsNkNBQUcsQ0FBQ29DLFVBQVUsQ0FBQyxDQUFDO0VBQ2hCLE1BQU1wQyw2Q0FBRyxDQUFDcUMsUUFBUSxDQUFDLENBQUM7RUFDcEIsT0FBT3JDLDZDQUFHLENBQUM2RCxhQUFhLENBQUNQLFdBQVcsQ0FBQztBQUN6QyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcz9hNDM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGplc3QtZW52aXJvbm1lbnQganNkb21cbiAqL1xuO1xuXG5pbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcydcblxubGV0IHNweSA9IFtdLCBfb3JpZ2luQWpheDtcblxuZnVuY3Rpb24gc2V0RGVmYXVsdHMoKSB7XG4gICAgaWYgKCFqZXN0KSB0aHJvdyBuZXcgRXJyb3IoXCJKRVNUIGlzIG5vdCBkZWZpbmVkXCIpO1xuICAgIGlmIChzcHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5LnB1c2goamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKSk7XG4gICAgICAgIHNweVswXS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHJldHVybiBfb3JpZ2luQWpheChhKS50aGVuKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KS5jYXRjaCgoaHRtbCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuXG5mdW5jdGlvbiBnZXRDb29raWUobmFtZSkge1xuICAgIGxldCBjb29raWVWYWx1ZSA9IG51bGw7XG4gICAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09ICcnKSB7XG4gICAgICAgIGNvbnN0IGNvb2tpZXMgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb29raWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjb29raWUgPSBjb29raWVzW2ldLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIERvZXMgdGhpcyBjb29raWUgc3RyaW5nIGJlZ2luIHdpdGggdGhlIG5hbWUgd2Ugd2FudD9cbiAgICAgICAgICAgIGlmIChjb29raWUuc3Vic3RyaW5nKDAsIG5hbWUubGVuZ3RoICsgMSkgPT09IChuYW1lICsgJz0nKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZyhuYW1lLmxlbmd0aCArIDEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NSRiB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NyZlRva2VuKCkge1xuICAgIHJldHVybiBnZXRDb29raWUoJ2NzcmZ0b2tlbicpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gaHRtbHtzdHJpbmd9IEhUTUw6IC5cbiAqIEBwYXJhbSBhZnRlckxpZmVjeWNsZXtib29sfSBMaWZlY3ljbGUgTWV0aG9kZSAtPiBSZXJ1bnMgdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlIHJvb3QgY29udHJvbGxlciBoYXMgcnVuIHRoZSBcIm9uUmVmcmVzaFwiIG1ldGhvZGUuIFRoaXMgaXMgb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7QWJzdHJhY3RTREN9Pj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb250cm9sbGVyRnJvbVRlc3RIdG1sKGh0bWwsIGFmdGVyTGlmZWN5Y2xlID0gbnVsbCkge1xuICAgIHNldERlZmF1bHRzKCk7XG4gICAgY29uc3QgJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgYXBwLnVwZGF0ZUpxdWVyeSgpO1xuICAgICRib2R5LnNhZmVFbXB0eSgpLmFwcGVuZChodG1sKTtcbiAgICBhcHAuX2lzSW5pdCA9IGZhbHNlO1xuICAgIGFwcC5jbGVhbkNhY2hlKCk7XG4gICAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG5cblxuICAgIGxldCBjaGlsZHJlbiA9IGFwcC5yb290Q29udHJvbGxlci5pdGVyYXRlQWxsQ2hpbGRyZW4oKTtcblxuICAgIGlmICghYWZ0ZXJMaWZlY3ljbGUpIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2VuUmVmcmVzaCA9IGNoaWxkcmVuWzBdLm9uUmVmcmVzaDtcblxuICAgIGNvbnN0IHJlZnJlc2hTcHkgPSBqZXN0LnNweU9uKFxuICAgICAgICBjaGlsZHJlblswXSxcbiAgICAgICAgJ29uUmVmcmVzaCdcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHJlZnJlc2hTcHkubW9ja0ltcGxlbWVudGF0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlZnJlc2hTcHkubW9ja1Jlc3RvcmUoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG9yaWdlblJlZnJlc2guYXBwbHkoY2hpbGRyZW5bMF0sIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICByZXNvbHZlKGNoaWxkcmVuKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb250cm9sbGVyLiBUaGlzIGNvbnRyb2xsZXIgaGFzIGJlZW4gY3JlYXRlZCBieSB0aGUgdXNpbmcgdGhlIG5vcm1hbCBTREMgbGlmZSBjeWNsZS5cbiAqXG4gKiBAcGFyYW0gdGFnX25hbWV7c3RyaW5nfSBDb250cm9sbGVyIHRhZyBuYW1lIChzbmFrZS1jYXNlKVxuICogQHBhcmFtIGluaXRfYXJndW1lbnRze29iamVjdH0gb2JqZWN0OiBNb2NrZWRzIHRoZSB0YWcgZGF0YSBhcmd1bWVudHMuXG4gKiBAcGFyYW0gb3JpZ2VuX2h0bWx7c3RyaW5nfSBIVE1MOiBNb2NrZWQgY29udGVudCBvZiB0aGUgY29udGVudCBpbiB5b3VyIHRhcmdldCBIVE1MIGNvbnRhaW5lci5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHtBYnN0cmFjdFNEQ30+fVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0X2NvbnRyb2xsZXIodGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBzZXREZWZhdWx0cygpO1xuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsInNldERlZmF1bHRzIiwiamVzdCIsIkVycm9yIiwibGVuZ3RoIiwiJCIsImFqYXgiLCJiaW5kIiwicHVzaCIsInNweU9uIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiYSIsInRoZW4iLCJodG1sIiwiY2F0Y2giLCJnZXRDb29raWUiLCJuYW1lIiwiY29va2llVmFsdWUiLCJkb2N1bWVudCIsImNvb2tpZSIsImNvb2tpZXMiLCJzcGxpdCIsImkiLCJ0cmltIiwic3Vic3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZ2V0Q3NyZlRva2VuIiwiY29udHJvbGxlckZyb21UZXN0SHRtbCIsImFmdGVyTGlmZWN5Y2xlIiwiJGJvZHkiLCJ1cGRhdGVKcXVlcnkiLCJzYWZlRW1wdHkiLCJhcHBlbmQiLCJfaXNJbml0IiwiY2xlYW5DYWNoZSIsImluaXRfc2RjIiwiY2hpbGRyZW4iLCJyb290Q29udHJvbGxlciIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsIm9yaWdlblJlZnJlc2giLCJvblJlZnJlc2giLCJyZWZyZXNoU3B5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJtb2NrUmVzdG9yZSIsInJlcyIsImFwcGx5IiwiYXJndW1lbnRzIiwiZ2V0X2NvbnRyb2xsZXIiLCJ0YWdfbmFtZSIsImluaXRfYXJndW1lbnRzIiwib3JpZ2VuX2h0bWwiLCIkY29udHJvbGxlciIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsImRhdGEiLCIkZGl2Q29udGFpbmVyIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n\n}");
|
|
117
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ controllerFromTestHtml: () => (/* binding */ controllerFromTestHtml),\n/* harmony export */ getCsrfToken: () => (/* binding */ getCsrfToken),\n/* harmony export */ get_controller: () => (/* binding */ get_controller)\n/* harmony export */ });\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/**\n * @jest-environment jsdom\n */\n\nlet spy = [],\n _originAjax;\nfunction setDefaults() {\n if (!jest) throw new Error(\"JEST is not defined\");\n if (spy.length === 0) {\n _originAjax = $.ajax.bind($);\n spy.push(jest.spyOn($, \"ajax\"));\n spy[0].mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\n}\nfunction getCookie(name) {\n let cookieValue = null;\n if (document.cookie && document.cookie !== \"\") {\n const cookies = document.cookie.split(\";\");\n for (let i = 0; i < cookies.length; i++) {\n const cookie = cookies[i].trim();\n // Does this cookie string begin with the name we want?\n if (cookie.substring(0, name.length + 1) === name + \"=\") {\n return decodeURIComponent(cookie.substring(name.length + 1));\n }\n }\n }\n return \"\";\n}\n\n/**\n * Returns the CSRF token\n */\nfunction getCsrfToken() {\n return getCookie(\"csrftoken\");\n}\n\n/**\n *\n * @param html{string} HTML: .\n * @param afterLifecycle{bool} Lifecycle Methode -> Reruns the controller after the root controller has run the \"onRefresh\" methode. This is optional.\n * @returns {Promise<Array<{AbstractSDC}>>}\n */\nasync function controllerFromTestHtml(html, afterLifecycle = null) {\n setDefaults();\n const $body = $(\"body\");\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty().append(html);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n let children = _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.rootController.iterateAllChildren();\n if (!afterLifecycle) {\n return children;\n }\n const origenRefresh = children[0].onRefresh;\n const refreshSpy = jest.spyOn(children[0], \"onRefresh\");\n return new Promise(resolve => {\n refreshSpy.mockImplementation(function () {\n refreshSpy.mockRestore();\n const res = origenRefresh.apply(children[0], arguments);\n resolve(children);\n return res;\n });\n });\n}\n\n/**\n * Returns a controller. This controller has been created by the using the normal SDC life cycle.\n *\n * @param tag_name{string} Controller tag name (snake-case)\n * @param init_arguments{object} object: Mockeds the tag data arguments.\n * @param origen_html{string} HTML: Mocked content of the content in your target HTML container.\n * @returns {Promise<{AbstractSDC}>}\n */\nasync function get_controller(tag_name, init_arguments = {}, origen_html = \"\") {\n setDefaults();\n const $body = $(\"body\");\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.updateJquery();\n $body.safeEmpty();\n const $controller = $(`<${tag_name}>${origen_html}</${tag_name}>`);\n for (const [key, value] of Object.entries(init_arguments)) {\n $controller.data(key, value);\n }\n const $divContainer = $(\"<div></div>\").append($controller);\n $body.append($divContainer);\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app._isInit = false;\n _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.cleanCache();\n await _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.init_sdc();\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_0__.app.getController($controller);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QzJCLE1BQU0sQ0FBQ29CLFdBQVcsQ0FBQztFQUUxRHZCLEtBQUssQ0FBQ0csTUFBTSxDQUFDMEIsYUFBYSxDQUFDO0VBQzNCNUQsNkNBQUcsQ0FBQ21DLE9BQU8sR0FBRyxLQUFLO0VBQ25CbkMsNkNBQUcsQ0FBQ29DLFVBQVUsQ0FBQyxDQUFDO0VBQ2hCLE1BQU1wQyw2Q0FBRyxDQUFDcUMsUUFBUSxDQUFDLENBQUM7RUFDcEIsT0FBT3JDLDZDQUFHLENBQUM2RCxhQUFhLENBQUNQLFdBQVcsQ0FBQztBQUN2QyIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdGVzdF91dGlscy5qcz9hNDM5Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGplc3QtZW52aXJvbm1lbnQganNkb21cbiAqL1xuaW1wb3J0IHsgYXBwIH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcblxubGV0IHNweSA9IFtdLFxuICBfb3JpZ2luQWpheDtcblxuZnVuY3Rpb24gc2V0RGVmYXVsdHMoKSB7XG4gIGlmICghamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgaWYgKHNweS5sZW5ndGggPT09IDApIHtcbiAgICBfb3JpZ2luQWpheCA9ICQuYWpheC5iaW5kKCQpO1xuXG4gICAgc3B5LnB1c2goamVzdC5zcHlPbigkLCBcImFqYXhcIikpO1xuICAgIHNweVswXS5tb2NrSW1wbGVtZW50YXRpb24oZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBfb3JpZ2luQWpheChhKVxuICAgICAgICAudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGh0bWwpID0+IHtcbiAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHtcbiAgbGV0IGNvb2tpZVZhbHVlID0gbnVsbDtcbiAgaWYgKGRvY3VtZW50LmNvb2tpZSAmJiBkb2N1bWVudC5jb29raWUgIT09IFwiXCIpIHtcbiAgICBjb25zdCBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0udHJpbSgpO1xuICAgICAgLy8gRG9lcyB0aGlzIGNvb2tpZSBzdHJpbmcgYmVnaW4gd2l0aCB0aGUgbmFtZSB3ZSB3YW50P1xuICAgICAgaWYgKGNvb2tpZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggKyAxKSA9PT0gbmFtZSArIFwiPVwiKSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY29va2llLnN1YnN0cmluZyhuYW1lLmxlbmd0aCArIDEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgQ1NSRiB0b2tlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3NyZlRva2VuKCkge1xuICByZXR1cm4gZ2V0Q29va2llKFwiY3NyZnRva2VuXCIpO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0gaHRtbHtzdHJpbmd9IEhUTUw6IC5cbiAqIEBwYXJhbSBhZnRlckxpZmVjeWNsZXtib29sfSBMaWZlY3ljbGUgTWV0aG9kZSAtPiBSZXJ1bnMgdGhlIGNvbnRyb2xsZXIgYWZ0ZXIgdGhlIHJvb3QgY29udHJvbGxlciBoYXMgcnVuIHRoZSBcIm9uUmVmcmVzaFwiIG1ldGhvZGUuIFRoaXMgaXMgb3B0aW9uYWwuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxBcnJheTx7QWJzdHJhY3RTREN9Pj59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb250cm9sbGVyRnJvbVRlc3RIdG1sKGh0bWwsIGFmdGVyTGlmZWN5Y2xlID0gbnVsbCkge1xuICBzZXREZWZhdWx0cygpO1xuICBjb25zdCAkYm9keSA9ICQoXCJib2R5XCIpO1xuICBhcHAudXBkYXRlSnF1ZXJ5KCk7XG4gICRib2R5LnNhZmVFbXB0eSgpLmFwcGVuZChodG1sKTtcbiAgYXBwLl9pc0luaXQgPSBmYWxzZTtcbiAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG5cbiAgbGV0IGNoaWxkcmVuID0gYXBwLnJvb3RDb250cm9sbGVyLml0ZXJhdGVBbGxDaGlsZHJlbigpO1xuXG4gIGlmICghYWZ0ZXJMaWZlY3ljbGUpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICBjb25zdCBvcmlnZW5SZWZyZXNoID0gY2hpbGRyZW5bMF0ub25SZWZyZXNoO1xuXG4gIGNvbnN0IHJlZnJlc2hTcHkgPSBqZXN0LnNweU9uKGNoaWxkcmVuWzBdLCBcIm9uUmVmcmVzaFwiKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICByZWZyZXNoU3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICByZWZyZXNoU3B5Lm1vY2tSZXN0b3JlKCk7XG4gICAgICBjb25zdCByZXMgPSBvcmlnZW5SZWZyZXNoLmFwcGx5KGNoaWxkcmVuWzBdLCBhcmd1bWVudHMpO1xuICAgICAgcmVzb2x2ZShjaGlsZHJlbik7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29udHJvbGxlci4gVGhpcyBjb250cm9sbGVyIGhhcyBiZWVuIGNyZWF0ZWQgYnkgdGhlIHVzaW5nIHRoZSBub3JtYWwgU0RDIGxpZmUgY3ljbGUuXG4gKlxuICogQHBhcmFtIHRhZ19uYW1le3N0cmluZ30gQ29udHJvbGxlciB0YWcgbmFtZSAoc25ha2UtY2FzZSlcbiAqIEBwYXJhbSBpbml0X2FyZ3VtZW50c3tvYmplY3R9IG9iamVjdDogTW9ja2VkcyB0aGUgdGFnIGRhdGEgYXJndW1lbnRzLlxuICogQHBhcmFtIG9yaWdlbl9odG1se3N0cmluZ30gSFRNTDogTW9ja2VkIGNvbnRlbnQgb2YgdGhlIGNvbnRlbnQgaW4geW91ciB0YXJnZXQgSFRNTCBjb250YWluZXIuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx7QWJzdHJhY3RTREN9Pn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldF9jb250cm9sbGVyKFxuICB0YWdfbmFtZSxcbiAgaW5pdF9hcmd1bWVudHMgPSB7fSxcbiAgb3JpZ2VuX2h0bWwgPSBcIlwiLFxuKSB7XG4gIHNldERlZmF1bHRzKCk7XG4gIGNvbnN0ICRib2R5ID0gJChcImJvZHlcIik7XG4gIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAkYm9keS5zYWZlRW1wdHkoKTtcblxuICBjb25zdCAkY29udHJvbGxlciA9ICQoYDwke3RhZ19uYW1lfT4ke29yaWdlbl9odG1sfTwvJHt0YWdfbmFtZX0+YCk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICRjb250cm9sbGVyLmRhdGEoa2V5LCB2YWx1ZSk7XG4gIH1cbiAgY29uc3QgJGRpdkNvbnRhaW5lciA9ICQoXCI8ZGl2PjwvZGl2PlwiKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICRib2R5LmFwcGVuZCgkZGl2Q29udGFpbmVyKTtcbiAgYXBwLl9pc0luaXQgPSBmYWxzZTtcbiAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgYXdhaXQgYXBwLmluaXRfc2RjKCk7XG4gIHJldHVybiBhcHAuZ2V0Q29udHJvbGxlcigkY29udHJvbGxlcik7XG59XG4iXSwibmFtZXMiOlsiYXBwIiwic3B5IiwiX29yaWdpbkFqYXgiLCJzZXREZWZhdWx0cyIsImplc3QiLCJFcnJvciIsImxlbmd0aCIsIiQiLCJhamF4IiwiYmluZCIsInB1c2giLCJzcHlPbiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImEiLCJ0aGVuIiwiaHRtbCIsImNhdGNoIiwiZ2V0Q29va2llIiwibmFtZSIsImNvb2tpZVZhbHVlIiwiZG9jdW1lbnQiLCJjb29raWUiLCJjb29raWVzIiwic3BsaXQiLCJpIiwidHJpbSIsInN1YnN0cmluZyIsImRlY29kZVVSSUNvbXBvbmVudCIsImdldENzcmZUb2tlbiIsImNvbnRyb2xsZXJGcm9tVGVzdEh0bWwiLCJhZnRlckxpZmVjeWNsZSIsIiRib2R5IiwidXBkYXRlSnF1ZXJ5Iiwic2FmZUVtcHR5IiwiYXBwZW5kIiwiX2lzSW5pdCIsImNsZWFuQ2FjaGUiLCJpbml0X3NkYyIsImNoaWxkcmVuIiwicm9vdENvbnRyb2xsZXIiLCJpdGVyYXRlQWxsQ2hpbGRyZW4iLCJvcmlnZW5SZWZyZXNoIiwib25SZWZyZXNoIiwicmVmcmVzaFNweSIsIlByb21pc2UiLCJyZXNvbHZlIiwibW9ja1Jlc3RvcmUiLCJyZXMiLCJhcHBseSIsImFyZ3VtZW50cyIsImdldF9jb250cm9sbGVyIiwidGFnX25hbWUiLCJpbml0X2FyZ3VtZW50cyIsIm9yaWdlbl9odG1sIiwiJGNvbnRyb2xsZXIiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJkYXRhIiwiJGRpdkNvbnRhaW5lciIsImdldENvbnRyb2xsZXIiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n\n}");
|
|
108
118
|
|
|
109
|
-
/***/ }
|
|
119
|
+
/***/ },
|
|
110
120
|
|
|
111
|
-
/***/ "./src/simpleDomControl/sdc_utils.js"
|
|
121
|
+
/***/ "./src/simpleDomControl/sdc_utils.js"
|
|
112
122
|
/*!*******************************************!*\
|
|
113
123
|
!*** ./src/simpleDomControl/sdc_utils.js ***!
|
|
114
124
|
\*******************************************/
|
|
115
|
-
|
|
125
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
116
126
|
|
|
117
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /(?<=^|,\\s?)[^=\\s,]+/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/mg;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $('body');\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, '');\n var result = fnstr.slice(fnstr.indexOf('(') + 1, fnstr.indexOf(')')).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== '') {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || 'POST',\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener('progress', progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $('.progress-container');\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += '%';\n $progressContainer.find('.progress-bar').css({\n 'width': percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== 'string') {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== 'undefined') {\n if (typeof controller[paramElement] === 'function') {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === 'true';\n } else if (paramElement === 'undefined') {\n return undefined;\n } else if (paramElement.toLowerCase() === 'none') {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').remove();\n $form.find('.non-field-errors').remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $('<div>').append($resForm);\n $form.find('.has-error').removeClass('has-error').find('.alert-danger').safeRemove();\n $form.find('.non-field-errors').safeRemove();\n let $file_container = $resForm.find('input[type=file]').parent();\n $form.find('input[type=file]').parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find('.non-field-errors').insertAfter($form.find('.hidden-form-fields')).length === 0;\n $resForm.find('.has-error').each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data('auto-id');\n let $errorField = $form.find('.form-group.' + className);\n $errorField.addClass('has-error');\n $errorField.find('.form-input-container').append($resErrorField.find('.alert-danger'));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QyxDQUFDO0VBQzFGLENBQUMsQ0FBQztFQUVGLE9BQU9rQyxVQUFVO0FBQ3JCO0FBRU8sU0FBU0ssY0FBY0EsQ0FBQ0MsVUFBVSxFQUFFUixLQUFLLEVBQUVTLFdBQVcsRUFBRTtFQUMzRCxJQUFJQyxTQUFTLEdBQUdGLFVBQVUsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLENBQUM7RUFDNUMsSUFBSVosS0FBSyxHQUFHVSxTQUFTLEVBQUU7SUFDbkJGLFVBQVUsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQ0UsRUFBRSxDQUFDYixLQUFLLENBQUMsQ0FBQ2MsTUFBTSxDQUFDTCxXQUFXLENBQUM7RUFDdkQsQ0FBQyxNQUFNO0lBQ0hELFVBQVUsQ0FBQ2IsTUFBTSxDQUFDYyxXQUFXLENBQUM7RUFDbEM7RUFDQSxPQUFPLElBQUk7QUFDZiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanM/ZDBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlZmVyZW5jZSB0byB0aGUgSFRNTCBib2R5LlxuICogQHR5cGUgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fVxuICogQHByaXZhdGVcbiAqL1xubGV0IF8kYm9keTtcbmNvbnN0IGFyZ19uYW1lc19yZWcgPSAvKD88PV58LFxccz8pW149XFxzLF0rL2c7XG5jb25zdCBjb21tZW5kX3JlZyA9IC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZztcblxuLyoqXG4gKiBnZXRCb2R5IHJldHVybnMgdGhlICRib2R5IGpRdWVyeSBvYmplY3QuXG4gKlxuICogQHJldHVybnMgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fSAtIGJvZHkgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICBpZiAoIV8kYm9keSkge1xuICAgICAgICBfJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF8kYm9keTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGZuc3RyID0gZnVuYy50b1N0cmluZygpLnJlcGxhY2UoY29tbWVuZF9yZWcsICcnKTtcbiAgICB2YXIgcmVzdWx0ID0gZm5zdHIuc2xpY2UoZm5zdHIuaW5kZXhPZignKCcpICsgMSwgZm5zdHIuaW5kZXhPZignKScpKS5tYXRjaChhcmdfbmFtZXNfcmVnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBwcm9taXNlRHVtbXlGYWN0b3J5IGdlbmVyYXRlcyBhIHNpbXBsZSBwcm9taXNlIHdoaWNoIHJldHVybnMgaW5zdGFudGx5LlxuICogQHJldHVybiB7UHJvbWlzZX0gd2luZG93LnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRHVtbXlGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1RhZ05hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGxldHRlciA9PiBgLSR7bGV0dGVyLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCBudW1iZXIgPT4gYC0ke251bWJlcn1gKTtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gICAgcmV0dXJuIHN0cjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ05hbWVUb1JlYWRhYmxlTmFtZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS4vZywgbGV0dGVyID0+IGAgJHtsZXR0ZXJbMV0udG9VcHBlckNhc2UoKX1gKS5yZXBsYWNlKC9eLi9nLCBsZXR0ZXIgPT4gYCR7bGV0dGVyLnRvVXBwZXJDYXNlKCl9YCk7XG4gICAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgY29weVByb3BzID0gKHRhcmdldENsYXNzLCBzb3VyY2VDbGFzcykgPT4ge1xuICAgIGxldCBzb3VyY2UgPSBzb3VyY2VDbGFzcztcbiAgICBsZXQgcHJvcE5hbWVzVGFyZ2V0ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0Q2xhc3MucHJvdG90eXBlKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpKVxuICAgIHdoaWxlIChzb3VyY2UubmFtZSAhPT0gJycpIHtcbiAgICAgICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlLnByb3RvdHlwZSlcbiAgICAgICAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UucHJvdG90eXBlKSlcbiAgICAgICAgICAgIC5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AubWF0Y2goL14oPzpjb25zdHJ1Y3Rvcnxwcm90b3R5cGV8YXJndW1lbnRzfGNhbGxlcnxuYW1lfGJpbmR8Y2FsbHxhcHBseXx0b1N0cmluZ3xsZW5ndGgpJC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIXByb3BOYW1lc1RhcmdldC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wTmFtZXNUYXJnZXQucHVzaChwcm9wKTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldENsYXNzLnByb3RvdHlwZSwgcHJvcCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UucHJvdG90eXBlLCBwcm9wKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHNvdXJjZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpO1xuICAgIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHt0eXBlb2YgQWJzdHJhY3RTREN9IGJhc2VDbGFzc1xuICogQHBhcmFtIHt0eXBlb2YgQWJzdHJhY3RTREN9IG1peGluc1xuICogQHJldHVybnMge3R5cGVvZiBBYnN0cmFjdFNEQ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFnaWxlQWdncmVnYXRpb24oYmFzZUNsYXNzLCAuLi5taXhpbnMpIHtcblxuICAgIGxldCBiYXNlID0ge1xuICAgICAgICBbYmFzZUNsYXNzLm5hbWVdOiBjbGFzcyB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5fYXJncykge1xuICAgICAgICAgICAgICAgIGxldCBfbWl4aW5zID0ge307XG4gICAgICAgICAgICAgICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdNaXhpbjtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAobmV3TWl4aW4gPSBuZXcgbWl4aW4oKSkpO1xuICAgICAgICAgICAgICAgICAgICBuZXdNaXhpbi5fdGFnTmFtZSA9IG1peGluLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWl4aW4uX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBfbWl4aW5zW21peGluLm5hbWVdID0gbmV3TWl4aW47XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG5ldyBiYXNlQ2xhc3MoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWl4aW5zID0gX21peGlucztcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICBzdGF0aWMgZ2V0IG5hbWUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VDbGFzcy5uYW1lO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0aWMgY2xhc3NOYW1lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5hbWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0IG1peGlucygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWl4aW5zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVtiYXNlQ2xhc3MubmFtZV07XG5cbiAgICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhc2U7XG5cbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gICAgLy8gdGhlc2UgSFRUUCBtZXRob2RzIGRvIG5vdCByZXF1aXJlIENTUkYgcHJvdGVjdGlvblxuICAgIHJldHVybiAoL14oR0VUfEhFQUR8T1BUSU9OU3xUUkFDRSkkLy50ZXN0KG1ldGhvZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCwgIC8vU2VydmVyIHNjcmlwdCB0byBwcm9jZXNzIGRhdGFcbiAgICAgICAgdHlwZTogbWV0aG9kIHx8ICdQT1NUJyxcbiAgICAgICAgeGhyOiBmdW5jdGlvbiAoKSB7ICAvLyBDdXN0b20gWE1MSHR0cFJlcXVlc3RcbiAgICAgICAgICAgIHZhciBteVhociA9ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgICAgICAgaWYgKG15WGhyLnVwbG9hZCkgeyAvLyBDaGVjayBpZiB1cGxvYWQgcHJvcGVydHkgZXhpc3RzXG4gICAgICAgICAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uLCBmYWxzZSk7IC8vIEZvciBoYW5kbGluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15WGhyO1xuICAgICAgICB9LFxuICAgICAgICAvL0Zvcm0gZGF0YVxuICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgLy9PcHRpb25zIHRvIHRlbGwgalF1ZXJ5IG5vdCB0byBwcm9jZXNzIGRhdGEgb3Igd29ycnkgYWJvdXQgY29udGVudC10eXBlLlxuICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbiAoeGhyLCBzZXR0aW5ncykge1xuICAgICAgICAgICAgaWYgKCFjc3JmU2FmZU1ldGhvZChzZXR0aW5ncy50eXBlKSAmJiAhdGhpcy5jcm9zc0RvbWFpbikge1xuICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiWC1DU1JGVG9rZW5cIiwgd2luZG93LkNTUkZfVE9LRU4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbihlKSB7XG4gICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgICB2YXIgcGVyY2VudFZhbCA9IE1hdGgucm91bmQoKGUubG9hZGVkIC8gZS50b3RhbCkgKiAxMDApO1xuICAgICAgICB2YXIgJHByb2dyZXNzQ29udGFpbmVyID0gJCgnLnByb2dyZXNzLWNvbnRhaW5lcicpO1xuICAgICAgICBpZiAocGVyY2VudFZhbCA9PT0gMTAwKSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuaGlkZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLnNob3coKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBlcmNlbnRWYWwgKz0gJyUnO1xuXG4gICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5maW5kKCcucHJvZ3Jlc3MtYmFyJykuY3NzKHsnd2lkdGgnOiBwZXJjZW50VmFsfSkudGV4dChwZXJjZW50VmFsKTtcbiAgICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyhwYXJhbUVsZW1lbnQsIGNvbnRyb2xsZXIgPSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbUVsZW1lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBwYXJhbUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRyb2xsZXIgJiYgdHlwZW9mIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0uYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdO1xuICAgIH1cblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuICAgIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50ID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50LnN1YnN0cigxLCBwYXJhbUVsZW1lbnQubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcbiAgICApO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVycm9yc0luRm9ybSgkZm9ybSkge1xuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICAgJHJlc0Zvcm0gPSAkKCc8ZGl2PicpLmFwcGVuZCgkcmVzRm9ybSk7XG5cbiAgICAkZm9ybS5maW5kKCcuaGFzLWVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpLmZpbmQoJy5hbGVydC1kYW5nZXInKS5zYWZlUmVtb3ZlKCk7XG4gICAgJGZvcm0uZmluZCgnLm5vbi1maWVsZC1lcnJvcnMnKS5zYWZlUmVtb3ZlKCk7XG4gICAgbGV0ICRmaWxlX2NvbnRhaW5lciA9ICRyZXNGb3JtLmZpbmQoJ2lucHV0W3R5cGU9ZmlsZV0nKS5wYXJlbnQoKTtcbiAgICAkZm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCkuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgJCh0aGlzKS5yZXBsYWNlV2l0aCgkZmlsZV9jb250YWluZXJbaW5kZXhdKTtcbiAgICB9KTtcblxuICAgIGxldCBoYXNOb0Vycm9yID0gJHJlc0Zvcm0uZmluZCgnLm5vbi1maWVsZC1lcnJvcnMnKS5pbnNlcnRBZnRlcigkZm9ybS5maW5kKCcuaGlkZGVuLWZvcm0tZmllbGRzJykpLmxlbmd0aCA9PT0gMDtcbiAgICAkcmVzRm9ybS5maW5kKCcuaGFzLWVycm9yJykuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc05vRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgbGV0ICRyZXNFcnJvckZpZWxkID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9ICRyZXNFcnJvckZpZWxkLmRhdGEoJ2F1dG8taWQnKTtcbiAgICAgICAgbGV0ICRlcnJvckZpZWxkID0gJGZvcm0uZmluZCgnLmZvcm0tZ3JvdXAuJyArIGNsYXNzTmFtZSk7XG4gICAgICAgICRlcnJvckZpZWxkLmFkZENsYXNzKCdoYXMtZXJyb3InKTtcbiAgICAgICAgJGVycm9yRmllbGQuZmluZCgnLmZvcm0taW5wdXQtY29udGFpbmVyJykuYXBwZW5kKCRyZXNFcnJvckZpZWxkLmZpbmQoJy5hbGVydC1kYW5nZXInKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaGFzTm9FcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpxdWVyeUluc2VydEF0KCRjb250YWluZXIsIGluZGV4LCAkbmV3RWxlbWVudCkge1xuICAgIGxldCBsYXN0SW5kZXggPSAkY29udGFpbmVyLmNoaWxkcmVuKCkuc2l6ZSgpO1xuICAgIGlmIChpbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAkY29udGFpbmVyLmNoaWxkcmVuKCkuZXEoaW5kZXgpLmJlZm9yZSgkbmV3RWxlbWVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoJG5ld0VsZW1lbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cbiJdLCJuYW1lcyI6WyJfJGJvZHkiLCJhcmdfbmFtZXNfcmVnIiwiY29tbWVuZF9yZWciLCJnZXRCb2R5IiwiJCIsImdldFBhcmFtc05hbWVPZkZ1bmN0aW9uIiwiZnVuYyIsImZuc3RyIiwidG9TdHJpbmciLCJyZXBsYWNlIiwicmVzdWx0Iiwic2xpY2UiLCJpbmRleE9mIiwibWF0Y2giLCJwcm9taXNlRHVtbXlGYWN0b3J5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYW1lbENhc2VUb1RhZ05hbWUiLCJzdHIiLCJsZXR0ZXIiLCJ0b0xvd2VyQ2FzZSIsIm51bWJlciIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRvVXBwZXJDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiY29weVByb3BzIiwidGFyZ2V0Q2xhc3MiLCJzb3VyY2VDbGFzcyIsInNvdXJjZSIsInByb3BOYW1lc1RhcmdldCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm90b3R5cGUiLCJjb25jYXQiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJuYW1lIiwiZm9yRWFjaCIsInByb3AiLCJpbmNsdWRlcyIsInB1c2giLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldFByb3RvdHlwZU9mIiwiYWdpbGVBZ2dyZWdhdGlvbiIsImJhc2VDbGFzcyIsIm1peGlucyIsImJhc2UiLCJjb25zdHJ1Y3RvciIsIl9hcmdzIiwiX21peGlucyIsIm1peGluIiwibmV3TWl4aW4iLCJhc3NpZ24iLCJfdGFnTmFtZSIsIl9pc01peGluIiwiY2xhc3NOYW1lIiwiY3NyZlNhZmVNZXRob2QiLCJtZXRob2QiLCJ0ZXN0IiwidXBsb2FkRmlsZUZvcm1EYXRhIiwiZm9ybURhdGEiLCJ1cmwiLCJhamF4IiwidHlwZSIsInhociIsIm15WGhyIiwiYWpheFNldHRpbmdzIiwidXBsb2FkIiwiYWRkRXZlbnRMaXN0ZW5lciIsInByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbiIsImRhdGEiLCJjYWNoZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic2V0dGluZ3MiLCJjcm9zc0RvbWFpbiIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aW5kb3ciLCJDU1JGX1RPS0VOIiwiZSIsImxlbmd0aENvbXB1dGFibGUiLCJwZXJjZW50VmFsIiwiTWF0aCIsInJvdW5kIiwibG9hZGVkIiwidG90YWwiLCIkcHJvZ3Jlc3NDb250YWluZXIiLCJoaWRlIiwic2hvdyIsImZpbmQiLCJjc3MiLCJ0ZXh0IiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwicGFyYW1FbGVtZW50IiwiY29udHJvbGxlciIsImJpbmQiLCJpc0Zsb2F0UmVnIiwiaXNJbnRSZWciLCJpc0Jvb2xSZWciLCJpc1N0cmluZ1JlZyIsInVuZGVmaW5lZCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0ciIsImxlbmd0aCIsInV1aWR2NCIsImMiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJVaW50OEFycmF5IiwiY2xlYXJFcnJvcnNJbkZvcm0iLCIkZm9ybSIsInJlbW92ZUNsYXNzIiwicmVtb3ZlIiwic2V0RXJyb3JzSW5Gb3JtIiwiJHJlc0Zvcm0iLCJhcHBlbmQiLCJzYWZlUmVtb3ZlIiwiJGZpbGVfY29udGFpbmVyIiwicGFyZW50IiwiZWFjaCIsImluZGV4IiwicmVwbGFjZVdpdGgiLCJoYXNOb0Vycm9yIiwiaW5zZXJ0QWZ0ZXIiLCIkcmVzRXJyb3JGaWVsZCIsIiRlcnJvckZpZWxkIiwiYWRkQ2xhc3MiLCJqcXVlcnlJbnNlcnRBdCIsIiRjb250YWluZXIiLCIkbmV3RWxlbWVudCIsImxhc3RJbmRleCIsImNoaWxkcmVuIiwic2l6ZSIsImVxIiwiYmVmb3JlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n\n}");
|
|
127
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ agileAggregation: () => (/* binding */ agileAggregation),\n/* harmony export */ camelCaseToTagName: () => (/* binding */ camelCaseToTagName),\n/* harmony export */ checkIfParamNumberBoolOrString: () => (/* binding */ checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* binding */ clearErrorsInForm),\n/* harmony export */ getBody: () => (/* binding */ getBody),\n/* harmony export */ getParamsNameOfFunction: () => (/* binding */ getParamsNameOfFunction),\n/* harmony export */ getValueFromField: () => (/* binding */ getValueFromField),\n/* harmony export */ jqueryInsertAt: () => (/* binding */ jqueryInsertAt),\n/* harmony export */ promiseDummyFactory: () => (/* binding */ promiseDummyFactory),\n/* harmony export */ setErrorsInForm: () => (/* binding */ setErrorsInForm),\n/* harmony export */ setValueInField: () => (/* binding */ setValueInField),\n/* harmony export */ tagNameToCamelCase: () => (/* binding */ tagNameToCamelCase),\n/* harmony export */ tagNameToReadableName: () => (/* binding */ tagNameToReadableName),\n/* harmony export */ uploadFileFormData: () => (/* binding */ uploadFileFormData),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4)\n/* harmony export */ });\n/* harmony import */ var _index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../index.js */ \"./src/index.js\");\n\n\n/**\n * Reference to the HTML body.\n * @type {*|jQuery|HTMLElement}\n * @private\n */\nlet _$body;\nconst arg_names_reg = /(?<=^|,\\s?)[^=\\s,]+/g;\nconst commend_reg = /((\\/\\/.*$)|(\\/\\*[\\s\\S]*?\\*\\/))/gm;\n\n/**\n * getBody returns the $body jQuery object.\n *\n * @returns {*|jQuery|HTMLElement} - body reference.\n */\nfunction getBody() {\n if (!_$body) {\n _$body = $(\"body\");\n }\n return _$body;\n}\n\n/**\n *\n * @param {function} func\n * @returns {RegExpMatchArray|*[]}\n */\nfunction getParamsNameOfFunction(func) {\n var fnstr = func.toString().replace(commend_reg, \"\");\n var result = fnstr.slice(fnstr.indexOf(\"(\") + 1, fnstr.indexOf(\")\")).match(arg_names_reg);\n if (!result) {\n return [];\n }\n return result;\n}\n\n/**\n * promiseDummyFactory generates a simple promise which returns instantly.\n * @return {Promise} window.utils\n */\nfunction promiseDummyFactory() {\n return new Promise(function (resolve) {\n resolve();\n });\n}\nfunction camelCaseToTagName(str) {\n str = str.replace(/[A-Z]/g, letter => `-${letter.toLowerCase()}`);\n str = str.replace(/[0-9]+/g, number => `-${number}`);\n return str.replace(/^[-]/g, ``);\n}\nfunction tagNameToCamelCase(str) {\n str = str.replace(/-./g, letter => `${letter[1].toUpperCase()}`);\n return str;\n}\nfunction tagNameToReadableName(str) {\n str = str.replace(/-./g, letter => ` ${letter[1].toUpperCase()}`).replace(/^./g, letter => `${letter.toUpperCase()}`);\n return str;\n}\nconst copyProps = (targetClass, sourceClass) => {\n let source = sourceClass;\n let propNamesTarget = Object.getOwnPropertyNames(targetClass.prototype).concat(Object.getOwnPropertySymbols(targetClass.prototype));\n while (source.name !== \"\") {\n Object.getOwnPropertyNames(source.prototype).concat(Object.getOwnPropertySymbols(source.prototype)).forEach(prop => {\n if (prop.match(/^(?:constructor|prototype|arguments|caller|name|bind|call|apply|toString|length)$/)) {\n return;\n }\n if (!propNamesTarget.includes(prop)) {\n propNamesTarget.push(prop);\n Object.defineProperty(targetClass.prototype, prop, Object.getOwnPropertyDescriptor(source.prototype, prop));\n }\n });\n source = Object.getPrototypeOf(source);\n }\n};\n\n/**\n *\n * @param {typeof AbstractSDC} baseClass\n * @param {typeof AbstractSDC} mixins\n * @returns {typeof AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = {\n [baseClass.name]: class {\n constructor(..._args) {\n let _mixins = {};\n mixins.forEach(mixin => {\n let newMixin;\n Object.assign(this, newMixin = new mixin());\n newMixin._tagName = mixin.prototype._tagName;\n newMixin._isMixin = true;\n _mixins[mixin.name] = newMixin;\n });\n Object.assign(this, new baseClass());\n this._mixins = _mixins;\n }\n static get name() {\n return baseClass.name;\n }\n static className() {\n return this.name;\n }\n get mixins() {\n return this._mixins;\n }\n }\n }[baseClass.name];\n copyProps(base, baseClass);\n mixins.forEach(mixin => {\n copyProps(base, mixin);\n });\n return base;\n}\nfunction csrfSafeMethod(method) {\n // these HTTP methods do not require CSRF protection\n return /^(GET|HEAD|OPTIONS|TRACE)$/.test(method);\n}\nfunction uploadFileFormData(formData, url, method) {\n return $.ajax({\n url: url,\n //Server script to process data\n type: method || \"POST\",\n xhr: function () {\n // Custom XMLHttpRequest\n var myXhr = $.ajaxSettings.xhr();\n if (myXhr.upload) {\n // Check if upload property exists\n myXhr.upload.addEventListener(\"progress\", progressHandlingFunction, false); // For handling the progress of the upload\n }\n return myXhr;\n },\n //Form data\n data: formData,\n //Options to tell jQuery not to process data or worry about content-type.\n cache: false,\n contentType: false,\n processData: false,\n beforeSend: function (xhr, settings) {\n if (!csrfSafeMethod(settings.type) && !this.crossDomain) {\n xhr.setRequestHeader(\"X-CSRFToken\", window.CSRF_TOKEN);\n }\n }\n });\n}\nfunction progressHandlingFunction(e) {\n if (e.lengthComputable) {\n var percentVal = Math.round(e.loaded / e.total * 100);\n var $progressContainer = $(\".progress-container\");\n if (percentVal === 100) {\n $progressContainer.hide();\n } else {\n $progressContainer.show();\n }\n percentVal += \"%\";\n $progressContainer.find(\".progress-bar\").css({\n width: percentVal\n }).text(percentVal);\n }\n}\nfunction checkIfParamNumberBoolOrString(paramElement, controller = null) {\n if (typeof paramElement !== \"string\") {\n return paramElement;\n }\n if (controller && typeof controller[paramElement] !== \"undefined\") {\n if (typeof controller[paramElement] === \"function\") {\n return controller[paramElement].bind(controller);\n }\n return controller[paramElement];\n }\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (paramElement.match(isBoolReg)) {\n return paramElement === \"true\";\n } else if (paramElement === \"undefined\") {\n return undefined;\n } else if (paramElement.toLowerCase() === \"none\") {\n return null;\n } else if (paramElement.match(isIntReg)) {\n return parseInt(paramElement);\n } else if (paramElement.match(isFloatReg)) {\n return parseFloat(paramElement);\n } else if (paramElement.match(isStringReg)) {\n return paramElement.substr(1, paramElement.length - 2);\n }\n return paramElement;\n}\nfunction uuidv4() {\n return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n}\nfunction clearErrorsInForm($form) {\n $form.find(\".has-error\").removeClass(\"has-error\").find(\".alert-danger\").remove();\n $form.find(\".non-field-errors\").remove();\n}\nfunction setErrorsInForm($form, $resForm) {\n $resForm = $(\"<div>\").append($resForm);\n $form.find(\".has-error\").removeClass(\"has-error\").find(\".alert-danger\").safeRemove();\n $form.find(\".non-field-errors\").safeRemove();\n let $file_container = $resForm.find(\"input[type=file]\").parent();\n $form.find(\"input[type=file]\").parent().each(function (index) {\n $(this).replaceWith($file_container[index]);\n });\n let hasNoError = $resForm.find(\".non-field-errors\").insertAfter($form.find(\".hidden-form-fields\")).length === 0;\n $resForm.find(\".has-error\").each(function () {\n hasNoError = false;\n let $resErrorField = $(this);\n let className = $resErrorField.data(\"auto-id\");\n let $errorField = $form.find(\".form-group.\" + className);\n $errorField.addClass(\"has-error\");\n $errorField.find(\".form-input-container\").append($resErrorField.find(\".alert-danger\"));\n });\n return hasNoError;\n}\nfunction jqueryInsertAt($container, index, $newElement) {\n let lastIndex = $container.children().size();\n if (index < lastIndex) {\n $container.children().eq(index).before($newElement);\n } else {\n $container.append($newElement);\n }\n return this;\n}\n\n/**\n * Parse hidden input values back into the closest JavaScript primitive.\n *\n * Hidden inputs are often used to preserve values that were originally booleans,\n * numbers or quoted strings. This keeps form-to-model sync from turning\n * everything into plain strings.\n *\n * @param {string} value\n * @returns {*}\n */\nfunction parseHiddenInputs(value) {\n let isFloatReg = /^-?\\d+\\.?\\d+$/;\n let isIntReg = /^-?\\d+$/;\n let isBoolReg = /^(true|false)$/;\n let isStringReg = /^(['][^']*['])|([\"][^\"]*[\"])$/;\n if (value.toLowerCase().match(isBoolReg)) {\n return value.toLowerCase() === \"true\";\n } else if (value === \"undefined\") {\n return undefined;\n } else if (value.toLowerCase() === \"none\") {\n return null;\n } else if (value.match(isIntReg)) {\n return parseInt(value, 10);\n } else if (value.match(isFloatReg)) {\n return parseFloat(value);\n } else if (value.match(isStringReg)) {\n return value.substring(1, value.length - 1);\n }\n return value;\n}\nfunction getValueFromField(formItem) {\n let {\n type,\n name\n } = formItem;\n if (name && name !== \"\") {\n if (type === \"hidden\") {\n return parseHiddenInputs($(formItem).val());\n }\n if (type === \"checkbox\") {\n return formItem.checked;\n }\n if (type === \"file\") {\n return formItem.files[0];\n }\n return $(formItem).val();\n }\n return null;\n}\nfunction setValueInField(formItem, value) {\n let {\n type,\n name\n } = formItem;\n if (name && name !== \"\") {\n if (type === \"checkbox\") {\n formItem.checked = value;\n } else if (type === \"file\") {\n if (value instanceof File) {\n if (typeof DataTransfer !== \"undefined\") {\n let container = new DataTransfer();\n container.items.add(value);\n formItem.files = container;\n }\n }\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcModel) {\n $(formItem).val(value.id);\n } else if (value instanceof _index_js__WEBPACK_IMPORTED_MODULE_0__.SdcQuerySet) {\n $(formItem).val(`[${value.getIds().join(',')}]`);\n } else {\n $(formItem).val(value);\n }\n }\n return null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrRDs7QUFFbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlFLE1BQU07QUFDVixNQUFNQyxhQUFhLEdBQUcsc0JBQXNCO0FBQzVDLE1BQU1DLFdBQVcsR0FBRyxrQ0FBa0M7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxPQUFPQSxDQUFBLEVBQUc7RUFDeEIsSUFBSSxDQUFDSCxNQUFNLEVBQUU7SUFDWEEsTUFBTSxHQUFHSSxDQUFDLENBQUMsTUFBTSxDQUFDO0VBQ3BCO0VBRUEsT0FBT0osTUFBTTtBQUNmOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSyx1QkFBdUJBLENBQUNDLElBQUksRUFBRTtFQUM1QyxJQUFJQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDUCxXQUFXLEVBQUUsRUFBRSxDQUFDO0VBQ3BELElBQUlRLE1BQU0sR0FBR0gsS0FBSyxDQUNmSSxLQUFLLENBQUNKLEtBQUssQ0FBQ0ssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsS0FBSyxDQUFDSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDakRDLEtBQUssQ0FBQ1osYUFBYSxDQUFDO0VBQ3ZCLElBQUksQ0FBQ1MsTUFBTSxFQUFFO0lBQ1gsT0FBTyxFQUFFO0VBQ1g7RUFFQSxPQUFPQSxNQUFNO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxtQkFBbUJBLENBQUEsRUFBRztFQUNwQyxPQUFPLElBQUlDLE9BQU8sQ0FBQyxVQUFVQyxPQUFPLEVBQUU7SUFDcENBLE9BQU8sQ0FBQyxDQUFDO0VBQ1gsQ0FBQyxDQUFDO0FBQ0o7QUFFTyxTQUFTQyxrQkFBa0JBLENBQUNDLEdBQUcsRUFBRTtFQUN0Q0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxRQUFRLEVBQUdVLE1BQU0sSUFBSyxJQUFJQSxNQUFNLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNuRUYsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxTQUFTLEVBQUdZLE1BQU0sSUFBSyxJQUFJQSxNQUFNLEVBQUUsQ0FBQztFQUN0RCxPQUFPSCxHQUFHLENBQUNULE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ2pDO0FBRU8sU0FBU2Esa0JBQWtCQSxDQUFDSixHQUFHLEVBQUU7RUFDdENBLEdBQUcsR0FBR0EsR0FBRyxDQUFDVCxPQUFPLENBQUMsS0FBSyxFQUFHVSxNQUFNLElBQUssR0FBR0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDbEUsT0FBT0wsR0FBRztBQUNaO0FBRU8sU0FBU00scUJBQXFCQSxDQUFDTixHQUFHLEVBQUU7RUFDekNBLEdBQUcsR0FBR0EsR0FBRyxDQUNOVCxPQUFPLENBQUMsS0FBSyxFQUFHVSxNQUFNLElBQUssSUFBSUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDekRkLE9BQU8sQ0FBQyxLQUFLLEVBQUdVLE1BQU0sSUFBSyxHQUFHQSxNQUFNLENBQUNJLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUN4RCxPQUFPTCxHQUFHO0FBQ1o7QUFFQSxNQUFNTyxTQUFTLEdBQUdBLENBQUNDLFdBQVcsRUFBRUMsV0FBVyxLQUFLO0VBQzlDLElBQUlDLE1BQU0sR0FBR0QsV0FBVztFQUN4QixJQUFJRSxlQUFlLEdBQUdDLE1BQU0sQ0FBQ0MsbUJBQW1CLENBQzlDTCxXQUFXLENBQUNNLFNBQ2QsQ0FBQyxDQUFDQyxNQUFNLENBQUNILE1BQU0sQ0FBQ0kscUJBQXFCLENBQUNSLFdBQVcsQ0FBQ00sU0FBUyxDQUFDLENBQUM7RUFDN0QsT0FBT0osTUFBTSxDQUFDTyxJQUFJLEtBQUssRUFBRSxFQUFFO0lBQ3pCTCxNQUFNLENBQUNDLG1CQUFtQixDQUFDSCxNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUN6Q0MsTUFBTSxDQUFDSCxNQUFNLENBQUNJLHFCQUFxQixDQUFDTixNQUFNLENBQUNJLFNBQVMsQ0FBQyxDQUFDLENBQ3RESSxPQUFPLENBQUVDLElBQUksSUFBSztNQUNqQixJQUNFQSxJQUFJLENBQUN4QixLQUFLLENBQ1IsbUZBQ0YsQ0FBQyxFQUNEO1FBQ0E7TUFDRjtNQUVBLElBQUksQ0FBQ2dCLGVBQWUsQ0FBQ1MsUUFBUSxDQUFDRCxJQUFJLENBQUMsRUFBRTtRQUNuQ1IsZUFBZSxDQUFDVSxJQUFJLENBQUNGLElBQUksQ0FBQztRQUMxQlAsTUFBTSxDQUFDVSxjQUFjLENBQ25CZCxXQUFXLENBQUNNLFNBQVMsRUFDckJLLElBQUksRUFDSlAsTUFBTSxDQUFDVyx3QkFBd0IsQ0FBQ2IsTUFBTSxDQUFDSSxTQUFTLEVBQUVLLElBQUksQ0FDeEQsQ0FBQztNQUNIO0lBQ0YsQ0FBQyxDQUFDO0lBQ0pULE1BQU0sR0FBR0UsTUFBTSxDQUFDWSxjQUFjLENBQUNkLE1BQU0sQ0FBQztFQUN4QztBQUNGLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2UsZ0JBQWdCQSxDQUFDQyxTQUFTLEVBQUUsR0FBR0MsTUFBTSxFQUFFO0VBQ3JELElBQUlDLElBQUksR0FBRztJQUNULENBQUNGLFNBQVMsQ0FBQ1QsSUFBSSxHQUFHLE1BQU07TUFDdEJZLFdBQVdBLENBQUMsR0FBR0MsS0FBSyxFQUFFO1FBQ3BCLElBQUlDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEJKLE1BQU0sQ0FBQ1QsT0FBTyxDQUFFYyxLQUFLLElBQUs7VUFDeEIsSUFBSUMsUUFBUTtVQUNackIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBR0QsUUFBUSxHQUFHLElBQUlELEtBQUssQ0FBQyxDQUFFLENBQUM7VUFDN0NDLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHSCxLQUFLLENBQUNsQixTQUFTLENBQUNxQixRQUFRO1VBQzVDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJO1VBQ3hCTCxPQUFPLENBQUNDLEtBQUssQ0FBQ2YsSUFBSSxDQUFDLEdBQUdnQixRQUFRO1FBQ2hDLENBQUMsQ0FBQztRQUVGckIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJUixTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQ0ssT0FBTyxHQUFHQSxPQUFPO01BQ3hCO01BRUEsV0FBV2QsSUFBSUEsQ0FBQSxFQUFHO1FBQ2hCLE9BQU9TLFNBQVMsQ0FBQ1QsSUFBSTtNQUN2QjtNQUVBLE9BQU9vQixTQUFTQSxDQUFBLEVBQUc7UUFDakIsT0FBTyxJQUFJLENBQUNwQixJQUFJO01BQ2xCO01BRUEsSUFBSVUsTUFBTUEsQ0FBQSxFQUFHO1FBQ1gsT0FBTyxJQUFJLENBQUNJLE9BQU87TUFDckI7SUFDRjtFQUNGLENBQUMsQ0FBQ0wsU0FBUyxDQUFDVCxJQUFJLENBQUM7RUFFakJWLFNBQVMsQ0FBQ3FCLElBQUksRUFBRUYsU0FBUyxDQUFDO0VBRTFCQyxNQUFNLENBQUNULE9BQU8sQ0FBRWMsS0FBSyxJQUFLO0lBQ3hCekIsU0FBUyxDQUFDcUIsSUFBSSxFQUFFSSxLQUFLLENBQUM7RUFDeEIsQ0FBQyxDQUFDO0VBRUYsT0FBT0osSUFBSTtBQUNiO0FBRUEsU0FBU1UsY0FBY0EsQ0FBQ0MsTUFBTSxFQUFFO0VBQzlCO0VBQ0EsT0FBTyw0QkFBNEIsQ0FBQ0MsSUFBSSxDQUFDRCxNQUFNLENBQUM7QUFDbEQ7QUFFTyxTQUFTRSxrQkFBa0JBLENBQUNDLFFBQVEsRUFBRUMsR0FBRyxFQUFFSixNQUFNLEVBQUU7RUFDeEQsT0FBT3JELENBQUMsQ0FBQzBELElBQUksQ0FBQztJQUNaRCxHQUFHLEVBQUVBLEdBQUc7SUFBRTtJQUNWRSxJQUFJLEVBQUVOLE1BQU0sSUFBSSxNQUFNO0lBQ3RCTyxHQUFHLEVBQUUsU0FBQUEsQ0FBQSxFQUFZO01BQ2Y7TUFDQSxJQUFJQyxLQUFLLEdBQUc3RCxDQUFDLENBQUM4RCxZQUFZLENBQUNGLEdBQUcsQ0FBQyxDQUFDO01BQ2hDLElBQUlDLEtBQUssQ0FBQ0UsTUFBTSxFQUFFO1FBQ2hCO1FBQ0FGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDQyxnQkFBZ0IsQ0FDM0IsVUFBVSxFQUNWQyx3QkFBd0IsRUFDeEIsS0FDRixDQUFDLENBQUMsQ0FBQztNQUNMO01BQ0EsT0FBT0osS0FBSztJQUNkLENBQUM7SUFDRDtJQUNBSyxJQUFJLEVBQUVWLFFBQVE7SUFDZDtJQUNBVyxLQUFLLEVBQUUsS0FBSztJQUNaQyxXQUFXLEVBQUUsS0FBSztJQUNsQkMsV0FBVyxFQUFFLEtBQUs7SUFDbEJDLFVBQVUsRUFBRSxTQUFBQSxDQUFVVixHQUFHLEVBQUVXLFFBQVEsRUFBRTtNQUNuQyxJQUFJLENBQUNuQixjQUFjLENBQUNtQixRQUFRLENBQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDYSxXQUFXLEVBQUU7UUFDdkRaLEdBQUcsQ0FBQ2EsZ0JBQWdCLENBQUMsYUFBYSxFQUFFQyxNQUFNLENBQUNDLFVBQVUsQ0FBQztNQUN4RDtJQUNGO0VBQ0YsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxTQUFTVix3QkFBd0JBLENBQUNXLENBQUMsRUFBRTtFQUNuQyxJQUFJQSxDQUFDLENBQUNDLGdCQUFnQixFQUFFO0lBQ3RCLElBQUlDLFVBQVUsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUVKLENBQUMsQ0FBQ0ssTUFBTSxHQUFHTCxDQUFDLENBQUNNLEtBQUssR0FBSSxHQUFHLENBQUM7SUFDdkQsSUFBSUMsa0JBQWtCLEdBQUduRixDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDakQsSUFBSThFLFVBQVUsS0FBSyxHQUFHLEVBQUU7TUFDdEJLLGtCQUFrQixDQUFDQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDLE1BQU07TUFDTEQsa0JBQWtCLENBQUNFLElBQUksQ0FBQyxDQUFDO0lBQzNCO0lBRUFQLFVBQVUsSUFBSSxHQUFHO0lBRWpCSyxrQkFBa0IsQ0FDZkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUNyQkMsR0FBRyxDQUFDO01BQUNDLEtBQUssRUFBRVY7SUFBVSxDQUFDLENBQUMsQ0FDeEJXLElBQUksQ0FBQ1gsVUFBVSxDQUFDO0VBQ3JCO0FBQ0Y7QUFFTyxTQUFTWSw4QkFBOEJBLENBQzVDQyxZQUFZLEVBQ1pDLFVBQVUsR0FBRyxJQUFJLEVBQ2pCO0VBQ0EsSUFBSSxPQUFPRCxZQUFZLEtBQUssUUFBUSxFQUFFO0lBQ3BDLE9BQU9BLFlBQVk7RUFDckI7RUFFQSxJQUFJQyxVQUFVLElBQUksT0FBT0EsVUFBVSxDQUFDRCxZQUFZLENBQUMsS0FBSyxXQUFXLEVBQUU7SUFDakUsSUFBSSxPQUFPQyxVQUFVLENBQUNELFlBQVksQ0FBQyxLQUFLLFVBQVUsRUFBRTtNQUNsRCxPQUFPQyxVQUFVLENBQUNELFlBQVksQ0FBQyxDQUFDRSxJQUFJLENBQUNELFVBQVUsQ0FBQztJQUNsRDtJQUNBLE9BQU9BLFVBQVUsQ0FBQ0QsWUFBWSxDQUFDO0VBQ2pDO0VBRUEsSUFBSUcsVUFBVSxHQUFHLGVBQWU7RUFDaEMsSUFBSUMsUUFBUSxHQUFHLFNBQVM7RUFDeEIsSUFBSUMsU0FBUyxHQUFHLGdCQUFnQjtFQUNoQyxJQUFJQyxXQUFXLEdBQUcsK0JBQStCO0VBRWpELElBQUlOLFlBQVksQ0FBQ2xGLEtBQUssQ0FBQ3VGLFNBQVMsQ0FBQyxFQUFFO0lBQ2pDLE9BQU9MLFlBQVksS0FBSyxNQUFNO0VBQ2hDLENBQUMsTUFBTSxJQUFJQSxZQUFZLEtBQUssV0FBVyxFQUFFO0lBQ3ZDLE9BQU9PLFNBQVM7RUFDbEIsQ0FBQyxNQUFNLElBQUlQLFlBQVksQ0FBQzNFLFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTSxFQUFFO0lBQ2hELE9BQU8sSUFBSTtFQUNiLENBQUMsTUFBTSxJQUFJMkUsWUFBWSxDQUFDbEYsS0FBSyxDQUFDc0YsUUFBUSxDQUFDLEVBQUU7SUFDdkMsT0FBT0ksUUFBUSxDQUFDUixZQUFZLENBQUM7RUFDL0IsQ0FBQyxNQUFNLElBQUlBLFlBQVksQ0FBQ2xGLEtBQUssQ0FBQ3FGLFVBQVUsQ0FBQyxFQUFFO0lBQ3pDLE9BQU9NLFVBQVUsQ0FBQ1QsWUFBWSxDQUFDO0VBQ2pDLENBQUMsTUFBTSxJQUFJQSxZQUFZLENBQUNsRixLQUFLLENBQUN3RixXQUFXLENBQUMsRUFBRTtJQUMxQyxPQUFPTixZQUFZLENBQUNVLE1BQU0sQ0FBQyxDQUFDLEVBQUVWLFlBQVksQ0FBQ1csTUFBTSxHQUFHLENBQUMsQ0FBQztFQUN4RDtFQUVBLE9BQU9YLFlBQVk7QUFDckI7QUFFTyxTQUFTWSxNQUFNQSxDQUFBLEVBQUc7RUFDdkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUVsRyxPQUFPLENBQUMsUUFBUSxFQUFHbUcsQ0FBQyxJQUM5RCxDQUNFQSxDQUFDLEdBQ0FDLE1BQU0sQ0FBQ0MsZUFBZSxDQUFDLElBQUlDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFJLEVBQUUsSUFBS0gsQ0FBQyxHQUFHLENBQUksRUFDaEVwRyxRQUFRLENBQUMsRUFBRSxDQUNmLENBQUM7QUFDSDtBQUVPLFNBQVN3RyxpQkFBaUJBLENBQUNDLEtBQUssRUFBRTtFQUN2Q0EsS0FBSyxDQUNGdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUNsQndCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FDeEJ4QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3JCeUIsTUFBTSxDQUFDLENBQUM7RUFDWEYsS0FBSyxDQUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUN5QixNQUFNLENBQUMsQ0FBQztBQUMxQztBQUVPLFNBQVNDLGVBQWVBLENBQUNILEtBQUssRUFBRUksUUFBUSxFQUFFO0VBQy9DQSxRQUFRLEdBQUdqSCxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUNrSCxNQUFNLENBQUNELFFBQVEsQ0FBQztFQUV0Q0osS0FBSyxDQUNGdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUNsQndCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FDeEJ4QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQ3JCNkIsVUFBVSxDQUFDLENBQUM7RUFDZk4sS0FBSyxDQUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM2QixVQUFVLENBQUMsQ0FBQztFQUM1QyxJQUFJQyxlQUFlLEdBQUdILFFBQVEsQ0FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDK0IsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FDRnZCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUN4QitCLE1BQU0sQ0FBQyxDQUFDLENBQ1JDLElBQUksQ0FBQyxVQUFVQyxLQUFLLEVBQUU7SUFDckJ2SCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUN3SCxXQUFXLENBQUNKLGVBQWUsQ0FBQ0csS0FBSyxDQUFDLENBQUM7RUFDN0MsQ0FBQyxDQUFDO0VBRUosSUFBSUUsVUFBVSxHQUNaUixRQUFRLENBQ0wzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FDekJvQyxXQUFXLENBQUNiLEtBQUssQ0FBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNnQixNQUFNLEtBQUssQ0FBQztFQUNoRVcsUUFBUSxDQUFDM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDZ0MsSUFBSSxDQUFDLFlBQVk7SUFDM0NHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzNILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSW1ELFNBQVMsR0FBR3dFLGNBQWMsQ0FBQ3pELElBQUksQ0FBQyxTQUFTLENBQUM7SUFDOUMsSUFBSTBELFdBQVcsR0FBR2YsS0FBSyxDQUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBR25DLFNBQVMsQ0FBQztJQUN4RHlFLFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNqQ0QsV0FBVyxDQUNSdEMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQzdCNEIsTUFBTSxDQUFDUyxjQUFjLENBQUNyQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7RUFDakQsQ0FBQyxDQUFDO0VBRUYsT0FBT21DLFVBQVU7QUFDbkI7QUFFTyxTQUFTSyxjQUFjQSxDQUFDQyxVQUFVLEVBQUVSLEtBQUssRUFBRVMsV0FBVyxFQUFFO0VBQzdELElBQUlDLFNBQVMsR0FBR0YsVUFBVSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsQ0FBQztFQUM1QyxJQUFJWixLQUFLLEdBQUdVLFNBQVMsRUFBRTtJQUNyQkYsVUFBVSxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDRSxFQUFFLENBQUNiLEtBQUssQ0FBQyxDQUFDYyxNQUFNLENBQUNMLFdBQVcsQ0FBQztFQUNyRCxDQUFDLE1BQU07SUFDTEQsVUFBVSxDQUFDYixNQUFNLENBQUNjLFdBQVcsQ0FBQztFQUNoQztFQUNBLE9BQU8sSUFBSTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU00saUJBQWlCQSxDQUFDQyxLQUFLLEVBQUU7RUFDaEMsSUFBSXpDLFVBQVUsR0FBRyxlQUFlO0VBQ2hDLElBQUlDLFFBQVEsR0FBRyxTQUFTO0VBQ3hCLElBQUlDLFNBQVMsR0FBRyxnQkFBZ0I7RUFDaEMsSUFBSUMsV0FBVyxHQUFHLCtCQUErQjtFQUVqRCxJQUFJc0MsS0FBSyxDQUFDdkgsV0FBVyxDQUFDLENBQUMsQ0FBQ1AsS0FBSyxDQUFDdUYsU0FBUyxDQUFDLEVBQUU7SUFDeEMsT0FBT3VDLEtBQUssQ0FBQ3ZILFdBQVcsQ0FBQyxDQUFDLEtBQUssTUFBTTtFQUN2QyxDQUFDLE1BQU0sSUFBSXVILEtBQUssS0FBSyxXQUFXLEVBQUU7SUFDaEMsT0FBT3JDLFNBQVM7RUFDbEIsQ0FBQyxNQUFNLElBQUlxQyxLQUFLLENBQUN2SCxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUN6QyxPQUFPLElBQUk7RUFDYixDQUFDLE1BQU0sSUFBSXVILEtBQUssQ0FBQzlILEtBQUssQ0FBQ3NGLFFBQVEsQ0FBQyxFQUFFO0lBQ2hDLE9BQU9JLFFBQVEsQ0FBQ29DLEtBQUssRUFBRSxFQUFFLENBQUM7RUFDNUIsQ0FBQyxNQUFNLElBQUlBLEtBQUssQ0FBQzlILEtBQUssQ0FBQ3FGLFVBQVUsQ0FBQyxFQUFFO0lBQ2xDLE9BQU9NLFVBQVUsQ0FBQ21DLEtBQUssQ0FBQztFQUMxQixDQUFDLE1BQU0sSUFBSUEsS0FBSyxDQUFDOUgsS0FBSyxDQUFDd0YsV0FBVyxDQUFDLEVBQUU7SUFDbkMsT0FBT3NDLEtBQUssQ0FBQ0MsU0FBUyxDQUFDLENBQUMsRUFBRUQsS0FBSyxDQUFDakMsTUFBTSxHQUFHLENBQUMsQ0FBQztFQUM3QztFQUNBLE9BQU9pQyxLQUFLO0FBQ2Q7QUFFTyxTQUFTRSxpQkFBaUJBLENBQUNDLFFBQVEsRUFBRTtFQUMxQyxJQUFJO0lBQUMvRSxJQUFJO0lBQUU1QjtFQUFJLENBQUMsR0FBRzJHLFFBQVE7RUFDM0IsSUFBSTNHLElBQUksSUFBSUEsSUFBSSxLQUFLLEVBQUUsRUFBRTtJQUN2QixJQUFJNEIsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUNyQixPQUFPMkUsaUJBQWlCLENBQUN0SSxDQUFDLENBQUMwSSxRQUFRLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM3QztJQUVBLElBQUloRixJQUFJLEtBQUssVUFBVSxFQUFFO01BQ3ZCLE9BQU8rRSxRQUFRLENBQUNFLE9BQU87SUFDekI7SUFFQSxJQUFJakYsSUFBSSxLQUFLLE1BQU0sRUFBRTtNQUNuQixPQUFPK0UsUUFBUSxDQUFDRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFCO0lBRUEsT0FBTzdJLENBQUMsQ0FBQzBJLFFBQVEsQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQztFQUMxQjtFQUNBLE9BQU8sSUFBSTtBQUNiO0FBR08sU0FBU0csZUFBZUEsQ0FBQ0osUUFBUSxFQUFFSCxLQUFLLEVBQUU7RUFDL0MsSUFBSTtJQUFDNUUsSUFBSTtJQUFFNUI7RUFBSSxDQUFDLEdBQUcyRyxRQUFRO0VBQzNCLElBQUkzRyxJQUFJLElBQUlBLElBQUksS0FBSyxFQUFFLEVBQUU7SUFFdkIsSUFBSTRCLElBQUksS0FBSyxVQUFVLEVBQUU7TUFDdkIrRSxRQUFRLENBQUNFLE9BQU8sR0FBR0wsS0FBSztJQUMxQixDQUFDLE1BQU0sSUFBSTVFLElBQUksS0FBSyxNQUFNLEVBQUU7TUFDMUIsSUFBSTRFLEtBQUssWUFBWVEsSUFBSSxFQUFFO1FBQ3pCLElBQUksT0FBT0MsWUFBWSxLQUFLLFdBQVcsRUFBRTtVQUN2QyxJQUFJQyxTQUFTLEdBQUcsSUFBSUQsWUFBWSxDQUFDLENBQUM7VUFDbENDLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDQyxHQUFHLENBQUNaLEtBQUssQ0FBQztVQUMxQkcsUUFBUSxDQUFDRyxLQUFLLEdBQUdJLFNBQVM7UUFDNUI7TUFDRjtJQUNGLENBQUMsTUFBTSxJQUFJVixLQUFLLFlBQVk3SSwrQ0FBUSxFQUFFO01BQ3BDTSxDQUFDLENBQUMwSSxRQUFRLENBQUMsQ0FBQ0MsR0FBRyxDQUFDSixLQUFLLENBQUNhLEVBQUUsQ0FBQztJQUMzQixDQUFDLE1BQU0sSUFBSWIsS0FBSyxZQUFZNUksa0RBQVcsRUFBRTtNQUN2Q0ssQ0FBQyxDQUFDMEksUUFBUSxDQUFDLENBQUNDLEdBQUcsQ0FBQyxJQUFJSixLQUFLLENBQUNjLE1BQU0sQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ2xELENBQUMsTUFBTTtNQUNMdEosQ0FBQyxDQUFDMEksUUFBUSxDQUFDLENBQUNDLEdBQUcsQ0FBQ0osS0FBSyxDQUFDO0lBQ3hCO0VBQ0Y7RUFDQSxPQUFPLElBQUk7QUFDYiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanM/ZDBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NkY01vZGVsLCBTZGNRdWVyeVNldH0gZnJvbSBcIi4uL2luZGV4LmpzXCI7XG5cbi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSBIVE1MIGJvZHkuXG4gKiBAdHlwZSB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgXyRib2R5O1xuY29uc3QgYXJnX25hbWVzX3JlZyA9IC8oPzw9XnwsXFxzPylbXj1cXHMsXSsvZztcbmNvbnN0IGNvbW1lbmRfcmVnID0gLygoXFwvXFwvLiokKXwoXFwvXFwqW1xcc1xcU10qP1xcKlxcLykpL2dtO1xuXG4vKipcbiAqIGdldEJvZHkgcmV0dXJucyB0aGUgJGJvZHkgalF1ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9IC0gYm9keSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICBpZiAoIV8kYm9keSkge1xuICAgIF8kYm9keSA9ICQoXCJib2R5XCIpO1xuICB9XG5cbiAgcmV0dXJuIF8kYm9keTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZnVuY1xuICogQHJldHVybnMge1JlZ0V4cE1hdGNoQXJyYXl8KltdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24oZnVuYykge1xuICB2YXIgZm5zdHIgPSBmdW5jLnRvU3RyaW5nKCkucmVwbGFjZShjb21tZW5kX3JlZywgXCJcIik7XG4gIHZhciByZXN1bHQgPSBmbnN0clxuICAgIC5zbGljZShmbnN0ci5pbmRleE9mKFwiKFwiKSArIDEsIGZuc3RyLmluZGV4T2YoXCIpXCIpKVxuICAgIC5tYXRjaChhcmdfbmFtZXNfcmVnKTtcbiAgaWYgKCFyZXN1bHQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHByb21pc2VEdW1teUZhY3RvcnkgZ2VuZXJhdGVzIGEgc2ltcGxlIHByb21pc2Ugd2hpY2ggcmV0dXJucyBpbnN0YW50bHkuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB3aW5kb3cudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VEdW1teUZhY3RvcnkoKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgIHJlc29sdmUoKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1RhZ05hbWUoc3RyKSB7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9bQS1aXS9nLCAobGV0dGVyKSA9PiBgLSR7bGV0dGVyLnRvTG93ZXJDYXNlKCl9YCk7XG4gIHN0ciA9IHN0ci5yZXBsYWNlKC9bMC05XSsvZywgKG51bWJlcikgPT4gYC0ke251bWJlcn1gKTtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eWy1dL2csIGBgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ05hbWVUb0NhbWVsQ2FzZShzdHIpIHtcbiAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIChsZXR0ZXIpID0+IGAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApO1xuICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHN0cikge1xuICBzdHIgPSBzdHJcbiAgICAucmVwbGFjZSgvLS4vZywgKGxldHRlcikgPT4gYCAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApXG4gICAgLnJlcGxhY2UoL14uL2csIChsZXR0ZXIpID0+IGAke2xldHRlci50b1VwcGVyQ2FzZSgpfWApO1xuICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBjb3B5UHJvcHMgPSAodGFyZ2V0Q2xhc3MsIHNvdXJjZUNsYXNzKSA9PiB7XG4gIGxldCBzb3VyY2UgPSBzb3VyY2VDbGFzcztcbiAgbGV0IHByb3BOYW1lc1RhcmdldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFxuICAgIHRhcmdldENsYXNzLnByb3RvdHlwZSxcbiAgKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpKTtcbiAgd2hpbGUgKHNvdXJjZS5uYW1lICE9PSBcIlwiKSB7XG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlLnByb3RvdHlwZSlcbiAgICAgIC5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UucHJvdG90eXBlKSlcbiAgICAgIC5mb3JFYWNoKChwcm9wKSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9wLm1hdGNoKFxuICAgICAgICAgICAgL14oPzpjb25zdHJ1Y3Rvcnxwcm90b3R5cGV8YXJndW1lbnRzfGNhbGxlcnxuYW1lfGJpbmR8Y2FsbHxhcHBseXx0b1N0cmluZ3xsZW5ndGgpJC8sXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXByb3BOYW1lc1RhcmdldC5pbmNsdWRlcyhwcm9wKSkge1xuICAgICAgICAgIHByb3BOYW1lc1RhcmdldC5wdXNoKHByb3ApO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgICAgIHRhcmdldENsYXNzLnByb3RvdHlwZSxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZS5wcm90b3R5cGUsIHByb3ApLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHNvdXJjZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpO1xuICB9XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gYmFzZUNsYXNzXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7dHlwZW9mIEFic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWdpbGVBZ2dyZWdhdGlvbihiYXNlQ2xhc3MsIC4uLm1peGlucykge1xuICBsZXQgYmFzZSA9IHtcbiAgICBbYmFzZUNsYXNzLm5hbWVdOiBjbGFzcyB7XG4gICAgICBjb25zdHJ1Y3RvciguLi5fYXJncykge1xuICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgICBsZXQgbmV3TWl4aW47XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCAobmV3TWl4aW4gPSBuZXcgbWl4aW4oKSkpO1xuICAgICAgICAgIG5ld01peGluLl90YWdOYW1lID0gbWl4aW4ucHJvdG90eXBlLl90YWdOYW1lO1xuICAgICAgICAgIG5ld01peGluLl9pc01peGluID0gdHJ1ZTtcbiAgICAgICAgICBfbWl4aW5zW21peGluLm5hbWVdID0gbmV3TWl4aW47XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgdGhpcy5fbWl4aW5zID0gX21peGlucztcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGdldCBuYW1lKCkge1xuICAgICAgICByZXR1cm4gYmFzZUNsYXNzLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIHN0YXRpYyBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGdldCBtaXhpbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taXhpbnM7XG4gICAgICB9XG4gICAgfSxcbiAgfVtiYXNlQ2xhc3MubmFtZV07XG5cbiAgY29weVByb3BzKGJhc2UsIGJhc2VDbGFzcyk7XG5cbiAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgY29weVByb3BzKGJhc2UsIG1peGluKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGJhc2U7XG59XG5cbmZ1bmN0aW9uIGNzcmZTYWZlTWV0aG9kKG1ldGhvZCkge1xuICAvLyB0aGVzZSBIVFRQIG1ldGhvZHMgZG8gbm90IHJlcXVpcmUgQ1NSRiBwcm90ZWN0aW9uXG4gIHJldHVybiAvXihHRVR8SEVBRHxPUFRJT05TfFRSQUNFKSQvLnRlc3QobWV0aG9kKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsLCBtZXRob2QpIHtcbiAgcmV0dXJuICQuYWpheCh7XG4gICAgdXJsOiB1cmwsIC8vU2VydmVyIHNjcmlwdCB0byBwcm9jZXNzIGRhdGFcbiAgICB0eXBlOiBtZXRob2QgfHwgXCJQT1NUXCIsXG4gICAgeGhyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDdXN0b20gWE1MSHR0cFJlcXVlc3RcbiAgICAgIHZhciBteVhociA9ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgaWYgKG15WGhyLnVwbG9hZCkge1xuICAgICAgICAvLyBDaGVjayBpZiB1cGxvYWQgcHJvcGVydHkgZXhpc3RzXG4gICAgICAgIG15WGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAgIFwicHJvZ3Jlc3NcIixcbiAgICAgICAgICBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICk7IC8vIEZvciBoYW5kbGluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZFxuICAgICAgfVxuICAgICAgcmV0dXJuIG15WGhyO1xuICAgIH0sXG4gICAgLy9Gb3JtIGRhdGFcbiAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAvL09wdGlvbnMgdG8gdGVsbCBqUXVlcnkgbm90IHRvIHByb2Nlc3MgZGF0YSBvciB3b3JyeSBhYm91dCBjb250ZW50LXR5cGUuXG4gICAgY2FjaGU6IGZhbHNlLFxuICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICBwcm9jZXNzRGF0YTogZmFsc2UsXG4gICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgIGlmICghY3NyZlNhZmVNZXRob2Qoc2V0dGluZ3MudHlwZSkgJiYgIXRoaXMuY3Jvc3NEb21haW4pIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICB9XG4gICAgfSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbihlKSB7XG4gIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICB2YXIgcGVyY2VudFZhbCA9IE1hdGgucm91bmQoKGUubG9hZGVkIC8gZS50b3RhbCkgKiAxMDApO1xuICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKFwiLnByb2dyZXNzLWNvbnRhaW5lclwiKTtcbiAgICBpZiAocGVyY2VudFZhbCA9PT0gMTAwKSB7XG4gICAgICAkcHJvZ3Jlc3NDb250YWluZXIuaGlkZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgIH1cblxuICAgIHBlcmNlbnRWYWwgKz0gXCIlXCI7XG5cbiAgICAkcHJvZ3Jlc3NDb250YWluZXJcbiAgICAgIC5maW5kKFwiLnByb2dyZXNzLWJhclwiKVxuICAgICAgLmNzcyh7d2lkdGg6IHBlcmNlbnRWYWx9KVxuICAgICAgLnRleHQocGVyY2VudFZhbCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyhcbiAgcGFyYW1FbGVtZW50LFxuICBjb250cm9sbGVyID0gbnVsbCxcbikge1xuICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYXJhbUVsZW1lbnQ7XG4gIH1cblxuICBpZiAoY29udHJvbGxlciAmJiB0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgaWYgKHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XS5iaW5kKGNvbnRyb2xsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdO1xuICB9XG5cbiAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gIGxldCBpc0Jvb2xSZWcgPSAvXih0cnVlfGZhbHNlKSQvO1xuICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG4gIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNCb29sUmVnKSkge1xuICAgIHJldHVybiBwYXJhbUVsZW1lbnQgPT09IFwidHJ1ZVwiO1xuICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50LnRvTG93ZXJDYXNlKCkgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzSW50UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUludChwYXJhbUVsZW1lbnQpO1xuICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHBhcmFtRWxlbWVudCk7XG4gIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgIHJldHVybiBwYXJhbUVsZW1lbnQuc3Vic3RyKDEsIHBhcmFtRWxlbWVudC5sZW5ndGggLSAyKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbUVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7XG4gIHJldHVybiAoWzFlN10gKyAtMWUzICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgKGMpID0+XG4gICAgKFxuICAgICAgYyBeXG4gICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAoMTUgPj4gKGMgLyA0KSkpXG4gICAgKS50b1N0cmluZygxNiksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVycm9yc0luRm9ybSgkZm9ybSkge1xuICAkZm9ybVxuICAgIC5maW5kKFwiLmhhcy1lcnJvclwiKVxuICAgIC5yZW1vdmVDbGFzcyhcImhhcy1lcnJvclwiKVxuICAgIC5maW5kKFwiLmFsZXJ0LWRhbmdlclwiKVxuICAgIC5yZW1vdmUoKTtcbiAgJGZvcm0uZmluZChcIi5ub24tZmllbGQtZXJyb3JzXCIpLnJlbW92ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkcmVzRm9ybSkge1xuICAkcmVzRm9ybSA9ICQoXCI8ZGl2PlwiKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICRmb3JtXG4gICAgLmZpbmQoXCIuaGFzLWVycm9yXCIpXG4gICAgLnJlbW92ZUNsYXNzKFwiaGFzLWVycm9yXCIpXG4gICAgLmZpbmQoXCIuYWxlcnQtZGFuZ2VyXCIpXG4gICAgLnNhZmVSZW1vdmUoKTtcbiAgJGZvcm0uZmluZChcIi5ub24tZmllbGQtZXJyb3JzXCIpLnNhZmVSZW1vdmUoKTtcbiAgbGV0ICRmaWxlX2NvbnRhaW5lciA9ICRyZXNGb3JtLmZpbmQoXCJpbnB1dFt0eXBlPWZpbGVdXCIpLnBhcmVudCgpO1xuICAkZm9ybVxuICAgIC5maW5kKFwiaW5wdXRbdHlwZT1maWxlXVwiKVxuICAgIC5wYXJlbnQoKVxuICAgIC5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgJCh0aGlzKS5yZXBsYWNlV2l0aCgkZmlsZV9jb250YWluZXJbaW5kZXhdKTtcbiAgICB9KTtcblxuICBsZXQgaGFzTm9FcnJvciA9XG4gICAgJHJlc0Zvcm1cbiAgICAgIC5maW5kKFwiLm5vbi1maWVsZC1lcnJvcnNcIilcbiAgICAgIC5pbnNlcnRBZnRlcigkZm9ybS5maW5kKFwiLmhpZGRlbi1mb3JtLWZpZWxkc1wiKSkubGVuZ3RoID09PSAwO1xuICAkcmVzRm9ybS5maW5kKFwiLmhhcy1lcnJvclwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgbGV0ICRyZXNFcnJvckZpZWxkID0gJCh0aGlzKTtcbiAgICBsZXQgY2xhc3NOYW1lID0gJHJlc0Vycm9yRmllbGQuZGF0YShcImF1dG8taWRcIik7XG4gICAgbGV0ICRlcnJvckZpZWxkID0gJGZvcm0uZmluZChcIi5mb3JtLWdyb3VwLlwiICsgY2xhc3NOYW1lKTtcbiAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcyhcImhhcy1lcnJvclwiKTtcbiAgICAkZXJyb3JGaWVsZFxuICAgICAgLmZpbmQoXCIuZm9ybS1pbnB1dC1jb250YWluZXJcIilcbiAgICAgIC5hcHBlbmQoJHJlc0Vycm9yRmllbGQuZmluZChcIi5hbGVydC1kYW5nZXJcIikpO1xuICB9KTtcblxuICByZXR1cm4gaGFzTm9FcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpxdWVyeUluc2VydEF0KCRjb250YWluZXIsIGluZGV4LCAkbmV3RWxlbWVudCkge1xuICBsZXQgbGFzdEluZGV4ID0gJGNvbnRhaW5lci5jaGlsZHJlbigpLnNpemUoKTtcbiAgaWYgKGluZGV4IDwgbGFzdEluZGV4KSB7XG4gICAgJGNvbnRhaW5lci5jaGlsZHJlbigpLmVxKGluZGV4KS5iZWZvcmUoJG5ld0VsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgICRjb250YWluZXIuYXBwZW5kKCRuZXdFbGVtZW50KTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBQYXJzZSBoaWRkZW4gaW5wdXQgdmFsdWVzIGJhY2sgaW50byB0aGUgY2xvc2VzdCBKYXZhU2NyaXB0IHByaW1pdGl2ZS5cbiAqXG4gKiBIaWRkZW4gaW5wdXRzIGFyZSBvZnRlbiB1c2VkIHRvIHByZXNlcnZlIHZhbHVlcyB0aGF0IHdlcmUgb3JpZ2luYWxseSBib29sZWFucyxcbiAqIG51bWJlcnMgb3IgcXVvdGVkIHN0cmluZ3MuIFRoaXMga2VlcHMgZm9ybS10by1tb2RlbCBzeW5jIGZyb20gdHVybmluZ1xuICogZXZlcnl0aGluZyBpbnRvIHBsYWluIHN0cmluZ3MuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZnVuY3Rpb24gcGFyc2VIaWRkZW5JbnB1dHModmFsdWUpIHtcbiAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gIGxldCBpc0Jvb2xSZWcgPSAvXih0cnVlfGZhbHNlKSQvO1xuICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG4gIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKGlzQm9vbFJlZykpIHtcbiAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09IFwibm9uZVwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNJbnRSZWcpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUZyb21GaWVsZChmb3JtSXRlbSkge1xuICBsZXQge3R5cGUsIG5hbWV9ID0gZm9ybUl0ZW07XG4gIGlmIChuYW1lICYmIG5hbWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZSA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgcmV0dXJuIHBhcnNlSGlkZGVuSW5wdXRzKCQoZm9ybUl0ZW0pLnZhbCgpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICByZXR1cm4gZm9ybUl0ZW0uY2hlY2tlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gXCJmaWxlXCIpIHtcbiAgICAgIHJldHVybiBmb3JtSXRlbS5maWxlc1swXTtcbiAgICB9XG5cbiAgICByZXR1cm4gJChmb3JtSXRlbSkudmFsKCk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFZhbHVlSW5GaWVsZChmb3JtSXRlbSwgdmFsdWUpIHtcbiAgbGV0IHt0eXBlLCBuYW1lfSA9IGZvcm1JdGVtO1xuICBpZiAobmFtZSAmJiBuYW1lICE9PSBcIlwiKSB7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICBmb3JtSXRlbS5jaGVja2VkID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSBcImZpbGVcIikge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBpZiAodHlwZW9mIERhdGFUcmFuc2ZlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGxldCBjb250YWluZXIgPSBuZXcgRGF0YVRyYW5zZmVyKCk7XG4gICAgICAgICAgY29udGFpbmVyLml0ZW1zLmFkZCh2YWx1ZSk7XG4gICAgICAgICAgZm9ybUl0ZW0uZmlsZXMgPSBjb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2RjTW9kZWwpIHtcbiAgICAgICQoZm9ybUl0ZW0pLnZhbCh2YWx1ZS5pZCk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFNkY1F1ZXJ5U2V0KSB7XG4gICAgICAkKGZvcm1JdGVtKS52YWwoYFske3ZhbHVlLmdldElkcygpLmpvaW4oJywnKX1dYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICQoZm9ybUl0ZW0pLnZhbCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIl0sIm5hbWVzIjpbIlNkY01vZGVsIiwiU2RjUXVlcnlTZXQiLCJfJGJvZHkiLCJhcmdfbmFtZXNfcmVnIiwiY29tbWVuZF9yZWciLCJnZXRCb2R5IiwiJCIsImdldFBhcmFtc05hbWVPZkZ1bmN0aW9uIiwiZnVuYyIsImZuc3RyIiwidG9TdHJpbmciLCJyZXBsYWNlIiwicmVzdWx0Iiwic2xpY2UiLCJpbmRleE9mIiwibWF0Y2giLCJwcm9taXNlRHVtbXlGYWN0b3J5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYW1lbENhc2VUb1RhZ05hbWUiLCJzdHIiLCJsZXR0ZXIiLCJ0b0xvd2VyQ2FzZSIsIm51bWJlciIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRvVXBwZXJDYXNlIiwidGFnTmFtZVRvUmVhZGFibGVOYW1lIiwiY29weVByb3BzIiwidGFyZ2V0Q2xhc3MiLCJzb3VyY2VDbGFzcyIsInNvdXJjZSIsInByb3BOYW1lc1RhcmdldCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJwcm90b3R5cGUiLCJjb25jYXQiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJuYW1lIiwiZm9yRWFjaCIsInByb3AiLCJpbmNsdWRlcyIsInB1c2giLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldFByb3RvdHlwZU9mIiwiYWdpbGVBZ2dyZWdhdGlvbiIsImJhc2VDbGFzcyIsIm1peGlucyIsImJhc2UiLCJjb25zdHJ1Y3RvciIsIl9hcmdzIiwiX21peGlucyIsIm1peGluIiwibmV3TWl4aW4iLCJhc3NpZ24iLCJfdGFnTmFtZSIsIl9pc01peGluIiwiY2xhc3NOYW1lIiwiY3NyZlNhZmVNZXRob2QiLCJtZXRob2QiLCJ0ZXN0IiwidXBsb2FkRmlsZUZvcm1EYXRhIiwiZm9ybURhdGEiLCJ1cmwiLCJhamF4IiwidHlwZSIsInhociIsIm15WGhyIiwiYWpheFNldHRpbmdzIiwidXBsb2FkIiwiYWRkRXZlbnRMaXN0ZW5lciIsInByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbiIsImRhdGEiLCJjYWNoZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJiZWZvcmVTZW5kIiwic2V0dGluZ3MiLCJjcm9zc0RvbWFpbiIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aW5kb3ciLCJDU1JGX1RPS0VOIiwiZSIsImxlbmd0aENvbXB1dGFibGUiLCJwZXJjZW50VmFsIiwiTWF0aCIsInJvdW5kIiwibG9hZGVkIiwidG90YWwiLCIkcHJvZ3Jlc3NDb250YWluZXIiLCJoaWRlIiwic2hvdyIsImZpbmQiLCJjc3MiLCJ3aWR0aCIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyIsImpxdWVyeUluc2VydEF0IiwiJGNvbnRhaW5lciIsIiRuZXdFbGVtZW50IiwibGFzdEluZGV4IiwiY2hpbGRyZW4iLCJzaXplIiwiZXEiLCJiZWZvcmUiLCJwYXJzZUhpZGRlbklucHV0cyIsInZhbHVlIiwic3Vic3RyaW5nIiwiZ2V0VmFsdWVGcm9tRmllbGQiLCJmb3JtSXRlbSIsInZhbCIsImNoZWNrZWQiLCJmaWxlcyIsInNldFZhbHVlSW5GaWVsZCIsIkZpbGUiLCJEYXRhVHJhbnNmZXIiLCJjb250YWluZXIiLCJpdGVtcyIsImFkZCIsImlkIiwiZ2V0SWRzIiwiam9pbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n\n}");
|
|
118
128
|
|
|
119
|
-
/***/ }
|
|
129
|
+
/***/ },
|
|
120
130
|
|
|
121
|
-
/***/ "./src/simpleDomControl/sdc_view.js"
|
|
131
|
+
/***/ "./src/simpleDomControl/sdc_view.js"
|
|
122
132
|
/*!******************************************!*\
|
|
123
133
|
!*** ./src/simpleDomControl/sdc_view.js ***!
|
|
124
134
|
\******************************************/
|
|
125
|
-
|
|
135
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
126
136
|
|
|
127
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = '_controller_';\nconst CONTROLLER_CLASS = '_sdc_controller_';\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop('tagName').toLowerCase().split('_');\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith('this.')) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param {AbstractSDC} controller - a content URL from the controller.\n * @param {object} args - get args.\n * @returns {Promise<jQuery|Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(controller, args) {\n const {\n contentUrl,\n _tagName,\n contentReload\n } = controller;\n if (!contentUrl) {\n return Promise.resolve(false);\n } else if (htmlFiles[_tagName]) {\n return Promise.resolve(htmlFiles[_tagName]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(contentUrl, args).then(function (data) {\n if (!contentReload) {\n htmlFiles[_tagName] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('_RedirectOnView', data['url-link']);\n }\n if (typeof controller.confirmPageLoaded === 'function') {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\n });\n }\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {{url: String, args: Array}} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller, getElements.args)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $('<div></div>').append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller, getElements.args);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, '');\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, '');\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data('handler');\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, '');\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === 'function') {\n const newData = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.prepareData)($this.data());\n result = result.bind(controller)(newData);\n }\n if (result) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === '') {\n $this.append('<div></div>');\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === 'INPUT') {\n [['name', ''], ['type', 'text'], ['id', '']].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join('__');\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = Math.max(0, (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1);\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === 'delete') {\n $element.safeRemove();\n } else if (op.type === 'insert') {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: 'keep',\n idx: newNode.idx\n };\n newNode.op = {\n type: 'keep_counterpart',\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: 'delete',\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === 'keep_counterpart' ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === 'keep_counterpart' ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === 'insert' ? 'insert_ignore' : 'insert';\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n return reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLNkI7QUFDNEI7QUFDdkI7QUFDTTs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJUSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRVgsTUFBTUMsbUJBQW1CLEdBQUcsY0FBYztBQUMxQyxNQUFNQyxnQkFBZ0IsR0FBRyxrQkFBa0I7QUFHM0MsU0FBU0MsVUFBVUEsQ0FBQSxFQUFHO0VBQzNCSCxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTSSxVQUFVQSxDQUFDQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsZ0JBQWdCLEVBQUU7RUFDN0QsSUFBSSxDQUFDRixVQUFVLEVBQUU7SUFDZixPQUFPLEVBQUU7RUFDWDtFQUNBLElBQUlHLFNBQVMsR0FBR0gsVUFBVSxDQUFDSSxRQUFRLENBQUMsQ0FBQztFQUNyQyxJQUFJQyxTQUFTLEdBQUcsRUFBRTtFQUNsQkYsU0FBUyxDQUFDRyxJQUFJLENBQUMsVUFBVUMsQ0FBQyxFQUFFQyxPQUFPLEVBQUU7SUFDbkMsSUFBSUMsUUFBUSxHQUFHQyxDQUFDLENBQUNGLE9BQU8sQ0FBQztJQUN6QixJQUFJRyxPQUFPLEdBQUdGLFFBQVEsQ0FBQ0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQy9ELElBQUlKLENBQUMsQ0FBQ0ssT0FBTyxDQUFDSixPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUVWLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUMzQ0ksU0FBUyxDQUFDVyxJQUFJLENBQUM7UUFDYkMsR0FBRyxFQUFFTixPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2ZPLEtBQUssRUFBRVAsT0FBTyxDQUFDUSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtRQUM5QkMsR0FBRyxFQUFFWDtNQUNQLENBQUMsQ0FBQztJQUVKLENBQUMsTUFBTSxJQUFJRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUNVLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUN6Q1osUUFBUSxDQUFDYSxRQUFRLENBQUMsb0NBQW9DcEIsZ0JBQWdCLENBQUNxQixLQUFLLEVBQUUsQ0FBQztJQUNqRixDQUFDLE1BQU07TUFDTGxCLFNBQVMsR0FBR0EsU0FBUyxDQUFDbUIsTUFBTSxDQUFDekIsVUFBVSxDQUFDVSxRQUFRLEVBQUVSLFdBQVcsRUFBRUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNuRjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQU9HLFNBQVM7QUFDbEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU29CLDRCQUE0QkEsQ0FBQ0MsVUFBVSxFQUFFQyxHQUFHLEVBQUVDLFNBQVMsRUFBRTtFQUNoRSxLQUFLLElBQUlDLE9BQU8sSUFBSUgsVUFBVSxDQUFDSSxVQUFVLEVBQUU7SUFDekMsSUFBSUosVUFBVSxDQUFDSSxVQUFVLENBQUNDLGNBQWMsQ0FBQ0YsT0FBTyxDQUFDLEVBQUU7TUFDakQsSUFBSUcsR0FBRyxHQUFHTixVQUFVLENBQUNJLFVBQVUsQ0FBQ0QsT0FBTyxDQUFDO01BQ3hDLElBQUlJLEVBQUUsR0FBR0MsTUFBTSxDQUFDLE1BQU0sR0FBR0YsR0FBRyxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUM7TUFDOUNMLEdBQUcsR0FBR0EsR0FBRyxDQUFDUSxPQUFPLENBQUNGLEVBQUUsRUFBRSxFQUFFLEdBQUdMLFNBQVMsQ0FBQ1EsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMvQztFQUNGO0VBRUEsT0FBT1QsR0FBRztBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNVLFlBQVlBLENBQUNYLFVBQVUsRUFBRVksSUFBSSxFQUFFO0VBQ3RDLE1BQU07SUFBQ0MsVUFBVTtJQUFFQyxRQUFRO0lBQUVDO0VBQWEsQ0FBQyxHQUFHZixVQUFVO0VBQ3hELElBQUksQ0FBQ2EsVUFBVSxFQUFFO0lBQ2YsT0FBT0csT0FBTyxDQUFDQyxPQUFPLENBQUMsS0FBSyxDQUFDO0VBQy9CLENBQUMsTUFBTSxJQUFJaEQsU0FBUyxDQUFDNkMsUUFBUSxDQUFDLEVBQUU7SUFDOUIsT0FBT0UsT0FBTyxDQUFDQyxPQUFPLENBQUNoRCxTQUFTLENBQUM2QyxRQUFRLENBQUMsQ0FBQztFQUM3QztFQUVBRixJQUFJLENBQUNNLE9BQU8sR0FBR25ELDZDQUFHLENBQUNtRCxPQUFPO0VBQzFCTixJQUFJLENBQUNPLE9BQU8sR0FBRyxTQUFTO0VBRXhCLE9BQU9uQyxDQUFDLENBQUNvQyxHQUFHLENBQUNQLFVBQVUsRUFBRUQsSUFBSSxDQUFDLENBQUNTLElBQUksQ0FBQyxVQUFVQyxJQUFJLEVBQUU7SUFDbEQsSUFBSSxDQUFDUCxhQUFhLEVBQUU7TUFDbEI5QyxTQUFTLENBQUM2QyxRQUFRLENBQUMsR0FBR1EsSUFBSTtJQUM1QjtJQUVBLE9BQU9BLElBQUk7RUFDYixDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDLFVBQVVDLEdBQUcsRUFBRTtJQUN0QixJQUFJQSxHQUFHLENBQUNDLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDdEIsTUFBTUgsSUFBSSxHQUFHRSxHQUFHLENBQUNFLFlBQVk7TUFDN0IxRCx1REFBTyxDQUFDLGlCQUFpQixFQUFFc0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDO0lBQ0EsSUFBRyxPQUFPdEIsVUFBVSxDQUFDMkIsaUJBQWlCLEtBQUssVUFBVSxFQUFFO01BQ3JEM0QsdURBQU8sQ0FBQyxXQUFXLEVBQUU7UUFBQyxpQkFBaUIsRUFBRTRELENBQUEsS0FBTUosR0FBRyxDQUFDQztNQUFNLENBQUMsQ0FBQztJQUM3RDtJQUVBLE1BQU0seUJBQXlCRCxHQUFHLENBQUNDLE1BQU0sS0FBS0QsR0FBRyxDQUFDSyxZQUFZLGNBQWM7RUFDOUUsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNDLGdDQUFnQ0EsQ0FBQ3hELFVBQVUsRUFBRUUsZ0JBQWdCLEVBQUV1RCxPQUFPLEdBQUcsSUFBSSxFQUFFO0VBQ3RGdkQsZ0JBQWdCLEdBQUdBLGdCQUFnQixJQUFJRixVQUFVLENBQUNnRCxJQUFJLENBQUNwRCxtQkFBbUIsQ0FBQztFQUMzRSxPQUFPOEQsNkJBQTZCLENBQUNqRSw2Q0FBRyxDQUFDa0UsUUFBUSxFQUFFM0QsVUFBVSxFQUFFRSxnQkFBZ0IsRUFBRXVELE9BQU8sQ0FBQztBQUMzRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNHLGVBQWVBLENBQUNsQyxVQUFVLEVBQUU7RUFDbkMsSUFBSUMsR0FBRyxHQUFHRCxVQUFVLENBQUNhLFVBQVU7RUFDL0IsSUFBSWIsVUFBVSxJQUFJQSxVQUFVLENBQUNJLFVBQVUsQ0FBQytCLE1BQU0sS0FBSyxDQUFDLEVBQUU7SUFDcEQsSUFBSTVCLEVBQUUsR0FBRyxrQkFBa0I7SUFDM0IsSUFBSTZCLE9BQU87SUFDWHBDLFVBQVUsQ0FBQ0ksVUFBVSxHQUFHLEVBQUU7SUFDMUIsT0FBUWdDLE9BQU8sR0FBRzdCLEVBQUUsQ0FBQzhCLElBQUksQ0FBQ3BDLEdBQUcsQ0FBQyxFQUFHO01BQy9CRCxVQUFVLENBQUNJLFVBQVUsQ0FBQ2QsSUFBSSxDQUFDOEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3RDcEMsVUFBVSxDQUFDZSxhQUFhLEdBQUcsSUFBSTtJQUNqQztFQUNGO0VBRUEsSUFBSXVCLE1BQU0sR0FBR3pFLDJEQUFXLENBQUNtQyxVQUFVLEVBQUVBLFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQztFQUMzRCxJQUFJMEIsVUFBVSxDQUFDSSxVQUFVLENBQUMrQixNQUFNLEVBQUU7SUFDaENsQyxHQUFHLEdBQUdGLDRCQUE0QixDQUFDQyxVQUFVLEVBQUVDLEdBQUcsRUFBRXFDLE1BQU0sQ0FBQztFQUM3RDtFQUVBdEMsVUFBVSxDQUFDdUMsZ0JBQWdCLEdBQUd0QyxHQUFHO0VBRWpDLE9BQU87SUFBQ0EsR0FBRyxFQUFFQSxHQUFHO0lBQUVXLElBQUksRUFBRTBCLE1BQU0sQ0FBQ0EsTUFBTSxDQUFDSCxNQUFNLEdBQUcsQ0FBQztFQUFDLENBQUM7QUFDcEQ7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNLLGFBQWFBLENBQUNDLEtBQUssRUFBRTtFQUNuQyxJQUFJQSxLQUFLLENBQUNDLFFBQVEsQ0FBQ3ZFLGdCQUFnQixDQUFDLEVBQUU7SUFDcEMsT0FBT3NFLEtBQUssQ0FBQ25CLElBQUksQ0FBQyxHQUFHcEQsbUJBQW1CLEVBQUUsQ0FBQztFQUM3QztFQUNBLE9BQU91RSxLQUFLLENBQUNFLE9BQU8sQ0FBQyxJQUFJeEUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDbUQsSUFBSSxDQUFDLEdBQUdwRCxtQkFBbUIsRUFBRSxDQUFDO0FBQzdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTMEUsdUJBQXVCQSxDQUFDNUMsVUFBVSxFQUFFO0VBQ2xELElBQUk2QyxXQUFXLEdBQUc7SUFBQ2pDLElBQUksRUFBRSxDQUFDO0VBQUMsQ0FBQztFQUM1QixJQUFJWixVQUFVLENBQUNhLFVBQVUsRUFBRTtJQUN6QmdDLFdBQVcsR0FBR1gsZUFBZSxDQUFDbEMsVUFBVSxDQUFDO0lBQ3pDQSxVQUFVLENBQUNhLFVBQVUsR0FBR2dDLFdBQVcsQ0FBQzVDLEdBQUc7RUFDekM7RUFFQSxPQUFPZSxPQUFPLENBQUM4QixHQUFHLENBQUMsQ0FDakJuQyxZQUFZLENBQUNYLFVBQVUsRUFBRTZDLFdBQVcsQ0FBQ2pDLElBQUksQ0FBQyxDQUMzQyxDQUFDLENBQUNTLElBQUksQ0FBQyxVQUFVMEIsT0FBTyxFQUFFO0lBQ3pCLElBQUlDLFFBQVEsR0FBR0QsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN6QixJQUFJQyxRQUFRLEVBQUU7TUFDWixJQUFJO1FBQ0YsT0FBT2hFLENBQUMsQ0FBQ2dFLFFBQVEsQ0FBQztNQUNwQixDQUFDLENBQUMsTUFBTTtRQUNOLE9BQU9oRSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUNpRSxNQUFNLENBQUNELFFBQVEsQ0FBQztNQUMxQztJQUNGO0lBRUEsT0FBTyxJQUFJO0VBQ2IsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxvQkFBb0JBLENBQUNsRCxVQUFVLEVBQUU7RUFDL0MsSUFBSUEsVUFBVSxDQUFDYSxVQUFVLEVBQUU7SUFDekIsSUFBSWdDLFdBQVcsR0FBR1gsZUFBZSxDQUFDbEMsVUFBVSxDQUFDO0lBQzdDQSxVQUFVLENBQUNhLFVBQVUsR0FBR2dDLFdBQVcsQ0FBQzVDLEdBQUc7SUFDdkMsT0FBT1UsWUFBWSxDQUFDWCxVQUFVLEVBQUU2QyxXQUFXLENBQUNqQyxJQUFJLENBQUM7RUFDbkQ7RUFFQSxPQUFPLElBQUlJLE9BQU8sQ0FBQ0MsT0FBTyxJQUFJO0lBQzVCQSxPQUFPLENBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQ2QsQ0FBQyxDQUFDO0FBQ0o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBU21FLGdDQUFnQ0EsQ0FBQ3BFLFFBQVEsRUFBRUUsT0FBTyxFQUFFbUUsZ0JBQWdCLEVBQUU1RSxnQkFBZ0IsRUFBRXVELE9BQU8sRUFBRTtFQUN4RyxJQUFJL0IsVUFBVSxHQUFHakIsUUFBUSxDQUFDdUMsSUFBSSxDQUFDcEQsbUJBQW1CLENBQUM7RUFDbkQsSUFBSThCLFVBQVUsRUFBRTtJQUNkLE9BQU84QixnQ0FBZ0MsQ0FBQy9DLFFBQVEsRUFBRWlCLFVBQVUsRUFBRStCLE9BQU8sQ0FBQztFQUN4RTtFQUVBL0IsVUFBVSxHQUFHdkMscUVBQWlCLENBQUNlLGdCQUFnQixFQUFFTyxRQUFRLEVBQUVFLE9BQU8sRUFBRW1FLGdCQUFnQixDQUFDO0VBQ3JGckUsUUFBUSxDQUFDdUMsSUFBSSxDQUFDcEQsbUJBQW1CLEVBQUU4QixVQUFVLENBQUM7RUFDOUNqQixRQUFRLENBQUNhLFFBQVEsQ0FBQ3pCLGdCQUFnQixDQUFDO0VBQ25DLE9BQU9SLDJFQUF1QixDQUFDcUMsVUFBVSxFQUFFK0IsT0FBTyxDQUFDO0FBQ3JEOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNzQix3QkFBd0JBLENBQUNyRCxVQUFVLEVBQUVzRCxLQUFLLEVBQUV2QixPQUFPLEdBQUcsSUFBSSxFQUFFO0VBQzFFLElBQUl1QixLQUFLLElBQUlBLEtBQUssQ0FBQ25CLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDN0JuQyxVQUFVLENBQUMxQixVQUFVLENBQUNpRixLQUFLLENBQUMsQ0FBQztJQUM3QnZELFVBQVUsQ0FBQzFCLFVBQVUsQ0FBQ2tGLElBQUksQ0FBQ3hELFVBQVUsQ0FBQ2MsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUNuRCxLQUFLLElBQUkyQyxRQUFRLElBQUl6RCxVQUFVLENBQUMwRCxPQUFPLEVBQUU7TUFDdkMxRCxVQUFVLENBQUMxQixVQUFVLENBQUNrRixJQUFJLENBQUN4RCxVQUFVLENBQUMwRCxPQUFPLENBQUNELFFBQVEsQ0FBQyxDQUFDM0MsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN2RTtJQUNBZCxVQUFVLENBQUMxQixVQUFVLENBQUMyRSxNQUFNLENBQUNLLEtBQUssQ0FBQztFQUNyQztFQUVBLE9BQU94QixnQ0FBZ0MsQ0FBQzlCLFVBQVUsQ0FBQzFCLFVBQVUsRUFBRTBCLFVBQVUsRUFBRStCLE9BQU8sQ0FBQztBQUNyRjs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsNkJBQTZCQSxDQUFDMkIsT0FBTyxFQUFFckYsVUFBVSxFQUFFRSxnQkFBZ0IsRUFBRXVELE9BQU8sRUFBRTtFQUM1RixPQUFPLElBQUlmLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO0lBRTlCLElBQUkyQyxzQkFBc0IsR0FBR3ZGLFVBQVUsQ0FBQ0MsVUFBVSxFQUFFcUYsT0FBTyxFQUFFbkYsZ0JBQWdCLENBQUM7SUFDOUUsSUFBSXFGLFFBQVEsR0FBR0Qsc0JBQXNCLENBQUN6QixNQUFNO0lBRTVDLElBQUkwQixRQUFRLEtBQUssQ0FBQyxFQUFFO01BQ2xCLE9BQU81QyxPQUFPLENBQUMsQ0FBQztJQUNsQjtJQUVBLEtBQUssSUFBSTZDLFlBQVksR0FBRyxDQUFDLEVBQUVBLFlBQVksR0FBR0Ysc0JBQXNCLENBQUN6QixNQUFNLEVBQUUyQixZQUFZLEVBQUUsRUFBRTtNQUN2RlgsZ0NBQWdDLENBQUNTLHNCQUFzQixDQUFDRSxZQUFZLENBQUMsQ0FBQ3BFLEdBQUcsRUFDdkVrRSxzQkFBc0IsQ0FBQ0UsWUFBWSxDQUFDLENBQUN2RSxHQUFHLEVBQ3hDcUUsc0JBQXNCLENBQUNFLFlBQVksQ0FBQyxDQUFDdEUsS0FBSyxFQUMxQ2hCLGdCQUFnQixFQUFFdUQsT0FBTyxDQUFDLENBQUNWLElBQUksQ0FBQyxNQUFNO1FBQ3RDd0MsUUFBUSxFQUFFO1FBQ1YsSUFBSUEsUUFBUSxLQUFLLENBQUMsRUFBRTtVQUNsQixPQUFPNUMsT0FBTyxDQUFDLENBQUM7UUFDbEI7TUFDRixDQUFDLENBQUM7SUFDSjtFQUNGLENBQUMsQ0FBQztBQUNKO0FBRU8sU0FBUzhDLGdCQUFnQkEsQ0FBQy9ELFVBQVUsRUFBRTFCLFVBQVUsRUFBRXlELE9BQU8sRUFBRTtFQUNoRSxPQUFPaUMsaUJBQWlCLENBQUNoRSxVQUFVLEVBQUUxQixVQUFVLElBQUkwQixVQUFVLENBQUMxQixVQUFVLEVBQUV5RCxPQUFPLENBQUM7QUFDcEY7QUFFQSxTQUFTaUMsaUJBQWlCQSxDQUFDaEUsVUFBVSxFQUFFaUUsSUFBSSxFQUFFbEMsT0FBTyxFQUFFO0VBQ3BELE1BQU1tQyxLQUFLLEdBQUcsRUFBRTtFQUVoQkQsSUFBSSxDQUFDRSxJQUFJLENBQUMscUNBQXFDbkUsVUFBVSxDQUFDSCxLQUFLLEVBQUUsQ0FBQyxDQUFDakIsSUFBSSxDQUFDLFlBQVk7SUFDbEYsTUFBTXdGLEtBQUssR0FBR3BGLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckIsSUFBSXFGLE1BQU0sR0FBR0MsU0FBUztJQUN0QixJQUFJRixLQUFLLENBQUMxQixRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUU7TUFDbkMyQixNQUFNLEdBQUdELEtBQUssQ0FBQzlDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDaEMsQ0FBQyxNQUFNO01BQ0wsSUFBSWlELGtCQUFrQixHQUFHLElBQUksQ0FBQ3RGLE9BQU8sQ0FBQ0UsV0FBVyxDQUFDLENBQUMsQ0FBQ3NCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO01BQ3pFLElBQUlULFVBQVUsQ0FBQ3VFLGtCQUFrQixDQUFDLEVBQUU7UUFDbENGLE1BQU0sR0FBR3JFLFVBQVUsQ0FBQ3VFLGtCQUFrQixDQUFDO01BQ3pDO0lBQ0Y7SUFHQSxJQUFJLE9BQU9GLE1BQU0sS0FBSyxVQUFVLEVBQUU7TUFDaEMsTUFBTUcsT0FBTyxHQUFHMUcsMkRBQVcsQ0FBQ3NHLEtBQUssQ0FBQzlDLElBQUksQ0FBQyxDQUFDLENBQUM7TUFDekMrQyxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDekUsVUFBVSxDQUFDLENBQUN3RSxPQUFPLENBQUM7SUFDM0M7SUFDQSxJQUFJSCxNQUFNLEVBQUU7TUFDVkgsS0FBSyxDQUFDNUUsSUFBSSxDQUFDMEIsT0FBTyxDQUFDQyxPQUFPLENBQUNvRCxNQUFNLENBQUMsQ0FBQ2hELElBQUksQ0FBRXFELENBQUMsSUFBSztRQUM3QyxJQUFJQyxXQUFXLEdBQUczRixDQUFDLENBQUMsYUFBYSxDQUFDO1FBQ2xDMkYsV0FBVyxDQUFDMUIsTUFBTSxDQUFDeUIsQ0FBQyxDQUFDO1FBRXJCLElBQUlOLEtBQUssQ0FBQ1EsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7VUFDdkJSLEtBQUssQ0FBQ25CLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDN0I7UUFFQSxPQUFPbEYsNkNBQUcsQ0FBQzhHLFNBQVMsQ0FBQzdFLFVBQVUsRUFBRTJFLFdBQVcsRUFBRVAsS0FBSyxDQUFDMUYsUUFBUSxDQUFDLENBQUMsRUFBRXFELE9BQU8sQ0FBQztNQUMxRSxDQUFDLENBQUMsQ0FBQztJQUNMO0VBRUYsQ0FBQyxDQUFDO0VBRUYsT0FBT2YsT0FBTyxDQUFDOEIsR0FBRyxDQUFDb0IsS0FBSyxDQUFDO0FBQzNCO0FBR0EsU0FBU1ksVUFBVUEsQ0FBQ0MsSUFBSSxFQUFFO0VBQ3hCLElBQUlBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsUUFBUSxLQUFLLENBQUMsRUFBRTtJQUMxQixPQUFPLFNBQVNELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ0UsU0FBUyxFQUFFO0VBQ3JDO0VBQ0EsTUFBTUMsR0FBRyxHQUFHLENBQUNILElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzlGLE9BQU8sQ0FBQztFQUM3QixJQUFJOEYsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxRQUFRLEtBQUssT0FBTyxFQUFFO0lBQ2hDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQzlFLEdBQUcsRUFBRStFLFlBQVksQ0FBQyxLQUFLO01BQzVFLE1BQU03QixJQUFJLEdBQUd1QixJQUFJLENBQUN2QixJQUFJLENBQUNsRCxHQUFHLENBQUMsSUFBSStFLFlBQVk7TUFDM0MsSUFBSTdCLElBQUksRUFBRTtRQUNSMEIsR0FBRyxDQUFDNUYsSUFBSSxDQUFDa0UsSUFBSSxDQUFDO01BQ2hCO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFDQSxPQUFPMEIsR0FBRyxDQUFDSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3ZCO0FBRUEsU0FBU0MsYUFBYUEsQ0FBQztFQUFDeEcsUUFBUTtFQUFFeUcsRUFBRSxHQUFHLEVBQUU7RUFBRUMsTUFBTSxHQUFHO0FBQUksQ0FBQyxFQUFFO0VBQ3pERCxFQUFFLENBQUNsRyxJQUFJLENBQUN3RixVQUFVLENBQUMvRixRQUFRLENBQUMsQ0FBQztFQUM3QixNQUFNMkcsR0FBRyxHQUFHO0lBQ1YzRyxRQUFRO0lBQ1J5RyxFQUFFLEVBQUVBLEVBQUUsQ0FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNqQkssS0FBSyxFQUFFSCxFQUFFLENBQUNyRCxNQUFNO0lBQ2hCeUQsR0FBRyxFQUFFLENBQUM7SUFDTkMsYUFBYSxFQUFFQSxDQUFBLEtBQU1KLE1BQU07SUFDM0JLLE1BQU0sRUFBRSxTQUFBQSxDQUFBLEVBQVk7TUFDbEIsSUFBSSxDQUFDRixHQUFHLEdBQUdHLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQ0gsYUFBYSxDQUFDLENBQUMsRUFBRUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSS9HLFFBQVEsQ0FBQ2tILEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ3JGLE9BQU8sSUFBSSxDQUFDTCxHQUFHO0lBQ2pCLENBQUM7SUFDRE0sRUFBRSxFQUFFLElBQUk7SUFDUlQ7RUFDRixDQUFDO0VBQ0RDLEdBQUcsQ0FBQ0ksTUFBTSxDQUFDckIsSUFBSSxDQUFDaUIsR0FBRyxDQUFDO0VBQ3BCLE9BQU8sQ0FBQ0EsR0FBRyxDQUFDLENBQUM1RixNQUFNLENBQUNmLFFBQVEsQ0FBQ29ILFFBQVEsQ0FBQyxDQUFDLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBRTNCLENBQUMsSUFBS2EsYUFBYSxDQUFDO0lBQ3pFeEcsUUFBUSxFQUFFQyxDQUFDLENBQUMwRixDQUFDLENBQUM7SUFDZGMsRUFBRSxFQUFFQSxFQUFFLENBQUNjLEtBQUssQ0FBQyxDQUFDO0lBQ2RiLE1BQU0sRUFBRUM7RUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDYSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRWI7QUFHTyxTQUFTMUIsU0FBU0EsQ0FBQzJCLFlBQVksRUFBRUMsU0FBUyxFQUFFO0VBRWpELE1BQU1DLElBQUksR0FBR25CLGFBQWEsQ0FBQztJQUFDeEcsUUFBUSxFQUFFMEg7RUFBUyxDQUFDLENBQUM7RUFDakQsTUFBTUUsSUFBSSxHQUFHcEIsYUFBYSxDQUFDO0lBQUN4RyxRQUFRLEVBQUV5SDtFQUFZLENBQUMsQ0FBQztFQUNwREUsSUFBSSxDQUFDTCxHQUFHLENBQUMsQ0FBQzNCLENBQUMsRUFBRWtDLENBQUMsS0FBS2xDLENBQUMsQ0FBQ2tCLEdBQUcsR0FBR2dCLENBQUMsQ0FBQztFQUM3QkQsSUFBSSxDQUFDTixHQUFHLENBQUMsQ0FBQzNCLENBQUMsRUFBRWtDLENBQUMsS0FBS2xDLENBQUMsQ0FBQ2tCLEdBQUcsR0FBR2dCLENBQUMsQ0FBQztFQUM3QixNQUFNakIsS0FBSyxHQUFHSSxJQUFJLENBQUNDLEdBQUcsQ0FBQyxHQUFHVyxJQUFJLENBQUM3RyxNQUFNLENBQUM0RyxJQUFJLENBQUMsQ0FBQ0wsR0FBRyxDQUFDM0IsQ0FBQyxJQUFJQSxDQUFDLENBQUNpQixLQUFLLENBQUMsQ0FBQztFQUM5RCxNQUFNa0IsUUFBUSxHQUFHQyxPQUFPLENBQUNKLElBQUksRUFBRUMsSUFBSSxFQUFFaEIsS0FBSyxDQUFDO0VBQzNDLElBQUlvQixRQUFRLEdBQUcsRUFBRTtFQUNqQkMsTUFBTSxDQUFDQyxJQUFJLEdBQUdSLFNBQVM7RUFDdkJPLE1BQU0sQ0FBQ0UsR0FBRyxHQUFHTCxRQUFRO0VBRXJCQSxRQUFRLENBQUN6QixPQUFPLENBQUMsQ0FBQytCLE9BQU8sRUFBRVAsQ0FBQyxLQUFLO0lBQzdCLE1BQU07TUFBQ1YsRUFBRTtNQUFFbkgsUUFBUTtNQUFFNkc7SUFBRyxDQUFDLEdBQUd1QixPQUFPO0lBRW5DLElBQUlqQixFQUFFLENBQUNrQixJQUFJLEtBQUssa0JBQWtCLEVBQUU7TUFDbEMsSUFBSUMsSUFBSSxHQUFHbkIsRUFBRSxDQUFDb0IsV0FBVyxDQUFDeEIsTUFBTSxDQUFDLENBQUM7TUFDbEMsSUFBSXVCLElBQUksS0FBS3pCLEdBQUcsRUFBRTtRQUNoQixNQUFNMkIsVUFBVSxHQUFHSixPQUFPLENBQUNLLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQ0QsVUFBVSxFQUFFO1VBQ2ZKLE9BQU8sQ0FBQ3RCLGFBQWEsQ0FBQyxDQUFDLENBQUM5RyxRQUFRLENBQUMwSSxPQUFPLENBQUN2QixFQUFFLENBQUNvQixXQUFXLENBQUN2SSxRQUFRLENBQUM7UUFDbkUsQ0FBQyxNQUFNO1VBQ0xtSCxFQUFFLENBQUNvQixXQUFXLENBQUN2SSxRQUFRLENBQUMySSxXQUFXLENBQUNILFVBQVUsQ0FBQ3hJLFFBQVEsQ0FBQztRQUMxRDtNQUNGO01BRUE0SSxjQUFjLENBQUN6QixFQUFFLENBQUNvQixXQUFXLENBQUN2SSxRQUFRLEVBQUVBLFFBQVEsQ0FBQztNQUNqRCxJQUFJQSxRQUFRLENBQUMyRCxRQUFRLENBQUN2RSxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3ZDWSxRQUFRLENBQUN1QyxJQUFJLENBQUNwRCxtQkFBbUIsQ0FBQyxDQUFDSSxVQUFVLEdBQUc0SCxFQUFFLENBQUNvQixXQUFXLENBQUN2SSxRQUFRO1FBQ3ZFQSxRQUFRLENBQUN1QyxJQUFJLENBQUNwRCxtQkFBbUIsRUFBRSxJQUFJLENBQUM7TUFDMUM7TUFFQTZJLFFBQVEsQ0FBQ3pILElBQUksQ0FBQ1AsUUFBUSxDQUFDO0lBQ3pCLENBQUMsTUFBTSxJQUFJbUgsRUFBRSxDQUFDa0IsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUMvQnJJLFFBQVEsQ0FBQzZJLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsTUFBTSxJQUFJMUIsRUFBRSxDQUFDa0IsSUFBSSxLQUFLLFFBQVEsRUFBRTtNQUMvQixNQUFNO1FBQUNTLEtBQUs7UUFBRUM7TUFBTSxDQUFDLEdBQUdYLE9BQU8sQ0FBQ2pCLEVBQUU7TUFDbEMsSUFBSTJCLEtBQUssRUFBRTtRQUNUOUksUUFBUSxDQUFDMkksV0FBVyxDQUFDRyxLQUFLLENBQUM5SSxRQUFRLENBQUM7TUFDdEMsQ0FBQyxNQUFNLElBQUkrSSxNQUFNLEVBQUU7UUFDakJBLE1BQU0sQ0FBQy9JLFFBQVEsQ0FBQzBJLE9BQU8sQ0FBQzFJLFFBQVEsQ0FBQztNQUNuQztJQUVGO0VBQ0YsQ0FDRixDQUFDO0VBR0RnSSxRQUFRLENBQUMzQixPQUFPLENBQUVyRyxRQUFRLElBQUtBLFFBQVEsQ0FBQzZJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdkQ7QUFFQSxTQUFTRCxjQUFjQSxDQUFDSSxLQUFLLEVBQUVDLFFBQVEsRUFBRTtFQUN2QyxNQUFNQyxTQUFTLEdBQUdGLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxJQUFJLEVBQUU7RUFDM0MsTUFBTUMsWUFBWSxHQUFHSCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNFLFVBQVUsSUFBSSxFQUFFO0VBQ2pEO0VBQ0EsQ0FBQyxHQUFHRCxTQUFTLENBQUMsQ0FBQzdDLE9BQU8sQ0FBQzVCLElBQUksSUFBSTtJQUM3QixJQUFJLENBQUN3RSxRQUFRLENBQUNJLEVBQUUsQ0FBQyxJQUFJNUUsSUFBSSxDQUFDNkUsSUFBSSxHQUFHLENBQUMsRUFBRTtNQUNsQ04sS0FBSyxDQUFDTyxVQUFVLENBQUM5RSxJQUFJLENBQUM2RSxJQUFJLENBQUM7SUFDN0I7RUFDRixDQUFDLENBQUM7O0VBRUY7RUFDQSxDQUFDLEdBQUdGLFlBQVksQ0FBQyxDQUFDL0MsT0FBTyxDQUFDNUIsSUFBSSxJQUFJO0lBQ2hDLElBQUksQ0FBQ0EsSUFBSSxDQUFDNkUsSUFBSSxDQUFDMUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJb0ksS0FBSyxDQUFDdkUsSUFBSSxDQUFDQSxJQUFJLENBQUM2RSxJQUFJLENBQUMsS0FBSzdFLElBQUksQ0FBQytFLEtBQUssRUFBRTtNQUN6RVIsS0FBSyxDQUFDdkUsSUFBSSxDQUFDQSxJQUFJLENBQUM2RSxJQUFJLEVBQUU3RSxJQUFJLENBQUMrRSxLQUFLLENBQUM7SUFDbkM7RUFDRixDQUFDLENBQUM7RUFFRlIsS0FBSyxDQUFDUyxVQUFVLENBQUMsQ0FBQztFQUNsQkMsTUFBTSxDQUFDQyxPQUFPLENBQUNWLFFBQVEsQ0FBQzFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzhELE9BQU8sQ0FBQyxDQUFDLENBQUM5RSxHQUFHLEVBQUVpSSxLQUFLLENBQUMsS0FBSztJQUN4RFIsS0FBSyxDQUFDekcsSUFBSSxDQUFDaEIsR0FBRyxFQUFFaUksS0FBSyxDQUFDO0VBQ3hCLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTekIsT0FBT0EsQ0FBQzZCLFFBQVEsRUFBRUMsUUFBUSxFQUFFakQsS0FBSyxFQUFFO0VBQzFDaUQsUUFBUSxDQUFDQyxNQUFNLENBQUNuRSxDQUFDLElBQUlBLENBQUMsQ0FBQ2lCLEtBQUssS0FBS0EsS0FBSyxJQUFJLENBQUNqQixDQUFDLENBQUN3QixFQUFFLENBQUMsQ0FBQ2QsT0FBTyxDQUFFMEQsT0FBTyxJQUFLO0lBQ3BFLE1BQU1DLE9BQU8sR0FBR0osUUFBUSxDQUFDeEUsSUFBSSxDQUFFNkUsV0FBVyxJQUFLO01BQzdDLE9BQU8sQ0FBQ0EsV0FBVyxDQUFDOUMsRUFBRSxJQUFJOEMsV0FBVyxDQUFDeEQsRUFBRSxLQUFLc0QsT0FBTyxDQUFDdEQsRUFBRTtJQUN6RCxDQUFDLENBQUM7SUFFRixJQUFJdUQsT0FBTyxFQUFFO01BQ1gsTUFBTUUsY0FBYyxHQUFHQSxDQUFDRixPQUFPLEVBQUVELE9BQU8sS0FBSztRQUMzQ0MsT0FBTyxDQUFDN0MsRUFBRSxHQUFHO1VBQUNrQixJQUFJLEVBQUUsTUFBTTtVQUFFeEIsR0FBRyxFQUFFa0QsT0FBTyxDQUFDbEQ7UUFBRyxDQUFDO1FBQzdDa0QsT0FBTyxDQUFDNUMsRUFBRSxHQUFHO1VBQUNrQixJQUFJLEVBQUUsa0JBQWtCO1VBQUVFLFdBQVcsRUFBRXlCO1FBQU8sQ0FBQztRQUM3REEsT0FBTyxHQUFHQSxPQUFPLENBQUN0RCxNQUFNO1FBQ3hCcUQsT0FBTyxHQUFHQSxPQUFPLENBQUNyRCxNQUFNO1FBQ3hCLElBQUksQ0FBQ3NELE9BQU8sSUFBSUEsT0FBTyxDQUFDN0MsRUFBRSxJQUFJNEMsT0FBTyxFQUFFNUMsRUFBRSxFQUFFO1VBQ3pDO1FBQ0Y7UUFDQStDLGNBQWMsQ0FBQ0YsT0FBTyxFQUFFRCxPQUFPLENBQUM7TUFFbEMsQ0FBQztNQUNERyxjQUFjLENBQUNGLE9BQU8sRUFBRUQsT0FBTyxDQUFDO0lBQ2xDO0VBQ0YsQ0FBQyxDQUFDO0VBQ0YsSUFBSW5ELEtBQUssR0FBRyxDQUFDLEVBQUU7SUFDYixPQUFPbUIsT0FBTyxDQUFDNkIsUUFBUSxFQUFFQyxRQUFRLEVBQUVqRCxLQUFLLEdBQUcsQ0FBQyxDQUFDO0VBQy9DO0VBRUFnRCxRQUFRLENBQUN2RCxPQUFPLENBQUMsQ0FBQ1YsQ0FBQyxFQUFFa0MsQ0FBQyxLQUFLO0lBQ3pCLElBQUksQ0FBQ2xDLENBQUMsQ0FBQ3dCLEVBQUUsRUFBRTtNQUNULE1BQU1OLEdBQUcsR0FBRyxDQUFDK0MsUUFBUSxDQUFDL0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFVixFQUFFLENBQUNOLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO01BQy9DbEIsQ0FBQyxDQUFDd0IsRUFBRSxHQUFHO1FBQUNrQixJQUFJLEVBQUUsUUFBUTtRQUFFeEI7TUFBRyxDQUFDO0lBQzlCO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsU0FBU0MsYUFBYUEsQ0FBQy9HLE9BQU8sRUFBRTtJQUM5QixJQUFJLENBQUNBLE9BQU8sQ0FBQzJHLE1BQU0sRUFBRTtNQUNuQixPQUFPLElBQUk7SUFDYjtJQUNBLE9BQU8zRyxPQUFPLENBQUMyRyxNQUFNLENBQUNTLEVBQUUsQ0FBQ2tCLElBQUksS0FBSyxrQkFBa0IsR0FBR3RJLE9BQU8sQ0FBQzJHLE1BQU0sQ0FBQ1MsRUFBRSxDQUFDb0IsV0FBVyxHQUFHeEksT0FBTyxDQUFDMkcsTUFBTTtFQUN2RztFQUVBLFNBQVMrQixTQUFTQSxDQUFDMUksT0FBTyxFQUFFOEcsR0FBRyxFQUFFO0lBQy9CLE1BQU1zRCxVQUFVLEdBQUdwSyxPQUFPLENBQUM2RyxLQUFLO0lBQ2hDLE9BQU9DLEdBQUcsSUFBSSxDQUFDLElBQUk5RyxPQUFPLENBQUM2RyxLQUFLLElBQUl1RCxVQUFVLEVBQUU7TUFDOUN0RCxHQUFHLElBQUksQ0FBQztNQUNSOUcsT0FBTyxHQUFHOEosUUFBUSxDQUFDaEQsR0FBRyxDQUFDO01BQ3ZCLElBQUk5RyxPQUFPLENBQUM2RyxLQUFLLEtBQUt1RCxVQUFVLEVBQUU7UUFDaEMsT0FBT3BLLE9BQU8sQ0FBQ29ILEVBQUUsQ0FBQ2tCLElBQUksS0FBSyxrQkFBa0IsR0FBR3RJLE9BQU8sQ0FBQ29ILEVBQUUsQ0FBQ29CLFdBQVcsR0FBR3hJLE9BQU87TUFDbEY7SUFDRjtJQUVBLE9BQU8sSUFBSTtFQUViO0VBRUE4SixRQUFRLENBQUN4RCxPQUFPLENBQUMsQ0FBQ1YsQ0FBQyxFQUFFa0MsQ0FBQyxLQUFLO0lBQ3pCbEMsQ0FBQyxDQUFDOEMsU0FBUyxHQUFHLE1BQU1BLFNBQVMsQ0FBQzlDLENBQUMsRUFBRWtDLENBQUMsQ0FBQztJQUNuQ2xDLENBQUMsQ0FBQ21CLGFBQWEsR0FBRyxNQUFNQSxhQUFhLENBQUNuQixDQUFDLENBQUM7SUFFeEMsSUFBSSxDQUFDQSxDQUFDLENBQUN3QixFQUFFLEVBQUU7TUFDVCxNQUFNNEIsTUFBTSxHQUFHcEQsQ0FBQyxDQUFDbUIsYUFBYSxDQUFDLENBQUM7TUFDaEMsTUFBTXVCLElBQUksR0FBR1UsTUFBTSxFQUFFNUIsRUFBRSxDQUFDa0IsSUFBSSxLQUFLLFFBQVEsR0FBRyxlQUFlLEdBQUcsUUFBUTtNQUN0RTFDLENBQUMsQ0FBQ3dCLEVBQUUsR0FBRztRQUFDa0IsSUFBSTtRQUFFVSxNQUFNO1FBQUVELEtBQUssRUFBRW5ELENBQUMsQ0FBQzhDLFNBQVMsQ0FBQztNQUFDLENBQUM7SUFDN0M7RUFDRixDQUFDLENBQUM7RUFFRixNQUFNMkIsTUFBTSxHQUFHLENBQ2IsR0FBR1IsUUFBUSxFQUNYLEdBQUdDLFFBQVEsQ0FDWjtFQUdELE9BQU9PLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxLQUFLO0lBQzNCLE1BQU1DLElBQUksR0FBR0YsQ0FBQyxDQUFDbkQsRUFBRSxFQUFFTixHQUFHLElBQUl5RCxDQUFDLENBQUN6RCxHQUFHO0lBQy9CLE1BQU00RCxJQUFJLEdBQUdGLENBQUMsQ0FBQ3BELEVBQUUsRUFBRU4sR0FBRyxJQUFJMEQsQ0FBQyxDQUFDMUQsR0FBRztJQUUvQixPQUFPMkQsSUFBSSxHQUFHQyxJQUFJO0VBQ3BCLENBQUMsQ0FBQztBQUNKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPLFNBQVNDLE9BQU9BLENBQUN4RixJQUFJLEVBQUV5RixjQUFjLEVBQUUzSCxPQUFPLEdBQUcsSUFBSSxFQUFFO0VBQzVELElBQUksQ0FBQzJILGNBQWMsRUFBRTtJQUNuQkEsY0FBYyxHQUFHbEgsYUFBYSxDQUFDeUIsSUFBSSxDQUFDO0VBQ3RDO0VBRUEsSUFBSSxDQUFDeUYsY0FBYyxFQUFFO0lBQ25CLE9BQU8xSSxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO0VBQzFCO0VBRUEsTUFBTTtJQUFDMEksY0FBYztJQUFFQztFQUFnQixDQUFDLEdBQUdsTSx5RUFBcUIsQ0FBQ3FFLE9BQU8sRUFBRTJILGNBQWMsQ0FBQztFQUV6RnpGLElBQUksS0FBS3lGLGNBQWMsQ0FBQ3BMLFVBQVU7RUFFbEMsT0FBTzBELDZCQUE2QixDQUFDakUsNkNBQUcsQ0FBQ2tFLFFBQVEsRUFBRWdDLElBQUksRUFBRXlGLGNBQWMsRUFBRTNILE9BQU8sQ0FBQyxDQUFDVixJQUFJLENBQUMsTUFBTTtJQUMzRixPQUFPMEMsZ0JBQWdCLENBQUMyRixjQUFjLEVBQUV6RixJQUFJLEVBQUUwRixjQUFjLENBQUMsQ0FBQ3RJLElBQUksQ0FBQyxNQUFNO01BQ3ZFLElBQUksQ0FBQ3VJLGdCQUFnQixFQUFFO1FBQ3JCaE0sa0ZBQThCLENBQUMrTCxjQUFjLENBQUM7TUFDaEQ7SUFDRixDQUFDLENBQUM7RUFFSixDQUFDLENBQUM7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz8yNGI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbnRyb2xsZXJGYWN0b3J5LFxuICBwcmVwYXJlUmVmcmVzaFByb2Nlc3MsXG4gIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLFxuICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2hcbn0gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7Z2V0VXJsUGFyYW0sIHByZXBhcmVEYXRhfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuXG4vKipcbiAqIExpc3Qgb2YgSFRNTCBmaWxlcy5cbiAqIEB0eXBlIHt7fX1cbiAqL1xubGV0IGh0bWxGaWxlcyA9IHt9O1xuXG5leHBvcnQgY29uc3QgREFUQV9DT05UUk9MTEVSX0tFWSA9ICdfY29udHJvbGxlcl8nO1xuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfQ0xBU1MgPSAnX3NkY19jb250cm9sbGVyXyc7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQ2FjaGUoKSB7XG4gIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gIGlmICghJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJyk7XG4gICAgaWYgKCQuaW5BcnJheSh0YWdOYW1lWzBdLCB0YWdOYW1lTGlzdCkgPj0gMCkge1xuICAgICAgZW1wdHlMaXN0LnB1c2goe1xuICAgICAgICB0YWc6IHRhZ05hbWVbMF0sXG4gICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgZG9tOiAkZWxlbWVudFxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbXB0eUxpc3QgPSBlbXB0eUxpc3QuY29uY2F0KGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSlcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgZm9yIChsZXQga2V5X2lkeCBpbiBjb250cm9sbGVyLl91cmxQYXJhbXMpIHtcbiAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogbG9hZEhUTUxGaWxlIGxvYWRzIHRoZSBIVE1MIGNvbnRlbnQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdmlhIGFqYXggcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgSFRNTCBmaWxlIGlzIGxvYWRlZCBhbHJlYWR5IHRoZSBmdW5jdGlvbiB0YWtlcyBubyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnl8Qm9vbGVhbj59IC0gd2FpdHMgZm9yIHRoZSBmaWxlIHRvIGJlIGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIsIGFyZ3MpIHtcbiAgY29uc3Qge2NvbnRlbnRVcmwsIF90YWdOYW1lLCBjb250ZW50UmVsb2FkfSA9IGNvbnRyb2xsZXJcbiAgaWYgKCFjb250ZW50VXJsKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH0gZWxzZSBpZiAoaHRtbEZpbGVzW190YWdOYW1lXSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHRtbEZpbGVzW190YWdOYW1lXSlcbiAgfVxuXG4gIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICBhcmdzLl9tZXRob2QgPSAnY29udGVudCc7XG5cbiAgcmV0dXJuICQuZ2V0KGNvbnRlbnRVcmwsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAoIWNvbnRlbnRSZWxvYWQpIHtcbiAgICAgIGh0bWxGaWxlc1tfdGFnTmFtZV0gPSBkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgaWYgKGVyci5zdGF0dXMgPT09IDMwMSkge1xuICAgICAgY29uc3QgZGF0YSA9IGVyci5yZXNwb25zZUpTT047XG4gICAgICB0cmlnZ2VyKCdfUmVkaXJlY3RPblZpZXcnLCBkYXRhWyd1cmwtbGluayddKTtcbiAgICB9XG4gICAgaWYodHlwZW9mIGNvbnRyb2xsZXIuY29uZmlybVBhZ2VMb2FkZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCkgPT4gZXJyLnN0YXR1c30pO1xuICAgIH1cblxuICAgIHRocm93IGA8c2RjLWVycm9yIGRhdGEtY29kZT1cIiR7ZXJyLnN0YXR1c31cIj4ke2Vyci5yZXNwb25zZVRleHR9PC9zZGMtZXJyb3I+YDtcbiAgfSk7XG59XG5cbi8qKlxuICogcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIgcmVwbGFjZXMgYWxsIHJlZ2lzdGVyZWQgdGFncyBieSB0aGUgY29udHJvbGxlci5cbiAqIEluIHRoaXMgc3RlcCB0aGUgbGlmZS1jeWNsZSBzdGFydHMuXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBnaXZlbiBjb250YWluZXJcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBwYXJlbnQgY29udG9sbGVyIHN1cnJvdW5kZWQgdGhlIGNvbnRhaW5lclxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgcGFyZW50Q29udHJvbGxlciA9IHBhcmVudENvbnRyb2xsZXIgfHwgJGNvbnRhaW5lci5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7e3VybDogU3RyaW5nLCBhcmdzOiBBcnJheX19IC0gdGhlIGNvcnJlY3QgVVJMIHdpdGggcHJlZml4LlxuICovXG5mdW5jdGlvbiBwYXJzZUNvbnRlbnRVcmwoY29udHJvbGxlcikge1xuICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICBpZiAoY29udHJvbGxlciAmJiBjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgIGxldCBtYXRjaGVzO1xuICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcyA9IFtdO1xuICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBsZXQgcGFyYW1zID0gZ2V0VXJsUGFyYW0oY29udHJvbGxlciwgY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgaWYgKGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGgpIHtcbiAgICB1cmwgPSByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyKGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zKTtcbiAgfVxuXG4gIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICByZXR1cm4ge3VybDogdXJsLCBhcmdzOiBwYXJhbXNbcGFyYW1zLmxlbmd0aCAtIDFdfTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udHJvbGxlcigkZWxlbSkge1xuICBpZiAoJGVsZW0uaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICByZXR1cm4gJGVsZW0uZGF0YShgJHtEQVRBX0NPTlRST0xMRVJfS0VZfWApO1xuICB9XG4gIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gIGxldCBnZXRFbGVtZW50cyA9IHthcmdzOiB7fX07XG4gIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLCBnZXRFbGVtZW50cy5hcmdzKVxuICBdKS50aGVuKGZ1bmN0aW9uIChyZXN1bHRzKSB7XG4gICAgbGV0IGh0bWxGaWxlID0gcmVzdWx0c1swXTtcbiAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAkKGh0bWxGaWxlKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoaHRtbEZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9KTtcbn1cblxuLyoqXG4gKiByZWxvYWRIVE1MQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKlxuICogQHJldHVybnMge1Byb21pc2U8alF1ZXJ5Pn0gLSB0aGUgcHJvbWlzZSB3YWl0cyB0byB0aGUgZmlsZXMgYXJlIGxvYWRlZC4gaXQgcmV0dXJucyB0aGUgalF1ZXJ5IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpIHtcbiAgaWYgKGNvbnRyb2xsZXIuY29udGVudFVybCkge1xuICAgIGxldCBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLCBnZXRFbGVtZW50cy5hcmdzKTtcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICByZXNvbHZlKCQoKSk7XG4gIH0pO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHN1cGVyVGFnTmFtZUxpc3RcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAqL1xuZnVuY3Rpb24gcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIsIHByb2Nlc3MpIHtcbiAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICBpZiAoY29udHJvbGxlcikge1xuICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlciwgcHJvY2Vzcyk7XG4gIH1cblxuICBjb250cm9sbGVyID0gY29udHJvbGxlckZhY3RvcnkocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpO1xuICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAkZWxlbWVudC5hZGRDbGFzcyhDT05UUk9MTEVSX0NMQVNTKTtcbiAgcmV0dXJuIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcnVuQ29udHJvbGxlckZpbGxDb250ZW50IGVtcHRpZXMgdGhlIHJlZ2lzdGVyZWQgdGFnIGFuZCByZXBsYWNlcyBpdCBieSB0aGUgY29udHJvbGxlclxuICogY29udGVudC4gSXQgc2V0cyB0aGUgQ1NTIHRhZ3MgZm9yIHRoZSByZWxhdGlvbiB3aXRoIHRoZSBDU1MgZmlsZXMuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkaHRtbCAtIGpRdWVyeSBsb2FkZWQgY29udGVudFxuICogQHBhcmFtIHtPYmplY3R9IHByb2Nlc3MgLSBQcm9jZXNzIG9iamVjdCBjb250YWluaW5nIHRoZSByZWZyZXNoIHByb2Nlc3NcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwsIHByb2Nlc3MgPSBudWxsKSB7XG4gIGlmICgkaHRtbCAmJiAkaHRtbC5sZW5ndGggPiAwKSB7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fdGFnTmFtZSwgJycpO1xuICAgIGZvciAobGV0IG1peGluS2V5IGluIGNvbnRyb2xsZXIuX21peGlucykge1xuICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmF0dHIoY29udHJvbGxlci5fbWl4aW5zW21peGluS2V5XS5fdGFnTmFtZSwgJycpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIsIHByb2Nlc3MpO1xufVxuXG5cbi8qKlxuICogcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEZvciBlYWNoIHJlZ2lzdGVyZWQgdGFnIGl0IGxvYWRzIHRoZSBjb250ZW50LlxuICogQWZ0ZXJ3YXJkcyBpdCBzdGFydHMgdGhlIGxpZmUgY3ljbGUgb2YgdGhlIGNvbnRyb2xsZXIuIEkgdGhlIG5leHQgc3RlcCBpdCBzdGFydHMgdGhlXG4gKiBwcm9jZWR1cmUgZm9yIHRoZSBjaGlsZCBlbGVtZW50cyBvZiB0aGUgY29udHJvbGxlciB0YWcuXG4gKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSB0YWdMaXN0IC0gbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCB0YWdzXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXIgdG8gZmluZCB0aGUgdGFnc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdMaXN0LCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ0xpc3QsIHBhcmVudENvbnRyb2xsZXIpO1xuICAgIGxldCB0YWdDb3VudCA9IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGVsZW1lbnRJbmRleCA9IDA7IGVsZW1lbnRJbmRleCA8IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMubGVuZ3RoOyBlbGVtZW50SW5kZXgrKykge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLmRvbSxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnRhZyxcbiAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICBwYXJlbnRDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGFnQ291bnQtLTtcbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciwgcHJvY2Vzcykge1xuICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsIHByb2Nlc3MpXG59XG5cbmZ1bmN0aW9uIF9yZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRkb20sIHByb2Nlc3MpIHtcbiAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAkZG9tLmZpbmQoYC5fYmluZF90b191cGRhdGVfaGFuZGxlci5zZGNfdXVpZF8ke2NvbnRyb2xsZXIuX3V1aWR9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKCR0aGlzLmhhc0NsYXNzKGBfd2l0aF9oYW5kbGVyYCkpIHtcbiAgICAgIHJlc3VsdCA9ICR0aGlzLmRhdGEoJ2hhbmRsZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNvbnRyb2xsZXJfaGFuZGxlciA9IHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL150aGlzLi8sICcnKTtcbiAgICAgIGlmIChjb250cm9sbGVyW2NvbnRyb2xsZXJfaGFuZGxlcl0pIHtcbiAgICAgICAgcmVzdWx0ID0gY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBwcmVwYXJlRGF0YSgkdGhpcy5kYXRhKCkpO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LmJpbmQoY29udHJvbGxlcikobmV3RGF0YSk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHBsaXN0LnB1c2goUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbigoeCkgPT4ge1xuICAgICAgICBsZXQgJG5ld0NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAkbmV3Q29udGVudC5hcHBlbmQoeCk7XG5cbiAgICAgICAgaWYgKCR0aGlzLmh0bWwoKSA9PT0gJycpIHtcbiAgICAgICAgICAkdGhpcy5hcHBlbmQoJzxkaXY+PC9kaXY+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkbmV3Q29udGVudCwgJHRoaXMuY2hpbGRyZW4oKSwgcHJvY2Vzcyk7XG4gICAgICB9KSk7XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59XG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUtleShub2RlKSB7XG4gIGlmIChub2RlWzBdLm5vZGVUeXBlID09PSAzKSB7XG4gICAgcmV0dXJuIGBURVhUX18ke25vZGVbMF0ubm9kZVZhbHVlfWA7XG4gIH1cbiAgY29uc3QgcmVzID0gW25vZGVbMF0udGFnTmFtZV07XG4gIGlmIChub2RlWzBdLm5vZGVOYW1lID09PSAnSU5QVVQnKSB7XG4gICAgW1snbmFtZScsICcnXSwgWyd0eXBlJywgJ3RleHQnXSwgWydpZCcsICcnXV0uZm9yRWFjaCgoW2tleSwgZGVmYXVsdFZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgYXR0ciA9IG5vZGUuYXR0cihrZXkpID8/IGRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgIHJlcy5wdXNoKGF0dHIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiByZXMuam9pbignX18nKTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlVHJlZSh7JGVsZW1lbnQsIGlkID0gW10sIHBhcmVudCA9IG51bGx9KSB7XG4gIGlkLnB1c2goZ2V0Tm9kZUtleSgkZWxlbWVudCkpO1xuICBjb25zdCBvYmogPSB7XG4gICAgJGVsZW1lbnQsXG4gICAgaWQ6IGlkLmpvaW4oJzo6JyksXG4gICAgZGVwdGg6IGlkLmxlbmd0aCxcbiAgICBpZHg6IDAsXG4gICAgZ2V0UmVhbFBhcmVudDogKCkgPT4gcGFyZW50LFxuICAgIGdldElkeDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5pZHggPSBNYXRoLm1heCgwLCAodGhpcy5nZXRSZWFsUGFyZW50KCk/LmdldElkeCgpID8/IC0xKSArICRlbGVtZW50LmluZGV4KCkgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzLmlkeDtcbiAgICB9LFxuICAgIG9wOiBudWxsLFxuICAgIHBhcmVudFxuICB9O1xuICBvYmouZ2V0SWR4LmJpbmQob2JqKTtcbiAgcmV0dXJuIFtvYmpdLmNvbmNhdCgkZWxlbWVudC5jb250ZW50cygpLnRvQXJyYXkoKS5tYXAoKHgpID0+IHJlY29uY2lsZVRyZWUoe1xuICAgICRlbGVtZW50OiAkKHgpLFxuICAgIGlkOiBpZC5zbGljZSgpLFxuICAgIHBhcmVudDogb2JqXG4gIH0pKS5mbGF0KCkpO1xuXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSkge1xuXG4gIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKHskZWxlbWVudDogJHJlYWxOb2RlfSk7XG4gIGNvbnN0ICRuZXcgPSByZWNvbmNpbGVUcmVlKHskZWxlbWVudDogJHZpcnR1YWxOb2RlfSk7XG4gICRvbGQubWFwKCh4LCBpKSA9PiB4LmlkeCA9IGkpO1xuICAkbmV3Lm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgY29uc3QgZGVwdGggPSBNYXRoLm1heCguLi4kbmV3LmNvbmNhdCgkb2xkKS5tYXAoeCA9PiB4LmRlcHRoKSk7XG4gIGNvbnN0IG9wX3N0ZXBzID0gbGNiRGlmZigkb2xkLCAkbmV3LCBkZXB0aCk7XG4gIGxldCB0b1JlbW92ZSA9IFtdO1xuICB3aW5kb3cuTUFJTiA9ICRyZWFsTm9kZTtcbiAgd2luZG93Lk9QUyA9IG9wX3N0ZXBzO1xuXG4gIG9wX3N0ZXBzLmZvckVhY2goKG9wX3N0ZXAsIGkpID0+IHtcbiAgICAgIGNvbnN0IHtvcCwgJGVsZW1lbnQsIGlkeH0gPSBvcF9zdGVwO1xuXG4gICAgICBpZiAob3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnKSB7XG4gICAgICAgIGxldCBjSWR4ID0gb3AuY291bnRlcnBhcnQuZ2V0SWR4KCk7XG4gICAgICAgIGlmIChjSWR4ICE9PSBpZHgpIHtcbiAgICAgICAgICBjb25zdCBlbGVtQmVmb3JlID0gb3Bfc3RlcC5nZXRCZWZvcmUoKTtcbiAgICAgICAgICBpZiAoIWVsZW1CZWZvcmUpIHtcbiAgICAgICAgICAgIG9wX3N0ZXAuZ2V0UmVhbFBhcmVudCgpLiRlbGVtZW50LnByZXBlbmQob3AuY291bnRlcnBhcnQuJGVsZW1lbnQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcC5jb3VudGVycGFydC4kZWxlbWVudC5pbnNlcnRBZnRlcihlbGVtQmVmb3JlLiRlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBzeW5jQXR0cmlidXRlcyhvcC5jb3VudGVycGFydC4kZWxlbWVudCwgJGVsZW1lbnQpO1xuICAgICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpLiRjb250YWluZXIgPSBvcC5jb3VudGVycGFydC4kZWxlbWVudDtcbiAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9SZW1vdmUucHVzaCgkZWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICRlbGVtZW50LnNhZmVSZW1vdmUoKTtcbiAgICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gJ2luc2VydCcpIHtcbiAgICAgICAgY29uc3Qge2FmdGVyLCB0YXJnZXR9ID0gb3Bfc3RlcC5vcDtcbiAgICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICAgJGVsZW1lbnQuaW5zZXJ0QWZ0ZXIoYWZ0ZXIuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCkge1xuICAgICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICAgfVxuICApXG4gIDtcblxuICB0b1JlbW92ZS5mb3JFYWNoKCgkZWxlbWVudCkgPT4gJGVsZW1lbnQuc2FmZVJlbW92ZSgpKTtcbn1cblxuZnVuY3Rpb24gc3luY0F0dHJpYnV0ZXMoJHJlYWwsICR2aXJ0dWFsKSB7XG4gIGNvbnN0IHJlYWxBdHRycyA9ICRyZWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIGNvbnN0IHZpcnR1YWxBdHRycyA9ICR2aXJ0dWFsWzBdLmF0dHJpYnV0ZXMgPz8gW107XG4gIC8vIFJlbW92ZSBtaXNzaW5nIGF0dHJzXG4gIFsuLi5yZWFsQXR0cnNdLmZvckVhY2goYXR0ciA9PiB7XG4gICAgaWYgKCEkdmlydHVhbC5pcyhgWyR7YXR0ci5uYW1lfV1gKSkge1xuICAgICAgJHJlYWwucmVtb3ZlQXR0cihhdHRyLm5hbWUpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gQWRkIG9yIHVwZGF0ZVxuICBbLi4udmlydHVhbEF0dHJzXS5mb3JFYWNoKGF0dHIgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXMuZmlsdGVyKHggPT4geC5kZXB0aCA9PT0gZGVwdGggJiYgIXgub3ApLmZvckVhY2goKG5ld05vZGUpID0+IHtcbiAgICBjb25zdCBvbGROb2RlID0gb2xkTm9kZXMuZmluZCgodGVtcE9sZE5vZGUpID0+IHtcbiAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgfSk7XG5cbiAgICBpZiAob2xkTm9kZSkge1xuICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICBvbGROb2RlLm9wID0ge3R5cGU6ICdrZWVwJywgaWR4OiBuZXdOb2RlLmlkeH07XG4gICAgICAgIG5ld05vZGUub3AgPSB7dHlwZTogJ2tlZXBfY291bnRlcnBhcnQnLCBjb3VudGVycGFydDogb2xkTm9kZX07XG4gICAgICAgIG9sZE5vZGUgPSBvbGROb2RlLnBhcmVudDtcbiAgICAgICAgbmV3Tm9kZSA9IG5ld05vZGUucGFyZW50O1xuICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcblxuICAgICAgfVxuICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgfVxuICB9KTtcbiAgaWYgKGRlcHRoID4gMSkge1xuICAgIHJldHVybiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGggLSAxKTtcbiAgfVxuXG4gIG9sZE5vZGVzLmZvckVhY2goKHgsIGkpID0+IHtcbiAgICBpZiAoIXgub3ApIHtcbiAgICAgIGNvbnN0IGlkeCA9IChvbGROb2Rlc1tpIC0gMV0/Lm9wLmlkeCA/PyAtMSkgKyAxO1xuICAgICAgeC5vcCA9IHt0eXBlOiAnZGVsZXRlJywgaWR4fVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQucGFyZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmVmb3JlKGVsZW1lbnQsIGlkeCkge1xuICAgIGNvbnN0IHN0YXJ0RGVwdGggPSBlbGVtZW50LmRlcHRoO1xuICAgIHdoaWxlIChpZHggPj0gMSAmJiBlbGVtZW50LmRlcHRoID49IHN0YXJ0RGVwdGgpIHtcbiAgICAgIGlkeCAtPSAxO1xuICAgICAgZWxlbWVudCA9IG5ld05vZGVzW2lkeF07XG4gICAgICBpZiAoZWxlbWVudC5kZXB0aCA9PT0gc3RhcnREZXB0aCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5vcC50eXBlID09PSAna2VlcF9jb3VudGVycGFydCcgPyBlbGVtZW50Lm9wLmNvdW50ZXJwYXJ0IDogZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuXG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSAnaW5zZXJ0JyA/ICdpbnNlcnRfaWdub3JlJyA6ICdpbnNlcnQnO1xuICAgICAgeC5vcCA9IHt0eXBlLCB0YXJnZXQsIGFmdGVyOiB4LmdldEJlZm9yZSgpfVxuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gW1xuICAgIC4uLm9sZE5vZGVzLFxuICAgIC4uLm5ld05vZGVzLFxuICBdO1xuXG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7cmVmcmVzaFByb2Nlc3MsIGlzUnVubmluZ1Byb2Nlc3N9ID0gcHJlcGFyZVJlZnJlc2hQcm9jZXNzKHByb2Nlc3MsIGxlYWZDb250cm9sbGVyKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihhcHAudGFnTmFtZXMsICRkb20sIGxlYWZDb250cm9sbGVyLCBwcm9jZXNzKS50aGVuKCgpID0+IHtcbiAgICByZXR1cm4gcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlciwgJGRvbSwgcmVmcmVzaFByb2Nlc3MpLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKCFpc1J1bm5pbmdQcm9jZXNzKSB7XG4gICAgICAgIHVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaChyZWZyZXNoUHJvY2Vzcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfSk7XG59Il0sIm5hbWVzIjpbImNvbnRyb2xsZXJGYWN0b3J5IiwicHJlcGFyZVJlZnJlc2hQcm9jZXNzIiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJ1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2giLCJnZXRVcmxQYXJhbSIsInByZXBhcmVEYXRhIiwiYXBwIiwidHJpZ2dlciIsImh0bWxGaWxlcyIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJDT05UUk9MTEVSX0NMQVNTIiwiY2xlYW5DYWNoZSIsImZpbmRTZGNUZ3MiLCIkY29udGFpbmVyIiwidGFnTmFtZUxpc3QiLCJwYXJlbnRDb250cm9sbGVyIiwiJGNoaWxkcmVuIiwiY2hpbGRyZW4iLCJlbXB0eUxpc3QiLCJlYWNoIiwiXyIsImVsZW1lbnQiLCIkZWxlbWVudCIsIiQiLCJ0YWdOYW1lIiwicHJvcCIsInRvTG93ZXJDYXNlIiwic3BsaXQiLCJpbkFycmF5IiwicHVzaCIsInRhZyIsInN1cGVyIiwic3BsaWNlIiwiZG9tIiwic3RhcnRzV2l0aCIsImFkZENsYXNzIiwiX3V1aWQiLCJjb25jYXQiLCJyZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIiwiY29udHJvbGxlciIsInVybCIsInVybFZhbHVlcyIsImtleV9pZHgiLCJfdXJsUGFyYW1zIiwiaGFzT3duUHJvcGVydHkiLCJrZXkiLCJyZSIsIlJlZ0V4cCIsInJlcGxhY2UiLCJzaGlmdCIsImxvYWRIVE1MRmlsZSIsImFyZ3MiLCJjb250ZW50VXJsIiwiX3RhZ05hbWUiLCJjb250ZW50UmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb25maXJtUGFnZUxvYWRlZCIsImNvbnRyb2xsZXJfbmFtZSIsInJlc3BvbnNlVGV4dCIsInJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIiwicHJvY2VzcyIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJsZW5ndGgiLCJtYXRjaGVzIiwiZXhlYyIsInBhcmFtcyIsInBhcnNlZENvbnRlbnRVcmwiLCJnZXRDb250cm9sbGVyIiwiJGVsZW0iLCJoYXNDbGFzcyIsImNsb3Nlc3QiLCJsb2FkRmlsZXNGcm9tQ29udHJvbGxlciIsImdldEVsZW1lbnRzIiwiYWxsIiwicmVzdWx0cyIsImh0bWxGaWxlIiwiYXBwZW5kIiwicmVsb2FkSFRNTENvbnRyb2xsZXIiLCJydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInN1cGVyVGFnTmFtZUxpc3QiLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCIkaHRtbCIsImVtcHR5IiwiYXR0ciIsIm1peGluS2V5IiwiX21peGlucyIsInRhZ0xpc3QiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJuZXdEYXRhIiwiYmluZCIsIngiLCIkbmV3Q29udGVudCIsImh0bWwiLCJyZWNvbmNpbGUiLCJnZXROb2RlS2V5Iiwibm9kZSIsIm5vZGVUeXBlIiwibm9kZVZhbHVlIiwicmVzIiwibm9kZU5hbWUiLCJmb3JFYWNoIiwiZGVmYXVsdFZhbHVlIiwiam9pbiIsInJlY29uY2lsZVRyZWUiLCJpZCIsInBhcmVudCIsIm9iaiIsImRlcHRoIiwiaWR4IiwiZ2V0UmVhbFBhcmVudCIsImdldElkeCIsIk1hdGgiLCJtYXgiLCJpbmRleCIsIm9wIiwiY29udGVudHMiLCJ0b0FycmF5IiwibWFwIiwic2xpY2UiLCJmbGF0IiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwiJG9sZCIsIiRuZXciLCJpIiwib3Bfc3RlcHMiLCJsY2JEaWZmIiwidG9SZW1vdmUiLCJ3aW5kb3ciLCJNQUlOIiwiT1BTIiwib3Bfc3RlcCIsInR5cGUiLCJjSWR4IiwiY291bnRlcnBhcnQiLCJlbGVtQmVmb3JlIiwiZ2V0QmVmb3JlIiwicHJlcGVuZCIsImluc2VydEFmdGVyIiwic3luY0F0dHJpYnV0ZXMiLCJzYWZlUmVtb3ZlIiwiYWZ0ZXIiLCJ0YXJnZXQiLCIkcmVhbCIsIiR2aXJ0dWFsIiwicmVhbEF0dHJzIiwiYXR0cmlidXRlcyIsInZpcnR1YWxBdHRycyIsImlzIiwibmFtZSIsInJlbW92ZUF0dHIiLCJ2YWx1ZSIsInJlbW92ZURhdGEiLCJPYmplY3QiLCJlbnRyaWVzIiwib2xkTm9kZXMiLCJuZXdOb2RlcyIsImZpbHRlciIsIm5ld05vZGUiLCJvbGROb2RlIiwidGVtcE9sZE5vZGUiLCJrZWVwVHJlZUJyYW5jaCIsInN0YXJ0RGVwdGgiLCJ0YWdnZWQiLCJzb3J0IiwiYSIsImIiLCJhVmFsIiwiYlZhbCIsInJlZnJlc2giLCJsZWFmQ29udHJvbGxlciIsInJlZnJlc2hQcm9jZXNzIiwiaXNSdW5uaW5nUHJvY2VzcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n\n}");
|
|
137
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CONTROLLER_CLASS: () => (/* binding */ CONTROLLER_CLASS),\n/* harmony export */ DATA_CONTROLLER_KEY: () => (/* binding */ DATA_CONTROLLER_KEY),\n/* harmony export */ cleanCache: () => (/* binding */ cleanCache),\n/* harmony export */ getController: () => (/* binding */ getController),\n/* harmony export */ loadFilesFromController: () => (/* binding */ loadFilesFromController),\n/* harmony export */ reconcile: () => (/* binding */ reconcile),\n/* harmony export */ refresh: () => (/* binding */ refresh),\n/* harmony export */ reloadHTMLController: () => (/* binding */ reloadHTMLController),\n/* harmony export */ reloadMethodHTML: () => (/* binding */ reloadMethodHTML),\n/* harmony export */ replaceTagElementsInContainer: () => (/* binding */ replaceTagElementsInContainer),\n/* harmony export */ runControllerFillContent: () => (/* binding */ runControllerFillContent)\n/* harmony export */ });\n/* harmony import */ var _sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _sdc_params_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sdc_params.js */ \"./src/simpleDomControl/sdc_params.js\");\n/* harmony import */ var _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdc_main.js */ \"./src/simpleDomControl/sdc_main.js\");\n/* harmony import */ var _sdc_events_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n\n\n\n\n\n/**\n * List of HTML files.\n * @type {{}}\n */\nlet htmlFiles = {};\nconst DATA_CONTROLLER_KEY = \"_controller_\";\nconst CONTROLLER_CLASS = \"_sdc_controller_\";\nfunction cleanCache() {\n htmlFiles = {};\n}\n\n/**\n * findSdcTgs Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. It collects all those\n * doms and returns a list of objects containing also the tag name the dom and the tag\n * names of the super controller\n *\n * @param {jquery} $container - jQuery container\n * @param {Array<string>} tagNameList - a string list with tag names.\n * @param {AbstractSDC} parentController - controller in surrounding\n * @return {Array} - a array of objects with all register tags found\n */\nfunction findSdcTgs($container, tagNameList, parentController) {\n if (!$container) {\n return [];\n }\n let $children = $container.children();\n let emptyList = [];\n $children.each(function (_, element) {\n let $element = $(element);\n let tagName = $element.prop(\"tagName\").toLowerCase().split(\"_\");\n if ($.inArray(tagName[0], tagNameList) >= 0) {\n emptyList.push({\n tag: tagName[0],\n super: tagName.splice(1) || [],\n dom: $element\n });\n } else if (tagName[0].startsWith(\"this.\")) {\n $element.addClass(`_bind_to_update_handler sdc_uuid_${parentController._uuid}`);\n } else {\n emptyList = emptyList.concat(findSdcTgs($element, tagNameList, parentController));\n }\n });\n return emptyList;\n}\n\n/**\n * replacePlaceholderController fills the parameter of the content\n * url this function uses the tag parameter\n *\n * @param controller - controller object\n * @param url - the origin content URL\n * @param urlValues - values for the url placeholder. In same order!!\n * @returns {string} - the correct URL with prefix.\n */\nfunction replacePlaceholderController(controller, url, urlValues) {\n for (let key_idx in controller._urlParams) {\n if (controller._urlParams.hasOwnProperty(key_idx)) {\n let key = controller._urlParams[key_idx];\n let re = RegExp(\"%\\\\(\" + key + \"\\\\)\\\\w\", \"gm\");\n url = url.replace(re, \"\" + urlValues.shift());\n }\n }\n return url;\n}\n\n/**\n * loadHTMLFile loads the HTML content file from the server via ajax request.\n *\n * If the HTML file is loaded already the function takes no action.\n *\n * @param {AbstractSDC} controller - a content URL from the controller.\n * @param {object} args - get args.\n * @returns {Promise<jQuery|Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(controller, args) {\n const {\n contentUrl,\n _tagName,\n contentReload\n } = controller;\n if (!contentUrl) {\n return Promise.resolve(false);\n } else if (htmlFiles[_tagName]) {\n return Promise.resolve(htmlFiles[_tagName]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = \"content\";\n return $.get(contentUrl, args).then(function (data) {\n if (!contentReload) {\n htmlFiles[_tagName] = data;\n }\n return data;\n }).catch(function (err) {\n if (err.status === 301) {\n const data = err.responseJSON;\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"_RedirectOnView\", data[\"url-link\"]);\n }\n if (typeof controller.confirmPageLoaded === \"function\") {\n (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)(\"navLoaded\", {\n controller_name: () => err.status\n });\n }\n throw `<sdc-error data-code=\"${err.status}\">${err.responseText}</sdc-error>`;\n });\n}\n\n/**\n * replaceAllTagElementsInContainer replaces all registered tags by the controller.\n * In this step the life-cycle starts.\n *\n * @param {jquery} $container - given container\n * @param {AbstractSDC} parentController - parent contoller surrounded the container\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceAllTagElementsInContainer($container, parentController, process = null) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController, process);\n}\n\n/**\n * parseContentUrl uses the content URL prefix to marge the\n * correct URL. Also parses the url parameter\n *\n * @param {AbstractSDC} controller - controller object\n * @returns {{url: String, args: Array}} - the correct URL with prefix.\n */\nfunction parseContentUrl(controller) {\n let url = controller.contentUrl;\n if (controller && controller._urlParams.length === 0) {\n let re = /%\\(([^)]+)\\)\\w/gm;\n let matches;\n controller._urlParams = [];\n while (matches = re.exec(url)) {\n controller._urlParams.push(matches[1]);\n controller.contentReload = true;\n }\n }\n let params = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.getUrlParam)(controller, controller.$container);\n if (controller._urlParams.length) {\n url = replacePlaceholderController(controller, url, params);\n }\n controller.parsedContentUrl = url;\n return {\n url: url,\n args: params[params.length - 1]\n };\n}\n\n/**\n *\n * @param {jquery} $elem\n * @return {AbstractSDC}\n */\nfunction getController($elem) {\n if ($elem.hasClass(CONTROLLER_CLASS)) {\n return $elem.data(`${DATA_CONTROLLER_KEY}`);\n }\n return $elem.closest(`.${CONTROLLER_CLASS}`).data(`${DATA_CONTROLLER_KEY}`);\n}\n\n/**\n * loadFilesFromController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n * The content is saved as jQuery object to the controller.$content property of\n * the controller.\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction loadFilesFromController(controller) {\n let getElements = {\n args: {}\n };\n if (controller.contentUrl) {\n getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller, getElements.args)]).then(function (results) {\n let htmlFile = results[0];\n if (htmlFile) {\n try {\n return $(htmlFile);\n } catch {\n return $(\"<div></div>\").append(htmlFile);\n }\n }\n return null;\n });\n}\n\n/**\n * reloadHTMLController loads the content (HTML) of a\n * Controller. If you have an alternative content URL is registered, for this\n * controller the origin content URL is ignored.\n *\n *\n * @param {AbstractSDC} controller - a instance of a JavaScript controller object.\n *\n * @returns {Promise<jQuery>} - the promise waits to the files are loaded. it returns the jQuery object.\n */\nfunction reloadHTMLController(controller) {\n if (controller.contentUrl) {\n let getElements = parseContentUrl(controller);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller, getElements.args);\n }\n return new Promise(resolve => {\n resolve($());\n });\n}\n\n/**\n *\n * @param {jquery} $element\n * @param {string} tagName\n * @param {Array<string>} superTagNameList\n * @param {AbstractSDC} parentController\n * @param {Object} process - Process object containing the refresh process\n * @returns {Promise}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController, process) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller, process);\n }\n controller = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.controllerFactory)(parentController, $element, tagName, superTagNameList);\n $element.data(DATA_CONTROLLER_KEY, controller);\n $element.addClass(CONTROLLER_CLASS);\n return (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.runControlFlowFunctions)(controller, process);\n}\n\n/**\n * runControllerFillContent empties the registered tag and replaces it by the controller\n * content. It sets the CSS tags for the relation with the CSS files.\n *\n * @param {AbstractSDC} controller - js controller instance\n * @param {jquery} $html - jQuery loaded content\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html, process = null) {\n if ($html && $html.length > 0) {\n controller.$container.empty();\n controller.$container.attr(controller._tagName, \"\");\n for (let mixinKey in controller._mixins) {\n controller.$container.attr(controller._mixins[mixinKey]._tagName, \"\");\n }\n controller.$container.append($html);\n }\n return replaceAllTagElementsInContainer(controller.$container, controller, process);\n}\n\n/**\n * replaceTagElementsInContainer Finds all registered tags in a container. But it ignores\n * registered tags in registered tags. For each registered tag it loads the content.\n * Afterwards it starts the life cycle of the controller. I the next step it starts the\n * procedure for the child elements of the controller tag.\n *\n * @param {Array<string>} tagList - list of all registered tags\n * @param {jquery} $container - jQuery container to find the tags\n * @param {AbstractSDC} parentController - controller in surrounding\n * @param {Object} process - Process object containing the refresh process\n */\nfunction replaceTagElementsInContainer(tagList, $container, parentController, process) {\n return new Promise(resolve => {\n let tagDescriptionElements = findSdcTgs($container, tagList, parentController);\n let tagCount = tagDescriptionElements.length;\n if (tagCount === 0) {\n return resolve();\n }\n for (let elementIndex = 0; elementIndex < tagDescriptionElements.length; elementIndex++) {\n runReplaceTagElementsInContainer(tagDescriptionElements[elementIndex].dom, tagDescriptionElements[elementIndex].tag, tagDescriptionElements[elementIndex].super, parentController, process).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container, process) {\n return _reloadMethodHTML(controller, $container ?? controller.$container, process);\n}\nfunction _reloadMethodHTML(controller, $dom, process) {\n const plist = [];\n $dom.find(`._bind_to_update_handler.sdc_uuid_${controller._uuid}`).each(function () {\n const $this = $(this);\n let result = undefined;\n if ($this.hasClass(`_with_handler`)) {\n result = $this.data(\"handler\");\n } else {\n let controller_handler = this.tagName.toLowerCase().replace(/^this./, \"\");\n if (controller[controller_handler]) {\n result = controller[controller_handler];\n }\n }\n if (typeof result === \"function\") {\n const newData = (0,_sdc_params_js__WEBPACK_IMPORTED_MODULE_1__.prepareData)($this.data());\n result = result.bind(controller)(newData);\n }\n if (result) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n if ($this.html() === \"\") {\n $this.append(\"<div></div>\");\n }\n return _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.reconcile(controller, $newContent, $this.children(), process);\n }));\n }\n });\n return Promise.all(plist);\n}\nfunction getNodeKey(node) {\n if (node[0].nodeType === 3) {\n return `TEXT__${node[0].nodeValue}`;\n }\n const res = [node[0].tagName];\n if (node[0].nodeName === \"INPUT\") {\n [[\"name\", \"\"], [\"type\", \"text\"], [\"id\", \"\"]].forEach(([key, defaultValue]) => {\n const attr = node.attr(key) ?? defaultValue;\n if (attr) {\n res.push(attr);\n }\n });\n }\n return res.join(\"__\");\n}\nfunction reconcileTree({\n $element,\n id = [],\n parent = null\n}) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join(\"::\"),\n depth: id.length,\n idx: 0,\n getRealParent: () => parent,\n getIdx: function () {\n this.idx = Math.max(0, (this.getRealParent()?.getIdx() ?? -1) + $element.index() + 1);\n return this.idx;\n },\n op: null,\n parent\n };\n obj.getIdx.bind(obj);\n return [obj].concat($element.contents().toArray().map(x => reconcileTree({\n $element: $(x),\n id: id.slice(),\n parent: obj\n })).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree({\n $element: $realNode\n });\n const $new = reconcileTree({\n $element: $virtualNode\n });\n $old.map((x, i) => x.idx = i);\n $new.map((x, i) => x.idx = i);\n const depth = Math.max(...$new.concat($old).map(x => x.depth));\n const op_steps = lcbDiff($old, $new, depth);\n let toRemove = [];\n window.MAIN = $realNode;\n window.OPS = op_steps;\n op_steps.forEach((op_step, i) => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === \"keep_counterpart\") {\n let cIdx = op.counterpart.getIdx();\n if (cIdx !== idx) {\n const elemBefore = op_step.getBefore();\n if (!elemBefore) {\n op_step.getRealParent().$element.prepend(op.counterpart.$element);\n } else {\n op.counterpart.$element.insertAfter(elemBefore.$element);\n }\n }\n syncAttributes(op.counterpart.$element, $element);\n if ($element.hasClass(CONTROLLER_CLASS)) {\n $element.data(DATA_CONTROLLER_KEY).$container = op.counterpart.$element;\n $element.data(DATA_CONTROLLER_KEY, null);\n }\n toRemove.push($element);\n } else if (op.type === \"delete\") {\n $element.safeRemove();\n } else if (op.type === \"insert\") {\n const {\n after,\n target\n } = op_step.op;\n if (after) {\n $element.insertAfter(after.$element);\n } else if (target) {\n target.$element.prepend($element);\n }\n }\n });\n toRemove.forEach($element => $element.safeRemove());\n}\nfunction syncAttributes($real, $virtual) {\n const realAttrs = $real[0].attributes ?? [];\n const virtualAttrs = $virtual[0].attributes ?? [];\n // Remove missing attrs\n [...realAttrs].forEach(attr => {\n if (!$virtual.is(`[${attr.name}]`)) {\n $real.removeAttr(attr.name);\n }\n });\n\n // Add or update\n [...virtualAttrs].forEach(attr => {\n if (!attr.name.startsWith(`data`) && $real.attr(attr.name) !== attr.value) {\n $real.attr(attr.name, attr.value);\n }\n });\n $real.removeData();\n Object.entries($virtual.data()).forEach(([key, value]) => {\n $real.data(key, value);\n });\n}\n\n/**\n * LCB (Longest Common Branch) finds matching branches and reserves them!\n *\n * @param oldNodes\n * @param newNodes\n * @param depth\n * @returns {*|*[]}\n */\nfunction lcbDiff(oldNodes, newNodes, depth) {\n newNodes.filter(x => x.depth === depth && !x.op).forEach(newNode => {\n const oldNode = oldNodes.find(tempOldNode => {\n return !tempOldNode.op && tempOldNode.id === newNode.id;\n });\n if (oldNode) {\n const keepTreeBranch = (oldNode, newNode) => {\n oldNode.op = {\n type: \"keep\",\n idx: newNode.idx\n };\n newNode.op = {\n type: \"keep_counterpart\",\n counterpart: oldNode\n };\n oldNode = oldNode.parent;\n newNode = newNode.parent;\n if (!oldNode || oldNode.op || newNode?.op) {\n return;\n }\n keepTreeBranch(oldNode, newNode);\n };\n keepTreeBranch(oldNode, newNode);\n }\n });\n if (depth > 1) {\n return lcbDiff(oldNodes, newNodes, depth - 1);\n }\n oldNodes.forEach((x, i) => {\n if (!x.op) {\n const idx = (oldNodes[i - 1]?.op.idx ?? -1) + 1;\n x.op = {\n type: \"delete\",\n idx\n };\n }\n });\n function getRealParent(element) {\n if (!element.parent) {\n return null;\n }\n return element.parent.op.type === \"keep_counterpart\" ? element.parent.op.counterpart : element.parent;\n }\n function getBefore(element, idx) {\n const startDepth = element.depth;\n while (idx >= 1 && element.depth >= startDepth) {\n idx -= 1;\n element = newNodes[idx];\n if (element.depth === startDepth) {\n return element.op.type === \"keep_counterpart\" ? element.op.counterpart : element;\n }\n }\n return null;\n }\n newNodes.forEach((x, i) => {\n x.getBefore = () => getBefore(x, i);\n x.getRealParent = () => getRealParent(x);\n if (!x.op) {\n const target = x.getRealParent();\n const type = target?.op.type === \"insert\" ? \"insert_ignore\" : \"insert\";\n x.op = {\n type,\n target,\n after: x.getBefore()\n };\n }\n });\n const tagged = [...oldNodes, ...newNodes];\n return tagged.sort((a, b) => {\n const aVal = a.op?.idx ?? a.idx;\n const bVal = b.op?.idx ?? b.idx;\n return aVal - bVal;\n });\n}\n\n/**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {Object} process - Process object containing the refresh process\n * @return {Promise<void>}\n */\n\nfunction refresh($dom, leafController, process = null) {\n if (!leafController) {\n leafController = getController($dom);\n }\n if (!leafController) {\n return Promise.resolve();\n }\n const {\n refreshProcess,\n isRunningProcess\n } = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.prepareRefreshProcess)(process, leafController);\n $dom ??= leafController.$container;\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $dom, leafController, process).then(() => {\n return reloadMethodHTML(leafController, $dom, refreshProcess).then(() => {\n if (!isRunningProcess) {\n (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.updateEventAndTriggerOnRefresh)(refreshProcess);\n }\n });\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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InNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz8yNGI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbnRyb2xsZXJGYWN0b3J5LFxuICBwcmVwYXJlUmVmcmVzaFByb2Nlc3MsXG4gIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLFxuICB1cGRhdGVFdmVudEFuZFRyaWdnZXJPblJlZnJlc2gsXG59IGZyb20gXCIuL3NkY19jb250cm9sbGVyLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbSwgcHJlcGFyZURhdGEgfSBmcm9tIFwiLi9zZGNfcGFyYW1zLmpzXCI7XG5pbXBvcnQgeyBhcHAgfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHsgdHJpZ2dlciB9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuLyoqXG4gKiBMaXN0IG9mIEhUTUwgZmlsZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBodG1sRmlsZXMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFfQ09OVFJPTExFUl9LRVkgPSBcIl9jb250cm9sbGVyX1wiO1xuZXhwb3J0IGNvbnN0IENPTlRST0xMRVJfQ0xBU1MgPSBcIl9zZGNfY29udHJvbGxlcl9cIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuQ2FjaGUoKSB7XG4gIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gIGlmICghJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoXCJ0YWdOYW1lXCIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCJfXCIpO1xuICAgIGlmICgkLmluQXJyYXkodGFnTmFtZVswXSwgdGFnTmFtZUxpc3QpID49IDApIHtcbiAgICAgIGVtcHR5TGlzdC5wdXNoKHtcbiAgICAgICAgdGFnOiB0YWdOYW1lWzBdLFxuICAgICAgICBzdXBlcjogdGFnTmFtZS5zcGxpY2UoMSkgfHwgW10sXG4gICAgICAgIGRvbTogJGVsZW1lbnQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aChcInRoaXMuXCIpKSB7XG4gICAgICAkZWxlbWVudC5hZGRDbGFzcyhcbiAgICAgICAgYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW1wdHlMaXN0ID0gZW1wdHlMaXN0LmNvbmNhdChcbiAgICAgICAgZmluZFNkY1RncygkZWxlbWVudCwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgZm9yIChsZXQga2V5X2lkeCBpbiBjb250cm9sbGVyLl91cmxQYXJhbXMpIHtcbiAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbi8qKlxuICogbG9hZEhUTUxGaWxlIGxvYWRzIHRoZSBIVE1MIGNvbnRlbnQgZmlsZSBmcm9tIHRoZSBzZXJ2ZXIgdmlhIGFqYXggcmVxdWVzdC5cbiAqXG4gKiBJZiB0aGUgSFRNTCBmaWxlIGlzIGxvYWRlZCBhbHJlYWR5IHRoZSBmdW5jdGlvbiB0YWtlcyBubyBhY3Rpb24uXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnl8Qm9vbGVhbj59IC0gd2FpdHMgZm9yIHRoZSBmaWxlIHRvIGJlIGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIsIGFyZ3MpIHtcbiAgY29uc3QgeyBjb250ZW50VXJsLCBfdGFnTmFtZSwgY29udGVudFJlbG9hZCB9ID0gY29udHJvbGxlcjtcbiAgaWYgKCFjb250ZW50VXJsKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gIH0gZWxzZSBpZiAoaHRtbEZpbGVzW190YWdOYW1lXSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHRtbEZpbGVzW190YWdOYW1lXSk7XG4gIH1cblxuICBhcmdzLlZFUlNJT04gPSBhcHAuVkVSU0lPTjtcbiAgYXJncy5fbWV0aG9kID0gXCJjb250ZW50XCI7XG5cbiAgcmV0dXJuICQuZ2V0KGNvbnRlbnRVcmwsIGFyZ3MpXG4gICAgLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGlmICghY29udGVudFJlbG9hZCkge1xuICAgICAgICBodG1sRmlsZXNbX3RhZ05hbWVdID0gZGF0YTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSlcbiAgICAuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDMwMSkge1xuICAgICAgICBjb25zdCBkYXRhID0gZXJyLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgdHJpZ2dlcihcIl9SZWRpcmVjdE9uVmlld1wiLCBkYXRhW1widXJsLWxpbmtcIl0pO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBjb250cm9sbGVyLmNvbmZpcm1QYWdlTG9hZGVkID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHJpZ2dlcihcIm5hdkxvYWRlZFwiLCB7IGNvbnRyb2xsZXJfbmFtZTogKCkgPT4gZXJyLnN0YXR1cyB9KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9jZXNzIC0gUHJvY2VzcyBvYmplY3QgY29udGFpbmluZyB0aGUgcmVmcmVzaCBwcm9jZXNzXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKFxuICAkY29udGFpbmVyLFxuICBwYXJlbnRDb250cm9sbGVyLFxuICBwcm9jZXNzID0gbnVsbCxcbikge1xuICBwYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlciB8fCAkY29udGFpbmVyLmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGNvbnRhaW5lcixcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgIHByb2Nlc3MsXG4gICk7XG59XG5cbi8qKlxuICogcGFyc2VDb250ZW50VXJsIHVzZXMgdGhlIGNvbnRlbnQgVVJMIHByZWZpeCB0byBtYXJnZSB0aGVcbiAqIGNvcnJlY3QgVVJMLiBBbHNvIHBhcnNlcyB0aGUgdXJsIHBhcmFtZXRlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHJldHVybnMge3t1cmw6IFN0cmluZywgYXJnczogQXJyYXl9fSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgbGV0IHVybCA9IGNvbnRyb2xsZXIuY29udGVudFVybDtcbiAgaWYgKGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5fdXJsUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxldCByZSA9IC8lXFwoKFteKV0rKVxcKVxcdy9nbTtcbiAgICBsZXQgbWF0Y2hlcztcbiAgICBjb250cm9sbGVyLl91cmxQYXJhbXMgPSBbXTtcbiAgICB3aGlsZSAoKG1hdGNoZXMgPSByZS5leGVjKHVybCkpKSB7XG4gICAgICBjb250cm9sbGVyLl91cmxQYXJhbXMucHVzaChtYXRjaGVzWzFdKTtcbiAgICAgIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbGV0IHBhcmFtcyA9IGdldFVybFBhcmFtKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuJGNvbnRhaW5lcik7XG4gIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgdXJsID0gcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlcihjb250cm9sbGVyLCB1cmwsIHBhcmFtcyk7XG4gIH1cblxuICBjb250cm9sbGVyLnBhcnNlZENvbnRlbnRVcmwgPSB1cmw7XG5cbiAgcmV0dXJuIHsgdXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV0gfTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xsZXIoJGVsZW0pIHtcbiAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgcmV0dXJuICRlbGVtLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgfVxuICByZXR1cm4gJGVsZW0uY2xvc2VzdChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG59XG5cbi8qKlxuICogbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIgbG9hZHMgdGhlIGNvbnRlbnQgKEhUTUwpIG9mIGFcbiAqIENvbnRyb2xsZXIuIElmIHlvdSBoYXZlIGFuIGFsdGVybmF0aXZlIGNvbnRlbnQgVVJMIGlzIHJlZ2lzdGVyZWQsIGZvciB0aGlzXG4gKiBjb250cm9sbGVyIHRoZSBvcmlnaW4gY29udGVudCBVUkwgaXMgaWdub3JlZC5cbiAqXG4gKiBUaGUgY29udGVudCBpcyBzYXZlZCBhcyBqUXVlcnkgb2JqZWN0IHRvIHRoZSBjb250cm9sbGVyLiRjb250ZW50IHByb3BlcnR5IG9mXG4gKiB0aGUgY29udHJvbGxlci5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0gYSBpbnN0YW5jZSBvZiBhIEphdmFTY3JpcHQgY29udHJvbGxlciBvYmplY3QuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICBsZXQgZ2V0RWxlbWVudHMgPSB7IGFyZ3M6IHt9IH07XG4gIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICBnZXRFbGVtZW50cyA9IHBhcnNlQ29udGVudFVybChjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLmNvbnRlbnRVcmwgPSBnZXRFbGVtZW50cy51cmw7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5hbGwoW2xvYWRIVE1MRmlsZShjb250cm9sbGVyLCBnZXRFbGVtZW50cy5hcmdzKV0pLnRoZW4oXG4gICAgZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgIGxldCBodG1sRmlsZSA9IHJlc3VsdHNbMF07XG4gICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gJChodG1sRmlsZSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiAkKFwiPGRpdj48L2Rpdj5cIikuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICApO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpO1xuICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICByZXR1cm4gbG9hZEhUTUxGaWxlKGNvbnRyb2xsZXIsIGdldEVsZW1lbnRzLmFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcmVzb2x2ZSgkKCkpO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZVxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBzdXBlclRhZ05hbWVMaXN0XG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybnMge1Byb21pc2V9XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKFxuICAkZWxlbWVudCxcbiAgdGFnTmFtZSxcbiAgc3VwZXJUYWdOYW1lTGlzdCxcbiAgcGFyZW50Q29udHJvbGxlcixcbiAgcHJvY2Vzcyxcbikge1xuICBsZXQgY29udHJvbGxlciA9ICRlbGVtZW50LmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSk7XG4gIGlmIChjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCBjb250cm9sbGVyLCBwcm9jZXNzKTtcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyRmFjdG9yeShcbiAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICRlbGVtZW50LFxuICAgIHRhZ05hbWUsXG4gICAgc3VwZXJUYWdOYW1lTGlzdCxcbiAgKTtcbiAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBjb250cm9sbGVyKTtcbiAgJGVsZW1lbnQuYWRkQ2xhc3MoQ09OVFJPTExFUl9DTEFTUyk7XG4gIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCBwcm9jZXNzKTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuZW1wdHkoKTtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl90YWdOYW1lLCBcIlwiKTtcbiAgICBmb3IgKGxldCBtaXhpbktleSBpbiBjb250cm9sbGVyLl9taXhpbnMpIHtcbiAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX21peGluc1ttaXhpbktleV0uX3RhZ05hbWUsIFwiXCIpO1xuICAgIH1cbiAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgfVxuXG4gIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgY29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApO1xufVxuXG4vKipcbiAqIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBGb3IgZWFjaCByZWdpc3RlcmVkIHRhZyBpdCBsb2FkcyB0aGUgY29udGVudC5cbiAqIEFmdGVyd2FyZHMgaXQgc3RhcnRzIHRoZSBsaWZlIGN5Y2xlIG9mIHRoZSBjb250cm9sbGVyLiBJIHRoZSBuZXh0IHN0ZXAgaXQgc3RhcnRzIHRoZVxuICogcHJvY2VkdXJlIGZvciB0aGUgY2hpbGQgZWxlbWVudHMgb2YgdGhlIGNvbnRyb2xsZXIgdGFnLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTGlzdCAtIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgdGFnc1xuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyIHRvIGZpbmQgdGhlIHRhZ3NcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gIHRhZ0xpc3QsXG4gICRjb250YWluZXIsXG4gIHBhcmVudENvbnRyb2xsZXIsXG4gIHByb2Nlc3MsXG4pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgbGV0IHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMgPSBmaW5kU2RjVGdzKFxuICAgICAgJGNvbnRhaW5lcixcbiAgICAgIHRhZ0xpc3QsXG4gICAgICBwYXJlbnRDb250cm9sbGVyLFxuICAgICk7XG4gICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAodGFnQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZm9yIChcbiAgICAgIGxldCBlbGVtZW50SW5kZXggPSAwO1xuICAgICAgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG4gICAgICBlbGVtZW50SW5kZXgrK1xuICAgICkge1xuICAgICAgcnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5kb20sXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS5zdXBlcixcbiAgICAgICAgcGFyZW50Q29udHJvbGxlcixcbiAgICAgICAgcHJvY2VzcyxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgIGlmICh0YWdDb3VudCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxvYWRNZXRob2RIVE1MKGNvbnRyb2xsZXIsICRjb250YWluZXIsIHByb2Nlc3MpIHtcbiAgcmV0dXJuIF9yZWxvYWRNZXRob2RIVE1MKFxuICAgIGNvbnRyb2xsZXIsXG4gICAgJGNvbnRhaW5lciA/PyBjb250cm9sbGVyLiRjb250YWluZXIsXG4gICAgcHJvY2VzcyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGRvbSwgcHJvY2Vzcykge1xuICBjb25zdCBwbGlzdCA9IFtdO1xuXG4gICRkb21cbiAgICAuZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKVxuICAgIC5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgIGxldCByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoJHRoaXMuaGFzQ2xhc3MoYF93aXRoX2hhbmRsZXJgKSkge1xuICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKFwiaGFuZGxlclwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWVcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5yZXBsYWNlKC9edGhpcy4vLCBcIlwiKTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBwcmVwYXJlRGF0YSgkdGhpcy5kYXRhKCkpO1xuICAgICAgICByZXN1bHQgPSByZXN1bHQuYmluZChjb250cm9sbGVyKShuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgcGxpc3QucHVzaChcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUocmVzdWx0KS50aGVuKCh4KSA9PiB7XG4gICAgICAgICAgICBsZXQgJG5ld0NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuXG4gICAgICAgICAgICBpZiAoJHRoaXMuaHRtbCgpID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICR0aGlzLmFwcGVuZChcIjxkaXY+PC9kaXY+XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShcbiAgICAgICAgICAgICAgY29udHJvbGxlcixcbiAgICAgICAgICAgICAgJG5ld0NvbnRlbnQsXG4gICAgICAgICAgICAgICR0aGlzLmNoaWxkcmVuKCksXG4gICAgICAgICAgICAgIHByb2Nlc3MsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgIHJldHVybiBgVEVYVF9fJHtub2RlWzBdLm5vZGVWYWx1ZX1gO1xuICB9XG4gIGNvbnN0IHJlcyA9IFtub2RlWzBdLnRhZ05hbWVdO1xuICBpZiAobm9kZVswXS5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiKSB7XG4gICAgW1xuICAgICAgW1wibmFtZVwiLCBcIlwiXSxcbiAgICAgIFtcInR5cGVcIiwgXCJ0ZXh0XCJdLFxuICAgICAgW1wiaWRcIiwgXCJcIl0sXG4gICAgXS5mb3JFYWNoKChba2V5LCBkZWZhdWx0VmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5hdHRyKGtleSkgPz8gZGVmYXVsdFZhbHVlO1xuICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHJlcy5qb2luKFwiX19cIik7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudCwgaWQgPSBbXSwgcGFyZW50ID0gbnVsbCB9KSB7XG4gIGlkLnB1c2goZ2V0Tm9kZUtleSgkZWxlbWVudCkpO1xuICBjb25zdCBvYmogPSB7XG4gICAgJGVsZW1lbnQsXG4gICAgaWQ6IGlkLmpvaW4oXCI6OlwiKSxcbiAgICBkZXB0aDogaWQubGVuZ3RoLFxuICAgIGlkeDogMCxcbiAgICBnZXRSZWFsUGFyZW50OiAoKSA9PiBwYXJlbnQsXG4gICAgZ2V0SWR4OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmlkeCA9IE1hdGgubWF4KFxuICAgICAgICAwLFxuICAgICAgICAodGhpcy5nZXRSZWFsUGFyZW50KCk/LmdldElkeCgpID8/IC0xKSArICRlbGVtZW50LmluZGV4KCkgKyAxLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0aGlzLmlkeDtcbiAgICB9LFxuICAgIG9wOiBudWxsLFxuICAgIHBhcmVudCxcbiAgfTtcbiAgb2JqLmdldElkeC5iaW5kKG9iaik7XG4gIHJldHVybiBbb2JqXS5jb25jYXQoXG4gICAgJGVsZW1lbnRcbiAgICAgIC5jb250ZW50cygpXG4gICAgICAudG9BcnJheSgpXG4gICAgICAubWFwKCh4KSA9PlxuICAgICAgICByZWNvbmNpbGVUcmVlKHtcbiAgICAgICAgICAkZWxlbWVudDogJCh4KSxcbiAgICAgICAgICBpZDogaWQuc2xpY2UoKSxcbiAgICAgICAgICBwYXJlbnQ6IG9iaixcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuZmxhdCgpLFxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVjb25jaWxlKCR2aXJ0dWFsTm9kZSwgJHJlYWxOb2RlKSB7XG4gIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKHsgJGVsZW1lbnQ6ICRyZWFsTm9kZSB9KTtcbiAgY29uc3QgJG5ldyA9IHJlY29uY2lsZVRyZWUoeyAkZWxlbWVudDogJHZpcnR1YWxOb2RlIH0pO1xuICAkb2xkLm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICAkbmV3Lm1hcCgoeCwgaSkgPT4gKHguaWR4ID0gaSkpO1xuICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KC4uLiRuZXcuY29uY2F0KCRvbGQpLm1hcCgoeCkgPT4geC5kZXB0aCkpO1xuICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICBsZXQgdG9SZW1vdmUgPSBbXTtcbiAgd2luZG93Lk1BSU4gPSAkcmVhbE5vZGU7XG4gIHdpbmRvdy5PUFMgPSBvcF9zdGVwcztcblxuICBvcF9zdGVwcy5mb3JFYWNoKChvcF9zdGVwLCBpKSA9PiB7XG4gICAgY29uc3QgeyBvcCwgJGVsZW1lbnQsIGlkeCB9ID0gb3Bfc3RlcDtcblxuICAgIGlmIChvcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIikge1xuICAgICAgbGV0IGNJZHggPSBvcC5jb3VudGVycGFydC5nZXRJZHgoKTtcbiAgICAgIGlmIChjSWR4ICE9PSBpZHgpIHtcbiAgICAgICAgY29uc3QgZWxlbUJlZm9yZSA9IG9wX3N0ZXAuZ2V0QmVmb3JlKCk7XG4gICAgICAgIGlmICghZWxlbUJlZm9yZSkge1xuICAgICAgICAgIG9wX3N0ZXAuZ2V0UmVhbFBhcmVudCgpLiRlbGVtZW50LnByZXBlbmQob3AuY291bnRlcnBhcnQuJGVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50Lmluc2VydEFmdGVyKGVsZW1CZWZvcmUuJGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN5bmNBdHRyaWJ1dGVzKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50LCAkZWxlbWVudCk7XG4gICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgJGVsZW1lbnQuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKS4kY29udGFpbmVyID0gb3AuY291bnRlcnBhcnQuJGVsZW1lbnQ7XG4gICAgICAgICRlbGVtZW50LmRhdGEoREFUQV9DT05UUk9MTEVSX0tFWSwgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRvUmVtb3ZlLnB1c2goJGVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJkZWxldGVcIikge1xuICAgICAgJGVsZW1lbnQuc2FmZVJlbW92ZSgpO1xuICAgIH0gZWxzZSBpZiAob3AudHlwZSA9PT0gXCJpbnNlcnRcIikge1xuICAgICAgY29uc3QgeyBhZnRlciwgdGFyZ2V0IH0gPSBvcF9zdGVwLm9wO1xuICAgICAgaWYgKGFmdGVyKSB7XG4gICAgICAgICRlbGVtZW50Lmluc2VydEFmdGVyKGFmdGVyLiRlbGVtZW50KTtcbiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHRvUmVtb3ZlLmZvckVhY2goKCRlbGVtZW50KSA9PiAkZWxlbWVudC5zYWZlUmVtb3ZlKCkpO1xufVxuXG5mdW5jdGlvbiBzeW5jQXR0cmlidXRlcygkcmVhbCwgJHZpcnR1YWwpIHtcbiAgY29uc3QgcmVhbEF0dHJzID0gJHJlYWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgY29uc3QgdmlydHVhbEF0dHJzID0gJHZpcnR1YWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgLy8gUmVtb3ZlIG1pc3NpbmcgYXR0cnNcbiAgWy4uLnJlYWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghJHZpcnR1YWwuaXMoYFske2F0dHIubmFtZX1dYCkpIHtcbiAgICAgICRyZWFsLnJlbW92ZUF0dHIoYXR0ci5uYW1lKTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIEFkZCBvciB1cGRhdGVcbiAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgIGlmICghYXR0ci5uYW1lLnN0YXJ0c1dpdGgoYGRhdGFgKSAmJiAkcmVhbC5hdHRyKGF0dHIubmFtZSkgIT09IGF0dHIudmFsdWUpIHtcbiAgICAgICRyZWFsLmF0dHIoYXR0ci5uYW1lLCBhdHRyLnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuXG4gICRyZWFsLnJlbW92ZURhdGEoKTtcbiAgT2JqZWN0LmVudHJpZXMoJHZpcnR1YWwuZGF0YSgpKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBMQ0IgKExvbmdlc3QgQ29tbW9uIEJyYW5jaCkgZmluZHMgbWF0Y2hpbmcgYnJhbmNoZXMgYW5kIHJlc2VydmVzIHRoZW0hXG4gKlxuICogQHBhcmFtIG9sZE5vZGVzXG4gKiBAcGFyYW0gbmV3Tm9kZXNcbiAqIEBwYXJhbSBkZXB0aFxuICogQHJldHVybnMgeyp8KltdfVxuICovXG5mdW5jdGlvbiBsY2JEaWZmKG9sZE5vZGVzLCBuZXdOb2RlcywgZGVwdGgpIHtcbiAgbmV3Tm9kZXNcbiAgICAuZmlsdGVyKCh4KSA9PiB4LmRlcHRoID09PSBkZXB0aCAmJiAheC5vcClcbiAgICAuZm9yRWFjaCgobmV3Tm9kZSkgPT4ge1xuICAgICAgY29uc3Qgb2xkTm9kZSA9IG9sZE5vZGVzLmZpbmQoKHRlbXBPbGROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiAhdGVtcE9sZE5vZGUub3AgJiYgdGVtcE9sZE5vZGUuaWQgPT09IG5ld05vZGUuaWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgICAgY29uc3Qga2VlcFRyZWVCcmFuY2ggPSAob2xkTm9kZSwgbmV3Tm9kZSkgPT4ge1xuICAgICAgICAgIG9sZE5vZGUub3AgPSB7IHR5cGU6IFwia2VlcFwiLCBpZHg6IG5ld05vZGUuaWR4IH07XG4gICAgICAgICAgbmV3Tm9kZS5vcCA9IHsgdHlwZTogXCJrZWVwX2NvdW50ZXJwYXJ0XCIsIGNvdW50ZXJwYXJ0OiBvbGROb2RlIH07XG4gICAgICAgICAgb2xkTm9kZSA9IG9sZE5vZGUucGFyZW50O1xuICAgICAgICAgIG5ld05vZGUgPSBuZXdOb2RlLnBhcmVudDtcbiAgICAgICAgICBpZiAoIW9sZE5vZGUgfHwgb2xkTm9kZS5vcCB8fCBuZXdOb2RlPy5vcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBrZWVwVHJlZUJyYW5jaChvbGROb2RlLCBuZXdOb2RlKTtcbiAgICAgICAgfTtcbiAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIGlmIChkZXB0aCA+IDEpIHtcbiAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gIH1cblxuICBvbGROb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgaWYgKCF4Lm9wKSB7XG4gICAgICBjb25zdCBpZHggPSAob2xkTm9kZXNbaSAtIDFdPy5vcC5pZHggPz8gLTEpICsgMTtcbiAgICAgIHgub3AgPSB7IHR5cGU6IFwiZGVsZXRlXCIsIGlkeCB9O1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gZ2V0UmVhbFBhcmVudChlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50LnBhcmVudC5vcC50eXBlID09PSBcImtlZXBfY291bnRlcnBhcnRcIlxuICAgICAgPyBlbGVtZW50LnBhcmVudC5vcC5jb3VudGVycGFydFxuICAgICAgOiBlbGVtZW50LnBhcmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEJlZm9yZShlbGVtZW50LCBpZHgpIHtcbiAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICB3aGlsZSAoaWR4ID49IDEgJiYgZWxlbWVudC5kZXB0aCA+PSBzdGFydERlcHRoKSB7XG4gICAgICBpZHggLT0gMTtcbiAgICAgIGVsZW1lbnQgPSBuZXdOb2Rlc1tpZHhdO1xuICAgICAgaWYgKGVsZW1lbnQuZGVwdGggPT09IHN0YXJ0RGVwdGgpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gXCJrZWVwX2NvdW50ZXJwYXJ0XCJcbiAgICAgICAgICA/IGVsZW1lbnQub3AuY291bnRlcnBhcnRcbiAgICAgICAgICA6IGVsZW1lbnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBuZXdOb2Rlcy5mb3JFYWNoKCh4LCBpKSA9PiB7XG4gICAgeC5nZXRCZWZvcmUgPSAoKSA9PiBnZXRCZWZvcmUoeCwgaSk7XG4gICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgIGlmICgheC5vcCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0geC5nZXRSZWFsUGFyZW50KCk7XG4gICAgICBjb25zdCB0eXBlID0gdGFyZ2V0Py5vcC50eXBlID09PSBcImluc2VydFwiID8gXCJpbnNlcnRfaWdub3JlXCIgOiBcImluc2VydFwiO1xuICAgICAgeC5vcCA9IHsgdHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKSB9O1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgdGFnZ2VkID0gWy4uLm9sZE5vZGVzLCAuLi5uZXdOb2Rlc107XG5cbiAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgY29uc3QgYVZhbCA9IGEub3A/LmlkeCA/PyBhLmlkeDtcbiAgICBjb25zdCBiVmFsID0gYi5vcD8uaWR4ID8/IGIuaWR4O1xuXG4gICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICB9KTtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRkb21cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGxlYWZDb250cm9sbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvY2VzcyAtIFByb2Nlc3Mgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlZnJlc2ggcHJvY2Vzc1xuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gcmVmcmVzaCgkZG9tLCBsZWFmQ29udHJvbGxlciwgcHJvY2VzcyA9IG51bGwpIHtcbiAgaWYgKCFsZWFmQ29udHJvbGxlcikge1xuICAgIGxlYWZDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkZG9tKTtcbiAgfVxuXG4gIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBjb25zdCB7IHJlZnJlc2hQcm9jZXNzLCBpc1J1bm5pbmdQcm9jZXNzIH0gPSBwcmVwYXJlUmVmcmVzaFByb2Nlc3MoXG4gICAgcHJvY2VzcyxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgKTtcblxuICAkZG9tID8/PSBsZWFmQ29udHJvbGxlci4kY29udGFpbmVyO1xuXG4gIHJldHVybiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcihcbiAgICBhcHAudGFnTmFtZXMsXG4gICAgJGRvbSxcbiAgICBsZWFmQ29udHJvbGxlcixcbiAgICBwcm9jZXNzLFxuICApLnRoZW4oKCkgPT4ge1xuICAgIHJldHVybiByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tLCByZWZyZXNoUHJvY2VzcykudGhlbigoKSA9PiB7XG4gICAgICBpZiAoIWlzUnVubmluZ1Byb2Nlc3MpIHtcbiAgICAgICAgdXBkYXRlRXZlbnRBbmRUcmlnZ2VyT25SZWZyZXNoKHJlZnJlc2hQcm9jZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiY29udHJvbGxlckZhY3RvcnkiLCJwcmVwYXJlUmVmcmVzaFByb2Nlc3MiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsInVwZGF0ZUV2ZW50QW5kVHJpZ2dlck9uUmVmcmVzaCIsImdldFVybFBhcmFtIiwicHJlcGFyZURhdGEiLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwiYXJncyIsImNvbnRlbnRVcmwiLCJfdGFnTmFtZSIsImNvbnRlbnRSZWxvYWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlZFUlNJT04iLCJfbWV0aG9kIiwiZ2V0IiwidGhlbiIsImRhdGEiLCJjYXRjaCIsImVyciIsInN0YXR1cyIsInJlc3BvbnNlSlNPTiIsImNvbmZpcm1QYWdlTG9hZGVkIiwiY29udHJvbGxlcl9uYW1lIiwicmVzcG9uc2VUZXh0IiwicmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJwcm9jZXNzIiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJ0YWdOYW1lcyIsInBhcnNlQ29udGVudFVybCIsImxlbmd0aCIsIm1hdGNoZXMiLCJleGVjIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJyZXN1bHRzIiwiaHRtbEZpbGUiLCJhcHBlbmQiLCJyZWxvYWRIVE1MQ29udHJvbGxlciIsInJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwic3VwZXJUYWdOYW1lTGlzdCIsInJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudCIsIiRodG1sIiwiZW1wdHkiLCJhdHRyIiwibWl4aW5LZXkiLCJfbWl4aW5zIiwidGFnTGlzdCIsInRhZ0Rlc2NyaXB0aW9uRWxlbWVudHMiLCJ0YWdDb3VudCIsImVsZW1lbnRJbmRleCIsInJlbG9hZE1ldGhvZEhUTUwiLCJfcmVsb2FkTWV0aG9kSFRNTCIsIiRkb20iLCJwbGlzdCIsImZpbmQiLCIkdGhpcyIsInJlc3VsdCIsInVuZGVmaW5lZCIsImNvbnRyb2xsZXJfaGFuZGxlciIsIm5ld0RhdGEiLCJiaW5kIiwieCIsIiRuZXdDb250ZW50IiwiaHRtbCIsInJlY29uY2lsZSIsImdldE5vZGVLZXkiLCJub2RlIiwibm9kZVR5cGUiLCJub2RlVmFsdWUiLCJyZXMiLCJub2RlTmFtZSIsImZvckVhY2giLCJkZWZhdWx0VmFsdWUiLCJqb2luIiwicmVjb25jaWxlVHJlZSIsImlkIiwicGFyZW50Iiwib2JqIiwiZGVwdGgiLCJpZHgiLCJnZXRSZWFsUGFyZW50IiwiZ2V0SWR4IiwiTWF0aCIsIm1heCIsImluZGV4Iiwib3AiLCJjb250ZW50cyIsInRvQXJyYXkiLCJtYXAiLCJzbGljZSIsImZsYXQiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCIkb2xkIiwiJG5ldyIsImkiLCJvcF9zdGVwcyIsImxjYkRpZmYiLCJ0b1JlbW92ZSIsIndpbmRvdyIsIk1BSU4iLCJPUFMiLCJvcF9zdGVwIiwidHlwZSIsImNJZHgiLCJjb3VudGVycGFydCIsImVsZW1CZWZvcmUiLCJnZXRCZWZvcmUiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwicmVtb3ZlRGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJvbGROb2RlcyIsIm5ld05vZGVzIiwiZmlsdGVyIiwibmV3Tm9kZSIsIm9sZE5vZGUiLCJ0ZW1wT2xkTm9kZSIsImtlZXBUcmVlQnJhbmNoIiwic3RhcnREZXB0aCIsInRhZ2dlZCIsInNvcnQiLCJhIiwiYiIsImFWYWwiLCJiVmFsIiwicmVmcmVzaCIsImxlYWZDb250cm9sbGVyIiwicmVmcmVzaFByb2Nlc3MiLCJpc1J1bm5pbmdQcm9jZXNzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n\n}");
|
|
128
138
|
|
|
129
|
-
/***/ }
|
|
139
|
+
/***/ }
|
|
130
140
|
|
|
131
141
|
/******/ });
|
|
132
142
|
/************************************************************************/
|
|
@@ -148,6 +158,12 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
148
158
|
/******/ };
|
|
149
159
|
/******/
|
|
150
160
|
/******/ // Execute the module function
|
|
161
|
+
/******/ if (!(moduleId in __webpack_modules__)) {
|
|
162
|
+
/******/ delete __webpack_module_cache__[moduleId];
|
|
163
|
+
/******/ var e = new Error("Cannot find module '" + moduleId + "'");
|
|
164
|
+
/******/ e.code = 'MODULE_NOT_FOUND';
|
|
165
|
+
/******/ throw e;
|
|
166
|
+
/******/ }
|
|
151
167
|
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
152
168
|
/******/
|
|
153
169
|
/******/ // Return the exports of the module
|
|
@@ -187,22 +203,25 @@ eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpa
|
|
|
187
203
|
/******/
|
|
188
204
|
/******/ // startup
|
|
189
205
|
/******/ // Load entry module and return exports
|
|
190
|
-
/******/ // This entry module
|
|
206
|
+
/******/ // This entry module is referenced by other modules so it can't be inlined
|
|
191
207
|
/******/ var __webpack_exports__ = __webpack_require__("./src/index.js");
|
|
192
208
|
/******/ const __webpack_exports__AbstractSDC = __webpack_exports__.AbstractSDC;
|
|
209
|
+
/******/ const __webpack_exports__SdcModel = __webpack_exports__.SdcModel;
|
|
210
|
+
/******/ const __webpack_exports__SdcQuerySet = __webpack_exports__.SdcQuerySet;
|
|
193
211
|
/******/ const __webpack_exports__allOff = __webpack_exports__.allOff;
|
|
194
212
|
/******/ const __webpack_exports__app = __webpack_exports__.app;
|
|
195
213
|
/******/ const __webpack_exports__checkIfParamNumberBoolOrString = __webpack_exports__.checkIfParamNumberBoolOrString;
|
|
196
214
|
/******/ const __webpack_exports__clearErrorsInForm = __webpack_exports__.clearErrorsInForm;
|
|
197
215
|
/******/ const __webpack_exports__controllerFactory = __webpack_exports__.controllerFactory;
|
|
198
216
|
/******/ const __webpack_exports__on = __webpack_exports__.on;
|
|
217
|
+
/******/ const __webpack_exports__registerModel = __webpack_exports__.registerModel;
|
|
199
218
|
/******/ const __webpack_exports__runControlFlowFunctions = __webpack_exports__.runControlFlowFunctions;
|
|
200
219
|
/******/ const __webpack_exports__setErrorsInForm = __webpack_exports__.setErrorsInForm;
|
|
201
220
|
/******/ const __webpack_exports__setEvent = __webpack_exports__.setEvent;
|
|
202
221
|
/******/ const __webpack_exports__socketReconnect = __webpack_exports__.socketReconnect;
|
|
203
222
|
/******/ const __webpack_exports__test_utils = __webpack_exports__.test_utils;
|
|
204
223
|
/******/ const __webpack_exports__trigger = __webpack_exports__.trigger;
|
|
205
|
-
/******/ export { __webpack_exports__AbstractSDC as AbstractSDC, __webpack_exports__allOff as allOff, __webpack_exports__app as app, __webpack_exports__checkIfParamNumberBoolOrString as checkIfParamNumberBoolOrString, __webpack_exports__clearErrorsInForm as clearErrorsInForm, __webpack_exports__controllerFactory as controllerFactory, __webpack_exports__on as on, __webpack_exports__runControlFlowFunctions as runControlFlowFunctions, __webpack_exports__setErrorsInForm as setErrorsInForm, __webpack_exports__setEvent as setEvent, __webpack_exports__socketReconnect as socketReconnect, __webpack_exports__test_utils as test_utils, __webpack_exports__trigger as trigger };
|
|
224
|
+
/******/ export { __webpack_exports__AbstractSDC as AbstractSDC, __webpack_exports__SdcModel as SdcModel, __webpack_exports__SdcQuerySet as SdcQuerySet, __webpack_exports__allOff as allOff, __webpack_exports__app as app, __webpack_exports__checkIfParamNumberBoolOrString as checkIfParamNumberBoolOrString, __webpack_exports__clearErrorsInForm as clearErrorsInForm, __webpack_exports__controllerFactory as controllerFactory, __webpack_exports__on as on, __webpack_exports__registerModel as registerModel, __webpack_exports__runControlFlowFunctions as runControlFlowFunctions, __webpack_exports__setErrorsInForm as setErrorsInForm, __webpack_exports__setEvent as setEvent, __webpack_exports__socketReconnect as socketReconnect, __webpack_exports__test_utils as test_utils, __webpack_exports__trigger as trigger };
|
|
206
225
|
/******/
|
|
207
226
|
|
|
208
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
227
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztTQUFBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7O1NBRUE7U0FDQTtTQUNBO1NBQ0E7U0FDQTtTQUNBO1NBQ0E7U0FDQTs7U0FFQTtTQUNBO1NBQ0E7Ozs7O1VDNUJBO1VBQ0E7VUFDQTtVQUNBO1VBQ0EseUNBQXlDLHdDQUF3QztVQUNqRjtVQUNBO1VBQ0EsRTs7Ozs7VUNQQSx3Rjs7Ozs7VUNBQTtVQUNBO1VBQ0E7VUFDQSx1REFBdUQsaUJBQWlCO1VBQ3hFO1VBQ0EsZ0RBQWdELGFBQWE7VUFDN0QsRTs7Ozs7U0VOQTtTQUNBO1NBQ0E7U0FDQSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovLy93ZWJwYWNrL2JlZm9yZS1zdGFydHVwIiwid2VicGFjazovLy93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svYWZ0ZXItc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdGlmICghKG1vZHVsZUlkIGluIF9fd2VicGFja19tb2R1bGVzX18pKSB7XG5cdFx0ZGVsZXRlIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgbW9kdWxlSWQgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiIiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCIiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=
|