sdc_client 0.57.10 → 0.57.12
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/.idea/misc.xml +2 -2
- package/.idea/workspace.xml +106 -11
- package/.tool-versions +1 -1
- package/SimpleDomControlClient.iml +6 -1
- package/dist/index.js +8 -8
- package/dist/ugly.index.js +1 -1
- package/package.json +3 -1
- package/src/index.js +2 -2
- package/src/simpleDomControl/AbstractSDC.js +9 -0
- package/src/simpleDomControl/sdc_controller.js +17 -1
- package/src/simpleDomControl/sdc_main.js +47 -22
- package/src/simpleDomControl/sdc_socket.js +24 -6
- package/src/simpleDomControl/sdc_test_utils.js +65 -19
- package/src/simpleDomControl/sdc_utils.js +45 -23
- package/src/simpleDomControl/sdc_view.js +202 -14
- package/test/controller.test.js +1 -41
- package/test/utils.js +89 -0
- package/test/view.test.js +141 -0
package/dist/index.js
CHANGED
@@ -14,7 +14,7 @@
|
|
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 */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.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_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.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_2__.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_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__ = __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_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.getCsrfToken\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
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 */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.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_3__.checkIfParamNumberBoolOrString),\n/* harmony export */ clearErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.clearErrorsInForm),\n/* harmony export */ controllerFactory: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.controllerFactory),\n/* harmony export */ on: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.on),\n/* harmony export */ runControlFlowFunctions: () => (/* reexport safe */ _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__.runControlFlowFunctions),\n/* harmony export */ setErrorsInForm: () => (/* reexport safe */ _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__.setErrorsInForm),\n/* harmony export */ setEvent: () => (/* reexport safe */ _simpleDomControl_sdc_events_js__WEBPACK_IMPORTED_MODULE_2__.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_2__.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_events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./simpleDomControl/sdc_events.js */ \"./src/simpleDomControl/sdc_events.js\");\n/* harmony import */ var _simpleDomControl_sdc_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./simpleDomControl/sdc_utils.js */ \"./src/simpleDomControl/sdc_utils.js\");\n/* harmony import */ var _simpleDomControl_sdc_controller_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./simpleDomControl/sdc_controller.js */ \"./src/simpleDomControl/sdc_controller.js\");\n/* harmony import */ var _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__ = __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_6__ = __webpack_require__(/*! ./simpleDomControl/sdc_test_utils.js */ \"./src/simpleDomControl/sdc_test_utils.js\");\n\n\n\n\n\n\n\nconst socketReconnect = _simpleDomControl_sdc_server_call_js__WEBPACK_IMPORTED_MODULE_5__.close;\nconst test_utils = {\n get_controller: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.get_controller,\n getCsrfToken: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.getCsrfToken,\n controllerFromTestHtml: _simpleDomControl_sdc_test_utils_js__WEBPACK_IMPORTED_MODULE_6__.controllerFromTestHtml\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbUQ7QUFDVztBQUNpQjtBQUNvQztBQUNuQjtBQUNyQztBQUM4QztBQUV6RyxNQUFNZSxlQUFlLEdBQUdKLHVFQUFLO0FBQzdCLE1BQU1LLFVBQVUsR0FBRztFQUFDSixjQUFjO0VBQUVDLFlBQVk7RUFBRUMsc0JBQXNCQSx5RkFBQUE7QUFBQSxDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9pbmRleC5qcz9iNjM1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX21haW4uanMnO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL0Fic3RyYWN0U0RDLmpzJztcbmltcG9ydCB7b24sIHRyaWdnZXIsIGFsbE9mZiwgc2V0RXZlbnR9IGZyb20gJy4vc2ltcGxlRG9tQ29udHJvbC9zZGNfZXZlbnRzLmpzJztcbmltcG9ydCB7Y2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzJztcbmltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zfSBmcm9tICcuL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHtjbG9zZX0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY19zZXJ2ZXJfY2FsbC5qcydcbmltcG9ydCB7Z2V0X2NvbnRyb2xsZXIsIGdldENzcmZUb2tlbiwgY29udHJvbGxlckZyb21UZXN0SHRtbH0gZnJvbSAnLi9zaW1wbGVEb21Db250cm9sL3NkY190ZXN0X3V0aWxzLmpzJ1xuXG5jb25zdCBzb2NrZXRSZWNvbm5lY3QgPSBjbG9zZVxuY29uc3QgdGVzdF91dGlscyA9IHtnZXRfY29udHJvbGxlciwgZ2V0Q3NyZlRva2VuLCBjb250cm9sbGVyRnJvbVRlc3RIdG1sfTtcblxuZXhwb3J0IHtcbiAgICBhcHAsIEFic3RyYWN0U0RDLCBvbiwgdHJpZ2dlciwgYWxsT2ZmLCBzZXRFdmVudCwgY2xlYXJFcnJvcnNJbkZvcm0sIHNldEVycm9yc0luRm9ybSwgY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nLFxuICAgIGNvbnRyb2xsZXJGYWN0b3J5LCBydW5Db250cm9sRmxvd0Z1bmN0aW9ucywgc29ja2V0UmVjb25uZWN0LCB0ZXN0X3V0aWxzXG59XG4iXSwibmFtZXMiOlsiYXBwIiwiQWJzdHJhY3RTREMiLCJvbiIsInRyaWdnZXIiLCJhbGxPZmYiLCJzZXRFdmVudCIsImNsZWFyRXJyb3JzSW5Gb3JtIiwic2V0RXJyb3JzSW5Gb3JtIiwiY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nIiwiY29udHJvbGxlckZhY3RvcnkiLCJydW5Db250cm9sRmxvd0Z1bmN0aW9ucyIsImNsb3NlIiwiZ2V0X2NvbnRyb2xsZXIiLCJnZXRDc3JmVG9rZW4iLCJjb250cm9sbGVyRnJvbVRlc3RIdG1sIiwic29ja2V0UmVjb25uZWN0IiwidGVzdF91dGlscyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n");
|
18
18
|
|
19
19
|
/***/ }),
|
20
20
|
|
@@ -24,7 +24,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
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.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 = '';\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) {\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) {\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 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, 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 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 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 model = $form.data('model');\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);\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 (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\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,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RG9tQ29udHJvbC9BYnN0cmFjdFNEQy5qcz9kN2Y3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YWxsT2ZmfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2FwcH0gZnJvbSBcIi4vc2RjX21haW4uanNcIjtcbmltcG9ydCB7TW9kZWx9IGZyb20gXCIuL3NkY19zb2NrZXQuanNcIjtcbmltcG9ydCB7Y2FsbFNlcnZlcn0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5pbXBvcnQge3V1aWR2NCwgc2V0RXJyb3JzSW5Gb3JtLCBjbGVhckVycm9yc0luRm9ybSwgdGFnTmFtZVRvQ2FtZWxDYXNlLCB0YWdOYW1lVG9SZWFkYWJsZU5hbWV9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5leHBvcnQgY2xhc3MgQWJzdHJhY3RTREMge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLl91dWlkID0gdXVpZHY0KCk7XG4gICAgICAgIHRoaXMuY29udGVudFVybCA9ICcnO1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ldmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkX2FzeW5jID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzRXZlbnRzU2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50cyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHRoaXMuX21vZGVscyA9IFtdO1xuXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLSBPbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgICAgdGhpcy5fY3NzVXJscyA9IFtdO1xuICAgICAgICB0aGlzLmFmdGVyU2hvdyA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignYWZ0ZXJTaG93IGlzIGRlcHJlY2F0ZWQhIScpXG4gICAgICAgIH07XG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tIEVuZCBvbGQgZGVwcmVjYXRlZCBwcm9wZXJ0aWVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzogQWJzdHJhY3RTREN9fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fbWl4aW5zID0ge307XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl90YWdOYW1lID0gJyc7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHt7c3RyaW5nOkFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2NoaWxkQ29udHJvbGxlciA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7QWJzdHJhY3RTREN9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9wYXJlbnRDb250cm9sbGVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9vbkxvYWREb25lID0gZmFsc2U7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtqcXVlcnl9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLiRjb250YWluZXIgPSBudWxsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2QgbXVzdCBiZSBpbiB7fVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgaW4gYXJndW1lbnRzIG9mXG4gICAgICpcbiAgICAgKi9cbiAgICBfcnVuTGlmZWN5Y2xlKG1ldGhvZCwgYXJncykge1xuICAgICAgICBpZiAoYXBwLkRFQlVHKSB7XG4gICAgICAgICAgICBjb25zb2xlLmRlYnVnKG1ldGhvZCwgdGhpcy5fdGFnTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0dXJuUHJvbWlzc2VzID0gW107XG4gICAgICAgIGlmICh0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgIGZvciAobGV0IG1peGluS2V5IGluIHRoaXMuX21peGlucykge1xuICAgICAgICAgICAgbGV0IG1peGluID0gdGhpcy5fbWl4aW5zW21peGluS2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW5bbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuUHJvbWlzc2VzLnB1c2gobWl4aW5bbWV0aG9kXS5hcHBseSh0aGlzLCBhcmdzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocmV0dXJuUHJvbWlzc2VzKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzTWl4aW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Jbml0KCkge1xuICAgICAgICBpZiAoYXBwLkRFQlVHKSB7XG4gICAgICAgICAgICBjb25zb2xlLkRFQlVHKEFycmF5LmFwcGx5KG51bGwsIGFyZ3VtZW50cyksIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHBhcmVudENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIGdldCBjaGlsZENvbnRyb2xsZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgb25Mb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvbkxvYWQnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHdpbGxTaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCd3aWxsU2hvdycsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgb25SZWZyZXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlZnJlc2gnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICB0aGlzLl9ydW5MaWZlY3ljbGUoJ29uUmVtb3ZlJywgYXJndW1lbnRzKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbW9kZWwgb2YgdGhpcy5fbW9kZWxzKSB7XG4gICAgICAgICAgICBtb2RlbC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBfY2hpbGRDb250cm9sbGVyID0gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNjLnJlbW92ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMub25SZW1vdmUgfHwgdGhpcy5vblJlbW92ZSgpKSB7XG4gICAgICAgICAgICBhbGxPZmYodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBjX25hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGhpcy5fdGFnTmFtZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gdGhpcy5fcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NfbmFtZV07XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFycltpXSA9PT0gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4kY29udGFpbmVyLnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXM7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb250cm9sbGVyX25hbWUoKSB7XG4gICAgICAgIHJldHVybiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUodGhpcy5fdGFnTmFtZSk7XG4gICAgfVxuXG4gICAgYWRkRXZlbnQoZXZlbnQsIHNlbGVjdG9yLCBoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX2FsbEV2ZW50c1tldmVudF0gPSB0aGlzLl9hbGxFdmVudHNbZXZlbnRdIHx8IHt9O1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdW3NlbGVjdG9yXSA9IGhhbmRsZXI7XG4gICAgfVxuXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBpZiAodGhpcy5fYWxsRXZlbnRzKSByZXR1cm4gdGhpcy5fYWxsRXZlbnRzO1xuICAgICAgICBsZXQgYWxsRXZlbnRzID0gW107XG4gICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQodGhpcy5ldmVudHMpO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbi5ldmVudHMpKSB7XG4gICAgICAgICAgICAgICAgYWxsRXZlbnRzID0gYWxsRXZlbnRzLmNvbmNhdChtaXhpbi5ldmVudHMpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYWxsRXZlbnRzID0gXy5tZXJnZSguLi5hbGxFdmVudHMpKTtcbiAgICB9XG5cbiAgICBwb3N0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLnBvc3QodGhpcywgdXJsLCBhcmdzKTtcbiAgICB9XG5cbiAgICBnZXQodXJsLCBhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcHAuZ2V0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgc3VibWl0Rm9ybShmb3JtLCB1cmwsIG1ldGhvZCkge1xuICAgICAgICByZXR1cm4gYXBwLnN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3KHRoaXMsIGZvcm0sIHVybCwgbWV0aG9kKTtcbiAgICB9XG5cbiAgICBzZXJ2ZXJDYWxsKG1ldGhvZGUsIGFyZ3MpIHtcbiAgICAgICAgbGV0IHJlID0gL3NkY192aWV3XFwvKFteL10rKS9pO1xuICAgICAgICBsZXQgYXBwID0gdGhpcy5jb250ZW50VXJsLm1hdGNoKHJlKTtcbiAgICAgICAgaWYgKCFhcHAgfHwgYXBwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RvIHVzZSB0aGUgc2VydmVyQ2FsbCBmdW5jdGlvbiB0aGUgY29udGVudFVybCBtdXN0IGJlIHNldDogJyArIHRoaXMubmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2FsbFNlcnZlcihhcHBbMV0sIHRoaXMuX3RhZ05hbWUsIHRoaXMucGFyc2VkQ29udGVudFVybCwgbWV0aG9kZSwgYXJncyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9kZWxfbmFtZSB7c3RyaW5nIHwgTnVtYmVyfVxuICAgICAqIEBwYXJhbSBtb2RlbF9xdWVyeSB7T2JqZWN0fVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIG5ld01vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30pIHtcbiAgICAgICAgaWYobW9kZWxfbmFtZSBpbnN0YW5jZW9mIE51bWJlciAmJiBtb2RlbF9uYW1lLmhhc093blByb3BlcnR5KCdsb2FkJykpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbF9uYW1lLmxvYWQodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHRoaXMuX21vZGVscy5wdXNoKG1vZGVsKTtcbiAgICAgICAgcmV0dXJuIG1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAcGFyYW0gdmFsdWVzIHtPYmplY3R9XG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgdXBkYXRlTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSwgdmFsdWVzKSB7XG4gICAgICAgIGxldCBtb2RlbCA9IG5ldyBNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiBtb2RlbC5sb2FkKCkudGhlbigoKT0+e1xuICAgICAgICAgICAgbW9kZWwudmFsdWVzIHw9IHZhbHVlcztcbiAgICAgICAgICAgIG1vZGVsLnNhdmUoKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgIG1vZGVsLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsLnZhbHVlc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkYXB0ZXIgdG8gdGhpcy4kY29udGFpbmVyLmZpbmRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZG9tU2VsZWN0b3JcbiAgICAgKi9cbiAgICBmaW5kKGRvbVNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRjb250YWluZXIuZmluZChkb21TZWxlY3Rvcik7XG4gICAgfVxuXG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWZyZXNoKHRoaXMuJGNvbnRhaW5lciwgdGhpcyk7XG4gICAgfVxuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICByZXR1cm4gYXBwLnJlbG9hZENvbnRyb2xsZXIodGhpcyk7XG4gICAgfVxuXG4gICAgc3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IoJGZvcm0sIGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zdWJtaXRNb2RlbEZvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSgkZm9ybSwgZSk7XG4gICAgfVxuXG4gICAgaXRlcmF0ZUFsbENoaWxkcmVuKCkge1xuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IHJlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpIGluIF9jaGlsZENvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGlmIChfY2hpbGRDb250cm9sbGVyLmhhc093blByb3BlcnR5KGkpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2Mgb2YgX2NoaWxkQ29udHJvbGxlcltpXSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChjYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKC4uLmNjLml0ZXJhdGVBbGxDaGlsZHJlbigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb2RlbCBGb3JtIEV2ZW50c1xuICAgICAqL1xuICAgIGRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpIHtcbiAgICAgICAgbGV0IHBfbGlzdCA9IFtdO1xuICAgICAgICBpZiAoIXRoaXMuX2lzTWl4aW4pIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBsZXQgbW9kZWwgPSAkZm9ybS5kYXRhKCdtb2RlbCcpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbW9kZWwuc3luY0Zvcm0oJGZvcm0pO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5zdGFuY2VfdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcF9saXN0LnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlX3ZhbHVlLnBrICE9PSBudWxsICYmIGluc3RhbmNlX3ZhbHVlLnBrID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5zYXZlKGluc3RhbmNlX3ZhbHVlLnBrKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb20gPSBtb2RlbC5jcmVhdGUoaW5zdGFuY2VfdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcHJvbS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyRXJyb3JzSW5Gb3JtKCRmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MocmVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihjb25zdCBjb250cm9sbGVyIG9mIHRoaXMuaXRlcmF0ZUFsbENoaWxkcmVuKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICQoZGF0YS5odG1sKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yICYmIHRoaXMuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiBjb250cm9sbGVyLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocF9saXN0KS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCAuLi5yZXMuZmxhdCgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxufSJdLCJuYW1lcyI6WyJhbGxPZmYiLCJhcHAiLCJNb2RlbCIsImNhbGxTZXJ2ZXIiLCJ1dWlkdjQiLCJzZXRFcnJvcnNJbkZvcm0iLCJjbGVhckVycm9yc0luRm9ybSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsIkFic3RyYWN0U0RDIiwiY29uc3RydWN0b3IiLCJfdXVpZCIsImNvbnRlbnRVcmwiLCJjb250ZW50UmVsb2FkIiwiZXZlbnRzIiwibG9hZF9hc3luYyIsIl9pc0V2ZW50c1NldCIsIl9hbGxFdmVudHMiLCJfdXJsUGFyYW1zIiwiX21vZGVscyIsIl9jc3NVcmxzIiwiYWZ0ZXJTaG93IiwiY29uc29sZSIsIndhcm4iLCJfbWl4aW5zIiwiX3RhZ05hbWUiLCJfY2hpbGRDb250cm9sbGVyIiwiX3BhcmVudENvbnRyb2xsZXIiLCJfb25Mb2FkRG9uZSIsIiRjb250YWluZXIiLCJfaXNNaXhpbiIsIl9ydW5MaWZlY3ljbGUiLCJtZXRob2QiLCJhcmdzIiwiREVCVUciLCJkZWJ1ZyIsInJldHVyblByb21pc3NlcyIsIm1peGluS2V5IiwibWl4aW4iLCJwdXNoIiwiYXBwbHkiLCJQcm9taXNlIiwiYWxsIiwidGhlbiIsIm9uSW5pdCIsIkFycmF5IiwiYXJndW1lbnRzIiwicGFyZW50Q29udHJvbGxlciIsImNoaWxkQ29udHJvbGxlciIsIm9uTG9hZCIsIndpbGxTaG93Iiwib25SZWZyZXNoIiwib25SZW1vdmUiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwicGFyc2VkQ29udGVudFVybCIsIm5ld01vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiTnVtYmVyIiwibG9hZCIsInVwZGF0ZU1vZGVsIiwidmFsdWVzIiwic2F2ZSIsImZpbmQiLCJkb21TZWxlY3RvciIsInJlZnJlc2giLCJyZWxvYWQiLCJyZWxvYWRDb250cm9sbGVyIiwic3VibWl0TW9kZWxGb3JtRGlzdHJpYnV0b3IiLCIkZm9ybSIsImUiLCJfc3VibWl0TW9kZWxGb3JtIiwic3VibWl0TW9kZWxGb3JtIiwiZGVmYXVsdFN1Ym1pdE1vZGVsRm9ybSIsIml0ZXJhdGVBbGxDaGlsZHJlbiIsInJlcyIsInBfbGlzdCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwiZGF0YSIsInN5bmNGb3JtIiwiaW5zdGFuY2VfdmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0IiwicHJvbSIsInBrIiwiY3JlYXRlIiwic3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyIsImNvbnRyb2xsZXIiLCJjYXRjaCIsIiQiLCJodG1sIiwic3VibWl0X21vZGVsX2Zvcm1fZXJyb3IiLCJPYmplY3QiLCJhc3NpZ24iLCJmbGF0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\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_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 = '';\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) {\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) {\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, 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 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 model = $form.data('model');\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);\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 (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_4__.setErrorsInForm)($form, $(data.html));\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,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QUksTUFBTSxDQUFDSixJQUFJLENBQUM7VUFDaEIsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7TUFDUDtJQUNKO0lBRUEsT0FBTzVFLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDd0UsTUFBTSxDQUFDLENBQUN2RSxJQUFJLENBQUVzRSxHQUFHLElBQUs7TUFDckMsT0FBT2tCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUduQixHQUFHLENBQUNvQixJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQztFQUNOO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvQWJzdHJhY3RTREMuanM/ZDdmNyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FsbE9mZn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge01vZGVsfSBmcm9tIFwiLi9zZGNfc29ja2V0LmpzXCI7XG5pbXBvcnQge2NhbGxTZXJ2ZXJ9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuaW1wb3J0IHt1dWlkdjQsIHNldEVycm9yc0luRm9ybSwgY2xlYXJFcnJvcnNJbkZvcm0sIHRhZ05hbWVUb0NhbWVsQ2FzZSwgdGFnTmFtZVRvUmVhZGFibGVOYW1lfSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuZXhwb3J0IGNsYXNzIEFic3RyYWN0U0RDIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fdXVpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLmNvbnRlbnRVcmwgPSAnJztcbiAgICAgICAgdGhpcy5jb250ZW50UmVsb2FkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGFyc2VkQ29udGVudFVybCA9IG51bGw7XG4gICAgICAgIHRoaXMuZXZlbnRzID0gW107XG4gICAgICAgIHRoaXMubG9hZF9hc3luYyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHMgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX3VybFBhcmFtcyA9IFtdO1xuICAgICAgICB0aGlzLl9tb2RlbHMgPSBbXTtcblxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0gT2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAgIHRoaXMuX2Nzc1VybHMgPSBbXTtcbiAgICAgICAgdGhpcy5hZnRlclNob3cgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ2FmdGVyU2hvdyBpcyBkZXByZWNhdGVkISEnKVxuICAgICAgICB9O1xuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLSBFbmQgb2xkIGRlcHJlY2F0ZWQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge3tzdHJpbmc6IEFic3RyYWN0U0RDfX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX21peGlucyA9IHt9O1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fdGFnTmFtZSA9ICcnO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7e3N0cmluZzpBYnN0cmFjdFNEQ319XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogQHR5cGUge0Fic3RyYWN0U0RDfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fcGFyZW50Q29udHJvbGxlciA9IG51bGw7XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fb25Mb2FkRG9uZSA9IGZhbHNlO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAdHlwZSB7anF1ZXJ5fVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy4kY29udGFpbmVyID0gbnVsbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICpcbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kIG11c3QgYmUgaW4ge31cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcmdzIGluIGFyZ3VtZW50cyBvZlxuICAgICAqXG4gICAgICovXG4gICAgX3J1bkxpZmVjeWNsZShtZXRob2QsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhtZXRob2QsIHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldHVyblByb21pc3NlcyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5faXNNaXhpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2lzTWl4aW4gPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBtaXhpbktleSBpbiB0aGlzLl9taXhpbnMpIHtcbiAgICAgICAgICAgIGxldCBtaXhpbiA9IHRoaXMuX21peGluc1ttaXhpbktleV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1peGluW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgICAgIHJldHVyblByb21pc3Nlcy5wdXNoKG1peGluW21ldGhvZF0uYXBwbHkodGhpcywgYXJncykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHJldHVyblByb21pc3NlcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9pc01peGluID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uSW5pdCgpIHtcbiAgICAgICAgaWYgKGFwcC5ERUJVRykge1xuICAgICAgICAgICAgY29uc29sZS5ERUJVRyhBcnJheS5hcHBseShudWxsLCBhcmd1bWVudHMpLCB0aGlzLl90YWdOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwYXJlbnRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50Q29udHJvbGxlcjtcbiAgICB9XG5cbiAgICBnZXQgY2hpbGRDb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hpbGRDb250cm9sbGVyO1xuICAgIH1cblxuICAgIG9uTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25Mb2FkJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICB3aWxsU2hvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnd2lsbFNob3cnLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIG9uUmVmcmVzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkxpZmVjeWNsZSgnb25SZWZyZXNoJywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBvblJlbW92ZSgpIHtcbiAgICAgICAgdGhpcy5fcnVuTGlmZWN5Y2xlKCdvblJlbW92ZScsIGFyZ3VtZW50cylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9PcGVuTW9kZWxSZXF1ZXN0cyggKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLl9tb2RlbHMubWFwKHggPT4geC5ub09wZW5SZXF1ZXN0cygpKSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IG1vZGVsIG9mIHRoaXMuX21vZGVscykge1xuICAgICAgICAgICAgbW9kZWwuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgX2NoaWxkQ29udHJvbGxlciA9IHRoaXMuX2NoaWxkQ29udHJvbGxlcjtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjYy5yZW1vdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm9uUmVtb3ZlIHx8IHRoaXMub25SZW1vdmUoKSkge1xuICAgICAgICAgICAgYWxsT2ZmKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgY19uYW1lID0gdGFnTmFtZVRvQ2FtZWxDYXNlKHRoaXMuX3RhZ05hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyciA9IHRoaXMuX3BhcmVudENvbnRyb2xsZXIuX2NoaWxkQ29udHJvbGxlcltjX25hbWVdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJbaV0gPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29udHJvbGxlcl9uYW1lKCkge1xuICAgICAgICByZXR1cm4gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHRoaXMuX3RhZ05hbWUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGV2ZW50LCBzZWxlY3RvciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLmdldEV2ZW50cygpO1xuICAgICAgICB0aGlzLl9hbGxFdmVudHNbZXZlbnRdID0gdGhpcy5fYWxsRXZlbnRzW2V2ZW50XSB8fCB7fTtcbiAgICAgICAgdGhpcy5fYWxsRXZlbnRzW2V2ZW50XVtzZWxlY3Rvcl0gPSBoYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FsbEV2ZW50cykgcmV0dXJuIHRoaXMuX2FsbEV2ZW50cztcbiAgICAgICAgbGV0IGFsbEV2ZW50cyA9IFtdO1xuICAgICAgICBhbGxFdmVudHMgPSBhbGxFdmVudHMuY29uY2F0KHRoaXMuZXZlbnRzKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gdGhpcy5fbWl4aW5zKSB7XG4gICAgICAgICAgICBsZXQgbWl4aW4gPSB0aGlzLl9taXhpbnNbbWl4aW5LZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWl4aW4uZXZlbnRzKSkge1xuICAgICAgICAgICAgICAgIGFsbEV2ZW50cyA9IGFsbEV2ZW50cy5jb25jYXQobWl4aW4uZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gKHRoaXMuX2FsbEV2ZW50cyA9IF8ubWVyZ2UoLi4uYWxsRXZlbnRzKSk7XG4gICAgfVxuXG4gICAgcG9zdCh1cmwsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5wb3N0KHRoaXMsIHVybCwgYXJncyk7XG4gICAgfVxuXG4gICAgZ2V0KHVybCwgYXJncykge1xuICAgICAgICByZXR1cm4gYXBwLmdldCh0aGlzLCB1cmwsIGFyZ3MpO1xuICAgIH1cblxuICAgIHN1Ym1pdEZvcm0oZm9ybSwgdXJsLCBtZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5zdWJtaXRGb3JtQW5kVXBkYXRlVmlldyh0aGlzLCBmb3JtLCB1cmwsIG1ldGhvZCk7XG4gICAgfVxuXG4gICAgc2VydmVyQ2FsbChtZXRob2RlLCBhcmdzKSB7XG4gICAgICAgIGxldCByZSA9IC9zZGNfdmlld1xcLyhbXi9dKykvaTtcbiAgICAgICAgbGV0IGFwcCA9IHRoaXMuY29udGVudFVybC5tYXRjaChyZSk7XG4gICAgICAgIGlmICghYXBwIHx8IGFwcC5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUbyB1c2UgdGhlIHNlcnZlckNhbGwgZnVuY3Rpb24gdGhlIGNvbnRlbnRVcmwgbXVzdCBiZSBzZXQ6ICcgKyB0aGlzLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhbGxTZXJ2ZXIoYXBwWzFdLCB0aGlzLl90YWdOYW1lLCB0aGlzLnBhcnNlZENvbnRlbnRVcmwsIG1ldGhvZGUsIGFyZ3MpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZyB8IE51bWJlcn1cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge09iamVjdH1cbiAgICAgKiBAY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBuZXdNb2RlbChtb2RlbF9uYW1lLCBtb2RlbF9xdWVyeSA9IHt9KSB7XG4gICAgICAgIGlmKG1vZGVsX25hbWUgaW5zdGFuY2VvZiBOdW1iZXIgJiYgbW9kZWxfbmFtZS5oYXNPd25Qcm9wZXJ0eSgnbG9hZCcpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9kZWxfbmFtZS5sb2FkKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbW9kZWwgPSBuZXcgTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICB0aGlzLl9tb2RlbHMucHVzaChtb2RlbCk7XG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtb2RlbF9uYW1lIHtzdHJpbmd9XG4gICAgICogQHBhcmFtIG1vZGVsX3F1ZXJ5IHtPYmplY3R9XG4gICAgICogQHBhcmFtIHZhbHVlcyB7T2JqZWN0fVxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIHVwZGF0ZU1vZGVsKG1vZGVsX25hbWUsIG1vZGVsX3F1ZXJ5ID0ge30sIHZhbHVlcykge1xuICAgICAgICBsZXQgbW9kZWwgPSBuZXcgTW9kZWwobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICByZXR1cm4gbW9kZWwubG9hZCgpLnRoZW4oKCk9PntcbiAgICAgICAgICAgIG1vZGVsLnZhbHVlcyB8PSB2YWx1ZXM7XG4gICAgICAgICAgICBtb2RlbC5zYXZlKCkudGhlbigoKT0+IHtcbiAgICAgICAgICAgICAgICBtb2RlbC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbC52YWx1ZXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGFwdGVyIHRvIHRoaXMuJGNvbnRhaW5lci5maW5kXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRvbVNlbGVjdG9yXG4gICAgICovXG4gICAgZmluZChkb21TZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gdGhpcy4kY29udGFpbmVyLmZpbmQoZG9tU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHJldHVybiBhcHAucmVmcmVzaCh0aGlzLiRjb250YWluZXIsIHRoaXMpO1xuICAgIH1cblxuICAgIHJlbG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWxvYWRDb250cm9sbGVyKHRoaXMpO1xuICAgIH1cblxuICAgIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGFwcC5yZWNvbmNpbGUodGhpcywgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpO1xuICAgIH1cblxuICAgIHN1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yKCRmb3JtLCBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3VibWl0TW9kZWxGb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3VibWl0TW9kZWxGb3JtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWJtaXRNb2RlbEZvcm0oJGZvcm0sIGUpO1xuICAgIH1cblxuICAgIGl0ZXJhdGVBbGxDaGlsZHJlbigpIHtcbiAgICAgICAgbGV0IF9jaGlsZENvbnRyb2xsZXIgPSB0aGlzLl9jaGlsZENvbnRyb2xsZXI7XG4gICAgICAgIGxldCByZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSBpbiBfY2hpbGRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBpZiAoX2NoaWxkQ29udHJvbGxlci5oYXNPd25Qcm9wZXJ0eShpKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGNjIG9mIF9jaGlsZENvbnRyb2xsZXJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goY2MpO1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaCguLi5jYy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9kZWwgRm9ybSBFdmVudHNcbiAgICAgKi9cbiAgICBkZWZhdWx0U3VibWl0TW9kZWxGb3JtKCRmb3JtLCBlKSB7XG4gICAgICAgIGxldCBwX2xpc3QgPSBbXTtcbiAgICAgICAgaWYgKCF0aGlzLl9pc01peGluKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IG1vZGVsID0gJGZvcm0uZGF0YSgnbW9kZWwnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG1vZGVsLnN5bmNGb3JtKCRmb3JtKTtcbiAgICAgICAgICAgIGZvciAobGV0IGluc3RhbmNlX3ZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb207XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZV92YWx1ZS5wayAhPT0gbnVsbCAmJiBpbnN0YW5jZV92YWx1ZS5wayA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuc2F2ZShpbnN0YW5jZV92YWx1ZS5wayk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9tID0gbW9kZWwuY3JlYXRlKGluc3RhbmNlX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb20udGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckVycm9yc0luRm9ybSgkZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX3N1Y2Nlc3MgJiYgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzKHJlc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IoY29uc3QgY29udHJvbGxlciBvZiB0aGlzLml0ZXJhdGVBbGxDaGlsZHJlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzICYmIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fc3VjY2VzcyhyZXNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkKGRhdGEuaHRtbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvciAmJiB0aGlzLnN1Ym1pdF9tb2RlbF9mb3JtX2Vycm9yKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGNvbnN0IGNvbnRyb2xsZXIgb2YgdGhpcy5pdGVyYXRlQWxsQ2hpbGRyZW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuc3VibWl0X21vZGVsX2Zvcm1fZXJyb3IgJiYgY29udHJvbGxlci5zdWJtaXRfbW9kZWxfZm9ybV9lcnJvcihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCkudGhlbigocmVzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgLi4ucmVzLmZsYXQoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iXSwibmFtZXMiOlsiYWxsT2ZmIiwiYXBwIiwiTW9kZWwiLCJjYWxsU2VydmVyIiwidXVpZHY0Iiwic2V0RXJyb3JzSW5Gb3JtIiwiY2xlYXJFcnJvcnNJbkZvcm0iLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJBYnN0cmFjdFNEQyIsImNvbnN0cnVjdG9yIiwiX3V1aWQiLCJjb250ZW50VXJsIiwiY29udGVudFJlbG9hZCIsInBhcnNlZENvbnRlbnRVcmwiLCJldmVudHMiLCJsb2FkX2FzeW5jIiwiX2lzRXZlbnRzU2V0IiwiX2FsbEV2ZW50cyIsIl91cmxQYXJhbXMiLCJfbW9kZWxzIiwiX2Nzc1VybHMiLCJhZnRlclNob3ciLCJjb25zb2xlIiwid2FybiIsIl9taXhpbnMiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsIl9vbkxvYWREb25lIiwiJGNvbnRhaW5lciIsIl9pc01peGluIiwiX3J1bkxpZmVjeWNsZSIsIm1ldGhvZCIsImFyZ3MiLCJERUJVRyIsImRlYnVnIiwicmV0dXJuUHJvbWlzc2VzIiwibWl4aW5LZXkiLCJtaXhpbiIsInB1c2giLCJhcHBseSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwib25Jbml0IiwiQXJyYXkiLCJhcmd1bWVudHMiLCJwYXJlbnRDb250cm9sbGVyIiwiY2hpbGRDb250cm9sbGVyIiwib25Mb2FkIiwid2lsbFNob3ciLCJvblJlZnJlc2giLCJvblJlbW92ZSIsIm5vT3Blbk1vZGVsUmVxdWVzdHMiLCJtYXAiLCJ4Iiwibm9PcGVuUmVxdWVzdHMiLCJyZW1vdmUiLCJtb2RlbCIsImNsb3NlIiwiaSIsImhhc093blByb3BlcnR5IiwiY2MiLCJjX25hbWUiLCJhcnIiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb250cm9sbGVyX25hbWUiLCJhZGRFdmVudCIsImV2ZW50Iiwic2VsZWN0b3IiLCJoYW5kbGVyIiwiZ2V0RXZlbnRzIiwiYWxsRXZlbnRzIiwiY29uY2F0IiwiaXNBcnJheSIsIl8iLCJtZXJnZSIsInBvc3QiLCJ1cmwiLCJnZXQiLCJzdWJtaXRGb3JtIiwiZm9ybSIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3Iiwic2VydmVyQ2FsbCIsIm1ldGhvZGUiLCJyZSIsIm1hdGNoIiwiZXJyb3IiLCJuYW1lIiwibmV3TW9kZWwiLCJtb2RlbF9uYW1lIiwibW9kZWxfcXVlcnkiLCJOdW1iZXIiLCJsb2FkIiwidXBkYXRlTW9kZWwiLCJ2YWx1ZXMiLCJzYXZlIiwiZmluZCIsImRvbVNlbGVjdG9yIiwicmVmcmVzaCIsInJlbG9hZCIsInJlbG9hZENvbnRyb2xsZXIiLCJyZWNvbmNpbGUiLCIkdmlydHVhbE5vZGUiLCIkcmVhbE5vZGUiLCJzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvciIsIiRmb3JtIiwiZSIsIl9zdWJtaXRNb2RlbEZvcm0iLCJzdWJtaXRNb2RlbEZvcm0iLCJkZWZhdWx0U3VibWl0TW9kZWxGb3JtIiwiaXRlcmF0ZUFsbENoaWxkcmVuIiwicmVzIiwicF9saXN0Iiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJkYXRhIiwic3luY0Zvcm0iLCJpbnN0YW5jZV92YWx1ZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9tIiwicGsiLCJjcmVhdGUiLCJzdWJtaXRfbW9kZWxfZm9ybV9zdWNjZXNzIiwiY29udHJvbGxlciIsImNhdGNoIiwiJCIsImh0bWwiLCJzdWJtaXRfbW9kZWxfZm9ybV9lcnJvciIsIk9iamVjdCIsImFzc2lnbiIsImZsYXQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/AbstractSDC.js\n");
|
28
28
|
|
29
29
|
/***/ }),
|
30
30
|
|
@@ -34,7 +34,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
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 */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList)\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\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 * 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 {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 {string} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (Global[gTagName]) {\n let controller = Global[gTagName];\n setParentController(parentController, controller);\n controller.$container = $element;\n return controller;\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 */\nfunction runControlFlowFunctions(controller) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller);\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 */\nfunction runRefresh(controller) {\n return controller.refresh && controller.refresh();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFLLENBQUMsVUFBVWQsS0FBSyxFQUFFO0lBQ3RCLE9BQU9yQyxzRUFBd0IsQ0FBQ3VCLFVBQVUsRUFBRWMsS0FBSyxDQUFDO0VBQ3RELENBQUMsQ0FBQztFQUVOLElBQUlkLFVBQVUsQ0FBQzZCLFVBQVUsRUFBRTtJQUN2QixPQUFPVixPQUFPLENBQUNXLE9BQU8sQ0FBQyxDQUFDO0VBQzVCO0VBRUEsT0FBT0osZUFBZTtBQUMxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFVBQVVBLENBQUMzQixVQUFVLEVBQUU7RUFDbkMsT0FBT0EsVUFBVSxDQUFDK0IsT0FBTyxJQUFJL0IsVUFBVSxDQUFDK0IsT0FBTyxDQUFDLENBQUM7QUFDckQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX2NvbnRyb2xsZXIuanM/OGEzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3Byb21pc2VEdW1teUZhY3RvcnksIHRhZ05hbWVUb0NhbWVsQ2FzZSwgYWdpbGVBZ2dyZWdhdGlvbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge2xvYWRGaWxlc0Zyb21Db250cm9sbGVyLCBydW5Db250cm9sbGVyRmlsbENvbnRlbnR9IGZyb20gXCIuL3NkY192aWV3LmpzXCI7XG5cbmltcG9ydCB7cnVuT25Jbml0V2l0aFBhcmFtZXRlcn0gZnJvbSBcIi4vc2RjX3BhcmFtcy5qc1wiO1xuXG5leHBvcnQgbGV0IEdsb2JhbCA9IHt9O1xuZXhwb3J0IGxldCBjb250cm9sbGVyTGlzdCA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIHRhZ0xpc3QoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbnRyb2xsZXJMaXN0KTtcbn1cblxuXG5mdW5jdGlvbiBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpIHtcbiAgICBzdXBlclRhZ05hbWVMaXN0ID0gc3VwZXJUYWdOYW1lTGlzdC5jb25jYXQoY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMV0pO1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBzdXBlclRhZ05hbWVMaXN0LmZpbHRlcigodmFsdWUsIGluZGV4LCBzZWxmKSA9PiB7XG4gICAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgICB9KTtcbiAgICBsZXQgaGFzQWRkZWQgPSB0cnVlO1xuICAgIHdoaWxlIChoYXNBZGRlZCkge1xuICAgICAgICBoYXNBZGRlZCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCB0YWcgb2Ygc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgICAgICAgICAgZm9yIChsZXQgbmV3VGFnIG9mIGNvbnRyb2xsZXJMaXN0W3RhZ11bMV0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXN1cGVyVGFnTmFtZUxpc3QuaW5jbHVkZXMobmV3VGFnKSkge1xuICAgICAgICAgICAgICAgICAgICBzdXBlclRhZ05hbWVMaXN0LnB1c2gobmV3VGFnKTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWRkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXJUYWdOYW1lTGlzdDtcbn1cblxuLyoqXG4gKiBzZXRQYXJlbnRDb250cm9sbGVyIHNldHMgdGhlIHBhcmVudCBjb250cm9sbGVyIGFzIHByb3BlcnR5OiAncGFyZW50Q29udHJvbGxlcidcbiAqIHRvIHRoZSBjaGlsZCBjb250cm9sbGVyLiBBbHNvLCBpdCBhZGRzIHRoZSBjaGlsZCBjb250cm9sbGVyIHRvIHRoZSBwcm9wZXJ0eSBsaXN0OlxuICogJ3BhcmVudENvbnRyb2xsZXInIHRvIHRoZSBwYXJlbnQgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlLCBjb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NIG9mIHRoZSBjb250cm9sbGVycyBET01cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ30gLSBwYXJlbnRDb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcikge1xuICAgIGlmIChwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgICAgIGxldCBjb250cm9sbGVyTmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZShjb250cm9sbGVyLl90YWdOYW1lKTtcbiAgICAgICAgaWYgKCFwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY29udHJvbGxlck5hbWVdKSB7XG4gICAgICAgICAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY29udHJvbGxlck5hbWVdID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXJbY29udHJvbGxlck5hbWVdLnB1c2goY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIChjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyID0gcGFyZW50Q29udHJvbGxlcilcbn1cblxuLyoqXG4gKiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlIGl0IGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgaW5pdCBwYXJhbWV0ZXIgYnkgdGhlIGRhdGEgdmFsdWVzIG9mIHRoZSBET00uXG4gKlxuICogSXQgaGFuZGxlcyB0aGUgc3VwZXIgZXh0ZW5zaW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdXBlclRhZ05hbWVMaXN0IC0gdGFnIG5hbWVzIG9mIHN1cGVyIGNvbnRyb2xsZXJcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtICBuZXcgQ29udHJvbGxlclxuICovXG5mdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KSB7XG5cbiAgICBsZXQgbWl4aW5Db250cm9sbGVyQ2xhc3MgPSBbXTtcbiAgICBzdXBlclRhZ05hbWVMaXN0ID0gcHJlcGFyZU1peGlucyhzdXBlclRhZ05hbWVMaXN0LCB0YWdOYW1lKTtcbiAgICBmb3IgKGxldCBzdXBlclRhZ05hbWUgb2Ygc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgICAgICBtaXhpbkNvbnRyb2xsZXJDbGFzcy5wdXNoKGNvbnRyb2xsZXJMaXN0W3N1cGVyVGFnTmFtZV1bMF0pO1xuICAgIH1cblxuICAgIGxldCBjb250cm9sbGVyQ2xhc3MgPSBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVswXTtcbiAgICBsZXQgY29udHJvbGxlciA9IG5ldyAoYWdpbGVBZ2dyZWdhdGlvbihjb250cm9sbGVyQ2xhc3MsIC4uLm1peGluQ29udHJvbGxlckNsYXNzKSkoKTtcbiAgICBjb250cm9sbGVyLl90YWdOYW1lID0gdGFnTmFtZTtcblxuICAgIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcik7XG4gICAgY29udHJvbGxlci4kY29udGFpbmVyID0gJGVsZW1lbnQ7XG4gICAgcnVuT25Jbml0V2l0aFBhcmFtZXRlcigkZWxlbWVudCwgY29udHJvbGxlcik7XG5cblxuICAgIHJldHVybiBjb250cm9sbGVyO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5IGl0IGVpdGhlciBnZW5lcmF0ZXMgYSBjb250cm9sbGVyIG9yIHRha2VzIGEgZ2xvYmUgaW5zdGFuY2VcbiAqIGRlcGVuZGluZyBpZiB0aGUgY29udHJvbGxlciBpcyByZWdpc3RlcmVkIGFzIGEgZ2xvYmFsIGNvbnRyb2xsZXIuIEl0IHNldHMgdGhlXG4gKiAkY29udGFpbmVyIG9iamVjdCB0byB0aGUgalF1ZXJ5IHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWcuXG4gKlxuICogUmVtZW1iZXIgR2xvYmFsIGNvbnRyb2xsZXIgY2FuIG5vdCBoYXZlIGEgc3VwZXIgY29udHJvbGxlciFcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gQ29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTVxuICogQHBhcmFtIHtqcXVlcnl9ICRlbGVtZW50IC0gVGhlIGN1cnJlbnQgRE9NIGpRdWVyeVxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgLSB0aGUgcmVnaXN0ZXJlZCB0YWcgbmFtZSBvZiB0aGUgY3VycmVudCBET01cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdXBlclRhZ05hbWVMaXN0IC0gdGFnIG5hbWVzIG9mIHN1cGVyIGNvbnRyb2xsZXJcbiAqIEByZXR1cm4ge0Fic3RyYWN0U0RDfSAtICBuZXcgQ29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbGxlckZhY3RvcnkocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICBsZXQgZ1RhZ05hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSk7XG4gICAgaWYgKEdsb2JhbFtnVGFnTmFtZV0pIHtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBHbG9iYWxbZ1RhZ05hbWVdO1xuICAgICAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIgPSAkZWxlbWVudDtcblxuICAgICAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbGxlclNob3cgZmlyc3QgcnVucyBvbkxvYWQgYW5kIGZpbGwgY29udGVudCBmb3IgYWxsIHN1YlxuICogY29udHJvbGxlci4gT25seSBpZiBhbGwgdGhlIHN1YiBjb250cm9sbGVyIGFyZSBsb2FkZWQgdGhlIHdpbGxTaG93XG4gKiBjb250cm9sIGZsb3cgZnVuY3Rpb24gZ2V0cyBjYWxsZWQuXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGpzIGNvbnRyb2xsZXIgaW5zdGFuY2VcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkaHRtbCAtIGpRdWVyeSBsb2FkZWQgY29udGVudFxuICogQHJldHVybiB7UHJvbWlzZTwqPn0gLSByZXR1cm4gb2YgdGhlIG9uTG9hZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBydW5Db250cm9sbGVyU2hvdyhjb250cm9sbGVyLCAkaHRtbCkge1xuICAgIHJldHVybiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQoY29udHJvbGxlciwgJGh0bWwpLnRoZW4oZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MgfHwgdHJ1ZTtcbiAgICAgICAgaWYgKGNvbnRyb2xsZXIud2lsbFNob3cpIHtcbiAgICAgICAgICAgIGxldCBsb2FkUHJvbWlzZU9yQ29udGVudCA9IGNvbnRyb2xsZXIud2lsbFNob3coKTtcbiAgICAgICAgICAgIGlmIChsb2FkUHJvbWlzZU9yQ29udGVudCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9hZFByb21pc2VPckNvbnRlbnQudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmdzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgfSk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyTG9hZCBDYWxscyB0aGUgb25Mb2FkIGZ1bmN0aW9uIG9mIHRoZSBjb250cm9sbGVyLlxuICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIHRoZSBIVE1MIGlzIHNldCB0byB0aGUgcGFnZS5cbiAqIFRoZSBwYXJhbWV0ZXIgaXMgYSBsaXN0IG9mIGNoaWxkcmVuIG9mIHRoZSB0YWcgYW5kIHRoZSByZWdpc3RlcmVkIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybiB7UHJvbWlzZTwqPn0gLSByZXR1cm4gb2YgdGhlIG9uTG9hZCBmdW5jdGlvblxuICovXG5mdW5jdGlvbiBydW5Db250cm9sbGVyTG9hZChjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGxvYWRGaWxlc0Zyb21Db250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgaWYgKCFjb250cm9sbGVyLm9uTG9hZCB8fCBjb250cm9sbGVyLl9vbkxvYWREb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRyb2xsZXIuX29uTG9hZERvbmUgPSB0cnVlO1xuICAgICAgICBsZXQgbG9hZFByb21pc2UgPSBjb250cm9sbGVyLm9uTG9hZChodG1sKTtcbiAgICAgICAgcmV0dXJuIChsb2FkUHJvbWlzZSB8fCBwcm9taXNlRHVtbXlGYWN0b3J5KCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIHJ1bnMgdGhlIGNvbnRyb2wgZmxvdyBmdW5jdGlvbnM6XG4gKiAxLiBvbkxvYWQoKVxuICogMi4gZmlsbCBjb250ZW50XG4gKiAzLiB3aWxsU2hvdyhkb20gcGFyYW1ldGVyKVxuICogNC4gcmVmcmVzaCgpXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zKGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBwcm9tX2NvbnRyb2xsZXIgPSBydW5Db250cm9sbGVyTG9hZChjb250cm9sbGVyKVxuICAgICAgICAudGhlbihmdW5jdGlvbiAoJGh0bWwpIHtcbiAgICAgICAgICAgIHJldHVybiBydW5Db250cm9sbGVyU2hvdyhjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJ1blJlZnJlc2goY29udHJvbGxlcik7XG4gICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgkaHRtbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgICAgIH0pO1xuXG4gICAgaWYgKGNvbnRyb2xsZXIubG9hZF9hc3luYykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21fY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuUmVmcmVzaChjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXIucmVmcmVzaCAmJiBjb250cm9sbGVyLnJlZnJlc2goKTtcbn0iXSwibmFtZXMiOlsicHJvbWlzZUR1bW15RmFjdG9yeSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsImFnaWxlQWdncmVnYXRpb24iLCJsb2FkRmlsZXNGcm9tQ29udHJvbGxlciIsInJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudCIsInJ1bk9uSW5pdFdpdGhQYXJhbWV0ZXIiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJPYmplY3QiLCJrZXlzIiwicHJlcGFyZU1peGlucyIsInN1cGVyVGFnTmFtZUxpc3QiLCJ0YWdOYW1lIiwiY29uY2F0IiwiZmlsdGVyIiwidmFsdWUiLCJpbmRleCIsInNlbGYiLCJpbmRleE9mIiwiaGFzQWRkZWQiLCJ0YWciLCJuZXdUYWciLCJpbmNsdWRlcyIsInB1c2giLCJzZXRQYXJlbnRDb250cm9sbGVyIiwicGFyZW50Q29udHJvbGxlciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyTmFtZSIsIl90YWdOYW1lIiwiX2NoaWxkQ29udHJvbGxlciIsIl9wYXJlbnRDb250cm9sbGVyIiwiY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZSIsIiRlbGVtZW50IiwibWl4aW5Db250cm9sbGVyQ2xhc3MiLCJzdXBlclRhZ05hbWUiLCJjb250cm9sbGVyQ2xhc3MiLCIkY29udGFpbmVyIiwiY29udHJvbGxlckZhY3RvcnkiLCJnVGFnTmFtZSIsInJ1bkNvbnRyb2xsZXJTaG93IiwiJGh0bWwiLCJ0aGVuIiwiYXJncyIsIndpbGxTaG93IiwibG9hZFByb21pc2VPckNvbnRlbnQiLCJQcm9taXNlIiwicnVuQ29udHJvbGxlckxvYWQiLCJodG1sIiwib25Mb2FkIiwiX29uTG9hZERvbmUiLCJsb2FkUHJvbWlzZSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJyZWZyZXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\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 */ resetChildren: () => (/* binding */ resetChildren),\n/* harmony export */ runControlFlowFunctions: () => (/* binding */ runControlFlowFunctions),\n/* harmony export */ runRefresh: () => (/* binding */ runRefresh),\n/* harmony export */ tagList: () => (/* binding */ tagList)\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\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 {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 {string} superTagNameList - tag names of super controller\n * @return {AbstractSDC} - new Controller\n */\nfunction controllerFactory(parentController, $element, tagName, superTagNameList) {\n let gTagName = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName);\n if (Global[gTagName]) {\n let controller = Global[gTagName];\n setParentController(parentController, controller);\n controller.$container = $element;\n return controller;\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 */\nfunction runControlFlowFunctions(controller) {\n const prom_controller = runControllerLoad(controller).then(function ($html) {\n return runControllerShow(controller, $html);\n }).then(() => {\n return runRefresh(controller);\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 */\nfunction runRefresh(controller) {\n return controller.refresh && controller.refresh();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfY29udHJvbGxlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQXlGO0FBQ3dCO0FBRTFEO0FBRWhELElBQUlRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDZixJQUFJQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN0QixPQUFPQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsY0FBYyxDQUFDO0FBQ3RDO0FBR0EsU0FBU0ksYUFBYUEsQ0FBQ0MsZ0JBQWdCLEVBQUVDLE9BQU8sRUFBRTtFQUM5Q0QsZ0JBQWdCLEdBQUdBLGdCQUFnQixDQUFDRSxNQUFNLENBQUNQLGNBQWMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEVELGdCQUFnQixHQUFHQSxnQkFBZ0IsQ0FBQ0csTUFBTSxDQUFDLENBQUNDLEtBQUssRUFBRUMsS0FBSyxFQUFFQyxJQUFJLEtBQUs7SUFDL0QsT0FBT0EsSUFBSSxDQUFDQyxPQUFPLENBQUNILEtBQUssQ0FBQyxLQUFLQyxLQUFLO0VBQ3hDLENBQUMsQ0FBQztFQUNGLElBQUlHLFFBQVEsR0FBRyxJQUFJO0VBQ25CLE9BQU9BLFFBQVEsRUFBRTtJQUNiQSxRQUFRLEdBQUcsS0FBSztJQUNoQixLQUFLLElBQUlDLEdBQUcsSUFBSVQsZ0JBQWdCLEVBQUU7TUFDOUIsS0FBSyxJQUFJVSxNQUFNLElBQUlmLGNBQWMsQ0FBQ2MsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdkMsSUFBSSxDQUFDVCxnQkFBZ0IsQ0FBQ1csUUFBUSxDQUFDRCxNQUFNLENBQUMsRUFBRTtVQUNwQ1YsZ0JBQWdCLENBQUNZLElBQUksQ0FBQ0YsTUFBTSxDQUFDO1VBQzdCRixRQUFRLEdBQUcsSUFBSTtRQUNuQjtNQUNKO0lBQ0o7RUFDSjtFQUNBLE9BQU9SLGdCQUFnQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDLENBQUMsRUFBRWtELElBQUksQ0FBQyxNQUFNO01BQ3JELE9BQU9NLElBQUk7SUFDZixDQUFDLENBQUM7RUFDTixDQUFDLENBQUM7QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSx1QkFBdUJBLENBQUMvQixVQUFVLEVBQUU7RUFDaEQsTUFBTWdDLGVBQWUsR0FBR04saUJBQWlCLENBQUMxQixVQUFVLENBQUMsQ0FDaERxQixJQUFJLENBQUMsVUFBVUQsS0FBSyxFQUFFO0lBQ25CLE9BQU9ELGlCQUFpQixDQUFDbkIsVUFBVSxFQUFFb0IsS0FBSyxDQUFDO0VBQy9DLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsTUFBTTtJQUNWLE9BQU9ZLFVBQVUsQ0FBQ2pDLFVBQVUsQ0FBQztFQUNqQyxDQUFDLENBQUMsQ0FBQ2tDLEtBQUssQ0FBQyxVQUFVZCxLQUFLLEVBQUU7SUFDdEIsT0FBTzNDLHNFQUF3QixDQUFDdUIsVUFBVSxFQUFFb0IsS0FBSyxDQUFDO0VBQ3RELENBQUMsQ0FBQztFQUVOLElBQUlwQixVQUFVLENBQUNtQyxVQUFVLEVBQUU7SUFDdkIsT0FBT1YsT0FBTyxDQUFDVyxPQUFPLENBQUMsQ0FBQztFQUM1QjtFQUVBLE9BQU9KLGVBQWU7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTQyxVQUFVQSxDQUFDakMsVUFBVSxFQUFFO0VBQ25DLE9BQU9BLFVBQVUsQ0FBQ3FDLE9BQU8sSUFBSXJDLFVBQVUsQ0FBQ3FDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JEIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19jb250cm9sbGVyLmpzPzhhMzEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwcm9taXNlRHVtbXlGYWN0b3J5LCB0YWdOYW1lVG9DYW1lbENhc2UsIGFnaWxlQWdncmVnYXRpb259IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuaW1wb3J0IHtDT05UUk9MTEVSX0NMQVNTLCBnZXRDb250cm9sbGVyLCBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciwgcnVuQ29udHJvbGxlckZpbGxDb250ZW50fSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuXG5pbXBvcnQge3J1bk9uSW5pdFdpdGhQYXJhbWV0ZXJ9IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcblxuZXhwb3J0IGxldCBHbG9iYWwgPSB7fTtcbmV4cG9ydCBsZXQgY29udHJvbGxlckxpc3QgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiB0YWdMaXN0KCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9sbGVyTGlzdCk7XG59XG5cblxuZnVuY3Rpb24gcHJlcGFyZU1peGlucyhzdXBlclRhZ05hbWVMaXN0LCB0YWdOYW1lKSB7XG4gICAgc3VwZXJUYWdOYW1lTGlzdCA9IHN1cGVyVGFnTmFtZUxpc3QuY29uY2F0KGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzFdKTtcbiAgICBzdXBlclRhZ05hbWVMaXN0ID0gc3VwZXJUYWdOYW1lTGlzdC5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4ge1xuICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gICAgfSk7XG4gICAgbGV0IGhhc0FkZGVkID0gdHJ1ZTtcbiAgICB3aGlsZSAoaGFzQWRkZWQpIHtcbiAgICAgICAgaGFzQWRkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIHN1cGVyVGFnTmFtZUxpc3QpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG5ld1RhZyBvZiBjb250cm9sbGVyTGlzdFt0YWddWzFdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdXBlclRhZ05hbWVMaXN0LmluY2x1ZGVzKG5ld1RhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VwZXJUYWdOYW1lTGlzdC5wdXNoKG5ld1RhZyk7XG4gICAgICAgICAgICAgICAgICAgIGhhc0FkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyVGFnTmFtZUxpc3Q7XG59XG5cbi8qKlxuICogc2V0UGFyZW50Q29udHJvbGxlciBzZXRzIHRoZSBwYXJlbnQgY29udHJvbGxlciBhcyBwcm9wZXJ0eTogJ3BhcmVudENvbnRyb2xsZXInXG4gKiB0byB0aGUgY2hpbGQgY29udHJvbGxlci4gQWxzbywgaXQgYWRkcyB0aGUgY2hpbGQgY29udHJvbGxlciB0byB0aGUgcHJvcGVydHkgbGlzdDpcbiAqICdwYXJlbnRDb250cm9sbGVyJyB0byB0aGUgcGFyZW50IGNvbnRyb2xsZXJcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZSwgY29udHJvbGxlciBvZiB0aGUgcGFyZW50IERPTSBvZiB0aGUgY29udHJvbGxlcnMgRE9NXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gcGFyZW50Q29udHJvbGxlclxuICovXG5mdW5jdGlvbiBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNvbnRyb2xsZXIpIHtcbiAgICBpZiAocGFyZW50Q29udHJvbGxlcikge1xuICAgICAgICBsZXQgY29udHJvbGxlck5hbWUgPSB0YWdOYW1lVG9DYW1lbENhc2UoY29udHJvbGxlci5fdGFnTmFtZSk7XG4gICAgICAgIGlmICghcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSkge1xuICAgICAgICAgICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50Q29udHJvbGxlci5fY2hpbGRDb250cm9sbGVyW2NvbnRyb2xsZXJOYW1lXS5wdXNoKGNvbnRyb2xsZXIpO1xuICAgIH1cblxuICAgIHJldHVybiAoY29udHJvbGxlci5fcGFyZW50Q29udHJvbGxlciA9IHBhcmVudENvbnRyb2xsZXIpXG59XG5cbi8qKlxuICogcmVzZXRDaGlsZHJlbiByZXNldHMgYWxsIGNoaWxkcmVuIG9mIGEgY29udHJvbGxlci5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldENoaWxkcmVuKHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICBwYXJlbnRDb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICBwYXJlbnRDb250cm9sbGVyLmZpbmQoYC4ke0NPTlRST0xMRVJfQ0xBU1N9YCkuZWFjaChmdW5jdGlvbigpe1xuICAgICAgICBjb25zdCAkdGhpcyA9ICQodGhpcyk7XG4gICAgICAgIGNvbnN0IGNDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlcigkdGhpcyk7XG4gICAgICAgIGlmKGNDb250cm9sbGVyID09PSBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzZXRQYXJlbnRDb250cm9sbGVyKHBhcmVudENvbnRyb2xsZXIsIGNDb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UgaXQgZ2VuZXJhdGVzIGEgY29udHJvbGxlciBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBpbml0IHBhcmFtZXRlciBieSB0aGUgZGF0YSB2YWx1ZXMgb2YgdGhlIERPTS5cbiAqXG4gKiBJdCBoYW5kbGVzIHRoZSBzdXBlciBleHRlbnNpb25zLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtzdHJpbmd9IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIGNvbnRyb2xsZXJGYWN0b3J5SW5zdGFuY2UocGFyZW50Q29udHJvbGxlciwgJGVsZW1lbnQsIHRhZ05hbWUsIHN1cGVyVGFnTmFtZUxpc3QpIHtcblxuICAgIGxldCBtaXhpbkNvbnRyb2xsZXJDbGFzcyA9IFtdO1xuICAgIHN1cGVyVGFnTmFtZUxpc3QgPSBwcmVwYXJlTWl4aW5zKHN1cGVyVGFnTmFtZUxpc3QsIHRhZ05hbWUpO1xuICAgIGZvciAobGV0IHN1cGVyVGFnTmFtZSBvZiBzdXBlclRhZ05hbWVMaXN0KSB7XG4gICAgICAgIG1peGluQ29udHJvbGxlckNsYXNzLnB1c2goY29udHJvbGxlckxpc3Rbc3VwZXJUYWdOYW1lXVswXSk7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRyb2xsZXJDbGFzcyA9IGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdWzBdO1xuICAgIGxldCBjb250cm9sbGVyID0gbmV3IChhZ2lsZUFnZ3JlZ2F0aW9uKGNvbnRyb2xsZXJDbGFzcywgLi4ubWl4aW5Db250cm9sbGVyQ2xhc3MpKSgpO1xuICAgIGNvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuXG4gICAgc2V0UGFyZW50Q29udHJvbGxlcihwYXJlbnRDb250cm9sbGVyLCBjb250cm9sbGVyKTtcbiAgICBjb250cm9sbGVyLiRjb250YWluZXIgPSAkZWxlbWVudDtcbiAgICBydW5PbkluaXRXaXRoUGFyYW1ldGVyKCRlbGVtZW50LCBjb250cm9sbGVyKTtcblxuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogY29udHJvbGxlckZhY3RvcnkgaXQgZWl0aGVyIGdlbmVyYXRlcyBhIGNvbnRyb2xsZXIgb3IgdGFrZXMgYSBnbG9iZSBpbnN0YW5jZVxuICogZGVwZW5kaW5nIGlmIHRoZSBjb250cm9sbGVyIGlzIHJlZ2lzdGVyZWQgYXMgYSBnbG9iYWwgY29udHJvbGxlci4gSXQgc2V0cyB0aGVcbiAqICRjb250YWluZXIgb2JqZWN0IHRvIHRoZSBqUXVlcnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhZy5cbiAqXG4gKiBSZW1lbWJlciBHbG9iYWwgY29udHJvbGxlciBjYW4gbm90IGhhdmUgYSBzdXBlciBjb250cm9sbGVyIVxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBDb250cm9sbGVyIG9mIHRoZSBwYXJlbnQgRE9NXG4gKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1lbnQgLSBUaGUgY3VycmVudCBET00galF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSAtIHRoZSByZWdpc3RlcmVkIHRhZyBuYW1lIG9mIHRoZSBjdXJyZW50IERPTVxuICogQHBhcmFtIHtzdHJpbmd9IHN1cGVyVGFnTmFtZUxpc3QgLSB0YWcgbmFtZXMgb2Ygc3VwZXIgY29udHJvbGxlclxuICogQHJldHVybiB7QWJzdHJhY3RTREN9IC0gIG5ldyBDb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRmFjdG9yeShwYXJlbnRDb250cm9sbGVyLCAkZWxlbWVudCwgdGFnTmFtZSwgc3VwZXJUYWdOYW1lTGlzdCkge1xuICAgIGxldCBnVGFnTmFtZSA9IHRhZ05hbWVUb0NhbWVsQ2FzZSh0YWdOYW1lKTtcbiAgICBpZiAoR2xvYmFsW2dUYWdOYW1lXSkge1xuICAgICAgICBsZXQgY29udHJvbGxlciA9IEdsb2JhbFtnVGFnTmFtZV07XG4gICAgICAgIHNldFBhcmVudENvbnRyb2xsZXIocGFyZW50Q29udHJvbGxlciwgY29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lciA9ICRlbGVtZW50O1xuXG4gICAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgIH1cblxuICAgIHJldHVybiBjb250cm9sbGVyRmFjdG9yeUluc3RhbmNlKHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbn1cblxuLyoqXG4gKiBydW5Db250cm9sbGVyU2hvdyBmaXJzdCBydW5zIG9uTG9hZCBhbmQgZmlsbCBjb250ZW50IGZvciBhbGwgc3ViXG4gKiBjb250cm9sbGVyLiBPbmx5IGlmIGFsbCB0aGUgc3ViIGNvbnRyb2xsZXIgYXJlIGxvYWRlZCB0aGUgd2lsbFNob3dcbiAqIGNvbnRyb2wgZmxvdyBmdW5jdGlvbiBnZXRzIGNhbGxlZC5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJGaWxsQ29udGVudChjb250cm9sbGVyLCAkaHRtbCkudGhlbihmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBhcmdzID0gYXJncyB8fCB0cnVlO1xuICAgICAgICBpZiAoY29udHJvbGxlci53aWxsU2hvdykge1xuICAgICAgICAgICAgbGV0IGxvYWRQcm9taXNlT3JDb250ZW50ID0gY29udHJvbGxlci53aWxsU2hvdygpO1xuICAgICAgICAgICAgaWYgKGxvYWRQcm9taXNlT3JDb250ZW50IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2FkUHJvbWlzZU9yQ29udGVudC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJncztcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIHJ1bkNvbnRyb2xsZXJMb2FkIENhbGxzIHRoZSBvbkxvYWQgZnVuY3Rpb24gb2YgdGhlIGNvbnRyb2xsZXIuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgdGhlIEhUTUwgaXMgc2V0IHRvIHRoZSBwYWdlLlxuICogVGhlIHBhcmFtZXRlciBpcyBhIGxpc3Qgb2YgY2hpbGRyZW4gb2YgdGhlIHRhZyBhbmQgdGhlIHJlZ2lzdGVyZWQgdGFnLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBqcyBjb250cm9sbGVyIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtQcm9taXNlPCo+fSAtIHJldHVybiBvZiB0aGUgb25Mb2FkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gbG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIoY29udHJvbGxlcikudGhlbigoaHRtbCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2xsZXIub25Mb2FkIHx8IGNvbnRyb2xsZXIuX29uTG9hZERvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBodG1sO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udHJvbGxlci5fb25Mb2FkRG9uZSA9IHRydWU7XG4gICAgICAgIGxldCBsb2FkUHJvbWlzZSA9IGNvbnRyb2xsZXIub25Mb2FkKGh0bWwpO1xuICAgICAgICByZXR1cm4gKGxvYWRQcm9taXNlIHx8IHByb21pc2VEdW1teUZhY3RvcnkoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMgcnVucyB0aGUgY29udHJvbCBmbG93IGZ1bmN0aW9uczpcbiAqIDEuIG9uTG9hZCgpXG4gKiAyLiBmaWxsIGNvbnRlbnRcbiAqIDMuIHdpbGxTaG93KGRvbSBwYXJhbWV0ZXIpXG4gKiA0LiByZWZyZXNoKClcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlclxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbEZsb3dGdW5jdGlvbnMoY29udHJvbGxlcikge1xuICAgIGNvbnN0IHByb21fY29udHJvbGxlciA9IHJ1bkNvbnRyb2xsZXJMb2FkKGNvbnRyb2xsZXIpXG4gICAgICAgIC50aGVuKGZ1bmN0aW9uICgkaHRtbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJ1bkNvbnRyb2xsZXJTaG93KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcnVuUmVmcmVzaChjb250cm9sbGVyKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKCRodG1sKSB7XG4gICAgICAgICAgICByZXR1cm4gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAoY29udHJvbGxlci5sb2FkX2FzeW5jKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbV9jb250cm9sbGVyO1xufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5SZWZyZXNoKGNvbnRyb2xsZXIpIHtcbiAgICByZXR1cm4gY29udHJvbGxlci5yZWZyZXNoICYmIGNvbnRyb2xsZXIucmVmcmVzaCgpO1xufSJdLCJuYW1lcyI6WyJwcm9taXNlRHVtbXlGYWN0b3J5IiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiYWdpbGVBZ2dyZWdhdGlvbiIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwibG9hZEZpbGVzRnJvbUNvbnRyb2xsZXIiLCJydW5Db250cm9sbGVyRmlsbENvbnRlbnQiLCJydW5PbkluaXRXaXRoUGFyYW1ldGVyIiwiR2xvYmFsIiwiY29udHJvbGxlckxpc3QiLCJ0YWdMaXN0IiwiT2JqZWN0Iiwia2V5cyIsInByZXBhcmVNaXhpbnMiLCJzdXBlclRhZ05hbWVMaXN0IiwidGFnTmFtZSIsImNvbmNhdCIsImZpbHRlciIsInZhbHVlIiwiaW5kZXgiLCJzZWxmIiwiaW5kZXhPZiIsImhhc0FkZGVkIiwidGFnIiwibmV3VGFnIiwiaW5jbHVkZXMiLCJwdXNoIiwic2V0UGFyZW50Q29udHJvbGxlciIsInBhcmVudENvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwiY29udHJvbGxlck5hbWUiLCJfdGFnTmFtZSIsIl9jaGlsZENvbnRyb2xsZXIiLCJfcGFyZW50Q29udHJvbGxlciIsInJlc2V0Q2hpbGRyZW4iLCJmaW5kIiwiZWFjaCIsIiR0aGlzIiwiJCIsImNDb250cm9sbGVyIiwiY29udHJvbGxlckZhY3RvcnlJbnN0YW5jZSIsIiRlbGVtZW50IiwibWl4aW5Db250cm9sbGVyQ2xhc3MiLCJzdXBlclRhZ05hbWUiLCJjb250cm9sbGVyQ2xhc3MiLCIkY29udGFpbmVyIiwiY29udHJvbGxlckZhY3RvcnkiLCJnVGFnTmFtZSIsInJ1bkNvbnRyb2xsZXJTaG93IiwiJGh0bWwiLCJ0aGVuIiwiYXJncyIsIndpbGxTaG93IiwibG9hZFByb21pc2VPckNvbnRlbnQiLCJQcm9taXNlIiwicnVuQ29udHJvbGxlckxvYWQiLCJodG1sIiwib25Mb2FkIiwiX29uTG9hZERvbmUiLCJsb2FkUHJvbWlzZSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwicHJvbV9jb250cm9sbGVyIiwicnVuUmVmcmVzaCIsImNhdGNoIiwibG9hZF9hc3luYyIsInJlc29sdmUiLCJyZWZyZXNoIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_controller.js\n");
|
38
38
|
|
39
39
|
/***/ }),
|
40
40
|
|
@@ -64,7 +64,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
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\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 _isInit: false,\n _origin_trigger: null,\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 }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n for (let [tag, controller] of Object.entries(app.Global)) {\n if (!controller.$container) _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[tag].$container = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)();\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController);\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 let tagName = app.controllerToTag(Controller);\n let globalController = new Controller();\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [globalController, []];\n globalController._tagName = tagName;\n window[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = globalController;\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\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 /**\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);\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 controller._childController = {};\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $html, controller).then(() => {\n app.safeEmpty(controller.$container);\n controller.$container.append($html);\n app.refresh(controller.$container, controller);\n });\n });\n },\n /**\n *\n * @param {jquery} $container\n * @param {AbstractSDC} leafController\n * @return {Promise<jQuery>}\n */\n refresh: ($container, leafController) => {\n if (!leafController) {\n leafController = app.getController($container);\n }\n if (!leafController) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let controller = leafController;\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, leafController.$container, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n leafController.onRefresh($container);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0E7RUFDSWtDLE9BQU8sRUFBRUEsQ0FBQ2pDLFVBQVUsRUFBRTBELGNBQWMsS0FBSztJQUNyQyxJQUFJLENBQUNBLGNBQWMsRUFBRTtNQUNqQkEsY0FBYyxHQUFHaEYsR0FBRyxDQUFDMUMsYUFBYSxDQUFDZ0UsVUFBVSxDQUFDO0lBQ2xEO0lBRUEsSUFBSSxDQUFDMEQsY0FBYyxFQUFFO01BQ2pCLE9BQU8vSCxrRUFBbUIsQ0FBQyxDQUFDO0lBQ2hDO0lBRUEsSUFBSW9FLFVBQVUsR0FBRzJELGNBQWM7SUFDL0IsSUFBSXJILGNBQWMsR0FBRyxFQUFFO0lBQ3ZCLE9BQU8wRCxVQUFVLEVBQUU7TUFDZkEsVUFBVSxDQUFDNEQsWUFBWSxHQUFHLEtBQUs7TUFDL0J0SCxjQUFjLENBQUN1SCxPQUFPLENBQUM3RCxVQUFVLENBQUM7TUFDbENBLFVBQVUsR0FBR0EsVUFBVSxDQUFDOEQsaUJBQWlCO0lBQzdDO0lBRUEsT0FBT2pJLDJFQUE2QixDQUFDOEMsR0FBRyxDQUFDSyxRQUFRLEVBQUUyRSxjQUFjLENBQUMxRCxVQUFVLEVBQUUwRCxjQUFjLENBQUMsQ0FBQzdCLElBQUksQ0FBQyxNQUFNO01BQ3JHM0YsOERBQWdCLENBQUN3SCxjQUFjLENBQUMsQ0FBQzdCLElBQUksQ0FBQyxNQUFNO1FBQ3hDLEtBQUssSUFBSWlDLEdBQUcsSUFBSXpILGNBQWMsRUFBRTtVQUM1QkcsdUVBQW1CLENBQUNzSCxHQUFHLENBQUM7UUFDNUI7UUFFQUosY0FBYyxDQUFDSyxTQUFTLENBQUMvRCxVQUFVLENBQUM7TUFDeEMsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjYW1lbENhc2VUb1RhZ05hbWUsXG4gICAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICAgIGdldEJvZHksXG4gICAgdXBsb2FkRmlsZUZvcm1EYXRhLFxuICAgIHByb21pc2VEdW1teUZhY3Rvcnlcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICAgIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICAgIERBVEFfQ09OVFJPTExFUl9LRVksXG4gICAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVsb2FkTWV0aG9kSFRNTFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7R2xvYmFsLCBjb250cm9sbGVyTGlzdCwgdGFnTGlzdH0gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7aW5pdEV2ZW50cywgc2V0Q29udHJvbGxlckV2ZW50cywgU1REX0VWRU5UX0xJU1QsIHdpbmRvd0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHtpc0Nvbm5lY3RlZCwgY2xvc2V9IGZyb20gXCIuL3NkY19zZXJ2ZXJfY2FsbC5qc1wiO1xuXG5jb25zdCBQUk9QRVJUSUVTX1VQREFURSA9IHsnY2xhc3NuYW1lJzogJ2NsYXNzJ31cblxubGV0IHNkY0RvbUZyYWdtZW50ID0gZnVuY3Rpb24gKGVsZW1lbnQsIHByb3BzKSB7XG4gICAgbGV0ICRuZXdfZWxlbSwgaXNfc2VsZiA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gYHRoaXMuJHtlbGVtZW50Lm5hbWV9YDtcbiAgICAgICAgJG5ld19lbGVtID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpKTtcbiAgICAgICAgJG5ld19lbGVtLmRhdGEoJ2hhbmRsZXInLCBlbGVtZW50KTtcbiAgICAgICAgaXNfc2VsZiA9IHRydWVcbiAgICB9XG5cblxuICAgIGlmIChwcm9wcykge1xuICAgICAgICBPYmplY3QuZW50cmllcyhwcm9wcykuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBpZiAoay5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICAgICAgICAgICAgJG5ld19lbGVtWzBdLmFkZEV2ZW50TGlzdGVuZXIoay5zdWJzdHJpbmcoMikudG9Mb3dlckNhc2UoKSwgdik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH1lbHNlIHtcbiAgICAgICAgICAgICAgICBjbG9zZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpc0Nvbm5lY3RlZCgpO1xuXG4gICAgICAgICAgICBpbml0RXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGFwcC5yb290Q29udHJvbGxlciA9IGFwcC5yb290Q29udHJvbGxlciB8fCBuZXcgQWJzdHJhY3RTREMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFwcC50YWdOYW1lcyA9IHRhZ0xpc3QoKTtcblxuICAgICAgICBmb3IobGV0IFt0YWcsIGNvbnRyb2xsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFwcC5HbG9iYWwpKSB7XG4gICAgICAgICAgICBpZighY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpPT4ge1xuICAgICAgICAkLmZuLnNhZmVSZXBsYWNlID0gZnVuY3Rpb24gKCRlbGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZXBsYWNlKCQodGhpcyksICRlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVFbXB0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZUVtcHR5KCQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgICQuZm4uc2FmZVJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBjb250cm9sbGVyVG9UYWc6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKENvbnRyb2xsZXIubmFtZSk7XG4gICAgICAgIHJldHVybiB0YWdOYW1lLnJlcGxhY2UoLy1jb250cm9sbGVyJC8sICcnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBDb250cm9sbGVyXG4gICAgICovXG4gICAgcmVnaXN0ZXJHbG9iYWw6IChDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGxldCB0YWdOYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IGdsb2JhbENvbnRyb2xsZXIgPSBuZXcgQ29udHJvbGxlcigpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtnbG9iYWxDb250cm9sbGVyLCBbXV07XG4gICAgICAgIGdsb2JhbENvbnRyb2xsZXIuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICB3aW5kb3dbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IEdsb2JhbFt0YWdOYW1lVG9DYW1lbENhc2UodGFnTmFtZSldID0gZ2xvYmFsQ29udHJvbGxlcjtcbiAgICB9LFxuXG4gICAgY2xlYW5DYWNoZTogKCkgPT4ge1xuICAgICAgICBjbGVhbkNhY2hlKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGNvbnRyb2xsZXJMaXN0W3RhZ05hbWVdID0gW0NvbnRyb2xsZXIsIFtdXTtcbiAgICAgICAgQ29udHJvbGxlci5wcm90b3R5cGUuX3RhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBtaXhpbnMgQ29udHJvbGxlciB0YWcgbmFtZXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkTWl4aW46ICguLi5taXhpbnMpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBtaXhpbiBvZiBtaXhpbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1peGluTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtaXhpbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gY2FtZWxDYXNlVG9UYWdOYW1lKG1peGluKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtaXhpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWl4aW5OYW1lID0gYXBwLmNvbnRyb2xsZXJUb1RhZyhtaXhpbilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXVsxXS5wdXNoKG1peGluTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgcG9zdDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuQ1NSRl9UT0tFTiA9IGFwcC5DU1JGX1RPS0VOO1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBwYXJhbXMsICQucG9zdCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgZ2V0OiAoY29udHJvbGxlciwgdXJsLCBhcmdzKSA9PiB7XG4gICAgICAgIHJldHVybiBhcHAuYWpheChjb250cm9sbGVyLCB1cmwsIGFyZ3MsICQuZ2V0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gbWV0aG9kICQuZ2V0IG9yICQucG9zdFxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAgICovXG4gICAgYWpheDogKGNvbnRyb2xsZXIsIHVybCwgYXJncywgbWV0aG9kKSA9PiB7XG4gICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgYXJncyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgICAgIGFyZ3MuX21ldGhvZCA9IGFyZ3MuX21ldGhvZCB8fCAnYXBpJztcblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZCh1cmwsIGFyZ3MpLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG4gICAgfSxcblxuICAgIHN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3OiAoY29udHJvbGxlciwgZm9ybSwgdXJsLCBtZXRob2QpID0+IHtcbiAgICAgICAgbGV0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKGZvcm0pO1xuICAgICAgICBjb25zdCByZWRpcmVjdG9yID0gKGEpPT4ge1xuICAgICAgICAgICAgaWYgKGFbJ3VybC1saW5rJ10pIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvbk5hdkxpbmsnLCBhWyd1cmwtbGluayddKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhWyd1cmwnXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgKHVybCB8fCBmb3JtLmFjdGlvbiksIChtZXRob2QgfHwgZm9ybS5tZXRob2QpKVxuICAgICAgICAgICAgICAgIC50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLnN0YXR1cyA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGEsYixjKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGEuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBhLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0b3IoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGEsIGIsIGMpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9jaGlsZENvbnRyb2xsZXIgPSB7fTtcbiAgICAgICAgICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgJGh0bWwsIGNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGFwcC5zYWZlRW1wdHkoY29udHJvbGxlci4kY29udGFpbmVyKTtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXBwZW5kKCRodG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIsIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVmcmVzaDogKCRjb250YWluZXIsIGxlYWZDb250cm9sbGVyKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRhaW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lciwgbGVhZkNvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmVsb2FkTWV0aG9kSFRNTChsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29uIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbnRyb2xsZXJFdmVudHMoY29uKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZWFmQ29udHJvbGxlci5vblJlZnJlc2goJGNvbnRhaW5lcik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9KTtcbiAgICB9LFxufTsiXSwibmFtZXMiOlsiY2FtZWxDYXNlVG9UYWdOYW1lIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwiZ2V0Qm9keSIsInVwbG9hZEZpbGVGb3JtRGF0YSIsInByb21pc2VEdW1teUZhY3RvcnkiLCJyZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJnZXRDb250cm9sbGVyIiwiY2xlYW5DYWNoZSIsInJlbG9hZE1ldGhvZEhUTUwiLCJBYnN0cmFjdFNEQyIsIkdsb2JhbCIsImNvbnRyb2xsZXJMaXN0IiwidGFnTGlzdCIsImluaXRFdmVudHMiLCJzZXRDb250cm9sbGVyRXZlbnRzIiwiU1REX0VWRU5UX0xJU1QiLCJ3aW5kb3dFdmVudEhhbmRsZXIiLCJ0cmlnZ2VyIiwiaXNDb25uZWN0ZWQiLCJjbG9zZSIsIlBST1BFUlRJRVNfVVBEQVRFIiwic2RjRG9tRnJhZ21lbnQiLCJlbGVtZW50IiwicHJvcHMiLCIkbmV3X2VsZW0iLCJpc19zZWxmIiwiJCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJuYW1lIiwiZGF0YSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiayIsInYiLCJzdGFydHNXaXRoIiwiYWRkRXZlbnRMaXN0ZW5lciIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwic2V0QXR0cmlidXRlIiwiYWRkQ2xhc3MiLCJ3aW5kb3ciLCJzZGNEb20iLCJjaGlsZHJlbiIsImMiLCJhcHBlbmQiLCJhcHAiLCJDU1JGX1RPS0VOIiwiTEFOR1VBR0VfQ09ERSIsIkRFQlVHIiwiVkVSU0lPTiIsInRhZ05hbWVzIiwicm9vdENvbnRyb2xsZXIiLCJfaXNJbml0IiwiX29yaWdpbl90cmlnZ2VyIiwiaW5pdF9zZGMiLCJmbiIsImV2ZW50IiwiZXZfdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInR5cGUiLCJpbmNsdWRlcyIsInB1c2giLCJvbiIsInVwZGF0ZUpxdWVyeSIsInRhZyIsImNvbnRyb2xsZXIiLCIkY29udGFpbmVyIiwic2FmZVJlcGxhY2UiLCIkZWxlbSIsInNhZmVFbXB0eSIsInNhZmVSZW1vdmUiLCJjb250cm9sbGVyVG9UYWciLCJDb250cm9sbGVyIiwicmVwbGFjZSIsInJlZ2lzdGVyR2xvYmFsIiwiZ2xvYmFsQ29udHJvbGxlciIsIl90YWdOYW1lIiwicmVnaXN0ZXIiLCJwcm90b3R5cGUiLCJhZGRNaXhpbiIsIm1peGlucyIsIm1peGluIiwibWl4aW5OYW1lIiwicG9zdCIsInVybCIsImFyZ3MiLCJhamF4IiwicGFyYW1zIiwiZ2V0IiwibWV0aG9kIiwiX21ldGhvZCIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRoZW4iLCJhIiwiYiIsInN0YXR1cyIsInJlZnJlc2giLCJjYXRjaCIsInN1Ym1pdEZvcm1BbmRVcGRhdGVWaWV3IiwiZm9ybSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJyZWRpcmVjdG9yIiwibG9jYXRpb24iLCJocmVmIiwiYWN0aW9uIiwicmVzcG9uc2VKU09OIiwic3VibWl0Rm9ybSIsIiRjaGlsZHJlbiIsImVhY2giLCJfIiwiJGVsZW1lbnQiLCIkbmV3IiwiaW5zZXJ0QmVmb3JlIiwiJHRoaXMiLCJyZW1vdmUiLCJmaW5kIiwicmVsb2FkQ29udHJvbGxlciIsImh0bWwiLCIkaHRtbCIsIl9jaGlsZENvbnRyb2xsZXIiLCJsZWFmQ29udHJvbGxlciIsIl9pc0V2ZW50c1NldCIsInVuc2hpZnQiLCJfcGFyZW50Q29udHJvbGxlciIsImNvbiIsIm9uUmVmcmVzaCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\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 _isInit: false,\n _origin_trigger: null,\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 }\n app.tagNames = (0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.tagList)();\n for (let [tag, controller] of Object.entries(app.Global)) {\n if (!controller.$container) _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[tag].$container = (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)();\n }\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.getBody)(), app.rootController);\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 let tagName = app.controllerToTag(Controller);\n let globalController = new Controller();\n _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.controllerList[tagName] = [globalController, []];\n globalController._tagName = tagName;\n window[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = _sdc_controller_js__WEBPACK_IMPORTED_MODULE_3__.Global[(0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.tagNameToCamelCase)(tagName)] = globalController;\n },\n cleanCache: () => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.cleanCache)();\n },\n /**\n *\n * @param {AbstractSDC} Controller\n */\n register: Controller => {\n let tagName = app.controllerToTag(Controller);\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 /**\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);\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 */\n reconcile: (controller, $virtualNode, $realNode = 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 return app.refresh($virtualNode, controller, true).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 return controller;\n });\n },\n /**\n *\n * @param {jquery} $dom\n * @param {AbstractSDC} leafController\n * @param {bool} silent\n * @return {Promise<jQuery>}\n */\n refresh: ($dom, leafController, silent = false) => {\n if (!leafController) {\n leafController = app.getController($dom);\n }\n if (!leafController) {\n return (0,_sdc_utils_js__WEBPACK_IMPORTED_MODULE_0__.promiseDummyFactory)();\n }\n let controller = leafController;\n let controllerList = [];\n while (controller) {\n controller._isEventsSet = false;\n controllerList.unshift(controller);\n controller = controller._parentController;\n }\n $dom ??= leafController.$container;\n return (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.replaceTagElementsInContainer)(app.tagNames, $dom, leafController).then(() => {\n (0,_sdc_view_js__WEBPACK_IMPORTED_MODULE_1__.reloadMethodHTML)(leafController, $dom).then(() => {\n for (let con of controllerList) {\n (0,_sdc_dom_events_js__WEBPACK_IMPORTED_MODULE_4__.setControllerEvents)(con);\n }\n !silent && leafController.onRefresh($dom);\n });\n });\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFDLENBQUNuQyxJQUFJLENBQUMsTUFBTTtNQUNoRjdGLDhEQUFnQixDQUFDZ0ksY0FBYyxFQUFFRCxJQUFJLENBQUMsQ0FBQ2xDLElBQUksQ0FBQyxNQUFNO1FBQzlDLEtBQUssSUFBSXdDLEdBQUcsSUFBSWxJLGNBQWMsRUFBRTtVQUM1QkksdUVBQW1CLENBQUM4SCxHQUFHLENBQUM7UUFDNUI7UUFFQSxDQUFDSixNQUFNLElBQUlELGNBQWMsQ0FBQ00sU0FBUyxDQUFDUCxJQUFJLENBQUM7TUFDN0MsQ0FBQyxDQUFDO0lBRU4sQ0FBQyxDQUFDO0VBQ047QUFDSixDQUFDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY19tYWluLmpzPzA4ZmMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjYW1lbENhc2VUb1RhZ05hbWUsXG4gICAgdGFnTmFtZVRvQ2FtZWxDYXNlLFxuICAgIGdldEJvZHksXG4gICAgdXBsb2FkRmlsZUZvcm1EYXRhLFxuICAgIHByb21pc2VEdW1teUZhY3Rvcnlcbn0gZnJvbSBcIi4vc2RjX3V0aWxzLmpzXCI7XG5pbXBvcnQge1xuICAgIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyLFxuICAgIHJlbG9hZEhUTUxDb250cm9sbGVyLFxuICAgIERBVEFfQ09OVFJPTExFUl9LRVksXG4gICAgQ09OVFJPTExFUl9DTEFTUywgZ2V0Q29udHJvbGxlciwgY2xlYW5DYWNoZSwgcmVsb2FkTWV0aG9kSFRNTFxufSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFNEQ30gZnJvbSBcIi4vQWJzdHJhY3RTREMuanNcIjtcbmltcG9ydCB7R2xvYmFsLCBjb250cm9sbGVyTGlzdCwgdGFnTGlzdCwgcmVzZXRDaGlsZHJlbn0gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7aW5pdEV2ZW50cywgc2V0Q29udHJvbGxlckV2ZW50cywgU1REX0VWRU5UX0xJU1QsIHdpbmRvd0V2ZW50SGFuZGxlcn0gZnJvbSBcIi4vc2RjX2RvbV9ldmVudHMuanNcIjtcbmltcG9ydCB7cmVjb25jaWxlfSBmcm9tIFwiLi9zZGNfdmlldy5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5pbXBvcnQge2lzQ29ubmVjdGVkLCBjbG9zZX0gZnJvbSBcIi4vc2RjX3NlcnZlcl9jYWxsLmpzXCI7XG5cbmNvbnN0IFBST1BFUlRJRVNfVVBEQVRFID0geydjbGFzc25hbWUnOiAnY2xhc3MnfVxuXG5sZXQgc2RjRG9tRnJhZ21lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgcHJvcHMpIHtcbiAgICBsZXQgJG5ld19lbGVtLCBpc19zZWxmID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRhZ05hbWUgPSBgdGhpcy4ke2VsZW1lbnQubmFtZX1gO1xuICAgICAgICAkbmV3X2VsZW0gPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSkpO1xuICAgICAgICAkbmV3X2VsZW0uZGF0YSgnaGFuZGxlcicsIGVsZW1lbnQpO1xuICAgICAgICBpc19zZWxmID0gdHJ1ZVxuICAgIH1cblxuXG4gICAgaWYgKHByb3BzKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIGlmIChrLnN0YXJ0c1dpdGgoJ29uJykpIHtcbiAgICAgICAgICAgICAgICAkbmV3X2VsZW1bMF0uYWRkRXZlbnRMaXN0ZW5lcihrLnN1YnN0cmluZygyKS50b0xvd2VyQ2FzZSgpLCB2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IFBST1BFUlRJRVNfVVBEQVRFW2sudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICRuZXdfZWxlbVswXS5zZXRBdHRyaWJ1dGUoaywgdik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc19zZWxmKSB7XG4gICAgICAgICRuZXdfZWxlbS5hZGRDbGFzcygnX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgX3dpdGhfaGFuZGxlcicpO1xuICAgIH1cblxuICAgIHJldHVybiAkbmV3X2VsZW07XG59XG5cbndpbmRvdy5zZGNEb20gPSBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIC4uLmNoaWxkcmVuKSB7XG4gICAgaWYgKCF0YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgJG5ld19lbGVtID0gc2RjRG9tRnJhZ21lbnQodGFnTmFtZSwgcHJvcHMpO1xuICAgIGZvciAoY29uc3QgYyBvZiBjaGlsZHJlbikge1xuICAgICAgICAkbmV3X2VsZW0uYXBwZW5kKGMpO1xuICAgIH1cbiAgICByZXR1cm4gJG5ld19lbGVtO1xuXG59XG5cbmV4cG9ydCBsZXQgYXBwID0ge1xuICAgIENTUkZfVE9LRU46IHdpbmRvdy5DU1JGX1RPS0VOIHx8ICcnLFxuICAgIExBTkdVQUdFX0NPREU6IHdpbmRvdy5MQU5HVUFHRV9DT0RFIHx8ICdlbicsXG4gICAgREVCVUc6IHdpbmRvdy5ERUJVRyB8fCBmYWxzZSxcbiAgICBWRVJTSU9OOiB3aW5kb3cuVkVSU0lPTiB8fCAnMC4wJyxcbiAgICB0YWdOYW1lczogW10sXG4gICAgR2xvYmFsOiBHbG9iYWwsXG4gICAgcm9vdENvbnRyb2xsZXI6IG51bGwsXG4gICAgX2lzSW5pdDogZmFsc2UsXG4gICAgX29yaWdpbl90cmlnZ2VyOiBudWxsLFxuXG4gICAgaW5pdF9zZGM6ICgpID0+IHtcbiAgICAgICAgaWYgKCFhcHAuX2lzSW5pdCkge1xuICAgICAgICAgICAgYXBwLl9pc0luaXQgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFhcHAuX29yaWdpbl90cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgYXBwLl9vcmlnaW5fdHJpZ2dlciA9ICQuZm4udHJpZ2dlcjtcbiAgICAgICAgICAgICAgICAkLmZuLnRyaWdnZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXZfdHlwZSA9IHt9Lmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsIFwidHlwZVwiKSA/IGV2ZW50LnR5cGUgOiBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTVERfRVZFTlRfTElTVC5pbmNsdWRlcyhldl90eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU1REX0VWRU5UX0xJU1QucHVzaChldl90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICQod2luZG93KS5vbihldl90eXBlLCB3aW5kb3dFdmVudEhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHAuX29yaWdpbl90cmlnZ2VyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2xvc2UoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXNDb25uZWN0ZWQoKTtcblxuICAgICAgICAgICAgaW5pdEV2ZW50cygpO1xuXG4gICAgICAgICAgICBhcHAucm9vdENvbnRyb2xsZXIgPSBhcHAucm9vdENvbnRyb2xsZXIgfHwgbmV3IEFic3RyYWN0U0RDKCk7XG4gICAgICAgIH1cblxuICAgICAgICBhcHAudGFnTmFtZXMgPSB0YWdMaXN0KCk7XG5cbiAgICAgICAgZm9yIChsZXQgW3RhZywgY29udHJvbGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoYXBwLkdsb2JhbCkpIHtcbiAgICAgICAgICAgIGlmICghY29udHJvbGxlci4kY29udGFpbmVyKSBHbG9iYWxbdGFnXS4kY29udGFpbmVyID0gZ2V0Qm9keSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKGFwcC50YWdOYW1lcywgZ2V0Qm9keSgpLCBhcHAucm9vdENvbnRyb2xsZXIpO1xuICAgIH0sXG5cbiAgICB1cGRhdGVKcXVlcnk6ICgpID0+IHtcbiAgICAgICAgJC5mbi5zYWZlUmVwbGFjZSA9IGZ1bmN0aW9uICgkZWxlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC5zYWZlUmVwbGFjZSgkKHRoaXMpLCAkZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgJC5mbi5zYWZlRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVFbXB0eSgkKHRoaXMpKTtcbiAgICAgICAgfVxuICAgICAgICAkLmZuLnNhZmVSZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnNhZmVSZW1vdmUoJCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgY29udHJvbGxlclRvVGFnOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGNhbWVsQ2FzZVRvVGFnTmFtZShDb250cm9sbGVyLm5hbWUpO1xuICAgICAgICByZXR1cm4gdGFnTmFtZS5yZXBsYWNlKC8tY29udHJvbGxlciQvLCAnJyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gQ29udHJvbGxlclxuICAgICAqL1xuICAgIHJlZ2lzdGVyR2xvYmFsOiAoQ29udHJvbGxlcikgPT4ge1xuICAgICAgICBsZXQgdGFnTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcoQ29udHJvbGxlcik7XG4gICAgICAgIGxldCBnbG9iYWxDb250cm9sbGVyID0gbmV3IENvbnRyb2xsZXIoKTtcbiAgICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV0gPSBbZ2xvYmFsQ29udHJvbGxlciwgW11dO1xuICAgICAgICBnbG9iYWxDb250cm9sbGVyLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgd2luZG93W3RhZ05hbWVUb0NhbWVsQ2FzZSh0YWdOYW1lKV0gPSBHbG9iYWxbdGFnTmFtZVRvQ2FtZWxDYXNlKHRhZ05hbWUpXSA9IGdsb2JhbENvbnRyb2xsZXI7XG4gICAgfSxcblxuICAgIGNsZWFuQ2FjaGU6ICgpID0+IHtcbiAgICAgICAgY2xlYW5DYWNoZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IENvbnRyb2xsZXJcbiAgICAgKi9cbiAgICByZWdpc3RlcjogKENvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSBhcHAuY29udHJvbGxlclRvVGFnKENvbnRyb2xsZXIpO1xuICAgICAgICBjb250cm9sbGVyTGlzdFt0YWdOYW1lXSA9IFtDb250cm9sbGVyLCBbXV07XG4gICAgICAgIENvbnRyb2xsZXIucHJvdG90eXBlLl90YWdOYW1lID0gdGFnTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gbWl4aW5zIENvbnRyb2xsZXIgdGFnIG5hbWVzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGFkZE1peGluOiAoLi4ubWl4aW5zKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbWl4aW4gb2YgbWl4aW5zKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtaXhpbk5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWl4aW4gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluTmFtZSA9IGNhbWVsQ2FzZVRvVGFnTmFtZShtaXhpbik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWl4aW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1peGluTmFtZSA9IGFwcC5jb250cm9sbGVyVG9UYWcobWl4aW4pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlckxpc3RbdGFnTmFtZV1bMV0ucHVzaChtaXhpbk5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIHBvc3Q6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MpID0+IHtcbiAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICBhcmdzID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLkNTUkZfVE9LRU4gPSBhcHAuQ1NSRl9UT0tFTjtcbiAgICAgICAgcmV0dXJuIGFwcC5hamF4KGNvbnRyb2xsZXIsIHVybCwgcGFyYW1zLCAkLnBvc3QpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3NcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGdldDogKGNvbnRyb2xsZXIsIHVybCwgYXJncykgPT4ge1xuICAgICAgICByZXR1cm4gYXBwLmFqYXgoY29udHJvbGxlciwgdXJsLCBhcmdzLCAkLmdldCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCAkLmdldCBvciAkLnBvc3RcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgICAqL1xuICAgIGFqYXg6IChjb250cm9sbGVyLCB1cmwsIGFyZ3MsIG1ldGhvZCkgPT4ge1xuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgICAgICBhcmdzLl9tZXRob2QgPSBhcmdzLl9tZXRob2QgfHwgJ2FwaSc7XG5cbiAgICAgICAgY29uc3QgcCA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXRob2QodXJsLCBhcmdzKS50aGVuKChhLCBiLCBjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcignb25OYXZMaW5rJywgYVsndXJsLWxpbmsnXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKGNvbnRyb2xsZXIuJGNvbnRhaW5lcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKHJlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwO1xuICAgIH0sXG5cbiAgICBzdWJtaXRGb3JtQW5kVXBkYXRlVmlldzogKGNvbnRyb2xsZXIsIGZvcm0sIHVybCwgbWV0aG9kKSA9PiB7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKTtcbiAgICAgICAgY29uc3QgcmVkaXJlY3RvciA9IChhKSA9PiB7XG4gICAgICAgICAgICBpZiAoYVsndXJsLWxpbmsnXSkge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ29uTmF2TGluaycsIGFbJ3VybC1saW5rJ10pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGFbJ3VybCddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCAodXJsIHx8IGZvcm0uYWN0aW9uKSwgKG1ldGhvZCB8fCBmb3JtLm1ldGhvZCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKGEsIGIsIGMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEuc3RhdHVzID09PSAncmVkaXJlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdG9yKGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHAucmVmcmVzaChjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoYSwgYiwgYykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5zdGF0dXMgPT09IDMwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGEucmVzcG9uc2VKU09OO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RvcihhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHA7XG5cbiAgICB9LFxuICAgIHN1Ym1pdEZvcm06IChmb3JtLCB1cmwsIG1ldGhvZCkgPT4ge1xuICAgICAgICBsZXQgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoZm9ybSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB1cGxvYWRGaWxlRm9ybURhdGEoZm9ybURhdGEsICh1cmwgfHwgZm9ybS5hY3Rpb24pLCAobWV0aG9kIHx8IGZvcm0ubWV0aG9kKSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJGVsZW1cbiAgICAgKiBAcmV0dXJuIHtBYnN0cmFjdFNEQ31cbiAgICAgKi9cbiAgICBnZXRDb250cm9sbGVyOiAoJGVsZW0pID0+IGdldENvbnRyb2xsZXIoJGVsZW0pLFxuXG4gICAgLyoqXG4gICAgICogc2FmZUVtcHR5IHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIGNvbnRhaW5lciB0byBiZSBlbXB0eWVkXG4gICAgICovXG4gICAgc2FmZUVtcHR5OiAoJGVsZW0pID0+IHtcbiAgICAgICAgbGV0ICRjaGlsZHJlbiA9ICRlbGVtLmNoaWxkcmVuKCk7XG4gICAgICAgICRjaGlsZHJlbi5lYWNoKGZ1bmN0aW9uIChfLCBlbGVtZW50KSB7XG4gICAgICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwLnNhZmVSZW1vdmUoJGVsZW1lbnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGVsZW07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHNhZmVSZXBsYWNlIHJlbW92ZXMgYWxsIGNvbnRlbnQgb2YgYSBkb21cbiAgICAgKiBhbmQgZGVsZXRlcyBhbGwgY2hpbGQgY29udHJvbGxlciBzYWZlbHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGVsZW0gLSBqUXVlcnkgRE9NIHRvIGJlIHJlcGxlYWNlZFxuICAgICAqIEBwYXJhbSAkbmV3IC0galF1ZXJ5IG5ldyBET00gY29udGFpbmVyXG4gICAgICovXG4gICAgc2FmZVJlcGxhY2U6ICgkZWxlbSwgJG5ldykgPT4ge1xuICAgICAgICAkbmV3Lmluc2VydEJlZm9yZSgkZWxlbSk7XG4gICAgICAgIHJldHVybiBhcHAuc2FmZVJlbW92ZSgkZWxlbSk7XG4gICAgfSxcblxuXG4gICAgLyoqXG4gICAgICogc2FmZVJlbW92ZSByZW1vdmVzIGEgZG9tIGFuZCBkZWxldGVzIGFsbCBjaGlsZCBjb250cm9sbGVyIHNhZmVseS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSAkZWxlbSAtIGpRdWVyeSBEb21cbiAgICAgKi9cbiAgICBzYWZlUmVtb3ZlOiAoJGVsZW0pID0+IHtcbiAgICAgICAgJGVsZW0uZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKCR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKSkge1xuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgJGVsZW0uZmluZChgLiR7Q09OVFJPTExFUl9DTEFTU31gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSAkKHRoaXMpLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgJiYgY29udHJvbGxlci5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRlbGVtLnJlbW92ZSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlPGpRdWVyeT59XG4gICAgICovXG4gICAgcmVsb2FkQ29udHJvbGxlcjogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHJlbG9hZEhUTUxDb250cm9sbGVyKGNvbnRyb2xsZXIpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgIGxldCAkaHRtbCA9ICQoaHRtbCk7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnJlY29uY2lsZShjb250cm9sbGVyLCAkaHRtbCk7XG4gICAgICAgIH0pO1xuICAgIH0sXG5cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkdmlydHVhbE5vZGVcbiAgICAgKiBAcGFyYW0ge2pxdWVyeX0gJHJlYWxOb2RlXG4gICAgICovXG4gICAgcmVjb25jaWxlOiAoY29udHJvbGxlciwgJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUgPSBudWxsKSA9PiB7XG4gICAgICAgIGlmICghJHJlYWxOb2RlKSB7XG4gICAgICAgICAgICBsZXQgJHRlbXAgPSBjb250cm9sbGVyLiRjb250YWluZXIuY2xvbmUoKS5lbXB0eSgpO1xuICAgICAgICAgICAgJHRlbXAuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZLCBudWxsKTtcbiAgICAgICAgICAgICR0ZW1wLnJlbW92ZUNsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgICAgICAgICAgJHRlbXAuYXBwZW5kKCR2aXJ0dWFsTm9kZSk7XG4gICAgICAgICAgICAkdmlydHVhbE5vZGUgPSAkdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgICRyZWFsTm9kZSA9ICRyZWFsTm9kZSA/PyBjb250cm9sbGVyLiRjb250YWluZXI7XG5cbiAgICAgICAgcmV0dXJuIGFwcC5yZWZyZXNoKCR2aXJ0dWFsTm9kZSwgY29udHJvbGxlciwgdHJ1ZSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZWNvbmNpbGUoJHZpcnR1YWxOb2RlLCAkcmVhbE5vZGUpO1xuICAgICAgICAgICAgcmVzZXRDaGlsZHJlbihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyO1xuICAgICAgICB9KTtcblxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7anF1ZXJ5fSAkZG9tXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbGVhZkNvbnRyb2xsZXJcbiAgICAgKiBAcGFyYW0ge2Jvb2x9IHNpbGVudFxuICAgICAqIEByZXR1cm4ge1Byb21pc2U8alF1ZXJ5Pn1cbiAgICAgKi9cbiAgICByZWZyZXNoOiAoJGRvbSwgbGVhZkNvbnRyb2xsZXIsIHNpbGVudCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbGVhZkNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIGxlYWZDb250cm9sbGVyID0gYXBwLmdldENvbnRyb2xsZXIoJGRvbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWxlYWZDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZUR1bW15RmFjdG9yeSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvbnRyb2xsZXIgPSBsZWFmQ29udHJvbGxlcjtcbiAgICAgICAgbGV0IGNvbnRyb2xsZXJMaXN0ID0gW107XG4gICAgICAgIHdoaWxlIChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLl9pc0V2ZW50c1NldCA9IGZhbHNlO1xuICAgICAgICAgICAgY29udHJvbGxlckxpc3QudW5zaGlmdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyLl9wYXJlbnRDb250cm9sbGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgJGRvbSA/Pz0gbGVhZkNvbnRyb2xsZXIuJGNvbnRhaW5lcjtcblxuICAgICAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkZG9tLCBsZWFmQ29udHJvbGxlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZWxvYWRNZXRob2RIVE1MKGxlYWZDb250cm9sbGVyLCAkZG9tKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjb24gb2YgY29udHJvbGxlckxpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29udHJvbGxlckV2ZW50cyhjb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICFzaWxlbnQgJiYgbGVhZkNvbnRyb2xsZXIub25SZWZyZXNoKCRkb20pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgfSxcbn07Il0sIm5hbWVzIjpbImNhbWVsQ2FzZVRvVGFnTmFtZSIsInRhZ05hbWVUb0NhbWVsQ2FzZSIsImdldEJvZHkiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJwcm9taXNlRHVtbXlGYWN0b3J5IiwicmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJyZWxvYWRIVE1MQ29udHJvbGxlciIsIkRBVEFfQ09OVFJPTExFUl9LRVkiLCJDT05UUk9MTEVSX0NMQVNTIiwiZ2V0Q29udHJvbGxlciIsImNsZWFuQ2FjaGUiLCJyZWxvYWRNZXRob2RIVE1MIiwiQWJzdHJhY3RTREMiLCJHbG9iYWwiLCJjb250cm9sbGVyTGlzdCIsInRhZ0xpc3QiLCJyZXNldENoaWxkcmVuIiwiaW5pdEV2ZW50cyIsInNldENvbnRyb2xsZXJFdmVudHMiLCJTVERfRVZFTlRfTElTVCIsIndpbmRvd0V2ZW50SGFuZGxlciIsInJlY29uY2lsZSIsInRyaWdnZXIiLCJpc0Nvbm5lY3RlZCIsImNsb3NlIiwiUFJPUEVSVElFU19VUERBVEUiLCJzZGNEb21GcmFnbWVudCIsImVsZW1lbnQiLCJwcm9wcyIsIiRuZXdfZWxlbSIsImlzX3NlbGYiLCIkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidGFnTmFtZSIsIm5hbWUiLCJkYXRhIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrIiwidiIsInN0YXJ0c1dpdGgiLCJhZGRFdmVudExpc3RlbmVyIiwic3Vic3RyaW5nIiwidG9Mb3dlckNhc2UiLCJzZXRBdHRyaWJ1dGUiLCJhZGRDbGFzcyIsIndpbmRvdyIsInNkY0RvbSIsImNoaWxkcmVuIiwiYyIsImFwcGVuZCIsImFwcCIsIkNTUkZfVE9LRU4iLCJMQU5HVUFHRV9DT0RFIiwiREVCVUciLCJWRVJTSU9OIiwidGFnTmFtZXMiLCJyb290Q29udHJvbGxlciIsIl9pc0luaXQiLCJfb3JpZ2luX3RyaWdnZXIiLCJpbml0X3NkYyIsImZuIiwiZXZlbnQiLCJldl90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwidHlwZSIsImluY2x1ZGVzIiwicHVzaCIsIm9uIiwidXBkYXRlSnF1ZXJ5IiwidGFnIiwiY29udHJvbGxlciIsIiRjb250YWluZXIiLCJzYWZlUmVwbGFjZSIsIiRlbGVtIiwic2FmZUVtcHR5Iiwic2FmZVJlbW92ZSIsImNvbnRyb2xsZXJUb1RhZyIsIkNvbnRyb2xsZXIiLCJyZXBsYWNlIiwicmVnaXN0ZXJHbG9iYWwiLCJnbG9iYWxDb250cm9sbGVyIiwiX3RhZ05hbWUiLCJyZWdpc3RlciIsInByb3RvdHlwZSIsImFkZE1peGluIiwibWl4aW5zIiwibWl4aW4iLCJtaXhpbk5hbWUiLCJwb3N0IiwidXJsIiwiYXJncyIsImFqYXgiLCJwYXJhbXMiLCJnZXQiLCJtZXRob2QiLCJfbWV0aG9kIiwicCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwidGhlbiIsImEiLCJiIiwic3RhdHVzIiwicmVmcmVzaCIsImNhdGNoIiwic3VibWl0Rm9ybUFuZFVwZGF0ZVZpZXciLCJmb3JtIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsInJlZGlyZWN0b3IiLCJsb2NhdGlvbiIsImhyZWYiLCJhY3Rpb24iLCJyZXNwb25zZUpTT04iLCJzdWJtaXRGb3JtIiwiJGNoaWxkcmVuIiwiZWFjaCIsIl8iLCIkZWxlbWVudCIsIiRuZXciLCJpbnNlcnRCZWZvcmUiLCIkdGhpcyIsInJlbW92ZSIsImZpbmQiLCJyZWxvYWRDb250cm9sbGVyIiwiaHRtbCIsIiRodG1sIiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwiJHRlbXAiLCJjbG9uZSIsImVtcHR5IiwicmVtb3ZlQ2xhc3MiLCIkZG9tIiwibGVhZkNvbnRyb2xsZXIiLCJzaWxlbnQiLCJfaXNFdmVudHNTZXQiLCJ1bnNoaWZ0IiwiX3BhcmVudENvbnRyb2xsZXIiLCJjb24iLCJvblJlZnJlc2giXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_main.js\n");
|
68
68
|
|
69
69
|
/***/ }),
|
70
70
|
|
@@ -94,7 +94,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
94
94
|
\********************************************/
|
95
95
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
96
96
|
|
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 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 const newVal = new Number(value.pk);\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 oldVal.pk = value;\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.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 = {}, cb_resolve = null, cb_reject = null) {\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: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter: filter\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 detailView(pk = -1, cb_resolve = null, cb_reject = null) {\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: pk\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 if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).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 === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\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 class=\"container-fluid\">');\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 class=\"container-fluid\">');\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);\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) {\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 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 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) {\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 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 delete this.open_request[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 delete this.open_request['_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 delete this.open_request['_connecting_process'];\n } else if (data.type === 'load') {\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 delete this.open_request[data.event_id];\n }\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,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LENBQUMsR0FBR0MsQ0FBQztRQUNkO01BQ0o7TUFFQUgsT0FBTyxDQUFDM0gsSUFBSSxDQUFDMkcsR0FBRyxDQUFDO0lBQ3JCO0lBRUEsSUFBSSxJQUFJLENBQUNoSSxXQUFXLENBQUNKLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDL0IsSUFBSSxDQUFDSyxNQUFNLEdBQUcsSUFBSSxDQUFDRCxXQUFXLENBQUN5RSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQyxNQUFNO01BQ0gsSUFBSSxDQUFDeEUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNwQjtJQUVBLE9BQU8rSSxPQUFPO0VBRWxCO0FBQ0oiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3NvY2tldC5qcz9hZGJjIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwfSBmcm9tICcuL3NkY19tYWluLmpzJztcbmltcG9ydCB7dHJpZ2dlcn0gZnJvbSBcIi4vc2RjX2V2ZW50cy5qc1wiO1xuaW1wb3J0IHt1dWlkdjR9IGZyb20gXCIuL3NkY191dGlscy5qc1wiO1xuXG5jb25zdCBNQVhfRklMRV9VUExPQUQgPSAyNTAwMDtcblxuXG5jbGFzcyBTdWJNb2RlbCB7XG5cbiAgICBjb25zdHJ1Y3RvcihwaywgbW9kZWwpIHtcbiAgICAgICAgdGhpcy5wayA9IHBrO1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNEQyBNb2RlbCBOYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsXG4gICAgICovXG4gICAgc2V0IG1vZGVsKG1vZGVsKSB7XG4gICAgICAgIHRoaXMuX21vZGVsID0gbW9kZWw7XG4gICAgfVxuXG4gICAgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZCB0aGUgc3ViIG1vZGVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlclxuICAgICAqIEByZXR1cm5zIHtNb2RlbH1cbiAgICAgKi9cbiAgICBsb2FkKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1vZGVsIGlzIG5vdCBzZXQhIVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5uZXdNb2RlbCh0aGlzLl9tb2RlbCwge3BrOiB0aGlzLnBrfSk7XG4gICAgfVxufVxuXG5jb25zdCBNb2RlbFByb3h5SGFuZGxlciA9IHtcbiAgICBnZXQodGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRba2V5XSA/PyB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFN1Yk1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLnBrICYmIHZhbHVlLnBrICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9IG5ldyBOdW1iZXIodmFsdWUucGspO1xuICAgICAgICAgICAgbmV3VmFsLmxvYWQgPSB2YWx1ZS5sb2FkLmJpbmQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1ZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSxcbiAgICBzZXQodGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBvbGRWYWwgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgIGlmIChvbGRWYWwgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgncGsnKSkge1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWwucGsgPSB2YWx1ZS5waztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvbGRWYWwucGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuXG5cbmZ1bmN0aW9uIHBhcnNlX2hpZGRlbl9pbnB1dHModmFsdWUpIHtcblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuXG4gICAgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAnbm9uZScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmICh2YWx1ZS5tYXRjaChpc0ludFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzRmxvYXRSZWcpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG59XG5cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIHRoaXMubW9kZWxfbmFtZSA9IG1vZGVsX25hbWU7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBtb2RlbF9xdWVyeTtcbiAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBudWxsO1xuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdCA9IHt9O1xuICAgICAgICB0aGlzLm9uX3VwZGF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vbl9jcmVhdGUgPSAoKSA9PiB7XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5mb3JtX2lkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgICAgIGxldCBpZHggPSAtMTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICArK2lkeDtcbiAgICAgICAgICAgICAgICBpZiAoaWR4IDwgdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogdGhpcy52YWx1ZXNfbGlzdFtpZHhdLCBkb25lOiBmYWxzZX07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7dmFsdWU6IG51bGwsIGRvbmU6IHRydWV9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoO1xuICAgIH1cblxuICAgIGJ5UGsocGspIHtcbiAgICAgICAgaWYgKHBrICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGVsZW0gPSB0aGlzLnZhbHVlc19saXN0LmZpbmQoZWxtID0+IGVsbS5wayA9PT0gcGspO1xuICAgICAgICAgICAgaWYgKCFlbGVtKSB7XG4gICAgICAgICAgICAgICAgZWxlbSA9IG5ldyBQcm94eSh7cGs6IHBrfSwgTW9kZWxQcm94eUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzX2xpc3QucHVzaChlbGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlbGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7cGs6IHBrfTtcblxuICAgIH1cblxuICAgIGZpbHRlcihtb2RlbF9xdWVyeSkge1xuICAgICAgICB0aGlzLm1vZGVsX3F1ZXJ5ID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5tb2RlbF9xdWVyeSwgbW9kZWxfcXVlcnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBsb2FkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbG9hZCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxpc3RWaWV3KGZpbHRlciA9IHt9LCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuICAgICAgICB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2xpc3RfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBmaWx0ZXJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIGRldGFpbFZpZXcocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0ICRkaXZfbGlzdCA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdFswXS5wa1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZXRhaWxfdmlldycsXG4gICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAkZGl2X2xpc3QuYXBwZW5kKGRhdGEuaHRtbCk7XG4gICAgICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9saXN0KTtcbiAgICAgICAgICAgICAgICBjYl9yZXNvbHZlICYmIGNiX3Jlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICB9LCAocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICAgICAgfV07XG5cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRkaXZfbGlzdDtcbiAgICB9XG5cbiAgICBzeW5jRm9ybVRvTW9kZWwoJGZvcm1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmNGb3JtKCRmb3Jtcyk7XG4gICAgfVxuXG4gICAgc3luY01vZGVsVG9Gb3JtKCRmb3Jtcykge1xuICAgICAgICBpZiAoISRmb3JtcyB8fCAhJGZvcm1zLmhhc0NsYXNzKHRoaXMuZm9ybV9pZCkpIHtcbiAgICAgICAgICAgICRmb3JtcyA9ICQoYC4ke3RoaXMuZm9ybV9pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWxmID0gdGhpcztcbiAgICAgICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb2RlbF9waycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBrID0gJCh0aGlzKS5kYXRhKCdtb2RlbF9waycpO1xuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gc2VsZi5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAobGV0IGZvcm1faXRlbSBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBmb3JtX2l0ZW0ubmFtZTtcbiAgICAgICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1faXRlbS5jaGVja2VkID0gaW5zdGFuY2VbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJyAmJiBpbnN0YW5jZVtuYW1lXSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250YWluZXIgPSBuZXcgRGF0YVRyYW5zZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuaXRlbXMuYWRkKGluc3RhbmNlW25hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1faXRlbS5maWxlcyA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICQoZm9ybV9pdGVtKS52YWwoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIHN5bmNGb3JtKCRmb3Jtcykge1xuICAgICAgICBpZiAoISRmb3JtcyB8fCAhJGZvcm1zLmhhc0NsYXNzKHRoaXMuZm9ybV9pZCkpIHtcbiAgICAgICAgICAgICRmb3JtcyA9ICQoYC4ke3RoaXMuZm9ybV9pZH1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgaW5zdGFuY2VzID0gW107XG5cbiAgICAgICAgJGZvcm1zLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJCh0aGlzKTtcbiAgICAgICAgICAgIGxldCBwayA9ICRmb3JtLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gcGFyc2VfaGlkZGVuX2lucHV0cygkKGZvcm1faXRlbSkudmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9IGZvcm1faXRlbS5jaGVja2VkO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1faXRlbS50eXBlID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmZpbGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSAkKGZvcm1faXRlbSkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoIDw9IDEgJiYgaW5zdGFuY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gaW5zdGFuY2VzLmF0KC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZXM7XG5cbiAgICB9XG5cbiAgICBjcmVhdGVGb3JtKGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0obnVsbCwgJ2NyZWF0ZV9mb3JtJywgbnVsbCwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuICAgIGVkaXRGb3JtKHBrID0gLTEsIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgJGRpdl9mb3JtID0gJCgnPGRpdiAgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPD0gLTEpIHtcbiAgICAgICAgICAgICAgICBwayA9IHRoaXMudmFsdWVzX2xpc3QuYXQocGspLnBrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9nZXRGb3JtKHBrLCAnZWRpdF9mb3JtJywgbnVsbCwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuICAgIG5hbWVkRm9ybShwayA9IC0xLCBmb3JtTmFtZSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICduYW1lZF9mb3JtJywgZm9ybU5hbWUsICRkaXZfZm9ybSwgY2JfcmVzb2x2ZSwgY2JfcmVqZWN0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuICRkaXZfZm9ybTtcbiAgICB9XG5cblxuICAgIF9nZXRGb3JtKHBrLCBldmVudF90eXBlLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgIGV2ZW50X3R5cGU6IGV2ZW50X3R5cGUsXG4gICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgIHBrOiBwayxcbiAgICAgICAgICAgICAgICBmb3JtX25hbWU6IGZvcm1OYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcblxuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBwayA9PT0gbnVsbCB8fCBwayA9PT0gLTEgPyAnY3JlYXRlJyA6ICdlZGl0JztcblxuICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKGRhdGEpID0+IHtcbiAgICAgICAgICAgICRkaXZfZm9ybS5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgIGxldCAkZm9ybSA9ICRkaXZfZm9ybS5jbG9zZXN0KCdmb3JtJykuYWRkQ2xhc3MoYHNkYy1tb2RlbC0ke2NsYXNzTmFtZX0tZm9ybSBzZGMtbW9kZWwtZm9ybSAke3RoaXMuZm9ybV9pZH1gKS5kYXRhKCdtb2RlbCcsIHRoaXMpLmRhdGEoJ21vZGVsX3BrJywgcGspO1xuICAgICAgICAgICAgaWYgKCRmb3JtLmxlbmd0aCA+IDAgJiYgISRmb3JtWzBdLmhhc0F0dHJpYnV0ZSgnc2RjX3N1Ym1pdCcpKSB7XG4gICAgICAgICAgICAgICAgJGZvcm0uYXR0cignc2RjX3N1Ym1pdCcsICdzdWJtaXRNb2RlbEZvcm1EaXN0cmlidXRvcicpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfZm9ybSk7XG4gICAgICAgICAgICBjYl9yZXNvbHZlICYmIGNiX3Jlc29sdmUoZGF0YSk7XG4gICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgfV07XG4gICAgfVxuXG4gICAgbmV3KCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgJGZvcm0gPSAkKCc8Zm9ybT4nKS5hcHBlbmQodGhpcy5jcmVhdGVGb3JtKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNGb3JtVG9Nb2RlbCgkZm9ybSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgcmVqZWN0KSk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgc2F2ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgZWxlbV9saXN0O1xuICAgICAgICAgICAgaWYgKHBrID4gLTEpIHtcbiAgICAgICAgICAgICAgICBlbGVtX2xpc3QgPSBbdGhpcy5ieVBrKHBrKV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IHRoaXMudmFsdWVzX2xpc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcF9saXN0ID0gW11cbiAgICAgICAgICAgIGVsZW1fbGlzdC5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgICAgICAgICBwX2xpc3QucHVzaChuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRGaWxlcyhlbGVtKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3NhdmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGVsZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzOiBmaWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwX2xpc3QpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGUodmFsdWVzID0gdGhpcy52YWx1ZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKHZhbHVlcykudGhlbigoZmlsZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdjcmVhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB2YWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB0eXBlb2YgcmVzLmRhdGEuaW5zdGFuY2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMuZGF0YS5pbnN0YW5jZSkgOiByZXMuZGF0YS5pbnN0YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLmluc3RhbmNlID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoZGF0YSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdF07XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGUocGsgPSAtMSkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGsgPT09IC0xKSBwayA9IHRoaXMudmFsdWVzPy5waztcbiAgICAgICAgY29uc3QgaWQgPSB1dWlkdjQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBrOiBwa1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZXRpbmdfcHJvY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXSA9IFsoKSA9PiB7XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIH1dXG4gICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdFRvU2VydmVyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5fY2hlY2tDb25uZWN0aW9uKCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBbcmVzb2x2ZV9vcmlnaW4sIHJlamVjdF9vcmlnaW5dID0gdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gW1xuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlX29yaWdpbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Rfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLnNvY2tldCkge1xuICAgICAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzWydzb2NrZXQnXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsZWFuKCkge1xuICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzID0ge307XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIF9yZWFkRmlsZXMoZWxlbSkge1xuICAgICAgICBsZXQgdG9fc29sdmUgPSBbXTtcbiAgICAgICAgbGV0IGZpbGVzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbSkpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgICAgICAgICB0b19zb2x2ZS5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgKChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGUudGFyZ2V0LnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbnVtYmVyX29mX2NodW5rcyA9IHBhcnNlSW50KE1hdGguY2VpbChyZXN1bHQubGVuZ3RoIC8gTUFYX0ZJTEVfVVBMT0FEKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXNba2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bWJlcl9vZl9jaHVua3M7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bms6IHJlc3VsdC5zbGljZShNQVhfRklMRV9VUExPQUQgKiBpLCBNQVhfRklMRV9VUExPQUQgKiAoaSArIDEpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyX29mX2NodW5rczogbnVtYmVyX29mX2NodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlX25hbWU6IHZhbHVlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoOiB2YWx1ZS5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRvX3NvbHZlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfb25NZXNzYWdlKGUpIHtcbiAgICAgICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKGUuZGF0YSk7XG4gICAgICAgIGlmIChkYXRhLmlzX2Vycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVsxXShkYXRhKTtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMuX2F1dG9fcmVjb25uZWN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgaWYgKGRhdGEubXNnIHx8IGRhdGEuaGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcigncHVzaE1zZycsIGRhdGEuaGVhZGVyIHx8ICcnLCBkYXRhLm1zZyB8fCAnJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdjb25uZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5lY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzBdKGRhdGEpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09ICdsb2FkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGEuYXJncy5kYXRhID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ29uX3VwZGF0ZScgfHwgZGF0YS50eXBlID09PSAnb25fY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGpzb25fcmVzID0gSlNPTi5wYXJzZShkYXRhLmFyZ3MuZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgb2JqID0gdGhpcy5fcGFyc2VTZXJ2ZXJSZXMoanNvbl9yZXMpO1xuICAgICAgICAgICAgICAgIGxldCBjYjtcblxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiID0gdGhpcy5vbl9jcmVhdGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX3VwZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYihvYmopO1xuICAgICAgICAgICAgICAgIGRhdGEuYXJncy5kYXRhID0gb2JqO1xuXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IGRhdGEuZGF0YT8uaW5zdGFuY2VcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIGRhdGEuZGF0YS5pbnN0YW5jZSA9IEpTT04ucGFyc2UoZGF0YS5kYXRhLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMub3Blbl9yZXF1ZXN0Lmhhc093blByb3BlcnR5KGRhdGEuZXZlbnRfaWQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbZGF0YS5ldmVudF9pZF1bMF0oZGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwidmFsdWVzX2xpc3QiLCJ2YWx1ZXMiLCJfaXNfY29ubmVjdGVkIiwiX2lzX2Nvbm5ldGluZ19wcm9jZXNzIiwiX2F1dG9fcmVjb25uZWN0Iiwic29ja2V0Iiwib3Blbl9yZXF1ZXN0Iiwib25fdXBkYXRlIiwib25fY3JlYXRlIiwiZm9ybV9pZCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiaWR4IiwibmV4dCIsImRvbmUiLCJieVBrIiwiaXNOYU4iLCJlbGVtIiwiZmluZCIsImVsbSIsIlByb3h5IiwicHVzaCIsImZpbHRlciIsIk9iamVjdCIsImFzc2lnbiIsImlzQ29ubmVjdGVkIiwidGhlbiIsImlkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzZW5kIiwiSlNPTiIsInN0cmluZ2lmeSIsImV2ZW50IiwiZXZlbnRfdHlwZSIsImV2ZW50X2lkIiwiYXJncyIsImxpc3RWaWV3IiwiY2JfcmVzb2x2ZSIsImNiX3JlamVjdCIsIiRkaXZfbGlzdCIsIiQiLCJkYXRhIiwiYXBwZW5kIiwiaHRtbCIsInJlZnJlc2giLCJyZXMiLCJkZXRhaWxWaWV3IiwibG9hZF9wcm9taXNlIiwic3luY0Zvcm1Ub01vZGVsIiwiJGZvcm1zIiwic3luY0Zvcm0iLCJzeW5jTW9kZWxUb0Zvcm0iLCJoYXNDbGFzcyIsInNlbGYiLCJlYWNoIiwiaGFzQXR0cmlidXRlIiwiaW5zdGFuY2UiLCJmb3JtX2l0ZW0iLCJlbGVtZW50cyIsIm5hbWUiLCJ0eXBlIiwiY2hlY2tlZCIsIkZpbGUiLCJjb250YWluZXIiLCJEYXRhVHJhbnNmZXIiLCJpdGVtcyIsImFkZCIsImZpbGVzIiwidmFsIiwiaW5zdGFuY2VzIiwiJGZvcm0iLCJhdCIsImNyZWF0ZUZvcm0iLCIkZGl2X2Zvcm0iLCJfZ2V0Rm9ybSIsImVkaXRGb3JtIiwibmFtZWRGb3JtIiwiZm9ybU5hbWUiLCJmb3JtX25hbWUiLCJjbGFzc05hbWUiLCJjbG9zZXN0IiwiYWRkQ2xhc3MiLCJhdHRyIiwibmV3Iiwic2F2ZSIsImVsZW1fbGlzdCIsInBfbGlzdCIsImZvckVhY2giLCJfcmVhZEZpbGVzIiwicGFyc2UiLCJfcGFyc2VTZXJ2ZXJSZXMiLCJhbGwiLCJjcmVhdGUiLCJkZWxldGUiLCJfY29ubmVjdFRvU2VydmVyIiwiX2NoZWNrQ29ubmVjdGlvbiIsInJlc29sdmVfb3JpZ2luIiwicmVqZWN0X29yaWdpbiIsImNsb3NlIiwib25jbG9zZSIsImNsZWFuIiwidG9fc29sdmUiLCJlbnRyaWVzIiwicmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJyZXN1bHQiLCJudW1iZXJfb2ZfY2h1bmtzIiwiTWF0aCIsImNlaWwiLCJmaWxlX25hbWUiLCJmaWVsZF9uYW1lIiwiY29udGVudF9sZW5ndGgiLCJzaXplIiwiaSIsImNodW5rIiwic2xpY2UiLCJjb250ZW50X3R5cGUiLCJvbmVycm9yIiwicmVhZEFzQmluYXJ5U3RyaW5nIiwiX29uTWVzc2FnZSIsImlzX2Vycm9yIiwibXNnIiwiaGVhZGVyIiwianNvbl9yZXMiLCJvYmoiLCJjYiIsIm1vZGVsX2lkZW50aWZpZXIiLCJtb2RlbF9pZCIsIndpbmRvdyIsImxvY2F0aW9uIiwicHJvdG9jb2wiLCJXZWJTb2NrZXQiLCJob3N0Iiwib25tZXNzYWdlIiwiY29uc29sZSIsImVycm9yIiwiX2tleSIsInNldFRpbWVvdXQiLCJlcnIiLCJvbm9wZW4iLCJ1cGRhdGVkIiwianNvbl9kYXRhIiwiayIsInYiLCJmaWVsZHMiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
|
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 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 const newVal = new Number(value.pk);\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 oldVal.pk = value;\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 = {}, cb_resolve = null, cb_reject = null) {\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: 'list_view',\n event_id: id,\n args: {\n model_name: this.model_name,\n model_query: this.model_query,\n filter: filter\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 detailView(pk = -1, cb_resolve = null, cb_reject = null) {\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: pk\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 if (!this.hasAttribute('data-model_pk')) {\n return;\n }\n let pk = $(this).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 === 'checkbox') {\n form_item.checked = instance[name];\n } else if (form_item.type === 'file' && instance[name] instanceof File) {\n let container = new DataTransfer();\n container.items.add(instance[name]);\n form_item.files = container;\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 class=\"container-fluid\">');\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 class=\"container-fluid\">');\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);\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) {\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 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 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) {\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 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 (data.type === 'load') {\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,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Y19zb2NrZXQuanM/YWRiYyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcH0gZnJvbSAnLi9zZGNfbWFpbi5qcyc7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcbmltcG9ydCB7dXVpZHY0fSBmcm9tIFwiLi9zZGNfdXRpbHMuanNcIjtcblxuY29uc3QgTUFYX0ZJTEVfVVBMT0FEID0gMjUwMDA7XG5cblxuY2xhc3MgU3ViTW9kZWwge1xuXG4gICAgY29uc3RydWN0b3IocGssIG1vZGVsKSB7XG4gICAgICAgIHRoaXMucGsgPSBwaztcbiAgICAgICAgdGhpcy5fbW9kZWwgPSBtb2RlbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTREMgTW9kZWwgTmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb2RlbFxuICAgICAqL1xuICAgIHNldCBtb2RlbChtb2RlbCkge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgIH1cblxuICAgIGdldCBtb2RlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vZGVsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWQgdGhlIHN1YiBtb2RlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXJcbiAgICAgKiBAcmV0dXJucyB7TW9kZWx9XG4gICAgICovXG4gICAgbG9hZChjb250cm9sbGVyKSB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2RlbCBpcyBub3Qgc2V0ISFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIubmV3TW9kZWwodGhpcy5fbW9kZWwsIHtwazogdGhpcy5wa30pO1xuICAgIH1cbn1cblxuY29uc3QgTW9kZWxQcm94eUhhbmRsZXIgPSB7XG4gICAgZ2V0KHRhcmdldCwga2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0W2tleV0gPz8gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdWJNb2RlbCkge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZS5wayAmJiB2YWx1ZS5wayAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSBuZXcgTnVtYmVyKHZhbHVlLnBrKTtcbiAgICAgICAgICAgIG5ld1ZhbC5sb2FkID0gdmFsdWUubG9hZC5iaW5kKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdWYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgc2V0KHRhcmdldCwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkVmFsID0gdGFyZ2V0W2tleV07XG4gICAgICAgICAgICBpZiAob2xkVmFsIGluc3RhbmNlb2YgU3ViTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ3BrJykpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWUucGs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsLnBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cblxuZnVuY3Rpb24gcGFyc2VfaGlkZGVuX2lucHV0cyh2YWx1ZSkge1xuXG4gICAgbGV0IGlzRmxvYXRSZWcgPSAvXi0/XFxkK1xcLj9cXGQrJC87XG4gICAgbGV0IGlzSW50UmVnID0gL14tP1xcZCskLztcbiAgICBsZXQgaXNCb29sUmVnID0gL14odHJ1ZXxmYWxzZSkkLztcbiAgICBsZXQgaXNTdHJpbmdSZWcgPSAvXihbJ11bXiddKlsnXSl8KFtcIl1bXlwiXSpbXCJdKSQvO1xuXG5cbiAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKS5tYXRjaChpc0Jvb2xSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlLm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUubWF0Y2goaXNTdHJpbmdSZWcpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuXG5leHBvcnQgY2xhc3MgTW9kZWwge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIG1vZGVsX25hbWUge3N0cmluZ31cbiAgICAgKiBAcGFyYW0gbW9kZWxfcXVlcnkge2pzb259XG4gICAgICovXG4gICAgY29uc3RydWN0b3IobW9kZWxfbmFtZSwgbW9kZWxfcXVlcnkgPSB7fSkge1xuICAgICAgICB0aGlzLl9vbk5vT3BlblJlcXVlc3RzID0gW107XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbF9uYW1lID0gbW9kZWxfbmFtZTtcbiAgICAgICAgdGhpcy5tb2RlbF9xdWVyeSA9IG1vZGVsX3F1ZXJ5O1xuICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNfY29ubmV0aW5nX3Byb2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYXV0b19yZWNvbm5lY3QgPSB0cnVlO1xuICAgICAgICB0aGlzLnNvY2tldCA9IG51bGw7XG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0ID0ge307XG4gICAgICAgIHRoaXMub25fdXBkYXRlID0gKCkgPT4ge1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uX2NyZWF0ZSA9ICgpID0+IHtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZvcm1faWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgbGV0IGlkeCA9IC0xO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICsraWR4O1xuICAgICAgICAgICAgICAgIGlmIChpZHggPCB0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge3ZhbHVlOiB0aGlzLnZhbHVlc19saXN0W2lkeF0sIGRvbmU6IGZhbHNlfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt2YWx1ZTogbnVsbCwgZG9uZTogdHJ1ZX07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNfbGlzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgYnlQayhwaykge1xuICAgICAgICBpZiAocGsgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZWxlbSA9IHRoaXMudmFsdWVzX2xpc3QuZmluZChlbG0gPT4gZWxtLnBrID09PSBwayk7XG4gICAgICAgICAgICBpZiAoIWVsZW0pIHtcbiAgICAgICAgICAgICAgICBlbGVtID0gbmV3IFByb3h5KHtwazogcGt9LCBNb2RlbFByb3h5SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNfbGlzdC5wdXNoKGVsZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtwazogcGt9O1xuXG4gICAgfVxuXG4gICAgZmlsdGVyKG1vZGVsX3F1ZXJ5KSB7XG4gICAgICAgIHRoaXMubW9kZWxfcXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1vZGVsX3F1ZXJ5LCBtb2RlbF9xdWVyeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ29ubmVjdGVkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGlzdFZpZXcoZmlsdGVyID0ge30sIGNiX3Jlc29sdmUgPSBudWxsLCBjYl9yZWplY3QgPSBudWxsKSB7XG4gICAgICAgIGxldCAkZGl2X2xpc3QgPSAkKCc8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG4gICAgICAgIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnbGlzdF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IGZpbHRlclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gWyhkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgJGRpdl9saXN0LmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgICAgIGFwcC5yZWZyZXNoKCRkaXZfbGlzdCk7XG4gICAgICAgICAgICAgICAgY2JfcmVzb2x2ZSAmJiBjYl9yZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgIGNiX3JlamVjdCAmJiBjYl9yZWplY3QocmVzKTtcbiAgICAgICAgICAgIH1dO1xuXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2xpc3Q7XG4gICAgfVxuXG4gICAgZGV0YWlsVmlldyhwayA9IC0xLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgJGRpdl9saXN0ID0gJCgnPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxldCBsb2FkX3Byb21pc2U7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlc19saXN0Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5pc0Nvbm5lY3RlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbG9hZF9wcm9taXNlID0gdGhpcy5sb2FkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkX3Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAocGsgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0WzBdLnBrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2RldGFpbF92aWV3JyxcbiAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgYXJnczoge1xuICAgICAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICBwazogcGtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICRkaXZfbGlzdC5hcHBlbmQoZGF0YS5odG1sKTtcbiAgICAgICAgICAgICAgICBhcHAucmVmcmVzaCgkZGl2X2xpc3QpO1xuICAgICAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgIH0sIChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICBjYl9yZWplY3QgJiYgY2JfcmVqZWN0KHJlcyk7XG4gICAgICAgICAgICB9XTtcblxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9saXN0O1xuICAgIH1cblxuICAgIHN5bmNGb3JtVG9Nb2RlbCgkZm9ybXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3luY0Zvcm0oJGZvcm1zKTtcbiAgICB9XG5cbiAgICBzeW5jTW9kZWxUb0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbGYgPSB0aGlzO1xuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKCdkYXRhLW1vZGVsX3BrJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcGsgPSAkKHRoaXMpLmRhdGEoJ21vZGVsX3BrJyk7XG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSBzZWxmLmJ5UGsocGspO1xuICAgICAgICAgICAgZm9yIChsZXQgZm9ybV9pdGVtIG9mIHRoaXMuZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGZvcm1faXRlbS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2NoZWNrYm94Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmNoZWNrZWQgPSBpbnN0YW5jZVtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtX2l0ZW0udHlwZSA9PT0gJ2ZpbGUnICYmIGluc3RhbmNlW25hbWVdIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRhaW5lciA9IG5ldyBEYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pdGVtcy5hZGQoaW5zdGFuY2VbbmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybV9pdGVtLmZpbGVzID0gY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJChmb3JtX2l0ZW0pLnZhbChpbnN0YW5jZVtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgc3luY0Zvcm0oJGZvcm1zKSB7XG4gICAgICAgIGlmICghJGZvcm1zIHx8ICEkZm9ybXMuaGFzQ2xhc3ModGhpcy5mb3JtX2lkKSkge1xuICAgICAgICAgICAgJGZvcm1zID0gJChgLiR7dGhpcy5mb3JtX2lkfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBpbnN0YW5jZXMgPSBbXTtcblxuICAgICAgICAkZm9ybXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsZXQgJGZvcm0gPSAkKHRoaXMpO1xuICAgICAgICAgICAgbGV0IHBrID0gJGZvcm0uZGF0YSgnbW9kZWxfcGsnKTtcbiAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHNlbGYuYnlQayhwayk7XG4gICAgICAgICAgICBmb3IgKGxldCBmb3JtX2l0ZW0gb2YgdGhpcy5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZm9ybV9pdGVtLm5hbWU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgbmFtZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1faXRlbS50eXBlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBwYXJzZV9oaWRkZW5faW5wdXRzKCQoZm9ybV9pdGVtKS52YWwoKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdjaGVja2JveCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlW25hbWVdID0gZm9ybV9pdGVtLmNoZWNrZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybV9pdGVtLnR5cGUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VbbmFtZV0gPSBmb3JtX2l0ZW0uZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtuYW1lXSA9ICQoZm9ybV9pdGVtKS52YWwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPD0gMSAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMgPSBpbnN0YW5jZXMuYXQoLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlcztcblxuICAgIH1cblxuICAgIGNyZWF0ZUZvcm0oY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIj4nKTtcbiAgICAgICAgdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShudWxsLCAnY3JlYXRlX2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgZWRpdEZvcm0ocGsgPSAtMSwgY2JfcmVzb2x2ZSA9IG51bGwsIGNiX3JlamVjdCA9IG51bGwpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxvYWRfcHJvbWlzZTtcbiAgICAgICAgaWYgKHRoaXMudmFsdWVzX2xpc3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmlzQ29ubmVjdGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2FkX3Byb21pc2UgPSB0aGlzLmxvYWQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCAkZGl2X2Zvcm0gPSAkKCc8ZGl2ICBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPicpO1xuXG4gICAgICAgIGxvYWRfcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwayA8PSAtMSkge1xuICAgICAgICAgICAgICAgIHBrID0gdGhpcy52YWx1ZXNfbGlzdC5hdChwaykucGs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2dldEZvcm0ocGssICdlZGl0X2Zvcm0nLCBudWxsLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZGl2X2Zvcm07XG4gICAgfVxuXG4gICAgbmFtZWRGb3JtKHBrID0gLTEsIGZvcm1OYW1lLCBjYl9yZXNvbHZlID0gbnVsbCwgY2JfcmVqZWN0ID0gbnVsbCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbG9hZF9wcm9taXNlO1xuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMuaXNDb25uZWN0ZWQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvYWRfcHJvbWlzZSA9IHRoaXMubG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0ICRkaXZfZm9ybSA9ICQoJzxkaXYgIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+Jyk7XG5cbiAgICAgICAgbG9hZF9wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHBrIDw9IC0xKSB7XG4gICAgICAgICAgICAgICAgcGsgPSB0aGlzLnZhbHVlc19saXN0LmF0KHBrKS5waztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZ2V0Rm9ybShwaywgJ25hbWVkX2Zvcm0nLCBmb3JtTmFtZSwgJGRpdl9mb3JtLCBjYl9yZXNvbHZlLCBjYl9yZWplY3QpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gJGRpdl9mb3JtO1xuICAgIH1cblxuXG4gICAgX2dldEZvcm0ocGssIGV2ZW50X3R5cGUsIGZvcm1OYW1lLCAkZGl2X2Zvcm0sIGNiX3Jlc29sdmUsIGNiX3JlamVjdCkge1xuICAgICAgICBwayA9IHBhcnNlSW50KHBrKTtcbiAgICAgICAgaWYgKGlzTmFOKHBrKSkge1xuICAgICAgICAgICAgcGsgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgZXZlbnRfdHlwZTogZXZlbnRfdHlwZSxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICBtb2RlbF9uYW1lOiB0aGlzLm1vZGVsX25hbWUsXG4gICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnksXG4gICAgICAgICAgICAgICAgcGs6IHBrLFxuICAgICAgICAgICAgICAgIGZvcm1fbmFtZTogZm9ybU5hbWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBrID09PSBudWxsIHx8IHBrID09PSAtMSA/ICdjcmVhdGUnIDogJ2VkaXQnO1xuXG4gICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsoZGF0YSkgPT4ge1xuICAgICAgICAgICAgJGRpdl9mb3JtLmFwcGVuZChkYXRhLmh0bWwpO1xuICAgICAgICAgICAgbGV0ICRmb3JtID0gJGRpdl9mb3JtLmNsb3Nlc3QoJ2Zvcm0nKS5hZGRDbGFzcyhgc2RjLW1vZGVsLSR7Y2xhc3NOYW1lfS1mb3JtIHNkYy1tb2RlbC1mb3JtICR7dGhpcy5mb3JtX2lkfWApLmRhdGEoJ21vZGVsJywgdGhpcykuZGF0YSgnbW9kZWxfcGsnLCBwayk7XG4gICAgICAgICAgICBpZiAoJGZvcm0ubGVuZ3RoID4gMCAmJiAhJGZvcm1bMF0uaGFzQXR0cmlidXRlKCdzZGNfc3VibWl0JykpIHtcbiAgICAgICAgICAgICAgICAkZm9ybS5hdHRyKCdzZGNfc3VibWl0JywgJ3N1Ym1pdE1vZGVsRm9ybURpc3RyaWJ1dG9yJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXBwLnJlZnJlc2goJGRpdl9mb3JtKTtcbiAgICAgICAgICAgIGNiX3Jlc29sdmUgJiYgY2JfcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfSwgKHJlcykgPT4ge1xuICAgICAgICAgICAgY2JfcmVqZWN0ICYmIGNiX3JlamVjdChyZXMpO1xuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICBuZXcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkZm9ybSA9ICQoJzxmb3JtPicpLmFwcGVuZCh0aGlzLmNyZWF0ZUZvcm0oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY0Zvcm1Ub01vZGVsKCRmb3JtKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9LCByZWplY3QpKTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBzYXZlKHBrID0gLTEpIHtcbiAgICAgICAgcGsgPSBwYXJzZUludChwayk7XG4gICAgICAgIGlmIChpc05hTihwaykpIHtcbiAgICAgICAgICAgIHBrID0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNDb25uZWN0ZWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGxldCBlbGVtX2xpc3Q7XG4gICAgICAgICAgICBpZiAocGsgPiAtMSkge1xuICAgICAgICAgICAgICAgIGVsZW1fbGlzdCA9IFt0aGlzLmJ5UGsocGspXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbV9saXN0ID0gdGhpcy52YWx1ZXNfbGlzdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwX2xpc3QgPSBbXVxuICAgICAgICAgICAgZWxlbV9saXN0LmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICAgICAgICAgIHBfbGlzdC5wdXNoKG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEZpbGVzKGVsZW0pLnRoZW4oKGZpbGVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudDogJ21vZGVsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAnc2F2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXM6IGZpbGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gdHlwZW9mIHJlcy5kYXRhLmluc3RhbmNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzLmRhdGEuaW5zdGFuY2UpIDogcmVzLmRhdGEuaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHBfbGlzdCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZSh2YWx1ZXMgPSB0aGlzLnZhbHVlcykge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFkRmlsZXModmFsdWVzKS50aGVuKChmaWxlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50OiAnbW9kZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbmFtZTogdGhpcy5tb2RlbF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlczogZmlsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFsocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHR5cGVvZiByZXMuZGF0YS5pbnN0YW5jZSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcy5kYXRhLmluc3RhbmNlKSA6IHJlcy5kYXRhLmluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuaW5zdGFuY2UgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhkYXRhKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0XTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZShwayA9IC0xKSB7XG4gICAgICAgIHBrID0gcGFyc2VJbnQocGspO1xuICAgICAgICBpZiAoaXNOYU4ocGspKSB7XG4gICAgICAgICAgICBwayA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwayA9PT0gLTEpIHBrID0gdGhpcy52YWx1ZXM/LnBrO1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Nvbm5lY3RlZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50X3R5cGU6ICdkZWxldGUnLFxuICAgICAgICAgICAgICAgICAgICBldmVudF9pZDogaWQsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX3F1ZXJ5OiB0aGlzLm1vZGVsX3F1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGs6IHBrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtpZF0gPSBbcmVzb2x2ZSwgcmVqZWN0XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpc0Nvbm5lY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc19jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc19jb25uZXRpbmdfcHJvY2Vzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddID0gWygpID0+IHtcbiAgICAgICAgICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0VG9TZXJ2ZXIoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLl9jaGVja0Nvbm5lY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyZXNvbHZlX29yaWdpbiwgcmVqZWN0X29yaWdpbl0gPSB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddO1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0WydfY29ubmVjdGluZ19wcm9jZXNzJ10gPSBbXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVfb3JpZ2luKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdF9vcmlnaW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ja2V0KSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXNbJ3NvY2tldCddO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW4oKSB7XG4gICAgICAgIHRoaXMudmFsdWVzX2xpc3QgPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB7fTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgX3JlYWRGaWxlcyhlbGVtKSB7XG4gICAgICAgIGxldCB0b19zb2x2ZSA9IFtdO1xuICAgICAgICBsZXQgZmlsZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbGVtKSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICAgICAgICAgIHRvX3NvbHZlLnB1c2gobmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gdXVpZHY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbaWRdID0gW3Jlc29sdmUsIHJlamVjdF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZS50YXJnZXQucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBudW1iZXJfb2ZfY2h1bmtzID0gcGFyc2VJbnQoTWF0aC5jZWlsKHJlc3VsdC5sZW5ndGggLyBNQVhfRklMRV9VUExPQUQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlc1trZXldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X2xlbmd0aDogdmFsdWUuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyX29mX2NodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNlbmQoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90eXBlOiAndXBsb2FkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogcmVzdWx0LnNsaWNlKE1BWF9GSUxFX1VQTE9BRCAqIGksIE1BWF9GSUxFX1VQTE9BRCAqIChpICsgMSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkeDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJfb2ZfY2h1bmtzOiBudW1iZXJfb2ZfY2h1bmtzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9sZW5ndGg6IHZhbHVlLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbF9xdWVyeTogdGhpcy5tb2RlbF9xdWVyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodG9fc29sdmUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVzXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9vbk1lc3NhZ2UoZSkge1xuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICAgaWYgKGRhdGEuaXNfZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW5fcmVxdWVzdC5oYXNPd25Qcm9wZXJ0eShkYXRhLmV2ZW50X2lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2RhdGEuZXZlbnRfaWRdWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoZGF0YS5ldmVudF9pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YS5tc2cgfHwgZGF0YS5oZWFkZXIpIHtcbiAgICAgICAgICAgICAgICB0cmlnZ2VyKCdwdXNoRXJyb3JNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFsnX2Nvbm5lY3RpbmdfcHJvY2VzcyddWzFdKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlT3BlblJlcXVlc3QoJ19jb25uZWN0aW5nX3Byb2Nlc3MnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvX3JlY29ubmVjdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm1zZyB8fCBkYXRhLmhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3B1c2hNc2cnLCBkYXRhLmhlYWRlciB8fCAnJywgZGF0YS5tc2cgfHwgJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YS50eXBlID09PSAnY29ubmVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc19jb25uZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzX2Nvbm5ldGluZ19wcm9jZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3RbJ19jb25uZWN0aW5nX3Byb2Nlc3MnXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KCdfY29ubmVjdGluZ19wcm9jZXNzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc19saXN0ID0gW107XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSAnb25fdXBkYXRlJyB8fCBkYXRhLnR5cGUgPT09ICdvbl9jcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QganNvbl9yZXMgPSBKU09OLnBhcnNlKGRhdGEuYXJncy5kYXRhKTtcblxuICAgICAgICAgICAgICAgIGxldCBvYmogPSB0aGlzLl9wYXJzZVNlcnZlclJlcyhqc29uX3Jlcyk7XG4gICAgICAgICAgICAgICAgbGV0IGNiO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ29uX2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IgPSB0aGlzLm9uX2NyZWF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjYiA9IHRoaXMub25fdXBkYXRlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNiKG9iaik7XG4gICAgICAgICAgICAgICAgZGF0YS5hcmdzLmRhdGEgPSBvYmo7XG5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gZGF0YS5kYXRhPy5pbnN0YW5jZVxuICAgICAgICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgZGF0YS5kYXRhLmluc3RhbmNlID0gSlNPTi5wYXJzZShkYXRhLmRhdGEuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuX3JlcXVlc3QuaGFzT3duUHJvcGVydHkoZGF0YS5ldmVudF9pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5fcmVxdWVzdFtkYXRhLmV2ZW50X2lkXVswXShkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZU9wZW5SZXF1ZXN0KGRhdGEuZXZlbnRfaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbm9PcGVuUmVxdWVzdHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLm9wZW5fcmVxdWVzdCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5wdXNoKHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfY2xvc2VPcGVuUmVxdWVzdChldmVudF9pZCkge1xuICAgICAgICBkZWxldGUgdGhpcy5vcGVuX3JlcXVlc3RbZXZlbnRfaWRdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5vcGVuX3JlcXVlc3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fb25Ob09wZW5SZXF1ZXN0cy5mb3JFYWNoKHggPT4geCgpKTtcbiAgICAgICAgICAgIHRoaXMuX29uTm9PcGVuUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgX2Nvbm5lY3RUb1NlcnZlcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cbiAgICAgICAgICAgIGNvbnN0IG1vZGVsX2lkZW50aWZpZXIgPSBgJHt0aGlzLm1vZGVsX25hbWV9YCArICh0aGlzLm1vZGVsX2lkID4gMCA/IGAvJHt0aGlzLm1vZGVsX2lkfWAgOiAnJyk7XG4gICAgICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLnByb3RvY29sID09PSBcImh0dHBzOlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3c3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fS9zZGNfd3MvbW9kZWwvJHttb2RlbF9pZGVudGlmaWVyfWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvY2tldCA9IG5ldyBXZWJTb2NrZXQoYHdzOi8vJHt3aW5kb3cubG9jYXRpb24uaG9zdH0vc2RjX3dzL21vZGVsLyR7bW9kZWxfaWRlbnRpZmllcn1gKTtcbiAgICAgICAgICAgIH1cblxuXG4gICAgICAgICAgICB0aGlzLnNvY2tldC5vbm1lc3NhZ2UgPSB0aGlzLl9vbk1lc3NhZ2UuYmluZCh0aGlzKTtcblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25jbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU0RDIE1vZGVsICgke3RoaXMubW9kZWxfbmFtZX0sICR7dGhpcy5tb2RlbF9pZH0pIFNvY2tldCBjbG9zZWQgdW5leHBlY3RlZGx5YCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNfY29ubmVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBbX2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMub3Blbl9yZXF1ZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZVsxXShlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuX3JlcXVlc3QgPSB7fTtcblxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXV0b19yZWNvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nvbm5lY3RUb1NlcnZlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc29ja2V0Lm9uZXJyb3IgPSAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgTW9kZWwgU29ja2V0IGVuY291bnRlcmVkIGVycm9yOiAke2Vycn0gQ2xvc2luZyBzb2NrZXRgKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNfY29ubmVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvY2tldC5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cblxuICAgICAgICAgICAgdGhpcy5zb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBfY2hlY2tDb25uZWN0aW9uKCkge1xuICAgICAgICBjb25zdCBpZCA9IHV1aWR2NCgpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgZXZlbnQ6ICdtb2RlbCcsXG4gICAgICAgICAgICAgICAgZXZlbnRfdHlwZTogJ2Nvbm5lY3QnLFxuICAgICAgICAgICAgICAgIGV2ZW50X2lkOiBpZCxcbiAgICAgICAgICAgICAgICBhcmdzOiB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsX25hbWU6IHRoaXMubW9kZWxfbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbW9kZWxfcXVlcnk6IHRoaXMubW9kZWxfcXVlcnlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIHRoaXMub3Blbl9yZXF1ZXN0W2lkXSA9IFtyZXNvbHZlLCByZWplY3RdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcGFyc2VTZXJ2ZXJSZXMocmVzKSB7XG4gICAgICAgIGxldCB1cGRhdGVkID0gW107XG4gICAgICAgIGZvciAobGV0IGpzb25fZGF0YSBvZiByZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBrID0ganNvbl9kYXRhLnBrO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0gdGhpcy5ieVBrKHBrKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGpzb25fZGF0YS5maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmIHZbJ19faXNfc2RjX21vZGVsX18nXSkge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSBuZXcgU3ViTW9kZWwodlsncGsnXSwgdlsnbW9kZWwnXSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvYmpba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXBkYXRlZC5wdXNoKG9iaik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy52YWx1ZXNfbGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzID0gdGhpcy52YWx1ZXNfbGlzdC5hdCgtMSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG5cbiAgICB9XG59Il0sIm5hbWVzIjpbImFwcCIsInRyaWdnZXIiLCJ1dWlkdjQiLCJNQVhfRklMRV9VUExPQUQiLCJTdWJNb2RlbCIsImNvbnN0cnVjdG9yIiwicGsiLCJtb2RlbCIsIl9tb2RlbCIsImxvYWQiLCJjb250cm9sbGVyIiwiVHlwZUVycm9yIiwibmV3TW9kZWwiLCJNb2RlbFByb3h5SGFuZGxlciIsImdldCIsInRhcmdldCIsImtleSIsInZhbHVlIiwidW5kZWZpbmVkIiwibmV3VmFsIiwiTnVtYmVyIiwiYmluZCIsInNldCIsIm9sZFZhbCIsImhhc093blByb3BlcnR5IiwicGFyc2VfaGlkZGVuX2lucHV0cyIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInBhcnNlSW50IiwicGFyc2VGbG9hdCIsInN1YnN0cmluZyIsImxlbmd0aCIsIk1vZGVsIiwibW9kZWxfbmFtZSIsIm1vZGVsX3F1ZXJ5IiwiX29uTm9PcGVuUmVxdWVzdHMiLCJ2YWx1ZXNfbGlzdCIsInZhbHVlcyIsIl9pc19jb25uZWN0ZWQiLCJfaXNfY29ubmV0aW5nX3Byb2Nlc3MiLCJfYXV0b19yZWNvbm5lY3QiLCJzb2NrZXQiLCJvcGVuX3JlcXVlc3QiLCJvbl91cGRhdGUiLCJvbl9jcmVhdGUiLCJmb3JtX2lkIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpZHgiLCJuZXh0IiwiZG9uZSIsImJ5UGsiLCJpc05hTiIsImVsZW0iLCJmaW5kIiwiZWxtIiwiUHJveHkiLCJwdXNoIiwiZmlsdGVyIiwiT2JqZWN0IiwiYXNzaWduIiwiaXNDb25uZWN0ZWQiLCJ0aGVuIiwiaWQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInNlbmQiLCJKU09OIiwic3RyaW5naWZ5IiwiZXZlbnQiLCJldmVudF90eXBlIiwiZXZlbnRfaWQiLCJhcmdzIiwibGlzdFZpZXciLCJjYl9yZXNvbHZlIiwiY2JfcmVqZWN0IiwiJGRpdl9saXN0IiwiJCIsImRhdGEiLCJhcHBlbmQiLCJodG1sIiwicmVmcmVzaCIsInJlcyIsImRldGFpbFZpZXciLCJsb2FkX3Byb21pc2UiLCJzeW5jRm9ybVRvTW9kZWwiLCIkZm9ybXMiLCJzeW5jRm9ybSIsInN5bmNNb2RlbFRvRm9ybSIsImhhc0NsYXNzIiwic2VsZiIsImVhY2giLCJoYXNBdHRyaWJ1dGUiLCJpbnN0YW5jZSIsImZvcm1faXRlbSIsImVsZW1lbnRzIiwibmFtZSIsInR5cGUiLCJjaGVja2VkIiwiRmlsZSIsImNvbnRhaW5lciIsIkRhdGFUcmFuc2ZlciIsIml0ZW1zIiwiYWRkIiwiZmlsZXMiLCJ2YWwiLCJpbnN0YW5jZXMiLCIkZm9ybSIsImF0IiwiY3JlYXRlRm9ybSIsIiRkaXZfZm9ybSIsIl9nZXRGb3JtIiwiZWRpdEZvcm0iLCJuYW1lZEZvcm0iLCJmb3JtTmFtZSIsImZvcm1fbmFtZSIsImNsYXNzTmFtZSIsImNsb3Nlc3QiLCJhZGRDbGFzcyIsImF0dHIiLCJuZXciLCJzYXZlIiwiZWxlbV9saXN0IiwicF9saXN0IiwiZm9yRWFjaCIsIl9yZWFkRmlsZXMiLCJwYXJzZSIsIl9wYXJzZVNlcnZlclJlcyIsImFsbCIsImNyZWF0ZSIsImRlbGV0ZSIsIl9jb25uZWN0VG9TZXJ2ZXIiLCJfY2hlY2tDb25uZWN0aW9uIiwicmVzb2x2ZV9vcmlnaW4iLCJyZWplY3Rfb3JpZ2luIiwiY2xvc2UiLCJvbmNsb3NlIiwiY2xlYW4iLCJ0b19zb2x2ZSIsImVudHJpZXMiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZSIsInJlc3VsdCIsIm51bWJlcl9vZl9jaHVua3MiLCJNYXRoIiwiY2VpbCIsImZpbGVfbmFtZSIsImZpZWxkX25hbWUiLCJjb250ZW50X2xlbmd0aCIsInNpemUiLCJpIiwiY2h1bmsiLCJzbGljZSIsImNvbnRlbnRfdHlwZSIsIm9uZXJyb3IiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJfb25NZXNzYWdlIiwiaXNfZXJyb3IiLCJfY2xvc2VPcGVuUmVxdWVzdCIsIm1zZyIsImhlYWRlciIsImpzb25fcmVzIiwib2JqIiwiY2IiLCJub09wZW5SZXF1ZXN0cyIsImtleXMiLCJ4IiwibW9kZWxfaWRlbnRpZmllciIsIm1vZGVsX2lkIiwid2luZG93IiwibG9jYXRpb24iLCJwcm90b2NvbCIsIldlYlNvY2tldCIsImhvc3QiLCJvbm1lc3NhZ2UiLCJjb25zb2xlIiwiZXJyb3IiLCJfa2V5Iiwic2V0VGltZW91dCIsImVyciIsIm9ub3BlbiIsInVwZGF0ZWQiLCJqc29uX2RhdGEiLCJrIiwidiIsImZpZWxkcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_socket.js\n");
|
98
98
|
|
99
99
|
/***/ }),
|
100
100
|
|
@@ -104,7 +104,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
104
104
|
\************************************************/
|
105
105
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
106
106
|
|
107
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\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, _originAjax;\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 * 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 if (!jest) throw new Error(\"JEST is not defined\");\n if (!spy) {\n _originAjax = $.ajax.bind($);\n spy = jest.spyOn($, 'ajax');\n spy.mockImplementation(function (a) {\n return _originAjax(a).then(html => {\n return html;\n }).catch(html => {\n return html;\n });\n });\n }\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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QUcsS0FBSztFQUNuQjFDLDZDQUFHLENBQUMyQyxVQUFVLENBQUMsQ0FBQztFQUNoQixNQUFNM0MsNkNBQUcsQ0FBQzRDLFFBQVEsQ0FBQyxDQUFDO0VBQ3BCLE9BQU81Qyw2Q0FBRyxDQUFDNkMsYUFBYSxDQUFDWCxXQUFXLENBQUM7QUFDekMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3Rlc3RfdXRpbHMuanM/YTQzOSJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBqZXN0LWVudmlyb25tZW50IGpzZG9tXG4gKi9cblxuaW1wb3J0IHthcHB9IGZyb20gJy4vc2RjX21haW4uanMnO1xubGV0IHNweSwgX29yaWdpbkFqYXg7XG5cbmZ1bmN0aW9uIGdldENvb2tpZShuYW1lKSB7XG4gICAgbGV0IGNvb2tpZVZhbHVlID0gbnVsbDtcbiAgICBpZiAoZG9jdW1lbnQuY29va2llICYmIGRvY3VtZW50LmNvb2tpZSAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgY29va2llcyA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvb2tpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvb2tpZSA9IGNvb2tpZXNbaV0udHJpbSgpO1xuICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvb2tpZSBzdHJpbmcgYmVnaW4gd2l0aCB0aGUgbmFtZSB3ZSB3YW50P1xuICAgICAgICAgICAgaWYgKGNvb2tpZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggKyAxKSA9PT0gKG5hbWUgKyAnPScpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjb29raWUuc3Vic3RyaW5nKG5hbWUubGVuZ3RoICsgMSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBDU1JGIHRva2VuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDc3JmVG9rZW4oKSB7XG4gICAgcmV0dXJuIGdldENvb2tpZSgnY3NyZnRva2VuJyk7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGNvbnRyb2xsZXIuIFRoaXMgY29udHJvbGxlciBoYXMgYmVlbiBjcmVhdGVkIGJ5IHRoZSB1c2luZyB0aGUgbm9ybWFsIFNEQyBsaWZlIGN5Y2xlLlxuICpcbiAqIEBwYXJhbSB0YWdfbmFtZXtzdHJpbmd9IENvbnRyb2xsZXIgdGFnIG5hbWUgKHNuYWtlLWNhc2UpXG4gKiBAcGFyYW0gaW5pdF9hcmd1bWVudHN7b2JqZWN0fSBvYmplY3Q6IE1vY2tlZHMgdGhlIHRhZyBkYXRhIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSBvcmlnZW5faHRtbHtzdHJpbmd9IEhUTUw6IE1vY2tlZCBjb250ZW50IG9mIHRoZSBjb250ZW50IGluIHlvdXIgdGFyZ2V0IEhUTUwgY29udGFpbmVyLlxuICogQHJldHVybnMge1Byb21pc2U8e0Fic3RyYWN0U0RDfT59XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRfY29udHJvbGxlciggdGFnX25hbWUsIGluaXRfYXJndW1lbnRzID0ge30sIG9yaWdlbl9odG1sID0gJycpIHtcbiAgICBpZighamVzdCkgdGhyb3cgbmV3IEVycm9yKFwiSkVTVCBpcyBub3QgZGVmaW5lZFwiKTtcbiAgICBpZighc3B5KSB7XG4gICAgICAgIF9vcmlnaW5BamF4ID0gJC5hamF4LmJpbmQoJCk7XG5cbiAgICAgICAgc3B5ID0gamVzdC5zcHlPbihcbiAgICAgICAgICAgICQsXG4gICAgICAgICAgICAnYWpheCdcbiAgICAgICAgKTtcbiAgICAgICAgc3B5Lm1vY2tJbXBsZW1lbnRhdGlvbihmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuIF9vcmlnaW5BamF4KGEpLnRoZW4oKGh0bWwpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDtcbiAgICAgICAgICAgIH0pLmNhdGNoKChodG1sKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0ICRib2R5ID0gJCgnYm9keScpO1xuICAgIGFwcC51cGRhdGVKcXVlcnkoKTtcblxuICAgICRib2R5LnNhZmVFbXB0eSgpO1xuXG4gICAgY29uc3QgJGNvbnRyb2xsZXIgPSAkKGA8JHt0YWdfbmFtZX0+JHtvcmlnZW5faHRtbH08LyR7dGFnX25hbWV9PmApO1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluaXRfYXJndW1lbnRzKSkge1xuICAgICAgICAkY29udHJvbGxlci5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCAkZGl2Q29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJGNvbnRyb2xsZXIpO1xuXG4gICAgJGJvZHkuYXBwZW5kKCRkaXZDb250YWluZXIpO1xuICAgIGFwcC5faXNJbml0ID0gZmFsc2U7XG4gICAgYXBwLmNsZWFuQ2FjaGUoKTtcbiAgICBhd2FpdCBhcHAuaW5pdF9zZGMoKTtcbiAgICByZXR1cm4gYXBwLmdldENvbnRyb2xsZXIoJGNvbnRyb2xsZXIpO1xufSJdLCJuYW1lcyI6WyJhcHAiLCJzcHkiLCJfb3JpZ2luQWpheCIsImdldENvb2tpZSIsIm5hbWUiLCJjb29raWVWYWx1ZSIsImRvY3VtZW50IiwiY29va2llIiwiY29va2llcyIsInNwbGl0IiwiaSIsImxlbmd0aCIsInRyaW0iLCJzdWJzdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJnZXRDc3JmVG9rZW4iLCJnZXRfY29udHJvbGxlciIsInRhZ19uYW1lIiwiaW5pdF9hcmd1bWVudHMiLCJvcmlnZW5faHRtbCIsImplc3QiLCJFcnJvciIsIiQiLCJhamF4IiwiYmluZCIsInNweU9uIiwibW9ja0ltcGxlbWVudGF0aW9uIiwiYSIsInRoZW4iLCJodG1sIiwiY2F0Y2giLCIkYm9keSIsInVwZGF0ZUpxdWVyeSIsInNhZmVFbXB0eSIsIiRjb250cm9sbGVyIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJlbnRyaWVzIiwiZGF0YSIsIiRkaXZDb250YWluZXIiLCJhcHBlbmQiLCJfaXNJbml0IiwiY2xlYW5DYWNoZSIsImluaXRfc2RjIiwiZ2V0Q29udHJvbGxlciJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_test_utils.js\n");
|
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");
|
108
108
|
|
109
109
|
/***/ }),
|
110
110
|
|
@@ -114,7 +114,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
114
114
|
\*******************************************/
|
115
115
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
116
116
|
|
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 */ 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,]+)/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 {AbstractSDC} baseClass\n * @param {AbstractSDC} mixins\n * @returns {AbstractSDC}\n */\nfunction agileAggregation(baseClass, ...mixins) {\n let base = class _Combined {\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 get mixins() {\n return this._mixins;\n }\n };\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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEtBQUssRUFBRTtJQUMxRHRILENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VILFdBQVcsQ0FBQ0osZUFBZSxDQUFDRyxLQUFLLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUM7RUFFRixJQUFJRSxVQUFVLEdBQUdSLFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDbUMsV0FBVyxDQUFDYixLQUFLLENBQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDZSxNQUFNLEtBQUssQ0FBQztFQUMvR1csUUFBUSxDQUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDK0IsSUFBSSxDQUFDLFlBQVk7SUFDekNHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzFILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSTJILFNBQVMsR0FBR0QsY0FBYyxDQUFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxJQUFJMEQsV0FBVyxHQUFHaEIsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBR3FDLFNBQVMsQ0FBQztJQUN4REMsV0FBVyxDQUFDQyxRQUFRLENBQUMsV0FBVyxDQUFDO0lBQ2pDRCxXQUFXLENBQUN0QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzJCLE1BQU0sQ0FBQ1MsY0FBYyxDQUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0VBQzFGLENBQUMsQ0FBQztFQUVGLE9BQU9rQyxVQUFVO0FBQ3JCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc2RjX2NsaWVudC8uL3NyYy9zaW1wbGVEb21Db250cm9sL3NkY191dGlscy5qcz9kMGUzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVmZXJlbmNlIHRvIHRoZSBIVE1MIGJvZHkuXG4gKiBAdHlwZSB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9XG4gKiBAcHJpdmF0ZVxuICovXG5sZXQgXyRib2R5O1xuY29uc3QgYXJnX25hbWVzX3JlZyA9IC8oW15cXHMsXSspL2c7XG5jb25zdCBjb21tZW5kX3JlZyA9IC8oKFxcL1xcLy4qJCl8KFxcL1xcKltcXHNcXFNdKj9cXCpcXC8pKS9tZztcblxuLyoqXG4gKiBnZXRCb2R5IHJldHVybnMgdGhlICRib2R5IGpRdWVyeSBvYmplY3QuXG4gKlxuICogQHJldHVybnMgeyp8alF1ZXJ5fEhUTUxFbGVtZW50fSAtIGJvZHkgcmVmZXJlbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Qm9keSgpIHtcbiAgICBpZiAoIV8kYm9keSkge1xuICAgICAgICBfJGJvZHkgPSAkKCdib2R5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF8kYm9keTtcbn1cblxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jXG4gKiBAcmV0dXJucyB7UmVnRXhwTWF0Y2hBcnJheXwqW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbihmdW5jKSB7XG4gICAgdmFyIGZuc3RyID0gZnVuYy50b1N0cmluZygpLnJlcGxhY2UoY29tbWVuZF9yZWcsICcnKTtcbiAgICB2YXIgcmVzdWx0ID0gZm5zdHIuc2xpY2UoZm5zdHIuaW5kZXhPZignKCcpICsgMSwgZm5zdHIuaW5kZXhPZignKScpKS5tYXRjaChhcmdfbmFtZXNfcmVnKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBwcm9taXNlRHVtbXlGYWN0b3J5IGdlbmVyYXRlcyBhIHNpbXBsZSBwcm9taXNlIHdoaWNoIHJldHVybnMgaW5zdGFudGx5LlxuICogQHJldHVybiB7UHJvbWlzZX0gd2luZG93LnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRHVtbXlGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1RhZ05hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1tBLVpdL2csIGxldHRlciA9PiBgLSR7bGV0dGVyLnRvTG93ZXJDYXNlKCl9YCk7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1swLTldKy9nLCBudW1iZXIgPT4gYC0ke251bWJlcn1gKTtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL15bLV0vZywgYGApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvQ2FtZWxDYXNlKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCk7XG4gICAgcmV0dXJuIHN0cjtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9SZWFkYWJsZU5hbWUoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgICR7bGV0dGVyWzFdLnRvVXBwZXJDYXNlKCl9YCkucmVwbGFjZSgvXi4vZywgbGV0dGVyID0+IGAke2xldHRlci50b1VwcGVyQ2FzZSgpfWApO1xuICAgIHJldHVybiBzdHI7XG59XG5cbmNvbnN0IGNvcHlQcm9wcyA9ICh0YXJnZXRDbGFzcywgc291cmNlQ2xhc3MpID0+IHtcbiAgICBsZXQgc291cmNlID0gc291cmNlQ2xhc3M7XG4gICAgbGV0IHByb3BOYW1lc1RhcmdldCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRhcmdldENsYXNzLnByb3RvdHlwZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0Q2xhc3MucHJvdG90eXBlKSlcbiAgICB3aGlsZSAoc291cmNlLm5hbWUgIT09ICcnKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZS5wcm90b3R5cGUpXG4gICAgICAgICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlLnByb3RvdHlwZSkpXG4gICAgICAgICAgICAuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcm9wLm1hdGNoKC9eKD86Y29uc3RydWN0b3J8cHJvdG90eXBlfGFyZ3VtZW50c3xjYWxsZXJ8bmFtZXxiaW5kfGNhbGx8YXBwbHl8dG9TdHJpbmd8bGVuZ3RoKSQvKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wTmFtZXNUYXJnZXQuaW5jbHVkZXMocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcE5hbWVzVGFyZ2V0LnB1c2gocHJvcCk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXRDbGFzcy5wcm90b3R5cGUsIHByb3AsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLnByb3RvdHlwZSwgcHJvcCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICBzb3VyY2UgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yoc291cmNlKTtcbiAgICB9XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGJhc2VDbGFzc1xuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IGNsYXNzIF9Db21iaW5lZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7XG4gICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgbWl4aW5zLmZvckVhY2goKG1peGluKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG5ld01peGluO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5fdGFnTmFtZSA9IG1peGluLnByb3RvdHlwZS5fdGFnTmFtZTtcbiAgICAgICAgICAgICAgICBuZXdNaXhpbi5faXNNaXhpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgbmV3IGJhc2VDbGFzcygpKTtcbiAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgIH1cblxuICAgICAgICBnZXQgbWl4aW5zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb3B5UHJvcHMoYmFzZSwgYmFzZUNsYXNzKTtcblxuICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICBjb3B5UHJvcHMoYmFzZSwgbWl4aW4pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJhc2U7XG5cbn1cblxuZnVuY3Rpb24gY3NyZlNhZmVNZXRob2QobWV0aG9kKSB7XG4gICAgLy8gdGhlc2UgSFRUUCBtZXRob2RzIGRvIG5vdCByZXF1aXJlIENTUkYgcHJvdGVjdGlvblxuICAgIHJldHVybiAoL14oR0VUfEhFQUR8T1BUSU9OU3xUUkFDRSkkLy50ZXN0KG1ldGhvZCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkRmlsZUZvcm1EYXRhKGZvcm1EYXRhLCB1cmwsIG1ldGhvZCkge1xuICAgIHJldHVybiAkLmFqYXgoe1xuICAgICAgICB1cmw6IHVybCwgIC8vU2VydmVyIHNjcmlwdCB0byBwcm9jZXNzIGRhdGFcbiAgICAgICAgdHlwZTogbWV0aG9kIHx8ICdQT1NUJyxcbiAgICAgICAgeGhyOiBmdW5jdGlvbiAoKSB7ICAvLyBDdXN0b20gWE1MSHR0cFJlcXVlc3RcbiAgICAgICAgICAgIHZhciBteVhociA9ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgICAgICAgaWYgKG15WGhyLnVwbG9hZCkgeyAvLyBDaGVjayBpZiB1cGxvYWQgcHJvcGVydHkgZXhpc3RzXG4gICAgICAgICAgICAgICAgbXlYaHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uLCBmYWxzZSk7IC8vIEZvciBoYW5kbGluZyB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHVwbG9hZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG15WGhyO1xuICAgICAgICB9LFxuICAgICAgICAvL0Zvcm0gZGF0YVxuICAgICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgICAgLy9PcHRpb25zIHRvIHRlbGwgalF1ZXJ5IG5vdCB0byBwcm9jZXNzIGRhdGEgb3Igd29ycnkgYWJvdXQgY29udGVudC10eXBlLlxuICAgICAgICBjYWNoZTogZmFsc2UsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgICAgcHJvY2Vzc0RhdGE6IGZhbHNlLFxuICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbih4aHIsIHNldHRpbmdzKSB7XG4gICAgICAgICAgICBpZiAoIWNzcmZTYWZlTWV0aG9kKHNldHRpbmdzLnR5cGUpICYmICF0aGlzLmNyb3NzRG9tYWluKSB7XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJYLUNTUkZUb2tlblwiLCB3aW5kb3cuQ1NSRl9UT0tFTik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gcHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uKGUpIHtcbiAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKSB7XG4gICAgICAgIHZhciBwZXJjZW50VmFsID0gTWF0aC5yb3VuZCgoZS5sb2FkZWQgLyBlLnRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHZhciAkcHJvZ3Jlc3NDb250YWluZXIgPSAkKCcucHJvZ3Jlc3MtY29udGFpbmVyJyk7XG4gICAgICAgIGlmIChwZXJjZW50VmFsID09PSAxMDApIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5oaWRlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuc2hvdygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVyY2VudFZhbCArPSAnJSc7XG5cbiAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmZpbmQoJy5wcm9ncmVzcy1iYXInKS5jc3Moeyd3aWR0aCc6IHBlcmNlbnRWYWx9KS50ZXh0KHBlcmNlbnRWYWwpO1xuICAgIH1cbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tJZlBhcmFtTnVtYmVyQm9vbE9yU3RyaW5nKHBhcmFtRWxlbWVudCwgY29udHJvbGxlciA9IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtRWxlbWVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbiAgICB9XG5cbiAgICBpZihjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmKHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0uYmluZChjb250cm9sbGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdO1xuICAgIH1cblxuICAgIGxldCBpc0Zsb2F0UmVnID0gL14tP1xcZCtcXC4/XFxkKyQvO1xuICAgIGxldCBpc0ludFJlZyA9IC9eLT9cXGQrJC87XG4gICAgbGV0IGlzQm9vbFJlZyA9IC9eKHRydWV8ZmFsc2UpJC87XG4gICAgbGV0IGlzU3RyaW5nUmVnID0gL14oWyddW14nXSpbJ10pfChbXCJdW15cIl0qW1wiXSkkLztcblxuICAgIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNCb29sUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50ID09PSAndHJ1ZSc7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQudG9Mb3dlckNhc2UoKSA9PT0gJ25vbmUnKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzSW50UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0Zsb2F0UmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChwYXJhbUVsZW1lbnQpO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzU3RyaW5nUmVnKSkge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50LnN1YnN0cigxLCBwYXJhbUVsZW1lbnQubGVuZ3RoIC0gMik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgICByZXR1cm4gKFsxZTddICsgLTFlMyArIC00ZTMgKyAtOGUzICsgLTFlMTEpLnJlcGxhY2UoL1swMThdL2csIGMgPT5cbiAgICAgICAgKGMgXiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KDEpKVswXSAmIDE1ID4+IGMgLyA0KS50b1N0cmluZygxNilcbiAgICApO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhckVycm9yc0luRm9ybSgkZm9ybSkge1xuICAgICRmb3JtLmZpbmQoJy5oYXMtZXJyb3InKS5yZW1vdmVDbGFzcygnaGFzLWVycm9yJykuZmluZCgnLmFsZXJ0LWRhbmdlcicpLnJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykucmVtb3ZlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRFcnJvcnNJbkZvcm0oJGZvcm0sICRyZXNGb3JtKSB7XG4gICAgJHJlc0Zvcm0gID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59Il0sIm5hbWVzIjpbIl8kYm9keSIsImFyZ19uYW1lc19yZWciLCJjb21tZW5kX3JlZyIsImdldEJvZHkiLCIkIiwiZ2V0UGFyYW1zTmFtZU9mRnVuY3Rpb24iLCJmdW5jIiwiZm5zdHIiLCJ0b1N0cmluZyIsInJlcGxhY2UiLCJyZXN1bHQiLCJzbGljZSIsImluZGV4T2YiLCJtYXRjaCIsInByb21pc2VEdW1teUZhY3RvcnkiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNhbWVsQ2FzZVRvVGFnTmFtZSIsInN0ciIsImxldHRlciIsInRvTG93ZXJDYXNlIiwibnVtYmVyIiwidGFnTmFtZVRvQ2FtZWxDYXNlIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lVG9SZWFkYWJsZU5hbWUiLCJjb3B5UHJvcHMiLCJ0YXJnZXRDbGFzcyIsInNvdXJjZUNsYXNzIiwic291cmNlIiwicHJvcE5hbWVzVGFyZ2V0IiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInByb3RvdHlwZSIsImNvbmNhdCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm5hbWUiLCJmb3JFYWNoIiwicHJvcCIsImluY2x1ZGVzIiwicHVzaCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZ2V0UHJvdG90eXBlT2YiLCJhZ2lsZUFnZ3JlZ2F0aW9uIiwiYmFzZUNsYXNzIiwibWl4aW5zIiwiYmFzZSIsIl9Db21iaW5lZCIsImNvbnN0cnVjdG9yIiwiX2FyZ3MiLCJfbWl4aW5zIiwibWl4aW4iLCJuZXdNaXhpbiIsImFzc2lnbiIsIl90YWdOYW1lIiwiX2lzTWl4aW4iLCJjc3JmU2FmZU1ldGhvZCIsIm1ldGhvZCIsInRlc3QiLCJ1cGxvYWRGaWxlRm9ybURhdGEiLCJmb3JtRGF0YSIsInVybCIsImFqYXgiLCJ0eXBlIiwieGhyIiwibXlYaHIiLCJhamF4U2V0dGluZ3MiLCJ1cGxvYWQiLCJhZGRFdmVudExpc3RlbmVyIiwicHJvZ3Jlc3NIYW5kbGluZ0Z1bmN0aW9uIiwiZGF0YSIsImNhY2hlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImJlZm9yZVNlbmQiLCJzZXR0aW5ncyIsImNyb3NzRG9tYWluIiwic2V0UmVxdWVzdEhlYWRlciIsIndpbmRvdyIsIkNTUkZfVE9LRU4iLCJlIiwibGVuZ3RoQ29tcHV0YWJsZSIsInBlcmNlbnRWYWwiLCJNYXRoIiwicm91bmQiLCJsb2FkZWQiLCJ0b3RhbCIsIiRwcm9ncmVzc0NvbnRhaW5lciIsImhpZGUiLCJzaG93IiwiZmluZCIsImNzcyIsInRleHQiLCJjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmciLCJwYXJhbUVsZW1lbnQiLCJjb250cm9sbGVyIiwiYmluZCIsImlzRmxvYXRSZWciLCJpc0ludFJlZyIsImlzQm9vbFJlZyIsImlzU3RyaW5nUmVnIiwidW5kZWZpbmVkIiwicGFyc2VJbnQiLCJwYXJzZUZsb2F0Iiwic3Vic3RyIiwibGVuZ3RoIiwidXVpZHY0IiwiYyIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIlVpbnQ4QXJyYXkiLCJjbGVhckVycm9yc0luRm9ybSIsIiRmb3JtIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmUiLCJzZXRFcnJvcnNJbkZvcm0iLCIkcmVzRm9ybSIsImFwcGVuZCIsInNhZmVSZW1vdmUiLCIkZmlsZV9jb250YWluZXIiLCJwYXJlbnQiLCJlYWNoIiwiaW5kZXgiLCJyZXBsYWNlV2l0aCIsImhhc05vRXJyb3IiLCJpbnNlcnRBZnRlciIsIiRyZXNFcnJvckZpZWxkIiwiY2xhc3NOYW1lIiwiJGVycm9yRmllbGQiLCJhZGRDbGFzcyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
|
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,]+)/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 {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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdXRpbHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJQSxNQUFNO0FBQ1YsTUFBTUMsYUFBYSxHQUFHLFlBQVk7QUFDbEMsTUFBTUMsV0FBVyxHQUFHLGtDQUFrQzs7QUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLE9BQU9BLENBQUEsRUFBRztFQUN0QixJQUFJLENBQUNILE1BQU0sRUFBRTtJQUNUQSxNQUFNLEdBQUdJLENBQUMsQ0FBQyxNQUFNLENBQUM7RUFDdEI7RUFFQSxPQUFPSixNQUFNO0FBQ2pCOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSyx1QkFBdUJBLENBQUNDLElBQUksRUFBRTtFQUMxQyxJQUFJQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsUUFBUSxDQUFDLENBQUMsQ0FBQ0MsT0FBTyxDQUFDUCxXQUFXLEVBQUUsRUFBRSxDQUFDO0VBQ3BELElBQUlRLE1BQU0sR0FBR0gsS0FBSyxDQUFDSSxLQUFLLENBQUNKLEtBQUssQ0FBQ0ssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRUwsS0FBSyxDQUFDSyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxDQUFDWixhQUFhLENBQUM7RUFDekYsSUFBSSxDQUFDUyxNQUFNLEVBQUU7SUFDVCxPQUFPLEVBQUU7RUFDYjtFQUVBLE9BQU9BLE1BQU07QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTSSxtQkFBbUJBLENBQUEsRUFBRztFQUNsQyxPQUFPLElBQUlDLE9BQU8sQ0FBQyxVQUFVQyxPQUFPLEVBQUU7SUFDbENBLE9BQU8sQ0FBQyxDQUFDO0VBQ2IsQ0FBQyxDQUFDO0FBQ047QUFFTyxTQUFTQyxrQkFBa0JBLENBQUNDLEdBQUcsRUFBRTtFQUNwQ0EsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxRQUFRLEVBQUVVLE1BQU0sSUFBSSxJQUFJQSxNQUFNLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUNqRUYsR0FBRyxHQUFHQSxHQUFHLENBQUNULE9BQU8sQ0FBQyxTQUFTLEVBQUVZLE1BQU0sSUFBSSxJQUFJQSxNQUFNLEVBQUUsQ0FBQztFQUNwRCxPQUFPSCxHQUFHLENBQUNULE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO0FBQ25DO0FBRU8sU0FBU2Esa0JBQWtCQSxDQUFDSixHQUFHLEVBQUU7RUFDcENBLEdBQUcsR0FBR0EsR0FBRyxDQUFDVCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksR0FBR0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDaEUsT0FBT0wsR0FBRztBQUNkO0FBRU8sU0FBU00scUJBQXFCQSxDQUFDTixHQUFHLEVBQUU7RUFDdkNBLEdBQUcsR0FBR0EsR0FBRyxDQUFDVCxPQUFPLENBQUMsS0FBSyxFQUFFVSxNQUFNLElBQUksSUFBSUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQ2QsT0FBTyxDQUFDLEtBQUssRUFBRVUsTUFBTSxJQUFJLEdBQUdBLE1BQU0sQ0FBQ0ksV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO0VBQ3JILE9BQU9MLEdBQUc7QUFDZDtBQUVBLE1BQU1PLFNBQVMsR0FBR0EsQ0FBQ0MsV0FBVyxFQUFFQyxXQUFXLEtBQUs7RUFDNUMsSUFBSUMsTUFBTSxHQUFHRCxXQUFXO0VBQ3hCLElBQUlFLGVBQWUsR0FBR0MsTUFBTSxDQUFDQyxtQkFBbUIsQ0FBQ0wsV0FBVyxDQUFDTSxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDSCxNQUFNLENBQUNJLHFCQUFxQixDQUFDUixXQUFXLENBQUNNLFNBQVMsQ0FBQyxDQUFDO0VBQ25JLE9BQU9KLE1BQU0sQ0FBQ08sSUFBSSxLQUFLLEVBQUUsRUFBRTtJQUN2QkwsTUFBTSxDQUFDQyxtQkFBbUIsQ0FBQ0gsTUFBTSxDQUFDSSxTQUFTLENBQUMsQ0FDdkNDLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDSSxxQkFBcUIsQ0FBQ04sTUFBTSxDQUFDSSxTQUFTLENBQUMsQ0FBQyxDQUN0REksT0FBTyxDQUFFQyxJQUFJLElBQUs7TUFDZixJQUFJQSxJQUFJLENBQUN4QixLQUFLLENBQUMsbUZBQW1GLENBQUMsRUFBRTtRQUNqRztNQUNKO01BRUEsSUFBSSxDQUFDZ0IsZUFBZSxDQUFDUyxRQUFRLENBQUNELElBQUksQ0FBQyxFQUFFO1FBQ2pDUixlQUFlLENBQUNVLElBQUksQ0FBQ0YsSUFBSSxDQUFDO1FBQzFCUCxNQUFNLENBQUNVLGNBQWMsQ0FBQ2QsV0FBVyxDQUFDTSxTQUFTLEVBQUVLLElBQUksRUFBRVAsTUFBTSxDQUFDVyx3QkFBd0IsQ0FBQ2IsTUFBTSxDQUFDSSxTQUFTLEVBQUVLLElBQUksQ0FBQyxDQUFDO01BQy9HO0lBQ0osQ0FBQyxDQUFDO0lBQ05ULE1BQU0sR0FBR0UsTUFBTSxDQUFDWSxjQUFjLENBQUNkLE1BQU0sQ0FBQztFQUMxQztBQUNKLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU2UsZ0JBQWdCQSxDQUFDQyxTQUFTLEVBQUUsR0FBR0MsTUFBTSxFQUFFO0VBRW5ELElBQUlDLElBQUksR0FBRztJQUNQLENBQUNGLFNBQVMsQ0FBQ1QsSUFBSSxHQUFHLE1BQU07TUFDcEJZLFdBQVdBLENBQUMsR0FBR0MsS0FBSyxFQUFFO1FBQ2xCLElBQUlDLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEJKLE1BQU0sQ0FBQ1QsT0FBTyxDQUFFYyxLQUFLLElBQUs7VUFDdEIsSUFBSUMsUUFBUTtVQUNackIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBR0QsUUFBUSxHQUFHLElBQUlELEtBQUssQ0FBQyxDQUFFLENBQUM7VUFDN0NDLFFBQVEsQ0FBQ0UsUUFBUSxHQUFHSCxLQUFLLENBQUNsQixTQUFTLENBQUNxQixRQUFRO1VBQzVDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJO1VBQ3hCTCxPQUFPLENBQUNDLEtBQUssQ0FBQ2YsSUFBSSxDQUFDLEdBQUdnQixRQUFRO1FBQ2xDLENBQUMsQ0FBQztRQUVGckIsTUFBTSxDQUFDc0IsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJUixTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQ0ssT0FBTyxHQUFHQSxPQUFPO01BQzFCO01BR0EsV0FBV2QsSUFBSUEsQ0FBQSxFQUFHO1FBQ2QsT0FBT1MsU0FBUyxDQUFDVCxJQUFJO01BQ3pCO01BRUEsT0FBT29CLFNBQVNBLENBQUEsRUFBRztRQUNmLE9BQU8sSUFBSSxDQUFDcEIsSUFBSTtNQUNwQjtNQUVBLElBQUlVLE1BQU1BLENBQUEsRUFBRztRQUNULE9BQU8sSUFBSSxDQUFDSSxPQUFPO01BQ3ZCO0lBQ0o7RUFDSixDQUFDLENBQUNMLFNBQVMsQ0FBQ1QsSUFBSSxDQUFDO0VBRWpCVixTQUFTLENBQUNxQixJQUFJLEVBQUVGLFNBQVMsQ0FBQztFQUUxQkMsTUFBTSxDQUFDVCxPQUFPLENBQUVjLEtBQUssSUFBSztJQUN0QnpCLFNBQVMsQ0FBQ3FCLElBQUksRUFBRUksS0FBSyxDQUFDO0VBQzFCLENBQUMsQ0FBQztFQUVGLE9BQU9KLElBQUk7QUFFZjtBQUVBLFNBQVNVLGNBQWNBLENBQUNDLE1BQU0sRUFBRTtFQUM1QjtFQUNBLE9BQVEsNEJBQTRCLENBQUNDLElBQUksQ0FBQ0QsTUFBTSxDQUFDO0FBQ3JEO0FBRU8sU0FBU0Usa0JBQWtCQSxDQUFDQyxRQUFRLEVBQUVDLEdBQUcsRUFBRUosTUFBTSxFQUFFO0VBQ3RELE9BQU9yRCxDQUFDLENBQUMwRCxJQUFJLENBQUM7SUFDVkQsR0FBRyxFQUFFQSxHQUFHO0lBQUc7SUFDWEUsSUFBSSxFQUFFTixNQUFNLElBQUksTUFBTTtJQUN0Qk8sR0FBRyxFQUFFLFNBQUFBLENBQUEsRUFBWTtNQUFHO01BQ2hCLElBQUlDLEtBQUssR0FBRzdELENBQUMsQ0FBQzhELFlBQVksQ0FBQ0YsR0FBRyxDQUFDLENBQUM7TUFDaEMsSUFBSUMsS0FBSyxDQUFDRSxNQUFNLEVBQUU7UUFBRTtRQUNoQkYsS0FBSyxDQUFDRSxNQUFNLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRUMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztNQUNoRjtNQUNBLE9BQU9KLEtBQUs7SUFDaEIsQ0FBQztJQUNEO0lBQ0FLLElBQUksRUFBRVYsUUFBUTtJQUNkO0lBQ0FXLEtBQUssRUFBRSxLQUFLO0lBQ1pDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxXQUFXLEVBQUUsS0FBSztJQUNsQkMsVUFBVSxFQUFFLFNBQUFBLENBQVVWLEdBQUcsRUFBRVcsUUFBUSxFQUFFO01BQ2pDLElBQUksQ0FBQ25CLGNBQWMsQ0FBQ21CLFFBQVEsQ0FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNhLFdBQVcsRUFBRTtRQUNyRFosR0FBRyxDQUFDYSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUVDLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDO01BQzFEO0lBQ0o7RUFDSixDQUFDLENBQUM7QUFDTjtBQUVBLFNBQVNWLHdCQUF3QkEsQ0FBQ1csQ0FBQyxFQUFFO0VBQ2pDLElBQUlBLENBQUMsQ0FBQ0MsZ0JBQWdCLEVBQUU7SUFDcEIsSUFBSUMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBRUosQ0FBQyxDQUFDSyxNQUFNLEdBQUdMLENBQUMsQ0FBQ00sS0FBSyxHQUFJLEdBQUcsQ0FBQztJQUN2RCxJQUFJQyxrQkFBa0IsR0FBR25GLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztJQUNqRCxJQUFJOEUsVUFBVSxLQUFLLEdBQUcsRUFBRTtNQUNwQkssa0JBQWtCLENBQUNDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUMsTUFBTTtNQUNIRCxrQkFBa0IsQ0FBQ0UsSUFBSSxDQUFDLENBQUM7SUFDN0I7SUFFQVAsVUFBVSxJQUFJLEdBQUc7SUFFakJLLGtCQUFrQixDQUFDRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUNDLEdBQUcsQ0FBQztNQUFDLE9BQU8sRUFBRVQ7SUFBVSxDQUFDLENBQUMsQ0FBQ1UsSUFBSSxDQUFDVixVQUFVLENBQUM7RUFDeEY7QUFDSjtBQUdPLFNBQVNXLDhCQUE4QkEsQ0FBQ0MsWUFBWSxFQUFFQyxVQUFVLEdBQUcsSUFBSSxFQUFFO0VBQzVFLElBQUksT0FBT0QsWUFBWSxLQUFLLFFBQVEsRUFBRTtJQUNsQyxPQUFPQSxZQUFZO0VBQ3ZCO0VBRUEsSUFBSUMsVUFBVSxJQUFJLE9BQU9BLFVBQVUsQ0FBQ0QsWUFBWSxDQUFDLEtBQUssV0FBVyxFQUFFO0lBQy9ELElBQUksT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsS0FBSyxVQUFVLEVBQUU7TUFDaEQsT0FBT0MsVUFBVSxDQUFDRCxZQUFZLENBQUMsQ0FBQ0UsSUFBSSxDQUFDRCxVQUFVLENBQUM7SUFDcEQ7SUFDQSxPQUFPQSxVQUFVLENBQUNELFlBQVksQ0FBQztFQUNuQztFQUVBLElBQUlHLFVBQVUsR0FBRyxlQUFlO0VBQ2hDLElBQUlDLFFBQVEsR0FBRyxTQUFTO0VBQ3hCLElBQUlDLFNBQVMsR0FBRyxnQkFBZ0I7RUFDaEMsSUFBSUMsV0FBVyxHQUFHLCtCQUErQjtFQUVqRCxJQUFJTixZQUFZLENBQUNqRixLQUFLLENBQUNzRixTQUFTLENBQUMsRUFBRTtJQUMvQixPQUFPTCxZQUFZLEtBQUssTUFBTTtFQUNsQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxLQUFLLFdBQVcsRUFBRTtJQUNyQyxPQUFPTyxTQUFTO0VBQ3BCLENBQUMsTUFBTSxJQUFJUCxZQUFZLENBQUMxRSxXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtJQUM5QyxPQUFPLElBQUk7RUFDZixDQUFDLE1BQU0sSUFBSTBFLFlBQVksQ0FBQ2pGLEtBQUssQ0FBQ3FGLFFBQVEsQ0FBQyxFQUFFO0lBQ3JDLE9BQU9JLFFBQVEsQ0FBQ1IsWUFBWSxDQUFDO0VBQ2pDLENBQUMsTUFBTSxJQUFJQSxZQUFZLENBQUNqRixLQUFLLENBQUNvRixVQUFVLENBQUMsRUFBRTtJQUN2QyxPQUFPTSxVQUFVLENBQUNULFlBQVksQ0FBQztFQUNuQyxDQUFDLE1BQU0sSUFBSUEsWUFBWSxDQUFDakYsS0FBSyxDQUFDdUYsV0FBVyxDQUFDLEVBQUU7SUFDeEMsT0FBT04sWUFBWSxDQUFDVSxNQUFNLENBQUMsQ0FBQyxFQUFFVixZQUFZLENBQUNXLE1BQU0sR0FBRyxDQUFDLENBQUM7RUFDMUQ7RUFFQSxPQUFPWCxZQUFZO0FBQ3ZCO0FBRU8sU0FBU1ksTUFBTUEsQ0FBQSxFQUFHO0VBQ3JCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFakcsT0FBTyxDQUFDLFFBQVEsRUFBRWtHLENBQUMsSUFDM0QsQ0FBQ0EsQ0FBQyxHQUFHQyxNQUFNLENBQUNDLGVBQWUsQ0FBQyxJQUFJQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUlILENBQUMsR0FBRyxDQUFDLEVBQUVuRyxRQUFRLENBQUMsRUFBRSxDQUNoRixDQUFDO0FBQ0w7QUFHTyxTQUFTdUcsaUJBQWlCQSxDQUFDQyxLQUFLLEVBQUU7RUFDckNBLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQ3VCLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0VBQ2hGRixLQUFLLENBQUN0QixJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQ3dCLE1BQU0sQ0FBQyxDQUFDO0FBQzVDO0FBRU8sU0FBU0MsZUFBZUEsQ0FBQ0gsS0FBSyxFQUFFSSxRQUFRLEVBQUU7RUFDN0NBLFFBQVEsR0FBR2hILENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQ2lILE1BQU0sQ0FBQ0QsUUFBUSxDQUFDO0VBRXRDSixLQUFLLENBQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUN1QixXQUFXLENBQUMsV0FBVyxDQUFDLENBQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUNwRk4sS0FBSyxDQUFDdEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM0QixVQUFVLENBQUMsQ0FBQztFQUM1QyxJQUFJQyxlQUFlLEdBQUdILFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUM7RUFDaEVSLEtBQUssQ0FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDOEIsTUFBTSxDQUFDLENBQUMsQ0FBQ0MsSUFBSSxDQUFDLFVBQVVDLEtBQUssRUFBRTtJQUMxRHRILENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQ3VILFdBQVcsQ0FBQ0osZUFBZSxDQUFDRyxLQUFLLENBQUMsQ0FBQztFQUMvQyxDQUFDLENBQUM7RUFFRixJQUFJRSxVQUFVLEdBQUdSLFFBQVEsQ0FBQzFCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDbUMsV0FBVyxDQUFDYixLQUFLLENBQUN0QixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDZSxNQUFNLEtBQUssQ0FBQztFQUMvR1csUUFBUSxDQUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDK0IsSUFBSSxDQUFDLFlBQVk7SUFDekNHLFVBQVUsR0FBRyxLQUFLO0lBQ2xCLElBQUlFLGNBQWMsR0FBRzFILENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUIsSUFBSW1ELFNBQVMsR0FBR3VFLGNBQWMsQ0FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUM7SUFDOUMsSUFBSXlELFdBQVcsR0FBR2YsS0FBSyxDQUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBR25DLFNBQVMsQ0FBQztJQUN4RHdFLFdBQVcsQ0FBQ0MsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNqQ0QsV0FBVyxDQUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMyQixNQUFNLENBQUNTLGNBQWMsQ0FBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztFQUMxRixDQUFDLENBQUM7RUFFRixPQUFPa0MsVUFBVTtBQUNyQjtBQUVPLFNBQVNLLGNBQWNBLENBQUNDLFVBQVUsRUFBRVIsS0FBSyxFQUFFUyxXQUFXLEVBQUU7RUFDM0QsSUFBSUMsU0FBUyxHQUFHRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDO0VBQzVDLElBQUlaLEtBQUssR0FBR1UsU0FBUyxFQUFFO0lBQ25CRixVQUFVLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUNFLEVBQUUsQ0FBQ2IsS0FBSyxDQUFDLENBQUNjLE1BQU0sQ0FBQ0wsV0FBVyxDQUFDO0VBQ3ZELENBQUMsTUFBTTtJQUNIRCxVQUFVLENBQUNiLE1BQU0sQ0FBQ2MsV0FBVyxDQUFDO0VBQ2xDO0VBQ0EsT0FBTyxJQUFJO0FBQ2YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3V0aWxzLmpzP2QwZTMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZWZlcmVuY2UgdG8gdGhlIEhUTUwgYm9keS5cbiAqIEB0eXBlIHsqfGpRdWVyeXxIVE1MRWxlbWVudH1cbiAqIEBwcml2YXRlXG4gKi9cbmxldCBfJGJvZHk7XG5jb25zdCBhcmdfbmFtZXNfcmVnID0gLyhbXlxccyxdKykvZztcbmNvbnN0IGNvbW1lbmRfcmVnID0gLygoXFwvXFwvLiokKXwoXFwvXFwqW1xcc1xcU10qP1xcKlxcLykpL21nO1xuXG4vKipcbiAqIGdldEJvZHkgcmV0dXJucyB0aGUgJGJvZHkgalF1ZXJ5IG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7KnxqUXVlcnl8SFRNTEVsZW1lbnR9IC0gYm9keSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb2R5KCkge1xuICAgIGlmICghXyRib2R5KSB7XG4gICAgICAgIF8kYm9keSA9ICQoJ2JvZHknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gXyRib2R5O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZ1bmNcbiAqIEByZXR1cm5zIHtSZWdFeHBNYXRjaEFycmF5fCpbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmFtc05hbWVPZkZ1bmN0aW9uKGZ1bmMpIHtcbiAgICB2YXIgZm5zdHIgPSBmdW5jLnRvU3RyaW5nKCkucmVwbGFjZShjb21tZW5kX3JlZywgJycpO1xuICAgIHZhciByZXN1bHQgPSBmbnN0ci5zbGljZShmbnN0ci5pbmRleE9mKCcoJykgKyAxLCBmbnN0ci5pbmRleE9mKCcpJykpLm1hdGNoKGFyZ19uYW1lc19yZWcpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIHByb21pc2VEdW1teUZhY3RvcnkgZ2VuZXJhdGVzIGEgc2ltcGxlIHByb21pc2Ugd2hpY2ggcmV0dXJucyBpbnN0YW50bHkuXG4gKiBAcmV0dXJuIHtQcm9taXNlfSB3aW5kb3cudXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VEdW1teUZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvVGFnTmFtZShzdHIpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvW0EtWl0vZywgbGV0dGVyID0+IGAtJHtsZXR0ZXIudG9Mb3dlckNhc2UoKX1gKTtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvWzAtOV0rL2csIG51bWJlciA9PiBgLSR7bnVtYmVyfWApO1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXlstXS9nLCBgYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWdOYW1lVG9DYW1lbENhc2Uoc3RyKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoLy0uL2csIGxldHRlciA9PiBgJHtsZXR0ZXJbMV0udG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnTmFtZVRvUmVhZGFibGVOYW1lKHN0cikge1xuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tLi9nLCBsZXR0ZXIgPT4gYCAke2xldHRlclsxXS50b1VwcGVyQ2FzZSgpfWApLnJlcGxhY2UoL14uL2csIGxldHRlciA9PiBgJHtsZXR0ZXIudG9VcHBlckNhc2UoKX1gKTtcbiAgICByZXR1cm4gc3RyO1xufVxuXG5jb25zdCBjb3B5UHJvcHMgPSAodGFyZ2V0Q2xhc3MsIHNvdXJjZUNsYXNzKSA9PiB7XG4gICAgbGV0IHNvdXJjZSA9IHNvdXJjZUNsYXNzO1xuICAgIGxldCBwcm9wTmFtZXNUYXJnZXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXRDbGFzcy5wcm90b3R5cGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRhcmdldENsYXNzLnByb3RvdHlwZSkpXG4gICAgd2hpbGUgKHNvdXJjZS5uYW1lICE9PSAnJykge1xuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2UucHJvdG90eXBlKVxuICAgICAgICAgICAgLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZS5wcm90b3R5cGUpKVxuICAgICAgICAgICAgLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcC5tYXRjaCgvXig/OmNvbnN0cnVjdG9yfHByb3RvdHlwZXxhcmd1bWVudHN8Y2FsbGVyfG5hbWV8YmluZHxjYWxsfGFwcGx5fHRvU3RyaW5nfGxlbmd0aCkkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcHJvcE5hbWVzVGFyZ2V0LmluY2x1ZGVzKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BOYW1lc1RhcmdldC5wdXNoKHByb3ApO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0Q2xhc3MucHJvdG90eXBlLCBwcm9wLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZS5wcm90b3R5cGUsIHByb3ApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgc291cmNlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNvdXJjZSk7XG4gICAgfVxufVxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gYmFzZUNsYXNzXG4gKiBAcGFyYW0ge3R5cGVvZiBBYnN0cmFjdFNEQ30gbWl4aW5zXG4gKiBAcmV0dXJucyB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZ2lsZUFnZ3JlZ2F0aW9uKGJhc2VDbGFzcywgLi4ubWl4aW5zKSB7XG5cbiAgICBsZXQgYmFzZSA9IHtcbiAgICAgICAgW2Jhc2VDbGFzcy5uYW1lXTogY2xhc3Mge1xuICAgICAgICAgICAgY29uc3RydWN0b3IoLi4uX2FyZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgX21peGlucyA9IHt9O1xuICAgICAgICAgICAgICAgIG1peGlucy5mb3JFYWNoKChtaXhpbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbmV3TWl4aW47XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgKG5ld01peGluID0gbmV3IG1peGluKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3TWl4aW4uX3RhZ05hbWUgPSBtaXhpbi5wcm90b3R5cGUuX3RhZ05hbWU7XG4gICAgICAgICAgICAgICAgICAgIG5ld01peGluLl9pc01peGluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgX21peGluc1ttaXhpbi5uYW1lXSA9IG5ld01peGluO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBuZXcgYmFzZUNsYXNzKCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21peGlucyA9IF9taXhpbnM7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgc3RhdGljIGdldCBuYW1lKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlQ2xhc3MubmFtZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGljIGNsYXNzTmFtZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uYW1lXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldCBtaXhpbnMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21peGlucztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1bYmFzZUNsYXNzLm5hbWVdO1xuXG4gICAgY29weVByb3BzKGJhc2UsIGJhc2VDbGFzcyk7XG5cbiAgICBtaXhpbnMuZm9yRWFjaCgobWl4aW4pID0+IHtcbiAgICAgICAgY29weVByb3BzKGJhc2UsIG1peGluKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBiYXNlO1xuXG59XG5cbmZ1bmN0aW9uIGNzcmZTYWZlTWV0aG9kKG1ldGhvZCkge1xuICAgIC8vIHRoZXNlIEhUVFAgbWV0aG9kcyBkbyBub3QgcmVxdWlyZSBDU1JGIHByb3RlY3Rpb25cbiAgICByZXR1cm4gKC9eKEdFVHxIRUFEfE9QVElPTlN8VFJBQ0UpJC8udGVzdChtZXRob2QpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZEZpbGVGb3JtRGF0YShmb3JtRGF0YSwgdXJsLCBtZXRob2QpIHtcbiAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgdXJsOiB1cmwsICAvL1NlcnZlciBzY3JpcHQgdG8gcHJvY2VzcyBkYXRhXG4gICAgICAgIHR5cGU6IG1ldGhvZCB8fCAnUE9TVCcsXG4gICAgICAgIHhocjogZnVuY3Rpb24gKCkgeyAgLy8gQ3VzdG9tIFhNTEh0dHBSZXF1ZXN0XG4gICAgICAgICAgICB2YXIgbXlYaHIgPSAkLmFqYXhTZXR0aW5ncy54aHIoKTtcbiAgICAgICAgICAgIGlmIChteVhoci51cGxvYWQpIHsgLy8gQ2hlY2sgaWYgdXBsb2FkIHByb3BlcnR5IGV4aXN0c1xuICAgICAgICAgICAgICAgIG15WGhyLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzSGFuZGxpbmdGdW5jdGlvbiwgZmFsc2UpOyAvLyBGb3IgaGFuZGxpbmcgdGhlIHByb2dyZXNzIG9mIHRoZSB1cGxvYWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBteVhocjtcbiAgICAgICAgfSxcbiAgICAgICAgLy9Gb3JtIGRhdGFcbiAgICAgICAgZGF0YTogZm9ybURhdGEsXG4gICAgICAgIC8vT3B0aW9ucyB0byB0ZWxsIGpRdWVyeSBub3QgdG8gcHJvY2VzcyBkYXRhIG9yIHdvcnJ5IGFib3V0IGNvbnRlbnQtdHlwZS5cbiAgICAgICAgY2FjaGU6IGZhbHNlLFxuICAgICAgICBjb250ZW50VHlwZTogZmFsc2UsXG4gICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgICAgYmVmb3JlU2VuZDogZnVuY3Rpb24gKHhociwgc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGlmICghY3NyZlNhZmVNZXRob2Qoc2V0dGluZ3MudHlwZSkgJiYgIXRoaXMuY3Jvc3NEb21haW4pIHtcbiAgICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlgtQ1NSRlRva2VuXCIsIHdpbmRvdy5DU1JGX1RPS0VOKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24oZSkge1xuICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIHBlcmNlbnRWYWwgPSBNYXRoLnJvdW5kKChlLmxvYWRlZCAvIGUudG90YWwpICogMTAwKTtcbiAgICAgICAgdmFyICRwcm9ncmVzc0NvbnRhaW5lciA9ICQoJy5wcm9ncmVzcy1jb250YWluZXInKTtcbiAgICAgICAgaWYgKHBlcmNlbnRWYWwgPT09IDEwMCkge1xuICAgICAgICAgICAgJHByb2dyZXNzQ29udGFpbmVyLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRwcm9ncmVzc0NvbnRhaW5lci5zaG93KCk7XG4gICAgICAgIH1cblxuICAgICAgICBwZXJjZW50VmFsICs9ICclJztcblxuICAgICAgICAkcHJvZ3Jlc3NDb250YWluZXIuZmluZCgnLnByb2dyZXNzLWJhcicpLmNzcyh7J3dpZHRoJzogcGVyY2VudFZhbH0pLnRleHQocGVyY2VudFZhbCk7XG4gICAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lmUGFyYW1OdW1iZXJCb29sT3JTdHJpbmcocGFyYW1FbGVtZW50LCBjb250cm9sbGVyID0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgcGFyYW1FbGVtZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcGFyYW1FbGVtZW50O1xuICAgIH1cblxuICAgIGlmIChjb250cm9sbGVyICYmIHR5cGVvZiBjb250cm9sbGVyW3BhcmFtRWxlbWVudF0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udHJvbGxlcltwYXJhbUVsZW1lbnRdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbGxlcltwYXJhbUVsZW1lbnRdLmJpbmQoY29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXJbcGFyYW1FbGVtZW50XTtcbiAgICB9XG5cbiAgICBsZXQgaXNGbG9hdFJlZyA9IC9eLT9cXGQrXFwuP1xcZCskLztcbiAgICBsZXQgaXNJbnRSZWcgPSAvXi0/XFxkKyQvO1xuICAgIGxldCBpc0Jvb2xSZWcgPSAvXih0cnVlfGZhbHNlKSQvO1xuICAgIGxldCBpc1N0cmluZ1JlZyA9IC9eKFsnXVteJ10qWyddKXwoW1wiXVteXCJdKltcIl0pJC87XG5cbiAgICBpZiAocGFyYW1FbGVtZW50Lm1hdGNoKGlzQm9vbFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudCA9PT0gJ3RydWUnO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAocGFyYW1FbGVtZW50LnRvTG93ZXJDYXNlKCkgPT09ICdub25lJykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc0ludFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHBhcmFtRWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbUVsZW1lbnQubWF0Y2goaXNGbG9hdFJlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyYW1FbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtRWxlbWVudC5tYXRjaChpc1N0cmluZ1JlZykpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtRWxlbWVudC5zdWJzdHIoMSwgcGFyYW1FbGVtZW50Lmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbUVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjQoKSB7XG4gICAgcmV0dXJuIChbMWU3XSArIC0xZTMgKyAtNGUzICsgLThlMyArIC0xZTExKS5yZXBsYWNlKC9bMDE4XS9nLCBjID0+XG4gICAgICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICAgKTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJFcnJvcnNJbkZvcm0oJGZvcm0pIHtcbiAgICAkZm9ybS5maW5kKCcuaGFzLWVycm9yJykucmVtb3ZlQ2xhc3MoJ2hhcy1lcnJvcicpLmZpbmQoJy5hbGVydC1kYW5nZXInKS5yZW1vdmUoKTtcbiAgICAkZm9ybS5maW5kKCcubm9uLWZpZWxkLWVycm9ycycpLnJlbW92ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0RXJyb3JzSW5Gb3JtKCRmb3JtLCAkcmVzRm9ybSkge1xuICAgICRyZXNGb3JtID0gJCgnPGRpdj4nKS5hcHBlbmQoJHJlc0Zvcm0pO1xuXG4gICAgJGZvcm0uZmluZCgnLmhhcy1lcnJvcicpLnJlbW92ZUNsYXNzKCdoYXMtZXJyb3InKS5maW5kKCcuYWxlcnQtZGFuZ2VyJykuc2FmZVJlbW92ZSgpO1xuICAgICRmb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuc2FmZVJlbW92ZSgpO1xuICAgIGxldCAkZmlsZV9jb250YWluZXIgPSAkcmVzRm9ybS5maW5kKCdpbnB1dFt0eXBlPWZpbGVdJykucGFyZW50KCk7XG4gICAgJGZvcm0uZmluZCgnaW5wdXRbdHlwZT1maWxlXScpLnBhcmVudCgpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJGZpbGVfY29udGFpbmVyW2luZGV4XSk7XG4gICAgfSk7XG5cbiAgICBsZXQgaGFzTm9FcnJvciA9ICRyZXNGb3JtLmZpbmQoJy5ub24tZmllbGQtZXJyb3JzJykuaW5zZXJ0QWZ0ZXIoJGZvcm0uZmluZCgnLmhpZGRlbi1mb3JtLWZpZWxkcycpKS5sZW5ndGggPT09IDA7XG4gICAgJHJlc0Zvcm0uZmluZCgnLmhhcy1lcnJvcicpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNOb0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCAkcmVzRXJyb3JGaWVsZCA9ICQodGhpcyk7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAkcmVzRXJyb3JGaWVsZC5kYXRhKCdhdXRvLWlkJyk7XG4gICAgICAgIGxldCAkZXJyb3JGaWVsZCA9ICRmb3JtLmZpbmQoJy5mb3JtLWdyb3VwLicgKyBjbGFzc05hbWUpO1xuICAgICAgICAkZXJyb3JGaWVsZC5hZGRDbGFzcygnaGFzLWVycm9yJyk7XG4gICAgICAgICRlcnJvckZpZWxkLmZpbmQoJy5mb3JtLWlucHV0LWNvbnRhaW5lcicpLmFwcGVuZCgkcmVzRXJyb3JGaWVsZC5maW5kKCcuYWxlcnQtZGFuZ2VyJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGhhc05vRXJyb3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqcXVlcnlJbnNlcnRBdCgkY29udGFpbmVyLCBpbmRleCwgJG5ld0VsZW1lbnQpIHtcbiAgICBsZXQgbGFzdEluZGV4ID0gJGNvbnRhaW5lci5jaGlsZHJlbigpLnNpemUoKTtcbiAgICBpZiAoaW5kZXggPCBsYXN0SW5kZXgpIHtcbiAgICAgICAgJGNvbnRhaW5lci5jaGlsZHJlbigpLmVxKGluZGV4KS5iZWZvcmUoJG5ld0VsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgICRjb250YWluZXIuYXBwZW5kKCRuZXdFbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG4iXSwibmFtZXMiOlsiXyRib2R5IiwiYXJnX25hbWVzX3JlZyIsImNvbW1lbmRfcmVnIiwiZ2V0Qm9keSIsIiQiLCJnZXRQYXJhbXNOYW1lT2ZGdW5jdGlvbiIsImZ1bmMiLCJmbnN0ciIsInRvU3RyaW5nIiwicmVwbGFjZSIsInJlc3VsdCIsInNsaWNlIiwiaW5kZXhPZiIsIm1hdGNoIiwicHJvbWlzZUR1bW15RmFjdG9yeSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FtZWxDYXNlVG9UYWdOYW1lIiwic3RyIiwibGV0dGVyIiwidG9Mb3dlckNhc2UiLCJudW1iZXIiLCJ0YWdOYW1lVG9DYW1lbENhc2UiLCJ0b1VwcGVyQ2FzZSIsInRhZ05hbWVUb1JlYWRhYmxlTmFtZSIsImNvcHlQcm9wcyIsInRhcmdldENsYXNzIiwic291cmNlQ2xhc3MiLCJzb3VyY2UiLCJwcm9wTmFtZXNUYXJnZXQiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwicHJvdG90eXBlIiwiY29uY2F0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibmFtZSIsImZvckVhY2giLCJwcm9wIiwiaW5jbHVkZXMiLCJwdXNoIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJnZXRQcm90b3R5cGVPZiIsImFnaWxlQWdncmVnYXRpb24iLCJiYXNlQ2xhc3MiLCJtaXhpbnMiLCJiYXNlIiwiY29uc3RydWN0b3IiLCJfYXJncyIsIl9taXhpbnMiLCJtaXhpbiIsIm5ld01peGluIiwiYXNzaWduIiwiX3RhZ05hbWUiLCJfaXNNaXhpbiIsImNsYXNzTmFtZSIsImNzcmZTYWZlTWV0aG9kIiwibWV0aG9kIiwidGVzdCIsInVwbG9hZEZpbGVGb3JtRGF0YSIsImZvcm1EYXRhIiwidXJsIiwiYWpheCIsInR5cGUiLCJ4aHIiLCJteVhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJwcm9ncmVzc0hhbmRsaW5nRnVuY3Rpb24iLCJkYXRhIiwiY2FjaGUiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiYmVmb3JlU2VuZCIsInNldHRpbmdzIiwiY3Jvc3NEb21haW4iLCJzZXRSZXF1ZXN0SGVhZGVyIiwid2luZG93IiwiQ1NSRl9UT0tFTiIsImUiLCJsZW5ndGhDb21wdXRhYmxlIiwicGVyY2VudFZhbCIsIk1hdGgiLCJyb3VuZCIsImxvYWRlZCIsInRvdGFsIiwiJHByb2dyZXNzQ29udGFpbmVyIiwiaGlkZSIsInNob3ciLCJmaW5kIiwiY3NzIiwidGV4dCIsImNoZWNrSWZQYXJhbU51bWJlckJvb2xPclN0cmluZyIsInBhcmFtRWxlbWVudCIsImNvbnRyb2xsZXIiLCJiaW5kIiwiaXNGbG9hdFJlZyIsImlzSW50UmVnIiwiaXNCb29sUmVnIiwiaXNTdHJpbmdSZWciLCJ1bmRlZmluZWQiLCJwYXJzZUludCIsInBhcnNlRmxvYXQiLCJzdWJzdHIiLCJsZW5ndGgiLCJ1dWlkdjQiLCJjIiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDhBcnJheSIsImNsZWFyRXJyb3JzSW5Gb3JtIiwiJGZvcm0iLCJyZW1vdmVDbGFzcyIsInJlbW92ZSIsInNldEVycm9yc0luRm9ybSIsIiRyZXNGb3JtIiwiYXBwZW5kIiwic2FmZVJlbW92ZSIsIiRmaWxlX2NvbnRhaW5lciIsInBhcmVudCIsImVhY2giLCJpbmRleCIsInJlcGxhY2VXaXRoIiwiaGFzTm9FcnJvciIsImluc2VydEFmdGVyIiwiJHJlc0Vycm9yRmllbGQiLCIkZXJyb3JGaWVsZCIsImFkZENsYXNzIiwianF1ZXJ5SW5zZXJ0QXQiLCIkY29udGFpbmVyIiwiJG5ld0VsZW1lbnQiLCJsYXN0SW5kZXgiLCJjaGlsZHJlbiIsInNpemUiLCJlcSIsImJlZm9yZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_utils.js\n");
|
118
118
|
|
119
119
|
/***/ }),
|
120
120
|
|
@@ -124,7 +124,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
124
124
|
\******************************************/
|
125
125
|
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
126
126
|
|
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 */ 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 path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = 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 (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\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 */\nfunction replaceAllTagElementsInContainer($container, parentController) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController);\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 {string} - 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, controller.contentUrl);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).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, controller.contentUrl);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\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 * @returns {boolean}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller);\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, $element);\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 * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html) {\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);\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 */\nfunction replaceTagElementsInContainer(tagList, $container, parentController) {\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).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller) {\n return _reloadMethodHTML(controller, controller.$container);\n}\nfunction _reloadMethodHTML(controller, $dom) {\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 result = result.bind(controller)($this.data());\n }\n if (result !== undefined) {\n plist.push(Promise.resolve(result).then(x => {\n const $new_content = $(`<div></div>`);\n $new_content.append(x);\n return replaceTagElementsInContainer((0,_sdc_controller_js__WEBPACK_IMPORTED_MODULE_0__.tagList)(), $new_content, controller).then(() => {\n return _reloadMethodHTML(controller, $new_content).then(() => {\n $this.safeEmpty().text('').append(x);\n return true;\n });\n });\n }));\n }\n });\n return Promise.all(plist);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Q3VCLENBQUMsQ0FBQztZQUNwQyxPQUFPLElBQUk7VUFDZixDQUFDLENBQUM7UUFDTixDQUFDLENBQUM7TUFDTixDQUFDLENBQUMsQ0FBQztJQUNQO0VBRUosQ0FBQyxDQUFDO0VBRUYsT0FBT3pELE9BQU8sQ0FBQzhCLEdBQUcsQ0FBQ29CLEtBQUssQ0FBQztBQUM3QiIsInNvdXJjZXMiOlsid2VicGFjazovL3NkY19jbGllbnQvLi9zcmMvc2ltcGxlRG9tQ29udHJvbC9zZGNfdmlldy5qcz8yNGI1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y29udHJvbGxlckZhY3RvcnksIHJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zLCB0YWdMaXN0fSBmcm9tIFwiLi9zZGNfY29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHtnZXRVcmxQYXJhbX0gZnJvbSBcIi4vc2RjX3BhcmFtcy5qc1wiO1xuaW1wb3J0IHthcHB9IGZyb20gXCIuL3NkY19tYWluLmpzXCI7XG5pbXBvcnQge3RyaWdnZXJ9IGZyb20gXCIuL3NkY19ldmVudHMuanNcIjtcblxuLyoqXG4gKiBMaXN0IG9mIEhUTUwgZmlsZXMuXG4gKiBAdHlwZSB7e319XG4gKi9cbmxldCBodG1sRmlsZXMgPSB7fTtcblxuZXhwb3J0IGNvbnN0IERBVEFfQ09OVFJPTExFUl9LRVkgPSAnX2NvbnRyb2xsZXJfJztcbmV4cG9ydCBjb25zdCBDT05UUk9MTEVSX0NMQVNTID0gJ19zZGNfY29udHJvbGxlcl8nO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNhY2hlKCkge1xuICAgIGh0bWxGaWxlcyA9IHt9O1xufVxuXG4vKipcbiAqIGZpbmRTZGNUZ3MgRmluZHMgYWxsIHJlZ2lzdGVyZWQgdGFncyBpbiBhIGNvbnRhaW5lci4gQnV0IGl0IGlnbm9yZXNcbiAqIHJlZ2lzdGVyZWQgdGFncyBpbiByZWdpc3RlcmVkIHRhZ3MuIEl0IGNvbGxlY3RzIGFsbCB0aG9zZVxuICogZG9tcyBhbmQgcmV0dXJucyBhIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIGFsc28gdGhlIHRhZyBuYW1lIHRoZSBkb20gYW5kIHRoZSB0YWdcbiAqIG5hbWVzIG9mIHRoZSBzdXBlciBjb250cm9sbGVyXG4gKlxuICogQHBhcmFtIHtqcXVlcnl9ICRjb250YWluZXIgLSBqUXVlcnkgY29udGFpbmVyXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ05hbWVMaXN0IC0gYSBzdHJpbmcgbGlzdCB3aXRoIHRhZyBuYW1lcy5cbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IHBhcmVudENvbnRyb2xsZXIgLSBjb250cm9sbGVyIGluIHN1cnJvdW5kaW5nXG4gKiBAcmV0dXJuIHtBcnJheX0gLSBhIGFycmF5IG9mIG9iamVjdHMgd2l0aCBhbGwgcmVnaXN0ZXIgdGFncyBmb3VuZFxuICovXG5mdW5jdGlvbiBmaW5kU2RjVGdzKCRjb250YWluZXIsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgaWYgKCEkY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbGV0ICRjaGlsZHJlbiA9ICRjb250YWluZXIuY2hpbGRyZW4oKTtcbiAgICBsZXQgZW1wdHlMaXN0ID0gW107XG4gICAgJGNoaWxkcmVuLmVhY2goZnVuY3Rpb24gKF8sIGVsZW1lbnQpIHtcbiAgICAgICAgbGV0ICRlbGVtZW50ID0gJChlbGVtZW50KTtcbiAgICAgICAgbGV0IHRhZ05hbWUgPSAkZWxlbWVudC5wcm9wKCd0YWdOYW1lJykudG9Mb3dlckNhc2UoKS5zcGxpdCgnXycpO1xuICAgICAgICBpZiAoJC5pbkFycmF5KHRhZ05hbWVbMF0sIHRhZ05hbWVMaXN0KSA+PSAwKSB7XG4gICAgICAgICAgICBlbXB0eUxpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnOiB0YWdOYW1lWzBdLFxuICAgICAgICAgICAgICAgIHN1cGVyOiB0YWdOYW1lLnNwbGljZSgxKSB8fCBbXSxcbiAgICAgICAgICAgICAgICBkb206ICRlbGVtZW50XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2UgaWYgKHRhZ05hbWVbMF0uc3RhcnRzV2l0aCgndGhpcy4nKSkge1xuICAgICAgICAgICAgJGVsZW1lbnQuYWRkQ2xhc3MoYF9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyIHNkY191dWlkXyR7cGFyZW50Q29udHJvbGxlci5fdXVpZH1gKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZW1wdHlMaXN0ID0gZW1wdHlMaXN0LmNvbmNhdChmaW5kU2RjVGdzKCRlbGVtZW50LCB0YWdOYW1lTGlzdCwgcGFyZW50Q29udHJvbGxlcikpXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBlbXB0eUxpc3Q7XG59XG5cbi8qKlxuICogcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlciBmaWxscyB0aGUgcGFyYW1ldGVyIG9mIHRoZSBjb250ZW50XG4gKiB1cmwgdGhpcyBmdW5jdGlvbiB1c2VzIHRoZSB0YWcgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIGNvbnRyb2xsZXIgLSBjb250cm9sbGVyIG9iamVjdFxuICogQHBhcmFtIHVybCAtIHRoZSBvcmlnaW4gY29udGVudCBVUkxcbiAqIEBwYXJhbSB1cmxWYWx1ZXMgLSB2YWx1ZXMgZm9yIHRoZSB1cmwgcGxhY2Vob2xkZXIuIEluIHNhbWUgb3JkZXIhIVxuICogQHJldHVybnMge3N0cmluZ30gLSB0aGUgY29ycmVjdCBVUkwgd2l0aCBwcmVmaXguXG4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCB1cmxWYWx1ZXMpIHtcbiAgICBmb3IgKGxldCBrZXlfaWR4IGluIGNvbnRyb2xsZXIuX3VybFBhcmFtcykge1xuICAgICAgICBpZiAoY29udHJvbGxlci5fdXJsUGFyYW1zLmhhc093blByb3BlcnR5KGtleV9pZHgpKSB7XG4gICAgICAgICAgICBsZXQga2V5ID0gY29udHJvbGxlci5fdXJsUGFyYW1zW2tleV9pZHhdO1xuICAgICAgICAgICAgbGV0IHJlID0gUmVnRXhwKFwiJVxcXFwoXCIgKyBrZXkgKyBcIlxcXFwpXFxcXHdcIiwgXCJnbVwiKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHJlLCBcIlwiICsgdXJsVmFsdWVzLnNoaWZ0KCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVybDtcbn1cblxuLyoqXG4gKiBsb2FkSFRNTEZpbGUgbG9hZHMgdGhlIEhUTUwgY29udGVudCBmaWxlIGZyb20gdGhlIHNlcnZlciB2aWEgYWpheCByZXF1ZXN0LlxuICpcbiAqIElmIHRoZSBIVE1MIGZpbGUgaXMgbG9hZGVkIGFscmVhZHkgdGhlIGZ1bmN0aW9uIHRha2VzIG5vIGFjdGlvbi5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIGEgY29udGVudCBVUkwgZnJvbSB0aGUgY29udHJvbGxlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gZ2V0IGFyZ3MuXG4gKiBAcGFyYW0gdGFnIC0gYSBub3JtYWxpemVkIHRhZy1uYW1lIGFzIHN0cmluZy5cbiAqIEBwYXJhbSBoYXJkUmVsb2FkIC0gdHJ1ZSBpZiB0aGUgZmlsZSBoYXMgdG8gYmUgcmVsb2FkZWQgZXZlcnkgdGltZS5cbiAqIEByZXR1cm5zIHtQcm9taXNlPEJvb2xlYW4+fSAtIHdhaXRzIGZvciB0aGUgZmlsZSB0byBiZSBsb2FkZWQuXG4gKi9cbmZ1bmN0aW9uIGxvYWRIVE1MRmlsZShwYXRoLCBhcmdzLCB0YWcsIGhhcmRSZWxvYWQpIHtcbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChodG1sRmlsZXNbdGFnXSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGh0bWxGaWxlc1t0YWddKVxuICAgIH1cblxuICAgIGFyZ3MuVkVSU0lPTiA9IGFwcC5WRVJTSU9OO1xuICAgIGFyZ3MuX21ldGhvZCA9ICdjb250ZW50JztcblxuICAgIHJldHVybiAkLmdldChwYXRoLCBhcmdzKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGlmICghaGFyZFJlbG9hZCkge1xuICAgICAgICAgICAgaHRtbEZpbGVzW3RhZ10gPSBkYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gMzAxKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gZXJyLnJlc3BvbnNlSlNPTjtcbiAgICAgICAgICAgIHRyaWdnZXIoJ19SZWRpcmVjdE9uVmlldycsIGRhdGFbJ3VybC1saW5rJ10pO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXIoJ25hdkxvYWRlZCcsIHsnY29udHJvbGxlcl9uYW1lJzogKCk9PiBlcnIuc3RhdHVzfSk7XG5cbiAgICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHBhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyIHx8ICRjb250YWluZXIuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICAgIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gICAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBsb2FkSFRNTEZpbGUoY29udHJvbGxlci5jb250ZW50VXJsLCBnZXRFbGVtZW50cy5hcmdzLCBjb250cm9sbGVyLl90YWdOYW1lLCBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQpXG4gICAgXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JykuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICAgICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICAgICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKCQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICAgIGlmIChjb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAgICRlbGVtZW50LmFkZENsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCAkZWxlbWVudCk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl9taXhpbnNbbWl4aW5LZXldLl90YWdOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG59XG5cblxuLyoqXG4gKiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gRm9yIGVhY2ggcmVnaXN0ZXJlZCB0YWcgaXQgbG9hZHMgdGhlIGNvbnRlbnQuXG4gKiBBZnRlcndhcmRzIGl0IHN0YXJ0cyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgY29udHJvbGxlci4gSSB0aGUgbmV4dCBzdGVwIGl0IHN0YXJ0cyB0aGVcbiAqIHByb2NlZHVyZSBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBjb250cm9sbGVyIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ0xpc3QgLSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRhZ3NcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lciB0byBmaW5kIHRoZSB0YWdzXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7IGVsZW1lbnRJbmRleCsrKSB7XG4gICAgICAgICAgICBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdEZXNjcmlwdGlvbkVsZW1lbnRzW2VsZW1lbnRJbmRleF0uZG9tLFxuICAgICAgICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgICAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlcikge1xuICAgIHJldHVybiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpXG59XG5mdW5jdGlvbiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkZG9tKSB7XG4gICAgY29uc3QgcGxpc3QgPSBbXTtcblxuICAgICRkb20uZmluZChgLl9iaW5kX3RvX3VwZGF0ZV9oYW5kbGVyLnNkY191dWlkXyR7Y29udHJvbGxlci5fdXVpZH1gKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgJHRoaXMgPSAkKHRoaXMpO1xuICAgICAgICBsZXQgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZigkdGhpcy5oYXNDbGFzcyhgX3dpdGhfaGFuZGxlcmApKSB7XG4gICAgICAgICAgICByZXN1bHQgPSAkdGhpcy5kYXRhKCdoYW5kbGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgY29udHJvbGxlcl9oYW5kbGVyID0gdGhpcy50YWdOYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXnRoaXMuLywgJycpO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNvbnRyb2xsZXJbY29udHJvbGxlcl9oYW5kbGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5iaW5kKGNvbnRyb2xsZXIpKCR0aGlzLmRhdGEoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwbGlzdC5wdXNoKFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4oKHgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCAkbmV3X2NvbnRlbnQgPSAkKGA8ZGl2PjwvZGl2PmApO1xuICAgICAgICAgICAgICAgICRuZXdfY29udGVudC5hcHBlbmQoeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKHRhZ0xpc3QoKSwgJG5ld19jb250ZW50LCBjb250cm9sbGVyKS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJG5ld19jb250ZW50KS50aGVuKCgpPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMuc2FmZUVtcHR5KCkudGV4dCgnJykuYXBwZW5kKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICB9KTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChwbGlzdCk7XG59Il0sIm5hbWVzIjpbImNvbnRyb2xsZXJGYWN0b3J5IiwicnVuQ29udHJvbEZsb3dGdW5jdGlvbnMiLCJ0YWdMaXN0IiwiZ2V0VXJsUGFyYW0iLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwicGF0aCIsImFyZ3MiLCJoYXJkUmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb250cm9sbGVyX25hbWUiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdEZXNjcmlwdGlvbkVsZW1lbnRzIiwidGFnQ291bnQiLCJlbGVtZW50SW5kZXgiLCJyZWxvYWRNZXRob2RIVE1MIiwiX3JlbG9hZE1ldGhvZEhUTUwiLCIkZG9tIiwicGxpc3QiLCJmaW5kIiwiJHRoaXMiLCJyZXN1bHQiLCJ1bmRlZmluZWQiLCJjb250cm9sbGVyX2hhbmRsZXIiLCJiaW5kIiwieCIsIiRuZXdfY29udGVudCIsInNhZmVFbXB0eSIsInRleHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
|
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 */ 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 {$} $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 path - a content URL from the controller.\n * @param {object} args - get args.\n * @param tag - a normalized tag-name as string.\n * @param hardReload - true if the file has to be reloaded every time.\n * @returns {Promise<Boolean>} - waits for the file to be loaded.\n */\nfunction loadHTMLFile(path, args, tag, hardReload) {\n if (!path) {\n return Promise.resolve(false);\n } else if (htmlFiles[tag]) {\n return Promise.resolve(htmlFiles[tag]);\n }\n args.VERSION = _sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.VERSION;\n args._method = 'content';\n return $.get(path, args).then(function (data) {\n if (!hardReload) {\n htmlFiles[tag] = 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 (0,_sdc_events_js__WEBPACK_IMPORTED_MODULE_3__.trigger)('navLoaded', {\n 'controller_name': () => err.status\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 */\nfunction replaceAllTagElementsInContainer($container, parentController) {\n parentController = parentController || $container.data(DATA_CONTROLLER_KEY);\n return replaceTagElementsInContainer(_sdc_main_js__WEBPACK_IMPORTED_MODULE_2__.app.tagNames, $container, parentController);\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 {string} - 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, controller.contentUrl);\n controller.contentUrl = getElements.url;\n }\n return Promise.all([loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload)]).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, controller.contentUrl);\n controller.contentUrl = getElements.url;\n return loadHTMLFile(controller.contentUrl, getElements.args, controller._tagName, controller.contentReload);\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 * @returns {boolean}\n */\nfunction runReplaceTagElementsInContainer($element, tagName, superTagNameList, parentController) {\n let controller = $element.data(DATA_CONTROLLER_KEY);\n if (controller) {\n return replaceAllTagElementsInContainer($element, controller);\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, $element);\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 * @return {Promise}\n */\nfunction runControllerFillContent(controller, $html) {\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);\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 */\nfunction replaceTagElementsInContainer(tagList, $container, parentController) {\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).then(() => {\n tagCount--;\n if (tagCount === 0) {\n return resolve();\n }\n });\n }\n });\n}\nfunction reloadMethodHTML(controller, $container) {\n return _reloadMethodHTML(controller, $container ?? controller.$container);\n}\nfunction _reloadMethodHTML(controller, $dom) {\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 result = result.bind(controller)($this.data());\n }\n if (result !== undefined) {\n plist.push(Promise.resolve(result).then(x => {\n let $newContent = $(`<div></div>`);\n $newContent.append(x);\n $newContent = $this.clone().empty().append($newContent);\n return controller.reconcile($newContent, $this);\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($element, id = [], parent = null) {\n id.push(getNodeKey($element));\n const obj = {\n $element,\n id: id.join('::'),\n depth: id.length,\n idx: 0,\n op: null,\n parent\n };\n return [obj].concat($element.contents().toArray().map(x => reconcileTree($(x), id.slice(), obj)).flat());\n}\nfunction reconcile($virtualNode, $realNode) {\n const $old = reconcileTree($realNode);\n const $new = reconcileTree($virtualNode);\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 opIdx = 0;\n let toRemove = [];\n op_steps.forEach(op_step => {\n const {\n op,\n $element,\n idx\n } = op_step;\n if (op.type === 'keep_counterpart') {\n if (op.counterpart.idx + opIdx !== 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 opIdx--;\n } else if (op.type === 'insert_ignore') {\n opIdx++;\n } else if (op.type === 'insert') {\n opIdx++;\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 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 if (!oldNode || oldNode.op) {\n return;\n }\n newNode = newNode.parent;\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 >= 0 && 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}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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USxHQUFHLGVBQWUsR0FBRyxRQUFRO01BQ3RFckMsQ0FBQyxDQUFDbUIsRUFBRSxHQUFHO1FBQUNrQixJQUFJO1FBQUVVLE1BQU07UUFBRUQsS0FBSyxFQUFFOUMsQ0FBQyxDQUFDd0MsU0FBUyxDQUFDO01BQUMsQ0FBQztJQUMvQztFQUNKLENBQUMsQ0FBQztFQUVGLE1BQU0yQixNQUFNLEdBQUcsQ0FDWCxHQUFHUixRQUFRLEVBQ1gsR0FBR0MsUUFBUSxDQUNkO0VBR0QsT0FBT08sTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLEtBQUs7SUFDekIsTUFBTUMsSUFBSSxHQUFHRixDQUFDLENBQUNsRCxFQUFFLEVBQUVELEdBQUcsSUFBSW1ELENBQUMsQ0FBQ25ELEdBQUc7SUFDL0IsTUFBTXNELElBQUksR0FBR0YsQ0FBQyxDQUFDbkQsRUFBRSxFQUFFRCxHQUFHLElBQUlvRCxDQUFDLENBQUNwRCxHQUFHO0lBRS9CLE9BQU9xRCxJQUFJLEdBQUdDLElBQUk7RUFDdEIsQ0FBQyxDQUFDO0FBQ04iLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZGNfY2xpZW50Ly4vc3JjL3NpbXBsZURvbUNvbnRyb2wvc2RjX3ZpZXcuanM/MjRiNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NvbnRyb2xsZXJGYWN0b3J5LCBydW5Db250cm9sRmxvd0Z1bmN0aW9uc30gZnJvbSBcIi4vc2RjX2NvbnRyb2xsZXIuanNcIjtcbmltcG9ydCB7Z2V0VXJsUGFyYW19IGZyb20gXCIuL3NkY19wYXJhbXMuanNcIjtcbmltcG9ydCB7YXBwfSBmcm9tIFwiLi9zZGNfbWFpbi5qc1wiO1xuaW1wb3J0IHt0cmlnZ2VyfSBmcm9tIFwiLi9zZGNfZXZlbnRzLmpzXCI7XG5cbi8qKlxuICogTGlzdCBvZiBIVE1MIGZpbGVzLlxuICogQHR5cGUge3t9fVxuICovXG5sZXQgaHRtbEZpbGVzID0ge307XG5cbmV4cG9ydCBjb25zdCBEQVRBX0NPTlRST0xMRVJfS0VZID0gJ19jb250cm9sbGVyXyc7XG5leHBvcnQgY29uc3QgQ09OVFJPTExFUl9DTEFTUyA9ICdfc2RjX2NvbnRyb2xsZXJfJztcblxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5DYWNoZSgpIHtcbiAgICBodG1sRmlsZXMgPSB7fTtcbn1cblxuLyoqXG4gKiBmaW5kU2RjVGdzIEZpbmRzIGFsbCByZWdpc3RlcmVkIHRhZ3MgaW4gYSBjb250YWluZXIuIEJ1dCBpdCBpZ25vcmVzXG4gKiByZWdpc3RlcmVkIHRhZ3MgaW4gcmVnaXN0ZXJlZCB0YWdzLiBJdCBjb2xsZWN0cyBhbGwgdGhvc2VcbiAqIGRvbXMgYW5kIHJldHVybnMgYSBsaXN0IG9mIG9iamVjdHMgY29udGFpbmluZyBhbHNvIHRoZSB0YWcgbmFtZSB0aGUgZG9tIGFuZCB0aGUgdGFnXG4gKiBuYW1lcyBvZiB0aGUgc3VwZXIgY29udHJvbGxlclxuICpcbiAqIEBwYXJhbSB7JH0gJGNvbnRhaW5lciAtIGpRdWVyeSBjb250YWluZXJcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gdGFnTmFtZUxpc3QgLSBhIHN0cmluZyBsaXN0IHdpdGggdGFnIG5hbWVzLlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlciAtIGNvbnRyb2xsZXIgaW4gc3Vycm91bmRpbmdcbiAqIEByZXR1cm4ge0FycmF5fSAtIGEgYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIGFsbCByZWdpc3RlciB0YWdzIGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGZpbmRTZGNUZ3MoJGNvbnRhaW5lciwgdGFnTmFtZUxpc3QsIHBhcmVudENvbnRyb2xsZXIpIHtcbiAgICBpZiAoISRjb250YWluZXIpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBsZXQgJGNoaWxkcmVuID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICAgIGxldCBlbXB0eUxpc3QgPSBbXTtcbiAgICAkY2hpbGRyZW4uZWFjaChmdW5jdGlvbiAoXywgZWxlbWVudCkge1xuICAgICAgICBsZXQgJGVsZW1lbnQgPSAkKGVsZW1lbnQpO1xuICAgICAgICBsZXQgdGFnTmFtZSA9ICRlbGVtZW50LnByb3AoJ3RhZ05hbWUnKS50b0xvd2VyQ2FzZSgpLnNwbGl0KCdfJyk7XG4gICAgICAgIGlmICgkLmluQXJyYXkodGFnTmFtZVswXSwgdGFnTmFtZUxpc3QpID49IDApIHtcbiAgICAgICAgICAgIGVtcHR5TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0YWc6IHRhZ05hbWVbMF0sXG4gICAgICAgICAgICAgICAgc3VwZXI6IHRhZ05hbWUuc3BsaWNlKDEpIHx8IFtdLFxuICAgICAgICAgICAgICAgIGRvbTogJGVsZW1lbnRcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0gZWxzZSBpZiAodGFnTmFtZVswXS5zdGFydHNXaXRoKCd0aGlzLicpKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5hZGRDbGFzcyhgX2JpbmRfdG9fdXBkYXRlX2hhbmRsZXIgc2RjX3V1aWRfJHtwYXJlbnRDb250cm9sbGVyLl91dWlkfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbXB0eUxpc3QgPSBlbXB0eUxpc3QuY29uY2F0KGZpbmRTZGNUZ3MoJGVsZW1lbnQsIHRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSlcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGVtcHR5TGlzdDtcbn1cblxuLyoqXG4gKiByZXBsYWNlUGxhY2Vob2xkZXJDb250cm9sbGVyIGZpbGxzIHRoZSBwYXJhbWV0ZXIgb2YgdGhlIGNvbnRlbnRcbiAqIHVybCB0aGlzIGZ1bmN0aW9uIHVzZXMgdGhlIHRhZyBwYXJhbWV0ZXJcbiAqXG4gKiBAcGFyYW0gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcGFyYW0gdXJsIC0gdGhlIG9yaWdpbiBjb250ZW50IFVSTFxuICogQHBhcmFtIHVybFZhbHVlcyAtIHZhbHVlcyBmb3IgdGhlIHVybCBwbGFjZWhvbGRlci4gSW4gc2FtZSBvcmRlciEhXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZVBsYWNlaG9sZGVyQ29udHJvbGxlcihjb250cm9sbGVyLCB1cmwsIHVybFZhbHVlcykge1xuICAgIGZvciAobGV0IGtleV9pZHggaW4gY29udHJvbGxlci5fdXJsUGFyYW1zKSB7XG4gICAgICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMuaGFzT3duUHJvcGVydHkoa2V5X2lkeCkpIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSBjb250cm9sbGVyLl91cmxQYXJhbXNba2V5X2lkeF07XG4gICAgICAgICAgICBsZXQgcmUgPSBSZWdFeHAoXCIlXFxcXChcIiArIGtleSArIFwiXFxcXClcXFxcd1wiLCBcImdtXCIpO1xuICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UocmUsIFwiXCIgKyB1cmxWYWx1ZXMuc2hpZnQoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufVxuXG4vKipcbiAqIGxvYWRIVE1MRmlsZSBsb2FkcyB0aGUgSFRNTCBjb250ZW50IGZpbGUgZnJvbSB0aGUgc2VydmVyIHZpYSBhamF4IHJlcXVlc3QuXG4gKlxuICogSWYgdGhlIEhUTUwgZmlsZSBpcyBsb2FkZWQgYWxyZWFkeSB0aGUgZnVuY3Rpb24gdGFrZXMgbm8gYWN0aW9uLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gYSBjb250ZW50IFVSTCBmcm9tIHRoZSBjb250cm9sbGVyLlxuICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBnZXQgYXJncy5cbiAqIEBwYXJhbSB0YWcgLSBhIG5vcm1hbGl6ZWQgdGFnLW5hbWUgYXMgc3RyaW5nLlxuICogQHBhcmFtIGhhcmRSZWxvYWQgLSB0cnVlIGlmIHRoZSBmaWxlIGhhcyB0byBiZSByZWxvYWRlZCBldmVyeSB0aW1lLlxuICogQHJldHVybnMge1Byb21pc2U8Qm9vbGVhbj59IC0gd2FpdHMgZm9yIHRoZSBmaWxlIHRvIGJlIGxvYWRlZC5cbiAqL1xuZnVuY3Rpb24gbG9hZEhUTUxGaWxlKHBhdGgsIGFyZ3MsIHRhZywgaGFyZFJlbG9hZCkge1xuICAgIGlmICghcGF0aCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9IGVsc2UgaWYgKGh0bWxGaWxlc1t0YWddKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHRtbEZpbGVzW3RhZ10pXG4gICAgfVxuXG4gICAgYXJncy5WRVJTSU9OID0gYXBwLlZFUlNJT047XG4gICAgYXJncy5fbWV0aG9kID0gJ2NvbnRlbnQnO1xuXG4gICAgcmV0dXJuICQuZ2V0KHBhdGgsIGFyZ3MpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgaWYgKCFoYXJkUmVsb2FkKSB7XG4gICAgICAgICAgICBodG1sRmlsZXNbdGFnXSA9IGRhdGE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIuc3RhdHVzID09PSAzMDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnIucmVzcG9uc2VKU09OO1xuICAgICAgICAgICAgdHJpZ2dlcignX1JlZGlyZWN0T25WaWV3JywgZGF0YVsndXJsLWxpbmsnXSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlcignbmF2TG9hZGVkJywgeydjb250cm9sbGVyX25hbWUnOiAoKSA9PiBlcnIuc3RhdHVzfSk7XG5cbiAgICAgICAgdGhyb3cgYDxzZGMtZXJyb3IgZGF0YS1jb2RlPVwiJHtlcnIuc3RhdHVzfVwiPiR7ZXJyLnJlc3BvbnNlVGV4dH08L3NkYy1lcnJvcj5gO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyIHJlcGxhY2VzIGFsbCByZWdpc3RlcmVkIHRhZ3MgYnkgdGhlIGNvbnRyb2xsZXIuXG4gKiBJbiB0aGlzIHN0ZXAgdGhlIGxpZmUtY3ljbGUgc3RhcnRzLlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0gZ2l2ZW4gY29udGFpbmVyXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gcGFyZW50IGNvbnRvbGxlciBzdXJyb3VuZGVkIHRoZSBjb250YWluZXJcbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUFsbFRhZ0VsZW1lbnRzSW5Db250YWluZXIoJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHBhcmVudENvbnRyb2xsZXIgPSBwYXJlbnRDb250cm9sbGVyIHx8ICRjb250YWluZXIuZGF0YShEQVRBX0NPTlRST0xMRVJfS0VZKTtcbiAgICByZXR1cm4gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIoYXBwLnRhZ05hbWVzLCAkY29udGFpbmVyLCBwYXJlbnRDb250cm9sbGVyKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRVcmwgdXNlcyB0aGUgY29udGVudCBVUkwgcHJlZml4IHRvIG1hcmdlIHRoZVxuICogY29ycmVjdCBVUkwuIEFsc28gcGFyc2VzIHRoZSB1cmwgcGFyYW1ldGVyXG4gKlxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gY29udHJvbGxlciAtIGNvbnRyb2xsZXIgb2JqZWN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIHRoZSBjb3JyZWN0IFVSTCB3aXRoIHByZWZpeC5cbiAqL1xuZnVuY3Rpb24gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIpIHtcbiAgICBsZXQgdXJsID0gY29udHJvbGxlci5jb250ZW50VXJsO1xuICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgbGV0IHJlID0gLyVcXCgoW14pXSspXFwpXFx3L2dtO1xuICAgICAgICBsZXQgbWF0Y2hlcztcbiAgICAgICAgY29udHJvbGxlci5fdXJsUGFyYW1zID0gW107XG4gICAgICAgIHdoaWxlICgobWF0Y2hlcyA9IHJlLmV4ZWModXJsKSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuX3VybFBhcmFtcy5wdXNoKG1hdGNoZXNbMV0pO1xuICAgICAgICAgICAgY29udHJvbGxlci5jb250ZW50UmVsb2FkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBnZXRVcmxQYXJhbShjb250cm9sbGVyLCBjb250cm9sbGVyLiRjb250YWluZXIpO1xuICAgIGlmIChjb250cm9sbGVyLl91cmxQYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgIHVybCA9IHJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIoY29udHJvbGxlciwgdXJsLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIGNvbnRyb2xsZXIucGFyc2VkQ29udGVudFVybCA9IHVybDtcblxuICAgIHJldHVybiB7dXJsOiB1cmwsIGFyZ3M6IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV19O1xufVxuXG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbVxuICogQHJldHVybiB7QWJzdHJhY3RTREN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb250cm9sbGVyKCRlbGVtKSB7XG4gICAgaWYgKCRlbGVtLmhhc0NsYXNzKENPTlRST0xMRVJfQ0xBU1MpKSB7XG4gICAgICAgIHJldHVybiAkZWxlbS5kYXRhKGAke0RBVEFfQ09OVFJPTExFUl9LRVl9YCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5jbG9zZXN0KGAuJHtDT05UUk9MTEVSX0NMQVNTfWApLmRhdGEoYCR7REFUQV9DT05UUk9MTEVSX0tFWX1gKTtcbn1cblxuLyoqXG4gKiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlciBsb2FkcyB0aGUgY29udGVudCAoSFRNTCkgb2YgYVxuICogQ29udHJvbGxlci4gSWYgeW91IGhhdmUgYW4gYWx0ZXJuYXRpdmUgY29udGVudCBVUkwgaXMgcmVnaXN0ZXJlZCwgZm9yIHRoaXNcbiAqIGNvbnRyb2xsZXIgdGhlIG9yaWdpbiBjb250ZW50IFVSTCBpcyBpZ25vcmVkLlxuICpcbiAqIFRoZSBjb250ZW50IGlzIHNhdmVkIGFzIGpRdWVyeSBvYmplY3QgdG8gdGhlIGNvbnRyb2xsZXIuJGNvbnRlbnQgcHJvcGVydHkgb2ZcbiAqIHRoZSBjb250cm9sbGVyLlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGpRdWVyeT59IC0gdGhlIHByb21pc2Ugd2FpdHMgdG8gdGhlIGZpbGVzIGFyZSBsb2FkZWQuIGl0IHJldHVybnMgdGhlIGpRdWVyeSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRmlsZXNGcm9tQ29udHJvbGxlcihjb250cm9sbGVyKSB7XG4gICAgbGV0IGdldEVsZW1lbnRzID0ge2FyZ3M6IHt9fTtcbiAgICBpZiAoY29udHJvbGxlci5jb250ZW50VXJsKSB7XG4gICAgICAgIGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgICBsb2FkSFRNTEZpbGUoY29udHJvbGxlci5jb250ZW50VXJsLCBnZXRFbGVtZW50cy5hcmdzLCBjb250cm9sbGVyLl90YWdOYW1lLCBjb250cm9sbGVyLmNvbnRlbnRSZWxvYWQpXG4gICAgXSkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICBsZXQgaHRtbEZpbGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBpZiAoaHRtbEZpbGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoaHRtbEZpbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJzxkaXY+PC9kaXY+JykuYXBwZW5kKGh0bWxGaWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbG9hZEhUTUxDb250cm9sbGVyIGxvYWRzIHRoZSBjb250ZW50IChIVE1MKSBvZiBhXG4gKiBDb250cm9sbGVyLiBJZiB5b3UgaGF2ZSBhbiBhbHRlcm5hdGl2ZSBjb250ZW50IFVSTCBpcyByZWdpc3RlcmVkLCBmb3IgdGhpc1xuICogY29udHJvbGxlciB0aGUgb3JpZ2luIGNvbnRlbnQgVVJMIGlzIGlnbm9yZWQuXG4gKlxuICpcbiAqIEBwYXJhbSB7QWJzdHJhY3RTREN9IGNvbnRyb2xsZXIgLSBhIGluc3RhbmNlIG9mIGEgSmF2YVNjcmlwdCBjb250cm9sbGVyIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxqUXVlcnk+fSAtIHRoZSBwcm9taXNlIHdhaXRzIHRvIHRoZSBmaWxlcyBhcmUgbG9hZGVkLiBpdCByZXR1cm5zIHRoZSBqUXVlcnkgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVsb2FkSFRNTENvbnRyb2xsZXIoY29udHJvbGxlcikge1xuICAgIGlmIChjb250cm9sbGVyLmNvbnRlbnRVcmwpIHtcbiAgICAgICAgbGV0IGdldEVsZW1lbnRzID0gcGFyc2VDb250ZW50VXJsKGNvbnRyb2xsZXIsIGNvbnRyb2xsZXIuY29udGVudFVybCk7XG4gICAgICAgIGNvbnRyb2xsZXIuY29udGVudFVybCA9IGdldEVsZW1lbnRzLnVybDtcbiAgICAgICAgcmV0dXJuIGxvYWRIVE1MRmlsZShjb250cm9sbGVyLmNvbnRlbnRVcmwsIGdldEVsZW1lbnRzLmFyZ3MsIGNvbnRyb2xsZXIuX3RhZ05hbWUsIGNvbnRyb2xsZXIuY29udGVudFJlbG9hZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICByZXNvbHZlKCQoKSk7XG4gICAgfSk7XG59XG5cbi8qKlxuICpcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkZWxlbWVudFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWVcbiAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gc3VwZXJUYWdOYW1lTGlzdFxuICogQHBhcmFtIHtBYnN0cmFjdFNEQ30gcGFyZW50Q29udHJvbGxlclxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHJ1blJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyKCRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0LCBwYXJlbnRDb250cm9sbGVyKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpO1xuICAgIGlmIChjb250cm9sbGVyKSB7XG4gICAgICAgIHJldHVybiByZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lcigkZWxlbWVudCwgY29udHJvbGxlcik7XG4gICAgfVxuXG4gICAgY29udHJvbGxlciA9IGNvbnRyb2xsZXJGYWN0b3J5KHBhcmVudENvbnRyb2xsZXIsICRlbGVtZW50LCB0YWdOYW1lLCBzdXBlclRhZ05hbWVMaXN0KTtcbiAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIGNvbnRyb2xsZXIpO1xuICAgICRlbGVtZW50LmFkZENsYXNzKENPTlRST0xMRVJfQ0xBU1MpO1xuICAgIHJldHVybiBydW5Db250cm9sRmxvd0Z1bmN0aW9ucyhjb250cm9sbGVyLCAkZWxlbWVudCk7XG59XG5cblxuLyoqXG4gKiBydW5Db250cm9sbGVyRmlsbENvbnRlbnQgZW1wdGllcyB0aGUgcmVnaXN0ZXJlZCB0YWcgYW5kIHJlcGxhY2VzIGl0IGJ5IHRoZSBjb250cm9sbGVyXG4gKiBjb250ZW50LiBJdCBzZXRzIHRoZSBDU1MgdGFncyBmb3IgdGhlIHJlbGF0aW9uIHdpdGggdGhlIENTUyBmaWxlcy5cbiAqXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBjb250cm9sbGVyIC0ganMgY29udHJvbGxlciBpbnN0YW5jZVxuICogQHBhcmFtIHtqcXVlcnl9ICRodG1sIC0galF1ZXJ5IGxvYWRlZCBjb250ZW50XG4gKiBAcmV0dXJuIHtQcm9taXNlfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29udHJvbGxlckZpbGxDb250ZW50KGNvbnRyb2xsZXIsICRodG1sKSB7XG4gICAgaWYgKCRodG1sICYmICRodG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIGNvbnRyb2xsZXIuJGNvbnRhaW5lci5hdHRyKGNvbnRyb2xsZXIuX3RhZ05hbWUsICcnKTtcbiAgICAgICAgZm9yIChsZXQgbWl4aW5LZXkgaW4gY29udHJvbGxlci5fbWl4aW5zKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLiRjb250YWluZXIuYXR0cihjb250cm9sbGVyLl9taXhpbnNbbWl4aW5LZXldLl90YWdOYW1lLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci4kY29udGFpbmVyLmFwcGVuZCgkaHRtbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VBbGxUYWdFbGVtZW50c0luQ29udGFpbmVyKGNvbnRyb2xsZXIuJGNvbnRhaW5lciwgY29udHJvbGxlcik7XG59XG5cblxuLyoqXG4gKiByZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lciBGaW5kcyBhbGwgcmVnaXN0ZXJlZCB0YWdzIGluIGEgY29udGFpbmVyLiBCdXQgaXQgaWdub3Jlc1xuICogcmVnaXN0ZXJlZCB0YWdzIGluIHJlZ2lzdGVyZWQgdGFncy4gRm9yIGVhY2ggcmVnaXN0ZXJlZCB0YWcgaXQgbG9hZHMgdGhlIGNvbnRlbnQuXG4gKiBBZnRlcndhcmRzIGl0IHN0YXJ0cyB0aGUgbGlmZSBjeWNsZSBvZiB0aGUgY29udHJvbGxlci4gSSB0aGUgbmV4dCBzdGVwIGl0IHN0YXJ0cyB0aGVcbiAqIHByb2NlZHVyZSBmb3IgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSBjb250cm9sbGVyIHRhZy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHRhZ0xpc3QgLSBsaXN0IG9mIGFsbCByZWdpc3RlcmVkIHRhZ3NcbiAqIEBwYXJhbSB7anF1ZXJ5fSAkY29udGFpbmVyIC0galF1ZXJ5IGNvbnRhaW5lciB0byBmaW5kIHRoZSB0YWdzXG4gKiBAcGFyYW0ge0Fic3RyYWN0U0RDfSBwYXJlbnRDb250cm9sbGVyIC0gY29udHJvbGxlciBpbiBzdXJyb3VuZGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIodGFnTGlzdCwgJGNvbnRhaW5lciwgcGFyZW50Q29udHJvbGxlcikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXG4gICAgICAgIGxldCB0YWdEZXNjcmlwdGlvbkVsZW1lbnRzID0gZmluZFNkY1RncygkY29udGFpbmVyLCB0YWdMaXN0LCBwYXJlbnRDb250cm9sbGVyKTtcbiAgICAgICAgbGV0IHRhZ0NvdW50ID0gdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgZWxlbWVudEluZGV4ID0gMDsgZWxlbWVudEluZGV4IDwgdGFnRGVzY3JpcHRpb25FbGVtZW50cy5sZW5ndGg7IGVsZW1lbnRJbmRleCsrKSB7XG4gICAgICAgICAgICBydW5SZXBsYWNlVGFnRWxlbWVudHNJbkNvbnRhaW5lcih0YWdEZXNjcmlwdGlvbkVsZW1lbnRzW2VsZW1lbnRJbmRleF0uZG9tLFxuICAgICAgICAgICAgICAgIHRhZ0Rlc2NyaXB0aW9uRWxlbWVudHNbZWxlbWVudEluZGV4XS50YWcsXG4gICAgICAgICAgICAgICAgdGFnRGVzY3JpcHRpb25FbGVtZW50c1tlbGVtZW50SW5kZXhdLnN1cGVyLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbnRyb2xsZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRhZ0NvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHRhZ0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGNvbnRhaW5lcikge1xuICAgIHJldHVybiBfcmVsb2FkTWV0aG9kSFRNTChjb250cm9sbGVyLCAkY29udGFpbmVyID8/IGNvbnRyb2xsZXIuJGNvbnRhaW5lcilcbn1cblxuZnVuY3Rpb24gX3JlbG9hZE1ldGhvZEhUTUwoY29udHJvbGxlciwgJGRvbSkge1xuICAgIGNvbnN0IHBsaXN0ID0gW107XG5cbiAgICAkZG9tLmZpbmQoYC5fYmluZF90b191cGRhdGVfaGFuZGxlci5zZGNfdXVpZF8ke2NvbnRyb2xsZXIuX3V1aWR9YCkuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0ICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgbGV0IHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCR0aGlzLmhhc0NsYXNzKGBfd2l0aF9oYW5kbGVyYCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICR0aGlzLmRhdGEoJ2hhbmRsZXInKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBjb250cm9sbGVyX2hhbmRsZXIgPSB0aGlzLnRhZ05hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9edGhpcy4vLCAnJyk7XG4gICAgICAgICAgICBpZiAoY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29udHJvbGxlcltjb250cm9sbGVyX2hhbmRsZXJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cblxuICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmJpbmQoY29udHJvbGxlcikoJHRoaXMuZGF0YSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBsaXN0LnB1c2goUHJvbWlzZS5yZXNvbHZlKHJlc3VsdCkudGhlbigoeCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCAkbmV3Q29udGVudCA9ICQoYDxkaXY+PC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgJG5ld0NvbnRlbnQuYXBwZW5kKHgpO1xuICAgICAgICAgICAgICAgICRuZXdDb250ZW50ID0gJHRoaXMuY2xvbmUoKS5lbXB0eSgpLmFwcGVuZCgkbmV3Q29udGVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIucmVjb25jaWxlKCRuZXdDb250ZW50LCAkdGhpcyk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHBsaXN0KTtcbn1cblxuXG5mdW5jdGlvbiBnZXROb2RlS2V5KG5vZGUpIHtcbiAgICBpZiAobm9kZVswXS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgICByZXR1cm4gYFRFWFRfXyR7bm9kZVswXS5ub2RlVmFsdWV9YDtcbiAgICB9XG4gICAgY29uc3QgcmVzID0gW25vZGVbMF0udGFnTmFtZV07XG4gICAgaWYgKG5vZGVbMF0ubm9kZU5hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgICAgW1snbmFtZScsICcnXSwgWyd0eXBlJywgJ3RleHQnXSwgWydpZCcsICcnXV0uZm9yRWFjaCgoW2tleSwgZGVmYXVsdFZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0ciA9IG5vZGUuYXR0cihrZXkpID8/IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgcmVzLnB1c2goYXR0cik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLmpvaW4oJ19fJyk7XG59XG5cbmZ1bmN0aW9uIHJlY29uY2lsZVRyZWUoJGVsZW1lbnQsIGlkID0gW10sIHBhcmVudCA9IG51bGwpIHtcbiAgICBpZC5wdXNoKGdldE5vZGVLZXkoJGVsZW1lbnQpKTtcbiAgICBjb25zdCBvYmogPSB7XG4gICAgICAgICRlbGVtZW50LFxuICAgICAgICBpZDogaWQuam9pbignOjonKSxcbiAgICAgICAgZGVwdGg6IGlkLmxlbmd0aCxcbiAgICAgICAgaWR4OiAwLFxuICAgICAgICBvcDogbnVsbCxcbiAgICAgICAgcGFyZW50XG4gICAgfTtcbiAgICByZXR1cm4gW29ial0uY29uY2F0KCRlbGVtZW50LmNvbnRlbnRzKCkudG9BcnJheSgpLm1hcCgoeCkgPT4gcmVjb25jaWxlVHJlZSgkKHgpLCBpZC5zbGljZSgpLCBvYmopKS5mbGF0KCkpO1xuXG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY29uY2lsZSgkdmlydHVhbE5vZGUsICRyZWFsTm9kZSkge1xuICAgIGNvbnN0ICRvbGQgPSByZWNvbmNpbGVUcmVlKCRyZWFsTm9kZSk7XG4gICAgY29uc3QgJG5ldyA9IHJlY29uY2lsZVRyZWUoJHZpcnR1YWxOb2RlKTtcbiAgICAkb2xkLm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgICAkbmV3Lm1hcCgoeCwgaSkgPT4geC5pZHggPSBpKTtcbiAgICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KC4uLiRuZXcuY29uY2F0KCRvbGQpLm1hcCh4ID0+IHguZGVwdGgpKTtcbiAgICBjb25zdCBvcF9zdGVwcyA9IGxjYkRpZmYoJG9sZCwgJG5ldywgZGVwdGgpO1xuICAgIGxldCBvcElkeCA9IDA7XG4gICAgbGV0IHRvUmVtb3ZlID0gW107XG5cbiAgICBvcF9zdGVwcy5mb3JFYWNoKG9wX3N0ZXAgPT4ge1xuICAgICAgICBjb25zdCB7b3AsICRlbGVtZW50LCBpZHh9ID0gb3Bfc3RlcDtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09ICdrZWVwX2NvdW50ZXJwYXJ0Jykge1xuXG4gICAgICAgICAgICBpZiAob3AuY291bnRlcnBhcnQuaWR4ICsgb3BJZHggIT09IGlkeCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1CZWZvcmUgPSBvcF9zdGVwLmdldEJlZm9yZSgpO1xuICAgICAgICAgICAgICAgIGlmICghZWxlbUJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICBvcF9zdGVwLmdldFJlYWxQYXJlbnQoKS4kZWxlbWVudC5wcmVwZW5kKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvcC5jb3VudGVycGFydC4kZWxlbWVudC5pbnNlcnRBZnRlcihlbGVtQmVmb3JlLiRlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN5bmNBdHRyaWJ1dGVzKG9wLmNvdW50ZXJwYXJ0LiRlbGVtZW50LCAkZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoJGVsZW1lbnQuaGFzQ2xhc3MoQ09OVFJPTExFUl9DTEFTUykpIHtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVkpLiRjb250YWluZXIgPSBvcC5jb3VudGVycGFydC4kZWxlbWVudDtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5kYXRhKERBVEFfQ09OVFJPTExFUl9LRVksIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0b1JlbW92ZS5wdXNoKCRlbGVtZW50KTtcblxuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAkZWxlbWVudC5zYWZlUmVtb3ZlKCk7XG4gICAgICAgICAgICBvcElkeC0tO1xuICAgICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdpbnNlcnRfaWdub3JlJykge1xuICAgICAgICAgICAgb3BJZHgrKztcbiAgICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnaW5zZXJ0Jykge1xuICAgICAgICAgICAgb3BJZHgrKztcbiAgICAgICAgICAgIGNvbnN0IHthZnRlciwgdGFyZ2V0fSA9IG9wX3N0ZXAub3A7XG4gICAgICAgICAgICBpZiAoYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAkZWxlbWVudC5pbnNlcnRBZnRlcihhZnRlci4kZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC4kZWxlbWVudC5wcmVwZW5kKCRlbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB0b1JlbW92ZS5mb3JFYWNoKCgkZWxlbWVudCkgPT4gJGVsZW1lbnQuc2FmZVJlbW92ZSgpKTtcbn1cblxuZnVuY3Rpb24gc3luY0F0dHJpYnV0ZXMoJHJlYWwsICR2aXJ0dWFsKSB7XG4gICAgY29uc3QgcmVhbEF0dHJzID0gJHJlYWxbMF0uYXR0cmlidXRlcyA/PyBbXTtcbiAgICBjb25zdCB2aXJ0dWFsQXR0cnMgPSAkdmlydHVhbFswXS5hdHRyaWJ1dGVzID8/IFtdO1xuICAgIC8vIFJlbW92ZSBtaXNzaW5nIGF0dHJzXG4gICAgWy4uLnJlYWxBdHRyc10uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgaWYgKCEkdmlydHVhbC5pcyhgWyR7YXR0ci5uYW1lfV1gKSkge1xuICAgICAgICAgICAgJHJlYWwucmVtb3ZlQXR0cihhdHRyLm5hbWUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBBZGQgb3IgdXBkYXRlXG4gICAgWy4uLnZpcnR1YWxBdHRyc10uZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgaWYgKCFhdHRyLm5hbWUuc3RhcnRzV2l0aChgZGF0YWApICYmICRyZWFsLmF0dHIoYXR0ci5uYW1lKSAhPT0gYXR0ci52YWx1ZSkge1xuICAgICAgICAgICAgJHJlYWwuYXR0cihhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZW50cmllcygkdmlydHVhbC5kYXRhKCkpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAkcmVhbC5kYXRhKGtleSwgdmFsdWUpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIExDQiAoTG9uZ2VzdCBDb21tb24gQnJhbmNoKSBmaW5kcyBtYXRjaGluZyBicmFuY2hlcyBhbmQgcmVzZXJ2ZXMgdGhlbSFcbiAqXG4gKiBAcGFyYW0gb2xkTm9kZXNcbiAqIEBwYXJhbSBuZXdOb2Rlc1xuICogQHBhcmFtIGRlcHRoXG4gKiBAcmV0dXJucyB7KnwqW119XG4gKi9cbmZ1bmN0aW9uIGxjYkRpZmYob2xkTm9kZXMsIG5ld05vZGVzLCBkZXB0aCkge1xuICAgIG5ld05vZGVzLmZpbHRlcih4ID0+IHguZGVwdGggPT09IGRlcHRoICYmICF4Lm9wKS5mb3JFYWNoKChuZXdOb2RlKSA9PiB7XG4gICAgICAgIGNvbnN0IG9sZE5vZGUgPSBvbGROb2Rlcy5maW5kKCh0ZW1wT2xkTm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0ZW1wT2xkTm9kZS5vcCAmJiB0ZW1wT2xkTm9kZS5pZCA9PT0gbmV3Tm9kZS5pZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG9sZE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtlZXBUcmVlQnJhbmNoID0gKG9sZE5vZGUsIG5ld05vZGUpID0+IHtcbiAgICAgICAgICAgICAgICBvbGROb2RlLm9wID0ge3R5cGU6ICdrZWVwJywgaWR4OiBuZXdOb2RlLmlkeH07XG4gICAgICAgICAgICAgICAgbmV3Tm9kZS5vcCA9IHt0eXBlOiAna2VlcF9jb3VudGVycGFydCcsIGNvdW50ZXJwYXJ0OiBvbGROb2RlfTtcbiAgICAgICAgICAgICAgICBvbGROb2RlID0gb2xkTm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAgaWYgKCFvbGROb2RlIHx8IG9sZE5vZGUub3ApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdOb2RlID0gbmV3Tm9kZS5wYXJlbnQ7XG4gICAgICAgICAgICAgICAga2VlcFRyZWVCcmFuY2gob2xkTm9kZSwgbmV3Tm9kZSk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtlZXBUcmVlQnJhbmNoKG9sZE5vZGUsIG5ld05vZGUpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGRlcHRoID4gMSkge1xuICAgICAgICByZXR1cm4gbGNiRGlmZihvbGROb2RlcywgbmV3Tm9kZXMsIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgb2xkTm9kZXMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICBpZiAoIXgub3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IChvbGROb2Rlc1tpIC0gMV0/Lm9wLmlkeCA/PyAtMSkgKyAxO1xuICAgICAgICAgICAgeC5vcCA9IHt0eXBlOiAnZGVsZXRlJywgaWR4fVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBnZXRSZWFsUGFyZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50LnBhcmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQucGFyZW50Lm9wLnR5cGUgPT09ICdrZWVwX2NvdW50ZXJwYXJ0JyA/IGVsZW1lbnQucGFyZW50Lm9wLmNvdW50ZXJwYXJ0IDogZWxlbWVudC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmVmb3JlKGVsZW1lbnQsIGlkeCkge1xuICAgICAgICBjb25zdCBzdGFydERlcHRoID0gZWxlbWVudC5kZXB0aDtcbiAgICAgICAgd2hpbGUgKGlkeCA+PSAwICYmIGVsZW1lbnQuZGVwdGggPj0gc3RhcnREZXB0aCkge1xuICAgICAgICAgICAgaWR4IC09IDE7XG4gICAgICAgICAgICBlbGVtZW50ID0gbmV3Tm9kZXNbaWR4XTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRlcHRoID09PSBzdGFydERlcHRoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQub3AudHlwZSA9PT0gJ2tlZXBfY291bnRlcnBhcnQnID8gZWxlbWVudC5vcC5jb3VudGVycGFydCA6IGVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgfVxuXG4gICAgbmV3Tm9kZXMuZm9yRWFjaCgoeCwgaSkgPT4ge1xuICAgICAgICB4LmdldEJlZm9yZSA9ICgpID0+IGdldEJlZm9yZSh4LCBpKTtcbiAgICAgICAgeC5nZXRSZWFsUGFyZW50ID0gKCkgPT4gZ2V0UmVhbFBhcmVudCh4KTtcblxuICAgICAgICBpZiAoIXgub3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldCA9IHguZ2V0UmVhbFBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgdHlwZSA9IHRhcmdldD8ub3AudHlwZSA9PT0gJ2luc2VydCcgPyAnaW5zZXJ0X2lnbm9yZScgOiAnaW5zZXJ0JztcbiAgICAgICAgICAgIHgub3AgPSB7dHlwZSwgdGFyZ2V0LCBhZnRlcjogeC5nZXRCZWZvcmUoKX1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGFnZ2VkID0gW1xuICAgICAgICAuLi5vbGROb2RlcyxcbiAgICAgICAgLi4ubmV3Tm9kZXMsXG4gICAgXTtcblxuXG4gICAgcmV0dXJuIHRhZ2dlZC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIGNvbnN0IGFWYWwgPSBhLm9wPy5pZHggPz8gYS5pZHg7XG4gICAgICAgIGNvbnN0IGJWYWwgPSBiLm9wPy5pZHggPz8gYi5pZHg7XG5cbiAgICAgICAgcmV0dXJuIGFWYWwgLSBiVmFsO1xuICAgIH0pO1xufSJdLCJuYW1lcyI6WyJjb250cm9sbGVyRmFjdG9yeSIsInJ1bkNvbnRyb2xGbG93RnVuY3Rpb25zIiwiZ2V0VXJsUGFyYW0iLCJhcHAiLCJ0cmlnZ2VyIiwiaHRtbEZpbGVzIiwiREFUQV9DT05UUk9MTEVSX0tFWSIsIkNPTlRST0xMRVJfQ0xBU1MiLCJjbGVhbkNhY2hlIiwiZmluZFNkY1RncyIsIiRjb250YWluZXIiLCJ0YWdOYW1lTGlzdCIsInBhcmVudENvbnRyb2xsZXIiLCIkY2hpbGRyZW4iLCJjaGlsZHJlbiIsImVtcHR5TGlzdCIsImVhY2giLCJfIiwiZWxlbWVudCIsIiRlbGVtZW50IiwiJCIsInRhZ05hbWUiLCJwcm9wIiwidG9Mb3dlckNhc2UiLCJzcGxpdCIsImluQXJyYXkiLCJwdXNoIiwidGFnIiwic3VwZXIiLCJzcGxpY2UiLCJkb20iLCJzdGFydHNXaXRoIiwiYWRkQ2xhc3MiLCJfdXVpZCIsImNvbmNhdCIsInJlcGxhY2VQbGFjZWhvbGRlckNvbnRyb2xsZXIiLCJjb250cm9sbGVyIiwidXJsIiwidXJsVmFsdWVzIiwia2V5X2lkeCIsIl91cmxQYXJhbXMiLCJoYXNPd25Qcm9wZXJ0eSIsImtleSIsInJlIiwiUmVnRXhwIiwicmVwbGFjZSIsInNoaWZ0IiwibG9hZEhUTUxGaWxlIiwicGF0aCIsImFyZ3MiLCJoYXJkUmVsb2FkIiwiUHJvbWlzZSIsInJlc29sdmUiLCJWRVJTSU9OIiwiX21ldGhvZCIsImdldCIsInRoZW4iLCJkYXRhIiwiY2F0Y2giLCJlcnIiLCJzdGF0dXMiLCJyZXNwb25zZUpTT04iLCJjb250cm9sbGVyX25hbWUiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlQWxsVGFnRWxlbWVudHNJbkNvbnRhaW5lciIsInJlcGxhY2VUYWdFbGVtZW50c0luQ29udGFpbmVyIiwidGFnTmFtZXMiLCJwYXJzZUNvbnRlbnRVcmwiLCJjb250ZW50VXJsIiwibGVuZ3RoIiwibWF0Y2hlcyIsImV4ZWMiLCJjb250ZW50UmVsb2FkIiwicGFyYW1zIiwicGFyc2VkQ29udGVudFVybCIsImdldENvbnRyb2xsZXIiLCIkZWxlbSIsImhhc0NsYXNzIiwiY2xvc2VzdCIsImxvYWRGaWxlc0Zyb21Db250cm9sbGVyIiwiZ2V0RWxlbWVudHMiLCJhbGwiLCJfdGFnTmFtZSIsInJlc3VsdHMiLCJodG1sRmlsZSIsImFwcGVuZCIsInJlbG9hZEhUTUxDb250cm9sbGVyIiwicnVuUmVwbGFjZVRhZ0VsZW1lbnRzSW5Db250YWluZXIiLCJzdXBlclRhZ05hbWVMaXN0IiwicnVuQ29udHJvbGxlckZpbGxDb250ZW50IiwiJGh0bWwiLCJlbXB0eSIsImF0dHIiLCJtaXhpbktleSIsIl9taXhpbnMiLCJ0YWdMaXN0IiwidGFnRGVzY3JpcHRpb25FbGVtZW50cyIsInRhZ0NvdW50IiwiZWxlbWVudEluZGV4IiwicmVsb2FkTWV0aG9kSFRNTCIsIl9yZWxvYWRNZXRob2RIVE1MIiwiJGRvbSIsInBsaXN0IiwiZmluZCIsIiR0aGlzIiwicmVzdWx0IiwidW5kZWZpbmVkIiwiY29udHJvbGxlcl9oYW5kbGVyIiwiYmluZCIsIngiLCIkbmV3Q29udGVudCIsImNsb25lIiwicmVjb25jaWxlIiwiZ2V0Tm9kZUtleSIsIm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsInJlcyIsIm5vZGVOYW1lIiwiZm9yRWFjaCIsImRlZmF1bHRWYWx1ZSIsImpvaW4iLCJyZWNvbmNpbGVUcmVlIiwiaWQiLCJwYXJlbnQiLCJvYmoiLCJkZXB0aCIsImlkeCIsIm9wIiwiY29udGVudHMiLCJ0b0FycmF5IiwibWFwIiwic2xpY2UiLCJmbGF0IiwiJHZpcnR1YWxOb2RlIiwiJHJlYWxOb2RlIiwiJG9sZCIsIiRuZXciLCJpIiwiTWF0aCIsIm1heCIsIm9wX3N0ZXBzIiwibGNiRGlmZiIsIm9wSWR4IiwidG9SZW1vdmUiLCJvcF9zdGVwIiwidHlwZSIsImNvdW50ZXJwYXJ0IiwiZWxlbUJlZm9yZSIsImdldEJlZm9yZSIsImdldFJlYWxQYXJlbnQiLCJwcmVwZW5kIiwiaW5zZXJ0QWZ0ZXIiLCJzeW5jQXR0cmlidXRlcyIsInNhZmVSZW1vdmUiLCJhZnRlciIsInRhcmdldCIsIiRyZWFsIiwiJHZpcnR1YWwiLCJyZWFsQXR0cnMiLCJhdHRyaWJ1dGVzIiwidmlydHVhbEF0dHJzIiwiaXMiLCJuYW1lIiwicmVtb3ZlQXR0ciIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsIm9sZE5vZGVzIiwibmV3Tm9kZXMiLCJmaWx0ZXIiLCJuZXdOb2RlIiwib2xkTm9kZSIsInRlbXBPbGROb2RlIiwia2VlcFRyZWVCcmFuY2giLCJzdGFydERlcHRoIiwidGFnZ2VkIiwic29ydCIsImEiLCJiIiwiYVZhbCIsImJWYWwiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/simpleDomControl/sdc_view.js\n");
|
128
128
|
|
129
129
|
/***/ })
|
130
130
|
|