From 71063c4bca155da3aff7e7f52d9178537a9030f6 Mon Sep 17 00:00:00 2001 From: Davide Alberani Date: Sun, 2 Apr 2017 16:28:59 +0200 Subject: [PATCH] trying to update the form editor --- angular_app/index.html | 9 +- .../js/angular-formly-templates-bootstrap.js | 611 ++ .../angular-formly-templates-bootstrap.min.js | 4 +- ...ular-formly-templates-bootstrap.min.js.map | 2 +- static/js/angular-strap.min.js | 11 + static/js/angular-strap.min.js.map | 1 + static/js/angular-strap.tpl.min.js | 8 + static/js/api-check.js | 1332 ++++ static/js/api-check.min.js | 5 +- static/js/api-check.min.js.map | 2 +- static/js/eda.dragdropway.css | 913 +++ static/js/eda.dragdropway.css.map | 1 + static/js/eda.dragdropway.js | 6703 ++--------------- static/js/eda.dragdropway.min.js | 14 +- static/js/eda.dragdropway.min.js.map | 1 + static/js/eda.easyFormViewer.js | 1940 +---- static/js/eda.easyFormViewer.min.js | 9 +- static/js/eda.easyFormViewer.min.js.map | 1 + static/js/eda.formviewer.css | 2 + static/js/eda.formviewer.css.map | 1 + static/js/eda.stepway.css | 2 + static/js/eda.stepway.css.map | 1 + static/js/eda.stepway.js | 4233 ++--------- static/js/eda.stepway.min.js | 21 +- static/js/eda.stepway.min.js.map | 1 + static/js/formly.js | 2833 +++++++ static/js/formly.min.js | 6 +- static/js/formly.min.js.map | 2 +- 28 files changed, 7403 insertions(+), 11266 deletions(-) create mode 100644 static/js/angular-formly-templates-bootstrap.js create mode 100644 static/js/angular-strap.min.js create mode 100644 static/js/angular-strap.min.js.map create mode 100644 static/js/angular-strap.tpl.min.js create mode 100644 static/js/api-check.js create mode 100644 static/js/eda.dragdropway.css create mode 100644 static/js/eda.dragdropway.css.map create mode 100644 static/js/eda.dragdropway.min.js.map create mode 100644 static/js/eda.easyFormViewer.min.js.map create mode 100644 static/js/eda.formviewer.css create mode 100644 static/js/eda.formviewer.css.map create mode 100644 static/js/eda.stepway.css create mode 100644 static/js/eda.stepway.css.map create mode 100644 static/js/eda.stepway.min.js.map create mode 100644 static/js/formly.js diff --git a/angular_app/index.html b/angular_app/index.html index a3fb39a..44f598e 100644 --- a/angular_app/index.html +++ b/angular_app/index.html @@ -6,6 +6,7 @@ + @@ -16,8 +17,13 @@ + + + + + @@ -26,9 +32,6 @@ - - - diff --git a/static/js/angular-formly-templates-bootstrap.js b/static/js/angular-formly-templates-bootstrap.js new file mode 100644 index 0000000..a063e03 --- /dev/null +++ b/static/js/angular-formly-templates-bootstrap.js @@ -0,0 +1,611 @@ +//! angular-formly-templates-bootstrap version 0.0.0-semantically-released.0 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò) + +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(require("angular"), require("angular-formly"), require("api-check")); + else if(typeof define === 'function' && define.amd) + define(["angular", "angular-formly", "api-check"], factory); + else if(typeof exports === 'object') + exports["ngFormlyTemplatesBootstrap"] = factory(require("angular"), require("angular-formly"), require("api-check")); + else + root["ngFormlyTemplatesBootstrap"] = factory(root["angular"], root["ngFormly"], root["apiCheck"]); +})(this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_4__, __WEBPACK_EXTERNAL_MODULE_5__) { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + module.exports = __webpack_require__(1); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + var ngModuleName = 'formlyBootstrap'; + var angular = __webpack_require__(2); + var ngModule = angular.module(ngModuleName, [__webpack_require__(4)]); + ngModule.constant('formlyBootstrapApiCheck', __webpack_require__(5)({ + output: { + prefix: 'angular-formly-bootstrap' + } + })); + ngModule.constant('formlyBootstrapVersion', ("0.0.0-semantically-released.0")); + + __webpack_require__(6)(ngModule); + __webpack_require__(9)(ngModule); + __webpack_require__(19)(ngModule); + + exports['default'] = ngModuleName; + module.exports = exports['default']; + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + // some versions of angular don't export the angular module properly, + // so we get it from window in this case. + 'use strict'; + + var angular = __webpack_require__(3); + if (!angular.version) { + angular = window.angular; + } + module.exports = angular; + +/***/ }, +/* 3 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_3__; + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_4__; + +/***/ }, +/* 5 */ +/***/ function(module, exports) { + + module.exports = __WEBPACK_EXTERNAL_MODULE_5__; + +/***/ }, +/* 6 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addWrappers); + + function addWrappers(formlyConfigProvider) { + formlyConfigProvider.setWrapper([{ + name: 'bootstrapLabel', + template: __webpack_require__(7), + apiCheck: function apiCheck(check) { + return { + templateOptions: { + label: check.string.optional, + required: check.bool.optional, + labelSrOnly: check.bool.optional + } + }; + } + }, { name: 'bootstrapHasError', template: __webpack_require__(8) }]); + } + addWrappers.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 7 */ +/***/ function(module, exports) { + + module.exports = "
\n \n \n
\n" + +/***/ }, +/* 8 */ +/***/ function(module, exports) { + + module.exports = "
\n \n
\n" + +/***/ }, +/* 9 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + __webpack_require__(10)(ngModule); + __webpack_require__(12)(ngModule); + __webpack_require__(14)(ngModule); + __webpack_require__(15)(ngModule); + __webpack_require__(17)(ngModule); + __webpack_require__(18)(ngModule); + }; + + module.exports = exports['default']; + +/***/ }, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addCheckboxType); + + function addCheckboxType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'checkbox', + template: __webpack_require__(11), + wrapper: ['bootstrapHasError'], + apiCheck: function apiCheck(check) { + return { + templateOptions: { + label: check.string + } + }; + } + }); + } + addCheckboxType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + module.exports = "
\n\t\n
\n" + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addCheckboxType); + + function addCheckboxType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'multiCheckbox', + template: __webpack_require__(13), + wrapper: ['bootstrapLabel', 'bootstrapHasError'], + apiCheck: function apiCheck(check) { + return { + templateOptions: { + options: check.arrayOf(check.object), + labelProp: check.string.optional, + valueProp: check.string.optional + } + }; + }, + defaultOptions: { + noFormControl: false, + ngModelAttrs: { + required: { + attribute: '', + bound: '' + } + } + }, + controller: /* @ngInject */["$scope", function controller($scope) { + var to = $scope.to; + var opts = $scope.options; + $scope.multiCheckbox = { + checked: [], + change: setModel + }; + + // initialize the checkboxes check property + $scope.$watch('model', function modelWatcher(newModelValue) { + var modelValue, valueProp; + + if (Object.keys(newModelValue).length) { + modelValue = newModelValue[opts.key]; + + $scope.$watch('to.options', function optionsWatcher(newOptionsValues) { + if (newOptionsValues && Array.isArray(newOptionsValues) && Array.isArray(modelValue)) { + valueProp = to.valueProp || 'value'; + for (var index = 0; index < newOptionsValues.length; index++) { + $scope.multiCheckbox.checked[index] = modelValue.indexOf(newOptionsValues[index][valueProp]) !== -1; + } + } + }); + } + }, true); + + function checkValidity(expressionValue) { + var valid; + + if ($scope.to.required) { + valid = angular.isArray($scope.model[opts.key]) && $scope.model[opts.key].length > 0 && expressionValue; + + $scope.fc.$setValidity('required', valid); + } + } + + function setModel() { + $scope.model[opts.key] = []; + angular.forEach($scope.multiCheckbox.checked, function (checkbox, index) { + if (checkbox) { + $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']); + } + }); + + // Must make sure we mark as touched because only the last checkbox due to a bug in angular. + $scope.fc.$setTouched(); + checkValidity(true); + + if ($scope.to.onChange) { + $scope.to.onChange(); + } + } + + if (opts.expressionProperties && opts.expressionProperties['templateOptions.required']) { + $scope.$watch(function () { + return $scope.to.required; + }, function (newValue) { + checkValidity(newValue); + }); + } + + if ($scope.to.required) { + var unwatchFormControl = $scope.$watch('fc', function (newValue) { + if (!newValue) { + return; + } + checkValidity(true); + unwatchFormControl(); + }); + } + }] + }); + } + addCheckboxType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 13 */ +/***/ function(module, exports) { + + module.exports = "
\n
\n \n
\n
\n" + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addInputType); + + function addInputType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'input', + template: '', + wrapper: ['bootstrapLabel', 'bootstrapHasError'] + }); + } + addInputType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addRadioType); + + function addRadioType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'radio', + template: __webpack_require__(16), + wrapper: ['bootstrapLabel', 'bootstrapHasError'], + defaultOptions: { + noFormControl: false + }, + apiCheck: function apiCheck(check) { + return { + templateOptions: { + options: check.arrayOf(check.object), + labelProp: check.string.optional, + valueProp: check.string.optional, + inline: check.bool.optional + } + }; + } + }); + } + addRadioType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 16 */ +/***/ function(module, exports) { + + module.exports = "
\n
\n \n
\n
\n" + +/***/ }, +/* 17 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + exports['default'] = function (ngModule) { + ngModule.config(addSelectType); + + var template = ''; + + function addSelectType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'select', + template: template, + wrapper: ['bootstrapLabel', 'bootstrapHasError'], + defaultOptions: function defaultOptions(options) { + /* jshint maxlen:195 */ + var ngOptions = options.templateOptions.ngOptions || 'option[to.valueProp || \'value\'] as option[to.labelProp || \'name\'] group by option[to.groupProp || \'group\'] for option in to.options'; + return { + ngModelAttrs: _defineProperty({}, ngOptions, { + value: options.templateOptions.optionsAttr || 'ng-options' + }) + }; + }, + apiCheck: function apiCheck(check) { + return { + templateOptions: { + options: check.arrayOf(check.object), + optionsAttr: check.string.optional, + labelProp: check.string.optional, + valueProp: check.string.optional, + groupProp: check.string.optional + } + }; + } + }); + } + addSelectType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 18 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.config(addTextareaType); + + function addTextareaType(formlyConfigProvider) { + formlyConfigProvider.setType({ + name: 'textarea', + template: '', + wrapper: ['bootstrapLabel', 'bootstrapHasError'], + defaultOptions: { + ngModelAttrs: { + rows: { attribute: 'rows' }, + cols: { attribute: 'cols' } + } + }, + apiCheck: function apiCheck(check) { + return { + templateOptions: { + rows: check.number.optional, + cols: check.number.optional + } + }; + } + }); + } + addTextareaType.$inject = ["formlyConfigProvider"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 19 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _addons = __webpack_require__(20); + + var _addons2 = _interopRequireDefault(_addons); + + var _description = __webpack_require__(22); + + var _description2 = _interopRequireDefault(_description); + + exports['default'] = function (ngModule) { + (0, _addons2['default'])(ngModule); + (0, _description2['default'])(ngModule); + }; + + module.exports = exports['default']; + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.run(addAddonsManipulator); + + function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) { + var addonTemplate = __webpack_require__(21); + var addonChecker = formlyBootstrapApiCheck.shape({ + 'class': formlyBootstrapApiCheck.string.optional, + text: formlyBootstrapApiCheck.string.optional, + onClick: formlyBootstrapApiCheck.func.optional + }).strict.optional; + var api = formlyBootstrapApiCheck.shape({ + templateOptions: formlyBootstrapApiCheck.shape({ + addonLeft: addonChecker, + addonRight: addonChecker + }) + }); + formlyConfig.templateManipulators.preWrapper.push(function (template, options) { + if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) { + return template; + } + formlyBootstrapApiCheck.warn([api], [options]); + return addonTemplate.replace('', template); + }); + } + addAddonsManipulator.$inject = ["formlyConfig", "formlyBootstrapApiCheck"]; + }; + + module.exports = exports['default']; + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + module.exports = "
\n
\n \n {{to.addonLeft.text}}\n
\n \n
\n \n {{to.addonRight.text}}\n
\n
\n" + +/***/ }, +/* 22 */ +/***/ function(module, exports) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + exports['default'] = function (ngModule) { + ngModule.run(addDescriptionManipulator); + + function addDescriptionManipulator(formlyConfig) { + formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) { + if (angular.isDefined(options.templateOptions.description)) { + var el = document.createElement('div'); + el.appendChild(angular.element(template)[0]); + el.appendChild(angular.element('

' + '{{to.description}}' + '

')[0]); + var modelEls = angular.element(el.querySelectorAll('[ng-model]')); + if (modelEls) { + modelEls.attr('aria-describedby', scope.id + '_description'); + } + return el.innerHTML; + } else { + return template; + } + }); + } + addDescriptionManipulator.$inject = ["formlyConfig"]; + }; + + module.exports = exports['default']; + +/***/ } +/******/ ]) +}); +; \ No newline at end of file diff --git a/static/js/angular-formly-templates-bootstrap.min.js b/static/js/angular-formly-templates-bootstrap.min.js index 776f3a7..ee3dff4 100644 --- a/static/js/angular-formly-templates-bootstrap.min.js +++ b/static/js/angular-formly-templates-bootstrap.min.js @@ -1,3 +1,3 @@ -//! angular-formly-templates-bootstrap version 6.2.0 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò) -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("angular"),require("api-check"),require("angular-formly")):"function"==typeof define&&define.amd?define(["angular","api-check","angular-formly"],e):"object"==typeof exports?exports.ngFormlyTemplatesBootstrap=e(require("angular"),require("api-check"),require("angular-formly")):t.ngFormlyTemplatesBootstrap=e(t.angular,t.apiCheck,t.ngFormly)}(this,function(t,e,o){return function(t){function e(n){if(o[n])return o[n].exports;var r=o[n]={exports:{},id:n,loaded:!1};return t[n].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var o={};return e.m=t,e.c=o,e.p="",e(0)}([function(t,e,o){"use strict";t.exports=o(2)},function(t,e,o){"use strict";var n=o(20);n.version||(n=window.angular),t.exports=n},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n="formlyBootstrap",r=o(1),i=r.module(n,[o(22)]);i.constant("formlyBootstrapApiCheck",o(21)({output:{prefix:"angular-formly-bootstrap"}})),i.constant("formlyBootstrapVersion","6.2.0"),o(13)(i),o(7)(i),o(5)(i),e["default"]=n,t.exports=e["default"]},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t,e){var n=o(14),r=e.shape({"class":e.string.optional,text:e.string.optional,onClick:e.func.optional}).strict.optional,i=e.shape({templateOptions:e.shape({addonLeft:r,addonRight:r})});t.templateManipulators.preWrapper.push(function(t,o){return o.templateOptions.addonLeft||o.templateOptions.addonRight?(e.warn([i],[o]),n.replace("",t)):t})}t.run(e),e.$inject=["formlyConfig","formlyBootstrapApiCheck"]},t.exports=e["default"]},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t){t.templateManipulators.preWrapper.push(function(t,e,o){if(angular.isDefined(e.templateOptions.description)){var n=document.createElement("div");n.appendChild(angular.element(t)[0]),n.appendChild(angular.element('

{{to.description}}

')[0]);var r=angular.element(n.querySelectorAll("[ng-model]"));return r&&r.attr("aria-describedby",o.id+"_description"),n.innerHTML}return t})}t.run(e),e.$inject=["formlyConfig"]},t.exports=e["default"]},function(t,e,o){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(e,"__esModule",{value:!0});var r=o(3),i=n(r),a=o(4),l=n(a);e["default"]=function(t){i["default"](t),l["default"](t)},t.exports=e["default"]},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t){t.setType({name:"checkbox",template:o(15),wrapper:["bootstrapHasError"],apiCheck:function(t){return{templateOptions:{label:t.string}}}})}t.config(e),e.$inject=["formlyConfigProvider"]},t.exports=e["default"]},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){o(6)(t),o(9)(t),o(8)(t),o(10)(t),o(11)(t),o(12)(t)},t.exports=e["default"]},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t){t.setType({name:"input",template:'',wrapper:["bootstrapLabel","bootstrapHasError"]})}t.config(e),e.$inject=["formlyConfigProvider"]},t.exports=e["default"]},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t){t.setType({name:"multiCheckbox",template:o(16),wrapper:["bootstrapLabel","bootstrapHasError"],apiCheck:function(t){return{templateOptions:{options:t.arrayOf(t.object),labelProp:t.string.optional,valueProp:t.string.optional}}},defaultOptions:{noFormControl:!1,ngModelAttrs:{required:{attribute:"",bound:""}}},controller:["$scope",function(t){function e(e){var o;t.to.required&&(o=angular.isArray(t.model[r.key])&&t.model[r.key].length>0&&e,t.fc.$setValidity("required",o))}function o(){t.model[r.key]=[],angular.forEach(t.multiCheckbox.checked,function(e,o){e&&t.model[r.key].push(n.options[o][n.valueProp||"value"])}),t.fc.$setTouched(),e(!0)}var n=t.to,r=t.options;if(t.multiCheckbox={checked:[],change:o},t.$watch("model",function(e){var o,i;Object.keys(e).length&&(o=e[r.key],t.$watch("to.options",function(e){if(e&&Array.isArray(e)&&Array.isArray(o)){i=n.valueProp||"value";for(var r=0;r',wrapper:["bootstrapLabel","bootstrapHasError"],defaultOptions:{ngModelAttrs:{rows:{attribute:"rows"},cols:{attribute:"cols"}}},apiCheck:function(t){return{templateOptions:{rows:t.number.optional,cols:t.number.optional}}}})}t.config(e),e.$inject=["formlyConfigProvider"]},t.exports=e["default"]},function(t,e,o){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e["default"]=function(t){function e(t){t.setWrapper([{name:"bootstrapLabel",template:o(19),apiCheck:function(t){return{templateOptions:{label:t.string.optional,required:t.bool.optional,labelSrOnly:t.bool.optional}}}},{name:"bootstrapHasError",template:o(18)}])}t.config(e),e.$inject=["formlyConfigProvider"]},t.exports=e["default"]},function(t,e){t.exports='
\n
\n \n {{to.addonLeft.text}}\n
\n \n
\n \n {{to.addonRight.text}}\n
\n
\n'},function(t,e){t.exports='
\n \n
\n'},function(t,e){t.exports='
\n
\n \n
\n
\n'},function(t,e){t.exports='
\n
\n \n
\n
\n'},function(t,e){t.exports='
\n \n
\n'},function(t,e){t.exports="
\n \n \n
\n"},function(e,o){e.exports=t},function(t,o){t.exports=e},function(t,e){t.exports=o}])}); +//! angular-formly-templates-bootstrap version 0.0.0-semantically-released.0 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò) +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("angular"),require("api-check"),require("angular-formly")):"function"==typeof define&&define.amd?define(["angular","api-check","angular-formly"],t):"object"==typeof exports?exports.ngFormlyTemplatesBootstrap=t(require("angular"),require("api-check"),require("angular-formly")):e.ngFormlyTemplatesBootstrap=t(e.angular,e.apiCheck,e.ngFormly)}(this,function(e,t,o){return function(e){function t(n){if(o[n])return o[n].exports;var r=o[n]={exports:{},id:n,loaded:!1};return e[n].call(r.exports,r,r.exports,t),r.loaded=!0,r.exports}var o={};return t.m=e,t.c=o,t.p="",t(0)}([function(e,t,o){"use strict";e.exports=o(2)},function(e,t,o){"use strict";var n=o(20);n.version||(n=window.angular),e.exports=n},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="formlyBootstrap",r=o(1),i=r.module(n,[o(22)]);i.constant("formlyBootstrapApiCheck",o(21)({output:{prefix:"angular-formly-bootstrap"}})),i.constant("formlyBootstrapVersion","0.0.0-semantically-released.0"),o(13)(i),o(7)(i),o(5)(i),t["default"]=n,e.exports=t["default"]},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e,t){var n=o(14),r=t.shape({"class":t.string.optional,text:t.string.optional,onClick:t.func.optional}).strict.optional,i=t.shape({templateOptions:t.shape({addonLeft:r,addonRight:r})});e.templateManipulators.preWrapper.push(function(e,o){return o.templateOptions.addonLeft||o.templateOptions.addonRight?(t.warn([i],[o]),n.replace("",e)):e})}e.run(t),t.$inject=["formlyConfig","formlyBootstrapApiCheck"]},e.exports=t["default"]},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e){e.templateManipulators.preWrapper.push(function(e,t,o){if(angular.isDefined(t.templateOptions.description)){var n=document.createElement("div");n.appendChild(angular.element(e)[0]),n.appendChild(angular.element('

{{to.description}}

')[0]);var r=angular.element(n.querySelectorAll("[ng-model]"));return r&&r.attr("aria-describedby",o.id+"_description"),n.innerHTML}return e})}e.run(t),t.$inject=["formlyConfig"]},e.exports=t["default"]},function(e,t,o){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var r=o(3),i=n(r),a=o(4),l=n(a);t["default"]=function(e){i["default"](e),l["default"](e)},e.exports=t["default"]},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e){e.setType({name:"checkbox",template:o(15),wrapper:["bootstrapHasError"],apiCheck:function(e){return{templateOptions:{label:e.string}}}})}e.config(t),t.$inject=["formlyConfigProvider"]},e.exports=t["default"]},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){o(6)(e),o(9)(e),o(8)(e),o(10)(e),o(11)(e),o(12)(e)},e.exports=t["default"]},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e){e.setType({name:"input",template:'',wrapper:["bootstrapLabel","bootstrapHasError"]})}e.config(t),t.$inject=["formlyConfigProvider"]},e.exports=t["default"]},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e){e.setType({name:"multiCheckbox",template:o(16),wrapper:["bootstrapLabel","bootstrapHasError"],apiCheck:function(e){return{templateOptions:{options:e.arrayOf(e.object),labelProp:e.string.optional,valueProp:e.string.optional}}},defaultOptions:{noFormControl:!1,ngModelAttrs:{required:{attribute:"",bound:""}}},controller:["$scope",function(e){function t(t){var o;e.to.required&&(o=angular.isArray(e.model[r.key])&&e.model[r.key].length>0&&t,e.fc.$setValidity("required",o))}function o(){e.model[r.key]=[],angular.forEach(e.multiCheckbox.checked,function(t,o){t&&e.model[r.key].push(n.options[o][n.valueProp||"value"])}),e.fc.$setTouched(),t(!0),e.to.onChange&&e.to.onChange()}var n=e.to,r=e.options;if(e.multiCheckbox={checked:[],change:o},e.$watch("model",function(t){var o,i;Object.keys(t).length&&(o=t[r.key],e.$watch("to.options",function(t){if(t&&Array.isArray(t)&&Array.isArray(o)){i=n.valueProp||"value";for(var r=0;r',wrapper:["bootstrapLabel","bootstrapHasError"],defaultOptions:{ngModelAttrs:{rows:{attribute:"rows"},cols:{attribute:"cols"}}},apiCheck:function(e){return{templateOptions:{rows:e.number.optional,cols:e.number.optional}}}})}e.config(t),t.$inject=["formlyConfigProvider"]},e.exports=t["default"]},function(e,t,o){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t["default"]=function(e){function t(e){e.setWrapper([{name:"bootstrapLabel",template:o(19),apiCheck:function(e){return{templateOptions:{label:e.string.optional,required:e.bool.optional,labelSrOnly:e.bool.optional}}}},{name:"bootstrapHasError",template:o(18)}])}e.config(t),t.$inject=["formlyConfigProvider"]},e.exports=t["default"]},function(e,t){e.exports='
\n
\n \n {{to.addonLeft.text}}\n
\n \n
\n \n {{to.addonRight.text}}\n
\n
\n'},function(e,t){e.exports='
\n \n
\n'},function(e,t){e.exports='
\n
\n \n
\n
\n'},function(e,t){e.exports='
\n
\n \n
\n
\n'},function(e,t){e.exports='
\n \n
\n'},function(e,t){e.exports="
\n \n \n
\n"},function(t,o){t.exports=e},function(e,o){e.exports=t},function(e,t){e.exports=o}])}); //# sourceMappingURL=angular-formly-templates-bootstrap.min.js.map \ No newline at end of file diff --git a/static/js/angular-formly-templates-bootstrap.min.js.map b/static/js/angular-formly-templates-bootstrap.min.js.map index 428d1ab..9c82b2d 100644 --- a/static/js/angular-formly-templates-bootstrap.min.js.map +++ b/static/js/angular-formly-templates-bootstrap.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dist/angular-formly-templates-bootstrap.min.js","webpack:///webpack/bootstrap 76f0d2f085565477dc28","webpack:///./index.js","webpack:///./angular-fix/index.js","webpack:///./index.common.js","webpack:///./run/addons.js","webpack:///./run/description.js","webpack:///./run/index.js","webpack:///./types/checkbox.js","webpack:///./types/index.js","webpack:///./types/input.js","webpack:///./types/multiCheckbox.js","webpack:///./types/radio.js","webpack:///./types/select.js","webpack:///./types/textarea.js","webpack:///./wrappers/index.js","webpack:///./run/addons.html","webpack:///./types/checkbox.html","webpack:///./types/multiCheckbox.html","webpack:///./types/radio.html","webpack:///./wrappers/has-error.html","webpack:///./wrappers/label.html","webpack:///external \"angular\"","webpack:///external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}","webpack:///external {\"root\":\"ngFormly\",\"amd\":\"angular-formly\",\"commonjs2\":\"angular-formly\",\"commonjs\":\"angular-formly\"}"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_20__","__WEBPACK_EXTERNAL_MODULE_21__","__WEBPACK_EXTERNAL_MODULE_22__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","angular","version","window","Object","defineProperty","value","ngModuleName","ngModule","constant","output","prefix","addAddonsManipulator","formlyConfig","formlyBootstrapApiCheck","addonTemplate","addonChecker","shape","class","string","optional","text","onClick","func","strict","api","templateOptions","addonLeft","addonRight","templateManipulators","preWrapper","push","template","options","warn","replace","run","$inject","addDescriptionManipulator","scope","isDefined","description","el","document","createElement","appendChild","element","modelEls","querySelectorAll","attr","innerHTML","_interopRequireDefault","obj","__esModule","default","_addons","_addons2","_description","_description2","addCheckboxType","formlyConfigProvider","setType","name","wrapper","apiCheck","check","label","config","addInputType","arrayOf","object","labelProp","valueProp","defaultOptions","noFormControl","ngModelAttrs","required","attribute","bound","controller","$scope","checkValidity","expressionValue","valid","to","isArray","model","opts","key","length","fc","$setValidity","setModel","forEach","multiCheckbox","checked","checkbox","index","$setTouched","change","$watch","newModelValue","modelValue","keys","newOptionsValues","Array","indexOf","expressionProperties","newValue","unwatchFormControl","addRadioType","_defineProperty","enumerable","configurable","writable","addSelectType","ngOptions","optionsAttr","groupProp","addTextareaType","rows","cols","number","addWrappers","setWrapper","bool","labelSrOnly"],"mappings":";CAAA,SAAAA,EAAAC,GACA,gBAAAC,UAAA,gBAAAC,QACAA,OAAAD,QAAAD,EAAAG,QAAA,WAAAA,QAAA,aAAAA,QAAA,mBACA,kBAAAC,gBAAAC,IACAD,QAAA,wCAAAJ,GACA,gBAAAC,SACAA,QAAA,2BAAAD,EAAAG,QAAA,WAAAA,QAAA,aAAAA,QAAA,mBAEAJ,EAAA,2BAAAC,EAAAD,EAAA,QAAAA,EAAA,SAAAA,EAAA,WACCO,KAAA,SAAAC,EAAAC,EAAAC,GACD,MCEgB,UAAUC,GCR1B,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAX,OAGA,IAAAC,GAAAW,EAAAD,IACAX,WACAa,GAAAF,EACAG,QAAA,EAUA,OANAL,GAAAE,GAAAI,KAAAd,EAAAD,QAAAC,IAAAD,QAAAU,GAGAT,EAAAa,QAAA,EAGAb,EAAAD,QAvBA,GAAAY,KAqCA,OATAF,GAAAM,EAAAP,EAGAC,EAAAO,EAAAL,EAGAF,EAAAQ,EAAA,GAGAR,EAAA,KDkBM,SAAST,EAAQD,EAASU,GExDhC,YAAAT,GAAOD,QAAUU,EAAQ,IFgEnB,SAAST,EAAQD,EAASU,GG9DhC,gBAAIS,GAAUT,EAAQ,GACjBS,GAAQC,UACXD,EAAUE,OAAOF,SAEnBlB,EAAOD,QAAUmB,GHwEX,SAASlB,EAAQD,EAASU,GI9EhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,GAHT,IAAMC,GAAe,kBACfN,EAAUT,EAAQ,GAClBgB,EAAWP,EAAQlB,OAAOwB,GAAef,EAAQ,KACvDgB,GAASC,SACP,0BACAjB,EAAQ,KACNkB,QACEC,OAAQ,+BAIdH,EAASC,SAAS,yBAA0B,SAE5CjB,EAAQ,IAAcgB,GACtBhB,EAAQ,GAAWgB,GACnBhB,EAAQ,GAASgB,GAIjB1B,EAAQ,WAFOyB,EAGfxB,EAAOD,QAAUA,EAAQ,YJoFnB,SAASC,EAAQD,EAASU,GKxGhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAASI,GAAqBC,EAAcC,GAC1C,GAAIC,GAAgBvB,EAAQ,IACtBwB,EAAeF,EAAwBG,OAC3CC,QAAOJ,EAAwBK,OAAOC,SACtCC,KAAMP,EAAwBK,OAAOC,SACrCE,QAASR,EAAwBS,KAAKH,WACrCI,OAAOJ,SACJK,EAAMX,EAAwBG,OAClCS,gBAAiBZ,EAAwBG,OACvCU,UAAWX,EACXY,WAAYZ,KAGhBH,GAAagB,qBAAqBC,WAAWC,KAAK,SAASC,EAAUC,GACnE,MAAKA,GAAQP,gBAAgBC,WAAcM,EAAQP,gBAAgBE,YAGnEd,EAAwBoB,MAAMT,IAAOQ,IAC9BlB,EAAcoB,QAAQ,0CAA2CH,IAH/DA,IAjBbxB,EAAS4B,IAAIxB,GLuIZA,EAAqByB,SAAW,eAAgB,4BKxGnDtD,EAAOD,QAAUA,EAAQ,YL+GnB,SAASC,EAAQD,GM/IvB,YAEAsB,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAAS8B,GAA0BzB,GACjCA,EAAagB,qBAAqBC,WAAWC,KAAK,SAAyBC,EAAUC,EAASM,GAC5F,GAAItC,QAAQuC,UAAUP,EAAQP,gBAAgBe,aAAc,CAC1D,GAAIC,GAAKC,SAASC,cAAc,MAChCF,GAAGG,YAAY5C,QAAQ6C,QAAQd,GAAU,IACzCU,EAAGG,YAAY5C,QAAQ6C,QACrB,UAAYP,EAAM5C,GAAK,gFAKvB,GACF,IAAIoD,GAAW9C,QAAQ6C,QAAQJ,EAAGM,iBAAiB,cAInD,OAHID,IACFA,EAASE,KAAK,mBAAoBV,EAAM5C,GAAK,gBAExC+C,EAAGQ,UAEV,MAAOlB,KApBbxB,EAAS4B,IAAIE,GNyKZA,EAA0BD,SAAW,iBM/IxCtD,EAAOD,QAAUA,EAAQ,YNsJnB,SAASC,EAAQD,EAASU,GOjLhC,YAMA,SAAS2D,GAAuBC,GAAO,MAAOA,IAAOA,EAAIC,WAAaD,GAAQE,UAAWF,GAJzFhD,OAAOC,eAAevB,EAAS,cAC7BwB,OAAO,GAKT,IAAIiD,GAAU/D,EARK,GAUfgE,EAAWL,EAAuBI,GAElCE,EAAejE,EAXK,GAapBkE,EAAgBP,EAAuBM,EAE3C3E,GAAQ,WAbO,SAAA0B,GACbgD,EAAA,WAAOhD,GACPkD,EAAA,WAAYlD,IAgBdzB,EAAOD,QAAUA,EAAQ,YPuLnB,SAASC,EAAQD,EAASU,GQ5MhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAASmD,GAAgBC,GACvBA,EAAqBC,SACnBC,KAAM,WACN9B,SAAUxC,EAAQ,IAClBuE,SAAU,qBACVC,SAAU,SAAAC,GAOR,OANAvC,iBACCwC,MAAOD,EAAM9C,YATpBX,EAAS2D,OAAOR,GRoOfA,EAAgBtB,SAAW,yBQ5M9BtD,EAAOD,QAAUA,EAAQ,YRmNnB,SAASC,EAAQD,EAASU,GS5OhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GACbhB,EAAQ,GAAcgB,GACtBhB,EAAQ,GAAmBgB,GAC3BhB,EAAQ,GAAWgB,GACnBhB,EAAQ,IAAWgB,GACnBhB,EAAQ,IAAYgB,GACpBhB,EAAQ,IAAcgB,IASxBzB,EAAOD,QAAUA,EAAQ,YTkPnB,SAASC,EAAQD,GUjQvB,YAEAsB,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAAS4D,GAAaR,GACpBA,EAAqBC,SACnBC,KAAM,QACN9B,SAAU,6DACV+B,SAAU,iBAAkB,uBANhCvD,EAAS2D,OAAOC,GVkRfA,EAAa/B,SAAW,yBUjQ3BtD,EAAOD,QAAUA,EAAQ,YVwQnB,SAASC,EAAQD,EAASU,GW1RhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAASmD,GAAgBC,GACvBA,EAAqBC,SACnBC,KAAM,gBACN9B,SAAUxC,EAAQ,IAClBuE,SAAU,iBAAkB,qBAC5BC,SAAU,SAAAC,GAOR,OANAvC,iBACEO,QAASgC,EAAMI,QAAQJ,EAAMK,QAC7BC,UAAWN,EAAM9C,OAAOC,SACxBoD,UAAWP,EAAM9C,OAAOC,YAG5BqD,gBACEC,eAAe,EACfC,cACEC,UACEC,UAAW,GACXC,MAAO,MAIbC,YAAA,SAA4B,SAASC,GA0BnC,QAASC,GAAcC,GACrB,GAAIC,EAEAH,GAAOI,GAAGR,WACZO,EAAQlF,QAAQoF,QAAQL,EAAOM,MAAMC,EAAKC,OACxCR,EAAOM,MAAMC,EAAKC,KAAKC,OAAS,GAChCP,EAEFF,EAAOU,GAAGC,aAAa,WAAYR,IAIvC,QAASS,KACPZ,EAAOM,MAAMC,EAAKC,QAClBvF,QAAQ4F,QAAQb,EAAOc,cAAcC,QAAS,SAACC,EAAUC,GACnDD,GACFhB,EAAOM,MAAMC,EAAKC,KAAKzD,KAAKqD,EAAGnD,QAAQgE,GAAOb,EAAGZ,WAAa,YAKlEQ,EAAOU,GAAGQ,cACVjB,GAAc,GA/ChB,GAAMG,GAAKJ,EAAOI,GACZG,EAAOP,EAAO/C,OAyDpB,IAxDA+C,EAAOc,eACLC,WACAI,OAAQP,GAIVZ,EAAOoB,OAAO,QAAS,SAAsBC,GAC3C,GAAIC,GAAY9B,CAEZpE,QAAOmG,KAAKF,GAAeZ,SAC7Ba,EAAaD,EAAcd,EAAKC,KAEhCR,EAAOoB,OAAO,aAAc,SAAwBI,GAClD,GAAIA,GAAoBC,MAAMpB,QAAQmB,IAAqBC,MAAMpB,QAAQiB,GAAa,CACpF9B,EAAYY,EAAGZ,WAAa,OAC5B,KAAK,GAAIyB,GAAQ,EAAGA,EAAQO,EAAiBf,OAAQQ,IACnDjB,EAAOc,cAAcC,QAAQE,GAAoE,KAA3DK,EAAWI,QAAQF,EAAiBP,GAAOzB,UAKxF,GA2BCe,EAAKoB,sBAAwBpB,EAAKoB,qBAAqB,6BACzD3B,EAAOoB,OAAO,WACZ,MAAOpB,GAAOI,GAAGR,UAChB,SAASgC,GACV3B,EAAc2B,KAId5B,EAAOI,GAAGR,SACZ,GAAIiC,GAAqB7B,EAAOoB,OAAO,KAAM,SAASQ,GAC/CA,IAGL3B,GAAc,GACd4B,WAxFVrG,EAAS2D,OAAOR,GXgYfA,EAAgBtB,SAAW,yBW1R9BtD,EAAOD,QAAUA,EAAQ,YXiSnB,SAASC,EAAQD,EAASU,GYxYhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAASsG,GAAalD,GACpBA,EAAqBC,SACnBC,KAAM,QACN9B,SAAUxC,EAAQ,IAClBuE,SAAU,iBAAkB,qBAC5BU,gBACEC,eAAe,GAEjBV,SAAU,SAAAC,GAOR,OANAvC,iBACEO,QAASgC,EAAMI,QAAQJ,EAAMK,QAC7BC,UAAWN,EAAM9C,OAAOC,SACxBoD,UAAWP,EAAM9C,OAAOC,cAdhCZ,EAAS2D,OAAO2C,GZqafA,EAAazE,SAAW,yBYxY3BtD,EAAOD,QAAUA,EAAQ,YZ+YnB,SAASC,EAAQD,Ga7avB,YAMA,SAASiI,GAAgB3D,EAAKoC,EAAKlF,GAAiK,MAApJkF,KAAOpC,GAAOhD,OAAOC,eAAe+C,EAAKoC,GAAOlF,MAAOA,EAAO0G,YAAY,EAAMC,cAAc,EAAMC,UAAU,IAAkB9D,EAAIoC,GAAOlF,EAAgB8C,EAJ3MhD,OAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAKTxB,EAAQ,WARQ,SAAA0B,GAKd,QAAS2G,GAAcvD,GACrBA,EAAqBC,SACnBC,KAAM,SACN9B,WACA+B,SAAU,iBAAkB,qBAC5BU,eAAc,SAACxC,GAEb,GAAImF,GAAYnF,EAAQP,gBAAgB0F,WAAS,qIACjD,QACEzC,aAAYoC,KACTK,GACC9G,MAAO2B,EAAQP,gBAAgB2F,aAAe,iBAKtDrD,SAAU,SAAAC,GAOR,OANAvC,iBACEO,QAASgC,EAAMI,QAAQJ,EAAMK,QAC7B+C,YAAapD,EAAM9C,OAAOC,SAC1BmD,UAAWN,EAAM9C,OAAOC,SACxBoD,UAAWP,EAAM9C,OAAOC,SACxBkG,UAAWrD,EAAM9C,OAAOC,cA1BhCZ,EAAS2D,OAAOgD,EAEhB,IAAMnF,GAAQ,sEbodbmF,GAAc9E,SAAW,yBa7a5BtD,EAAOD,QAAUA,EAAQ,YbobnB,SAASC,EAAQD,Gc9dvB,YAEAsB,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANQ,SAAA0B,GAGd,QAAS+G,GAAgB3D,GACvBA,EAAqBC,SACnBC,KAAM,WACN9B,SAAU,2EACV+B,SAAU,iBAAkB,qBAC5BU,gBACEE,cACE6C,MAAO3C,UAAW,QAClB4C,MAAO5C,UAAW,UAGtBb,SAAU,SAAAC,GAOR,OANAvC,iBACE8F,KAAMvD,EAAMyD,OAAOtG,SACnBqG,KAAMxD,EAAMyD,OAAOtG,cAhB3BZ,EAAS2D,OAAOoD,Gd6ffA,EAAgBlF,SAAW,yBc9d9BtD,EAAOD,QAAUA,EAAQ,YdqenB,SAASC,EAAQD,EAASU,GergBhC,YAEAY,QAAOC,eAAevB,EAAS,cAC7BwB,OAAO,IAGTxB,EAAQ,WANO,SAAA0B,GAGb,QAASmH,GAAY/D,GACnBA,EAAqBgE,aAEjB9D,KAAM,iBACN9B,SAAUxC,EAAQ,IAClBwE,SAAU,SAAAC,GAMV,OALEvC,iBACEwC,MAAOD,EAAM9C,OAAOC,SACpBwD,SAAUX,EAAM4D,KAAKzG,SACrB0G,YAAa7D,EAAM4D,KAAKzG,cAI7B0C,KAAM,oBAAqB9B,SAAUxC,EAAQ,OAflDgB,EAAS2D,OAAOwD,Gf8hBfA,EAAYtF,SAAW,yBergB1BtD,EAAOD,QAAUA,EAAQ,Yf4gBnB,SAASC,EAAQD,GgBtiBvBC,EAAAD,QAAA,u1BhB4iBM,SAASC,EAAQD,GiB5iBvBC,EAAAD,QAAA,wNjBkjBM,SAASC,EAAQD,GkBljBvBC,EAAAD,QAAA,2WlBwjBM,SAASC,EAAQD,GmBxjBvBC,EAAAD,QAAA,+XnB8jBM,SAASC,EAAQD,GoB9jBvBC,EAAAD,QAAA,uHpBokBM,SAASC,EAAQD,GqBpkBvBC,EAAAD,QAAA,qOrB0kBM,SAASC,EAAQD,GsB1kBvBC,EAAAD,QAAAM,GtBglBM,SAASL,EAAQD,GuBhlBvBC,EAAAD,QAAAO,GvBslBM,SAASN,EAAQD,GwBtlBvBC,EAAAD,QAAAQ","file":"dist/angular-formly-templates-bootstrap.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\", \"angular-formly\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"angular\"], root[\"apiCheck\"], root[\"ngFormly\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_20__, __WEBPACK_EXTERNAL_MODULE_21__, __WEBPACK_EXTERNAL_MODULE_22__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","//! angular-formly-templates-bootstrap version 6.2.0 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\", \"angular-formly\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"angular\"], root[\"apiCheck\"], root[\"ngFormly\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_20__, __WEBPACK_EXTERNAL_MODULE_21__, __WEBPACK_EXTERNAL_MODULE_22__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(2);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(20);\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\tvar ngModuleName = 'formlyBootstrap';\n\tvar angular = __webpack_require__(1);\n\tvar ngModule = angular.module(ngModuleName, [__webpack_require__(22)]);\n\tngModule.constant('formlyBootstrapApiCheck', __webpack_require__(21)({\n\t output: {\n\t prefix: 'angular-formly-bootstrap'\n\t }\n\t}));\n\tngModule.constant('formlyBootstrapVersion', (\"6.2.0\"));\n\t\n\t__webpack_require__(13)(ngModule);\n\t__webpack_require__(7)(ngModule);\n\t__webpack_require__(5)(ngModule);\n\t\n\texports['default'] = ngModuleName;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addAddonsManipulator);\n\t\n\t function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n\t var addonTemplate = __webpack_require__(14);\n\t var addonChecker = formlyBootstrapApiCheck.shape({\n\t 'class': formlyBootstrapApiCheck.string.optional,\n\t text: formlyBootstrapApiCheck.string.optional,\n\t onClick: formlyBootstrapApiCheck.func.optional\n\t }).strict.optional;\n\t var api = formlyBootstrapApiCheck.shape({\n\t templateOptions: formlyBootstrapApiCheck.shape({\n\t addonLeft: addonChecker,\n\t addonRight: addonChecker\n\t })\n\t });\n\t formlyConfig.templateManipulators.preWrapper.push(function (template, options) {\n\t if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n\t return template;\n\t }\n\t formlyBootstrapApiCheck.warn([api], [options]);\n\t return addonTemplate.replace('', template);\n\t });\n\t }\n\t addAddonsManipulator.$inject = [\"formlyConfig\", \"formlyBootstrapApiCheck\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addDescriptionManipulator);\n\t\n\t function addDescriptionManipulator(formlyConfig) {\n\t formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n\t if (angular.isDefined(options.templateOptions.description)) {\n\t var el = document.createElement('div');\n\t el.appendChild(angular.element(template)[0]);\n\t el.appendChild(angular.element('

' + '{{to.description}}' + '

')[0]);\n\t var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n\t if (modelEls) {\n\t modelEls.attr('aria-describedby', scope.id + '_description');\n\t }\n\t return el.innerHTML;\n\t } else {\n\t return template;\n\t }\n\t });\n\t }\n\t addDescriptionManipulator.$inject = [\"formlyConfig\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _addons = __webpack_require__(3);\n\t\n\tvar _addons2 = _interopRequireDefault(_addons);\n\t\n\tvar _description = __webpack_require__(4);\n\t\n\tvar _description2 = _interopRequireDefault(_description);\n\t\n\texports['default'] = function (ngModule) {\n\t (0, _addons2['default'])(ngModule);\n\t (0, _description2['default'])(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'checkbox',\n\t template: __webpack_require__(15),\n\t wrapper: ['bootstrapHasError'],\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t label: check.string\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t __webpack_require__(6)(ngModule);\n\t __webpack_require__(9)(ngModule);\n\t __webpack_require__(8)(ngModule);\n\t __webpack_require__(10)(ngModule);\n\t __webpack_require__(11)(ngModule);\n\t __webpack_require__(12)(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addInputType);\n\t\n\t function addInputType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'input',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError']\n\t });\n\t }\n\t addInputType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'multiCheckbox',\n\t template: __webpack_require__(16),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional\n\t }\n\t };\n\t },\n\t defaultOptions: {\n\t noFormControl: false,\n\t ngModelAttrs: {\n\t required: {\n\t attribute: '',\n\t bound: ''\n\t }\n\t }\n\t },\n\t controller: /* @ngInject */[\"$scope\", function controller($scope) {\n\t var to = $scope.to;\n\t var opts = $scope.options;\n\t $scope.multiCheckbox = {\n\t checked: [],\n\t change: setModel\n\t };\n\t\n\t // initialize the checkboxes check property\n\t $scope.$watch('model', function modelWatcher(newModelValue) {\n\t var modelValue, valueProp;\n\t\n\t if (Object.keys(newModelValue).length) {\n\t modelValue = newModelValue[opts.key];\n\t\n\t $scope.$watch('to.options', function optionsWatcher(newOptionsValues) {\n\t if (newOptionsValues && Array.isArray(newOptionsValues) && Array.isArray(modelValue)) {\n\t valueProp = to.valueProp || 'value';\n\t for (var index = 0; index < newOptionsValues.length; index++) {\n\t $scope.multiCheckbox.checked[index] = modelValue.indexOf(newOptionsValues[index][valueProp]) !== -1;\n\t }\n\t }\n\t });\n\t }\n\t }, true);\n\t\n\t function checkValidity(expressionValue) {\n\t var valid;\n\t\n\t if ($scope.to.required) {\n\t valid = angular.isArray($scope.model[opts.key]) && $scope.model[opts.key].length > 0 && expressionValue;\n\t\n\t $scope.fc.$setValidity('required', valid);\n\t }\n\t }\n\t\n\t function setModel() {\n\t $scope.model[opts.key] = [];\n\t angular.forEach($scope.multiCheckbox.checked, function (checkbox, index) {\n\t if (checkbox) {\n\t $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n\t }\n\t });\n\t\n\t // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n\t $scope.fc.$setTouched();\n\t checkValidity(true);\n\t }\n\t\n\t if (opts.expressionProperties && opts.expressionProperties['templateOptions.required']) {\n\t $scope.$watch(function () {\n\t return $scope.to.required;\n\t }, function (newValue) {\n\t checkValidity(newValue);\n\t });\n\t }\n\t\n\t if ($scope.to.required) {\n\t var unwatchFormControl = $scope.$watch('fc', function (newValue) {\n\t if (!newValue) {\n\t return;\n\t }\n\t checkValidity(true);\n\t unwatchFormControl();\n\t });\n\t }\n\t }]\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addRadioType);\n\t\n\t function addRadioType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'radio',\n\t template: __webpack_require__(17),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t noFormControl: false\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addRadioType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addSelectType);\n\t\n\t var template = '';\n\t\n\t function addSelectType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'select',\n\t template: template,\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: function defaultOptions(options) {\n\t /* jshint maxlen:195 */\n\t var ngOptions = options.templateOptions.ngOptions || 'option[to.valueProp || \\'value\\'] as option[to.labelProp || \\'name\\'] group by option[to.groupProp || \\'group\\'] for option in to.options';\n\t return {\n\t ngModelAttrs: _defineProperty({}, ngOptions, {\n\t value: options.templateOptions.optionsAttr || 'ng-options'\n\t })\n\t };\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t optionsAttr: check.string.optional,\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional,\n\t groupProp: check.string.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addSelectType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addTextareaType);\n\t\n\t function addTextareaType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'textarea',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t ngModelAttrs: {\n\t rows: { attribute: 'rows' },\n\t cols: { attribute: 'cols' }\n\t }\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t rows: check.number.optional,\n\t cols: check.number.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addTextareaType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addWrappers);\n\t\n\t function addWrappers(formlyConfigProvider) {\n\t formlyConfigProvider.setWrapper([{\n\t name: 'bootstrapLabel',\n\t template: __webpack_require__(19),\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t label: check.string.optional,\n\t required: check.bool.optional,\n\t labelSrOnly: check.bool.optional\n\t }\n\t };\n\t }\n\t }, { name: 'bootstrapHasError', template: __webpack_require__(18) }]);\n\t }\n\t addWrappers.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n {{to.addonLeft.text}}\\n
\\n \\n
\\n \\n {{to.addonRight.text}}\\n
\\n
\\n\"\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n\\t\\n
\\n\"\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n \\n
\\n\"\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n \\n \\n
\\n\"\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_20__;\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_21__;\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_22__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** dist/angular-formly-templates-bootstrap.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 76f0d2f085565477dc28\n **/","module.exports = require('./index.common');\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","// some versions of angular don't export the angular module properly,\n// so we get it from window in this case.\nvar angular = require('angular');\nif (!angular.version) {\n angular = window.angular;\n}\nmodule.exports = angular;\n\n\n\n/** WEBPACK FOOTER **\n ** ./angular-fix/index.js\n **/","const ngModuleName = 'formlyBootstrap';\nconst angular = require('./angular-fix');\nconst ngModule = angular.module(ngModuleName, [require('angular-formly')]);\nngModule.constant(\n 'formlyBootstrapApiCheck',\n require('api-check')({\n output: {\n prefix: 'angular-formly-bootstrap'\n }\n })\n);\nngModule.constant('formlyBootstrapVersion', VERSION);\n\nrequire('./wrappers')(ngModule);\nrequire('./types')(ngModule);\nrequire('./run')(ngModule);\n\nexport default ngModuleName;\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.common.js\n **/","export default ngModule => {\n ngModule.run(addAddonsManipulator);\n\n function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n var addonTemplate = require('./addons.html');\n const addonChecker = formlyBootstrapApiCheck.shape({\n class: formlyBootstrapApiCheck.string.optional,\n text: formlyBootstrapApiCheck.string.optional,\n onClick: formlyBootstrapApiCheck.func.optional\n }).strict.optional;\n const api = formlyBootstrapApiCheck.shape({\n templateOptions: formlyBootstrapApiCheck.shape({\n addonLeft: addonChecker,\n addonRight: addonChecker\n })\n });\n formlyConfig.templateManipulators.preWrapper.push(function(template, options) {\n if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n return template;\n }\n formlyBootstrapApiCheck.warn([api], [options]);\n return addonTemplate.replace('', template);\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/addons.js\n **/","export default ngModule => {\n ngModule.run(addDescriptionManipulator);\n\n function addDescriptionManipulator(formlyConfig) {\n formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n if (angular.isDefined(options.templateOptions.description)) {\n var el = document.createElement('div');\n el.appendChild(angular.element(template)[0]);\n el.appendChild(angular.element(\n '

' +\n '{{to.description}}' +\n '

'\n )[0]);\n var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n if (modelEls) {\n modelEls.attr('aria-describedby', scope.id + '_description');\n }\n return el.innerHTML;\n } else {\n return template;\n }\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/description.js\n **/","import addons from './addons';\nimport description from './description';\n\nexport default ngModule => {\n addons(ngModule);\n description(ngModule);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/index.js\n **/","export default ngModule => {\n ngModule.config(addCheckboxType);\n\n function addCheckboxType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'checkbox',\n template: require('./checkbox.html'),\n wrapper: ['bootstrapHasError'],\n apiCheck: check => ({\n templateOptions: {\n \tlabel: check.string\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/checkbox.js\n **/","export default ngModule => {\n require('./checkbox')(ngModule);\n require('./multiCheckbox')(ngModule);\n require('./input')(ngModule);\n require('./radio')(ngModule);\n require('./select')(ngModule);\n require('./textarea')(ngModule);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/index.js\n **/","export default ngModule => {\n ngModule.config(addInputType);\n\n function addInputType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'input',\n template: '',\n wrapper: ['bootstrapLabel', 'bootstrapHasError']\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/input.js\n **/","export default ngModule => {\n ngModule.config(addCheckboxType);\n\n function addCheckboxType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'multiCheckbox',\n template: require('./multiCheckbox.html'),\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n labelProp: check.string.optional,\n valueProp: check.string.optional\n }\n }),\n defaultOptions: {\n noFormControl: false,\n ngModelAttrs: {\n required: {\n attribute: '',\n bound: ''\n }\n }\n },\n controller: /* @ngInject */ function($scope) {\n const to = $scope.to;\n const opts = $scope.options;\n $scope.multiCheckbox = {\n checked: [],\n change: setModel\n };\n\n // initialize the checkboxes check property\n $scope.$watch('model', function modelWatcher(newModelValue) {\n var modelValue, valueProp;\n\n if (Object.keys(newModelValue).length) {\n modelValue = newModelValue[opts.key];\n\n $scope.$watch('to.options', function optionsWatcher(newOptionsValues) {\n if (newOptionsValues && Array.isArray(newOptionsValues) && Array.isArray(modelValue)) {\n valueProp = to.valueProp || 'value';\n for (var index = 0; index < newOptionsValues.length; index++) {\n $scope.multiCheckbox.checked[index] = modelValue.indexOf(newOptionsValues[index][valueProp]) !== -1;\n }\n }\n });\n }\n }, true);\n\n function checkValidity(expressionValue) {\n var valid;\n\n if ($scope.to.required) {\n valid = angular.isArray($scope.model[opts.key]) &&\n $scope.model[opts.key].length > 0 &&\n expressionValue;\n\n $scope.fc.$setValidity('required', valid);\n }\n }\n\n function setModel() {\n $scope.model[opts.key] = [];\n angular.forEach($scope.multiCheckbox.checked, (checkbox, index) => {\n if (checkbox) {\n $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n }\n });\n\n // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n $scope.fc.$setTouched();\n checkValidity(true);\n }\n\n if (opts.expressionProperties && opts.expressionProperties['templateOptions.required']) {\n $scope.$watch(function() {\n return $scope.to.required;\n }, function(newValue) {\n checkValidity(newValue);\n });\n }\n\n if ($scope.to.required) {\n var unwatchFormControl = $scope.$watch('fc', function(newValue) {\n if (!newValue) {\n return;\n }\n checkValidity(true);\n unwatchFormControl();\n });\n }\n }\n });\n }\n\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/multiCheckbox.js\n **/","export default ngModule => {\n ngModule.config(addRadioType);\n\n function addRadioType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'radio',\n template: require('./radio.html'),\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions: {\n noFormControl: false\n },\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n labelProp: check.string.optional,\n valueProp: check.string.optional\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/radio.js\n **/","export default ngModule => {\n ngModule.config(addSelectType);\n\n const template = ``;\n\n function addSelectType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'select',\n template,\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions(options) {\n /* jshint maxlen:195 */\n let ngOptions = options.templateOptions.ngOptions || `option[to.valueProp || 'value'] as option[to.labelProp || 'name'] group by option[to.groupProp || 'group'] for option in to.options`;\n return {\n ngModelAttrs: {\n [ngOptions]: {\n value: options.templateOptions.optionsAttr || 'ng-options'\n }\n }\n };\n },\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n optionsAttr: check.string.optional,\n labelProp: check.string.optional,\n valueProp: check.string.optional,\n groupProp: check.string.optional\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/select.js\n **/","export default ngModule => {\n ngModule.config(addTextareaType);\n\n function addTextareaType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'textarea',\n template: '',\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions: {\n ngModelAttrs: {\n rows: {attribute: 'rows'},\n cols: {attribute: 'cols'}\n }\n },\n apiCheck: check => ({\n templateOptions: {\n rows: check.number.optional,\n cols: check.number.optional\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/textarea.js\n **/","export default ngModule => {\n ngModule.config(addWrappers);\n\n function addWrappers(formlyConfigProvider) {\n formlyConfigProvider.setWrapper([\n {\n name: 'bootstrapLabel',\n template: require('./label.html'),\n apiCheck: check => ({\n templateOptions: {\n label: check.string.optional,\n required: check.bool.optional,\n labelSrOnly: check.bool.optional,\n }\n })\n },\n {name: 'bootstrapHasError', template: require('./has-error.html')}\n ]);\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./wrappers/index.js\n **/","module.exports = \"
\\n
\\n \\n {{to.addonLeft.text}}\\n
\\n \\n
\\n \\n {{to.addonRight.text}}\\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./run/addons.html\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = \"
\\n\\t\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/checkbox.html\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/multiCheckbox.html\n ** module id = 16\n ** module chunks = 0\n **/","module.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/radio.html\n ** module id = 17\n ** module chunks = 0\n **/","module.exports = \"
\\n \\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./wrappers/has-error.html\n ** module id = 18\n ** module chunks = 0\n **/","module.exports = \"
\\n \\n \\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./wrappers/label.html\n ** module id = 19\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_20__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 20\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_21__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}\n ** module id = 21\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_22__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"ngFormly\",\"amd\":\"angular-formly\",\"commonjs2\":\"angular-formly\",\"commonjs\":\"angular-formly\"}\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":""} +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dist/angular-formly-templates-bootstrap.min.js","webpack:///webpack/bootstrap 76395b7a737fad382b5a","webpack:///./index.js","webpack:///./angular-fix/index.js","webpack:///./index.common.js","webpack:///./run/addons.js","webpack:///./run/description.js","webpack:///./run/index.js","webpack:///./types/checkbox.js","webpack:///./types/index.js","webpack:///./types/input.js","webpack:///./types/multiCheckbox.js","webpack:///./types/radio.js","webpack:///./types/select.js","webpack:///./types/textarea.js","webpack:///./wrappers/index.js","webpack:///./run/addons.html","webpack:///./types/checkbox.html","webpack:///./types/multiCheckbox.html","webpack:///./types/radio.html","webpack:///./wrappers/has-error.html","webpack:///./wrappers/label.html","webpack:///external \"angular\"","webpack:///external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}","webpack:///external {\"root\":\"ngFormly\",\"amd\":\"angular-formly\",\"commonjs2\":\"angular-formly\",\"commonjs\":\"angular-formly\"}"],"names":["root","factory","exports","module","require","define","amd","this","__WEBPACK_EXTERNAL_MODULE_20__","__WEBPACK_EXTERNAL_MODULE_21__","__WEBPACK_EXTERNAL_MODULE_22__","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","angular","version","window","Object","defineProperty","value","ngModuleName","ngModule","constant","output","prefix","addAddonsManipulator","formlyConfig","formlyBootstrapApiCheck","addonTemplate","addonChecker","shape","class","string","optional","text","onClick","func","strict","api","templateOptions","addonLeft","addonRight","templateManipulators","preWrapper","push","template","options","warn","replace","run","$inject","addDescriptionManipulator","scope","isDefined","description","el","document","createElement","appendChild","element","modelEls","querySelectorAll","attr","innerHTML","_interopRequireDefault","obj","__esModule","default","_addons","_addons2","_description","_description2","addCheckboxType","formlyConfigProvider","setType","name","wrapper","apiCheck","check","label","config","addInputType","arrayOf","object","labelProp","valueProp","defaultOptions","noFormControl","ngModelAttrs","required","attribute","bound","controller","$scope","checkValidity","expressionValue","valid","to","isArray","model","opts","key","length","fc","$setValidity","setModel","forEach","multiCheckbox","checked","checkbox","index","$setTouched","onChange","change","$watch","newModelValue","modelValue","keys","newOptionsValues","Array","indexOf","expressionProperties","newValue","unwatchFormControl","addRadioType","inline","bool","_defineProperty","enumerable","configurable","writable","addSelectType","ngOptions","optionsAttr","groupProp","addTextareaType","rows","cols","number","addWrappers","setWrapper","labelSrOnly"],"mappings":"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","file":"dist/angular-formly-templates-bootstrap.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\", \"angular-formly\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"angular\"], root[\"apiCheck\"], root[\"ngFormly\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_20__, __WEBPACK_EXTERNAL_MODULE_21__, __WEBPACK_EXTERNAL_MODULE_22__) {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","//! angular-formly-templates-bootstrap version 0.0.0-semantically-released.0 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular\", \"api-check\", \"angular-formly\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular\"), require(\"api-check\"), require(\"angular-formly\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"angular\"], root[\"apiCheck\"], root[\"ngFormly\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_20__, __WEBPACK_EXTERNAL_MODULE_21__, __WEBPACK_EXTERNAL_MODULE_22__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(2);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(20);\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\tvar ngModuleName = 'formlyBootstrap';\n\tvar angular = __webpack_require__(1);\n\tvar ngModule = angular.module(ngModuleName, [__webpack_require__(22)]);\n\tngModule.constant('formlyBootstrapApiCheck', __webpack_require__(21)({\n\t output: {\n\t prefix: 'angular-formly-bootstrap'\n\t }\n\t}));\n\tngModule.constant('formlyBootstrapVersion', (\"0.0.0-semantically-released.0\"));\n\t\n\t__webpack_require__(13)(ngModule);\n\t__webpack_require__(7)(ngModule);\n\t__webpack_require__(5)(ngModule);\n\t\n\texports['default'] = ngModuleName;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addAddonsManipulator);\n\t\n\t function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n\t var addonTemplate = __webpack_require__(14);\n\t var addonChecker = formlyBootstrapApiCheck.shape({\n\t 'class': formlyBootstrapApiCheck.string.optional,\n\t text: formlyBootstrapApiCheck.string.optional,\n\t onClick: formlyBootstrapApiCheck.func.optional\n\t }).strict.optional;\n\t var api = formlyBootstrapApiCheck.shape({\n\t templateOptions: formlyBootstrapApiCheck.shape({\n\t addonLeft: addonChecker,\n\t addonRight: addonChecker\n\t })\n\t });\n\t formlyConfig.templateManipulators.preWrapper.push(function (template, options) {\n\t if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n\t return template;\n\t }\n\t formlyBootstrapApiCheck.warn([api], [options]);\n\t return addonTemplate.replace('', template);\n\t });\n\t }\n\t addAddonsManipulator.$inject = [\"formlyConfig\", \"formlyBootstrapApiCheck\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 4 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addDescriptionManipulator);\n\t\n\t function addDescriptionManipulator(formlyConfig) {\n\t formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n\t if (angular.isDefined(options.templateOptions.description)) {\n\t var el = document.createElement('div');\n\t el.appendChild(angular.element(template)[0]);\n\t el.appendChild(angular.element('

' + '{{to.description}}' + '

')[0]);\n\t var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n\t if (modelEls) {\n\t modelEls.attr('aria-describedby', scope.id + '_description');\n\t }\n\t return el.innerHTML;\n\t } else {\n\t return template;\n\t }\n\t });\n\t }\n\t addDescriptionManipulator.$inject = [\"formlyConfig\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _addons = __webpack_require__(3);\n\t\n\tvar _addons2 = _interopRequireDefault(_addons);\n\t\n\tvar _description = __webpack_require__(4);\n\t\n\tvar _description2 = _interopRequireDefault(_description);\n\t\n\texports['default'] = function (ngModule) {\n\t (0, _addons2['default'])(ngModule);\n\t (0, _description2['default'])(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'checkbox',\n\t template: __webpack_require__(15),\n\t wrapper: ['bootstrapHasError'],\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t label: check.string\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t __webpack_require__(6)(ngModule);\n\t __webpack_require__(9)(ngModule);\n\t __webpack_require__(8)(ngModule);\n\t __webpack_require__(10)(ngModule);\n\t __webpack_require__(11)(ngModule);\n\t __webpack_require__(12)(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addInputType);\n\t\n\t function addInputType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'input',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError']\n\t });\n\t }\n\t addInputType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'multiCheckbox',\n\t template: __webpack_require__(16),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional\n\t }\n\t };\n\t },\n\t defaultOptions: {\n\t noFormControl: false,\n\t ngModelAttrs: {\n\t required: {\n\t attribute: '',\n\t bound: ''\n\t }\n\t }\n\t },\n\t controller: /* @ngInject */[\"$scope\", function controller($scope) {\n\t var to = $scope.to;\n\t var opts = $scope.options;\n\t $scope.multiCheckbox = {\n\t checked: [],\n\t change: setModel\n\t };\n\t\n\t // initialize the checkboxes check property\n\t $scope.$watch('model', function modelWatcher(newModelValue) {\n\t var modelValue, valueProp;\n\t\n\t if (Object.keys(newModelValue).length) {\n\t modelValue = newModelValue[opts.key];\n\t\n\t $scope.$watch('to.options', function optionsWatcher(newOptionsValues) {\n\t if (newOptionsValues && Array.isArray(newOptionsValues) && Array.isArray(modelValue)) {\n\t valueProp = to.valueProp || 'value';\n\t for (var index = 0; index < newOptionsValues.length; index++) {\n\t $scope.multiCheckbox.checked[index] = modelValue.indexOf(newOptionsValues[index][valueProp]) !== -1;\n\t }\n\t }\n\t });\n\t }\n\t }, true);\n\t\n\t function checkValidity(expressionValue) {\n\t var valid;\n\t\n\t if ($scope.to.required) {\n\t valid = angular.isArray($scope.model[opts.key]) && $scope.model[opts.key].length > 0 && expressionValue;\n\t\n\t $scope.fc.$setValidity('required', valid);\n\t }\n\t }\n\t\n\t function setModel() {\n\t $scope.model[opts.key] = [];\n\t angular.forEach($scope.multiCheckbox.checked, function (checkbox, index) {\n\t if (checkbox) {\n\t $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n\t }\n\t });\n\t\n\t // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n\t $scope.fc.$setTouched();\n\t checkValidity(true);\n\t\n\t if ($scope.to.onChange) {\n\t $scope.to.onChange();\n\t }\n\t }\n\t\n\t if (opts.expressionProperties && opts.expressionProperties['templateOptions.required']) {\n\t $scope.$watch(function () {\n\t return $scope.to.required;\n\t }, function (newValue) {\n\t checkValidity(newValue);\n\t });\n\t }\n\t\n\t if ($scope.to.required) {\n\t var unwatchFormControl = $scope.$watch('fc', function (newValue) {\n\t if (!newValue) {\n\t return;\n\t }\n\t checkValidity(true);\n\t unwatchFormControl();\n\t });\n\t }\n\t }]\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addRadioType);\n\t\n\t function addRadioType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'radio',\n\t template: __webpack_require__(17),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t noFormControl: false\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional,\n\t inline: check.bool.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addRadioType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addSelectType);\n\t\n\t var template = '';\n\t\n\t function addSelectType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'select',\n\t template: template,\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: function defaultOptions(options) {\n\t /* jshint maxlen:195 */\n\t var ngOptions = options.templateOptions.ngOptions || 'option[to.valueProp || \\'value\\'] as option[to.labelProp || \\'name\\'] group by option[to.groupProp || \\'group\\'] for option in to.options';\n\t return {\n\t ngModelAttrs: _defineProperty({}, ngOptions, {\n\t value: options.templateOptions.optionsAttr || 'ng-options'\n\t })\n\t };\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t options: check.arrayOf(check.object),\n\t optionsAttr: check.string.optional,\n\t labelProp: check.string.optional,\n\t valueProp: check.string.optional,\n\t groupProp: check.string.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addSelectType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addTextareaType);\n\t\n\t function addTextareaType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'textarea',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t ngModelAttrs: {\n\t rows: { attribute: 'rows' },\n\t cols: { attribute: 'cols' }\n\t }\n\t },\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t rows: check.number.optional,\n\t cols: check.number.optional\n\t }\n\t };\n\t }\n\t });\n\t }\n\t addTextareaType.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addWrappers);\n\t\n\t function addWrappers(formlyConfigProvider) {\n\t formlyConfigProvider.setWrapper([{\n\t name: 'bootstrapLabel',\n\t template: __webpack_require__(19),\n\t apiCheck: function apiCheck(check) {\n\t return {\n\t templateOptions: {\n\t label: check.string.optional,\n\t required: check.bool.optional,\n\t labelSrOnly: check.bool.optional\n\t }\n\t };\n\t }\n\t }, { name: 'bootstrapHasError', template: __webpack_require__(18) }]);\n\t }\n\t addWrappers.$inject = [\"formlyConfigProvider\"];\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n {{to.addonLeft.text}}\\n
\\n \\n
\\n \\n {{to.addonRight.text}}\\n
\\n
\\n\"\n\n/***/ },\n/* 15 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n\\t\\n
\\n\"\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n/***/ },\n/* 18 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n \\n
\\n\"\n\n/***/ },\n/* 19 */\n/***/ function(module, exports) {\n\n\tmodule.exports = \"
\\n \\n \\n
\\n\"\n\n/***/ },\n/* 20 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_20__;\n\n/***/ },\n/* 21 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_21__;\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_22__;\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** dist/angular-formly-templates-bootstrap.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 76395b7a737fad382b5a\n **/","module.exports = require('./index.common');\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.js\n **/","// some versions of angular don't export the angular module properly,\n// so we get it from window in this case.\nvar angular = require('angular');\nif (!angular.version) {\n angular = window.angular;\n}\nmodule.exports = angular;\n\n\n\n/** WEBPACK FOOTER **\n ** ./angular-fix/index.js\n **/","const ngModuleName = 'formlyBootstrap';\nconst angular = require('./angular-fix');\nconst ngModule = angular.module(ngModuleName, [require('angular-formly')]);\nngModule.constant(\n 'formlyBootstrapApiCheck',\n require('api-check')({\n output: {\n prefix: 'angular-formly-bootstrap'\n }\n })\n);\nngModule.constant('formlyBootstrapVersion', VERSION);\n\nrequire('./wrappers')(ngModule);\nrequire('./types')(ngModule);\nrequire('./run')(ngModule);\n\nexport default ngModuleName;\n\n\n\n/** WEBPACK FOOTER **\n ** ./index.common.js\n **/","export default ngModule => {\n ngModule.run(addAddonsManipulator);\n\n function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n var addonTemplate = require('./addons.html');\n const addonChecker = formlyBootstrapApiCheck.shape({\n class: formlyBootstrapApiCheck.string.optional,\n text: formlyBootstrapApiCheck.string.optional,\n onClick: formlyBootstrapApiCheck.func.optional\n }).strict.optional;\n const api = formlyBootstrapApiCheck.shape({\n templateOptions: formlyBootstrapApiCheck.shape({\n addonLeft: addonChecker,\n addonRight: addonChecker\n })\n });\n formlyConfig.templateManipulators.preWrapper.push(function(template, options) {\n if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n return template;\n }\n formlyBootstrapApiCheck.warn([api], [options]);\n return addonTemplate.replace('', template);\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/addons.js\n **/","export default ngModule => {\n ngModule.run(addDescriptionManipulator);\n\n function addDescriptionManipulator(formlyConfig) {\n formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n if (angular.isDefined(options.templateOptions.description)) {\n var el = document.createElement('div');\n el.appendChild(angular.element(template)[0]);\n el.appendChild(angular.element(\n '

' +\n '{{to.description}}' +\n '

'\n )[0]);\n var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n if (modelEls) {\n modelEls.attr('aria-describedby', scope.id + '_description');\n }\n return el.innerHTML;\n } else {\n return template;\n }\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/description.js\n **/","import addons from './addons';\nimport description from './description';\n\nexport default ngModule => {\n addons(ngModule);\n description(ngModule);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./run/index.js\n **/","export default ngModule => {\n ngModule.config(addCheckboxType);\n\n function addCheckboxType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'checkbox',\n template: require('./checkbox.html'),\n wrapper: ['bootstrapHasError'],\n apiCheck: check => ({\n templateOptions: {\n \tlabel: check.string\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/checkbox.js\n **/","export default ngModule => {\n require('./checkbox')(ngModule);\n require('./multiCheckbox')(ngModule);\n require('./input')(ngModule);\n require('./radio')(ngModule);\n require('./select')(ngModule);\n require('./textarea')(ngModule);\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/index.js\n **/","export default ngModule => {\n ngModule.config(addInputType);\n\n function addInputType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'input',\n template: '',\n wrapper: ['bootstrapLabel', 'bootstrapHasError']\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/input.js\n **/","export default ngModule => {\n ngModule.config(addCheckboxType);\n\n function addCheckboxType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'multiCheckbox',\n template: require('./multiCheckbox.html'),\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n labelProp: check.string.optional,\n valueProp: check.string.optional\n }\n }),\n defaultOptions: {\n noFormControl: false,\n ngModelAttrs: {\n required: {\n attribute: '',\n bound: ''\n }\n }\n },\n controller: /* @ngInject */ function($scope) {\n const to = $scope.to;\n const opts = $scope.options;\n $scope.multiCheckbox = {\n checked: [],\n change: setModel\n };\n\n // initialize the checkboxes check property\n $scope.$watch('model', function modelWatcher(newModelValue) {\n var modelValue, valueProp;\n\n if (Object.keys(newModelValue).length) {\n modelValue = newModelValue[opts.key];\n\n $scope.$watch('to.options', function optionsWatcher(newOptionsValues) {\n if (newOptionsValues && Array.isArray(newOptionsValues) && Array.isArray(modelValue)) {\n valueProp = to.valueProp || 'value';\n for (var index = 0; index < newOptionsValues.length; index++) {\n $scope.multiCheckbox.checked[index] = modelValue.indexOf(newOptionsValues[index][valueProp]) !== -1;\n }\n }\n });\n }\n }, true);\n\n function checkValidity(expressionValue) {\n var valid;\n\n if ($scope.to.required) {\n valid = angular.isArray($scope.model[opts.key]) &&\n $scope.model[opts.key].length > 0 &&\n expressionValue;\n\n $scope.fc.$setValidity('required', valid);\n }\n }\n\n function setModel() {\n $scope.model[opts.key] = [];\n angular.forEach($scope.multiCheckbox.checked, (checkbox, index) => {\n if (checkbox) {\n $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n }\n });\n\n // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n $scope.fc.$setTouched();\n checkValidity(true);\n \n if ($scope.to.onChange) {\n $scope.to.onChange();\n }\n }\n\n if (opts.expressionProperties && opts.expressionProperties['templateOptions.required']) {\n $scope.$watch(function() {\n return $scope.to.required;\n }, function(newValue) {\n checkValidity(newValue);\n });\n }\n\n if ($scope.to.required) {\n var unwatchFormControl = $scope.$watch('fc', function(newValue) {\n if (!newValue) {\n return;\n }\n checkValidity(true);\n unwatchFormControl();\n });\n }\n }\n });\n }\n\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/multiCheckbox.js\n **/","export default ngModule => {\n ngModule.config(addRadioType);\n\n function addRadioType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'radio',\n template: require('./radio.html'),\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions: {\n noFormControl: false\n },\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n labelProp: check.string.optional,\n valueProp: check.string.optional,\n inline: check.bool.optional,\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/radio.js\n **/","export default ngModule => {\n ngModule.config(addSelectType);\n\n const template = ``;\n\n function addSelectType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'select',\n template,\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions(options) {\n /* jshint maxlen:195 */\n let ngOptions = options.templateOptions.ngOptions || `option[to.valueProp || 'value'] as option[to.labelProp || 'name'] group by option[to.groupProp || 'group'] for option in to.options`;\n return {\n ngModelAttrs: {\n [ngOptions]: {\n value: options.templateOptions.optionsAttr || 'ng-options'\n }\n }\n };\n },\n apiCheck: check => ({\n templateOptions: {\n options: check.arrayOf(check.object),\n optionsAttr: check.string.optional,\n labelProp: check.string.optional,\n valueProp: check.string.optional,\n groupProp: check.string.optional\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/select.js\n **/","export default ngModule => {\n ngModule.config(addTextareaType);\n\n function addTextareaType(formlyConfigProvider) {\n formlyConfigProvider.setType({\n name: 'textarea',\n template: '',\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n defaultOptions: {\n ngModelAttrs: {\n rows: {attribute: 'rows'},\n cols: {attribute: 'cols'}\n }\n },\n apiCheck: check => ({\n templateOptions: {\n rows: check.number.optional,\n cols: check.number.optional\n }\n })\n });\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./types/textarea.js\n **/","export default ngModule => {\n ngModule.config(addWrappers);\n\n function addWrappers(formlyConfigProvider) {\n formlyConfigProvider.setWrapper([\n {\n name: 'bootstrapLabel',\n template: require('./label.html'),\n apiCheck: check => ({\n templateOptions: {\n label: check.string.optional,\n required: check.bool.optional,\n labelSrOnly: check.bool.optional,\n }\n })\n },\n {name: 'bootstrapHasError', template: require('./has-error.html')}\n ]);\n }\n};\n\n\n\n/** WEBPACK FOOTER **\n ** ./wrappers/index.js\n **/","module.exports = \"
\\n
\\n \\n {{to.addonLeft.text}}\\n
\\n \\n
\\n \\n {{to.addonRight.text}}\\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./run/addons.html\n ** module id = 14\n ** module chunks = 0\n **/","module.exports = \"
\\n\\t\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/checkbox.html\n ** module id = 15\n ** module chunks = 0\n **/","module.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/multiCheckbox.html\n ** module id = 16\n ** module chunks = 0\n **/","module.exports = \"
\\n
\\n \\n
\\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./types/radio.html\n ** module id = 17\n ** module chunks = 0\n **/","module.exports = \"
\\n \\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./wrappers/has-error.html\n ** module id = 18\n ** module chunks = 0\n **/","module.exports = \"
\\n \\n \\n
\\n\"\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ./wrappers/label.html\n ** module id = 19\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_20__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external \"angular\"\n ** module id = 20\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_21__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"apiCheck\",\"amd\":\"api-check\",\"commonjs2\":\"api-check\",\"commonjs\":\"api-check\"}\n ** module id = 21\n ** module chunks = 0\n **/","module.exports = __WEBPACK_EXTERNAL_MODULE_22__;\n\n\n/*****************\n ** WEBPACK FOOTER\n ** external {\"root\":\"ngFormly\",\"amd\":\"angular-formly\",\"commonjs2\":\"angular-formly\",\"commonjs\":\"angular-formly\"}\n ** module id = 22\n ** module chunks = 0\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/angular-strap.min.js b/static/js/angular-strap.min.js new file mode 100644 index 0000000..7bdeee8 --- /dev/null +++ b/static/js/angular-strap.min.js @@ -0,0 +1,11 @@ +/** + * angular-strap + * @version v2.3.10 - 2016-10-17 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (https://github.com/mgcrea) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +!function(e,t,n){'use strict';function a(e,n,a,o,i,r){function s(e,n){return angular.element((n||t).querySelectorAll(e))}function l(e){return u[e]?u[e]:u[e]=n.get(e,{cache:r}).then(function(e){return e.data})}this.compile=function(t){t.template&&/\.html$/.test(t.template)&&(console.warn('Deprecated use of `template` option to pass a file. Please use the `templateUrl` option instead.'),t.templateUrl=t.template,t.template='');var n=t.templateUrl,r=t.template||'',u=t.controller,c=t.controllerAs,d=angular.copy(t.resolve||{}),f=angular.copy(t.locals||{}),p=t.transformTemplate||angular.identity,g=t.bindToController;if(angular.forEach(d,function(e,t){angular.isString(e)?d[t]=a.get(e):d[t]=a.invoke(e)}),angular.extend(d,f),r)d.$template=e.when(r);else{if(!n)throw new Error('Missing `template` / `templateUrl` option.');d.$template=l(n)}return t.titleTemplate&&(d.$template=e.all([d.$template,l(t.titleTemplate)]).then(function(e){var t=angular.element(e[0]);return s('[ng-bind="title"]',t[0]).removeAttr('ng-bind').html(e[1]),t[0].outerHTML})),t.contentTemplate&&(d.$template=e.all([d.$template,l(t.contentTemplate)]).then(function(e){var n=angular.element(e[0]),a=s('[ng-bind="content"]',n[0]).removeAttr('ng-bind').html(e[1]);return t.templateUrl||a.next().remove(),n[0].outerHTML})),e.all(d).then(function(e){var n=p(e.$template);t.html&&(n=n.replace(/ng-bind="/gi,'ng-bind-html="'));var a=angular.element('
').html(n.trim()).contents(),r=o(a);return{locals:e,element:a,link:function(t){if(e.$scope=t,u){var n=i(u,e,!0);g&&angular.extend(n.instance,e);var o=angular.isObject(n)?n:n();a.data('$ngControllerController',o),a.children().data('$ngControllerController',o),c&&(t[c]=o)}return r.apply(null,arguments)}}})};var u={}}a.$inject=['$q','$http','$injector','$compile','$controller','$templateCache'],angular.module('mgcrea.ngStrap.typeahead',['mgcrea.ngStrap.tooltip','mgcrea.ngStrap.helpers.parseOptions']).provider('$typeahead',function(){var e=this.defaults={animation:'am-fade',prefixClass:'typeahead',prefixEvent:'$typeahead',placement:'bottom-left',templateUrl:'typeahead/typeahead.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,minLength:1,filter:'bsAsyncFilter',limit:6,autoSelect:!1,comparator:'',trimValue:!0};this.$get=['$window','$rootScope','$tooltip','$$rAF','$timeout',function(t,n,a,o,i){function r(t,n,r){var l={},u=angular.extend({},e,r);l=a(t,u);var c=r.scope,d=l.$scope;d.$resetMatches=function(){d.$matches=[],d.$activeIndex=u.autoSelect?0:-1},d.$resetMatches(),d.$activate=function(e){d.$$postDigest(function(){l.activate(e)})},d.$select=function(e,t){d.$$postDigest(function(){l.select(e)})},d.$isVisible=function(){return l.$isVisible()},l.update=function(e){d.$matches=e,d.$activeIndex>=e.length&&(d.$activeIndex=u.autoSelect?0:-1),s(d),o(l.$applyPlacement)},l.activate=function(e){d.$activeIndex=e},l.select=function(e){if(e!==-1){var t=d.$matches[e].value;n.$setViewValue(t),n.$render(),d.$resetMatches(),c&&c.$digest(),d.$emit(u.prefixEvent+'.select',t,e,l),angular.isDefined(u.onSelect)&&angular.isFunction(u.onSelect)&&u.onSelect(t,e,l)}},l.$isVisible=function(){return u.minLength&&n?d.$matches.length&&angular.isString(n.$viewValue)&&n.$viewValue.length>=u.minLength:!!d.$matches.length},l.$getIndex=function(e){var t;for(t=d.$matches.length;t--&&!angular.equals(d.$matches[t].value,e););return t},l.$onMouseDown=function(e){e.preventDefault(),e.stopPropagation()},l.$onKeyDown=function(e){/(38|40|13)/.test(e.keyCode)&&(!l.$isVisible()||13===e.keyCode&&d.$activeIndex===-1||(e.preventDefault(),e.stopPropagation()),13===e.keyCode&&d.$matches.length?l.select(d.$activeIndex):38===e.keyCode&&d.$activeIndex>0?d.$activeIndex--:40===e.keyCode&&d.$activeIndex0?void r.$setViewValue(r.$viewValue.substring(0,r.$viewValue.length-1)):(e.length>c&&(e=e.slice(0,c)),g.update(e),void r.$render())})}),r.$formatters.push(function(e){var t=p.displayValue(e);return t?t:angular.isDefined(e)&&'object'!=typeof e?e:''}),r.$render=function(){if(r.$isEmpty(r.$viewValue))return t.val('');var e=g.$getIndex(r.$modelValue),n=e!==-1?g.$scope.$matches[e].label:r.$viewValue;n=angular.isObject(n)?p.displayValue(n):n;var a=n?n.toString().replace(/<(?:.|\n)*?>/gm,''):'',o=t[0].selectionStart,i=t[0].selectionEnd;t.val(s.trimValue===!1?a:a.trim()),t[0].setSelectionRange(o,i)},e.$on('$destroy',function(){g&&g.destroy(),s=null,g=null})}}}]),angular.module('mgcrea.ngStrap.tooltip',['mgcrea.ngStrap.core','mgcrea.ngStrap.helpers.dimensions']).provider('$tooltip',function(){var e=this.defaults={animation:'am-fade',customClass:'',prefixClass:'tooltip',prefixEvent:'tooltip',container:!1,target:!1,placement:'top',templateUrl:'tooltip/tooltip.tpl.html',template:'',titleTemplate:!1,trigger:'hover focus',keyboard:!1,html:!1,show:!1,title:'',type:'',delay:0,autoClose:!1,bsEnabled:!0,mouseDownPreventDefault:!0,mouseDownStopPropagation:!0,viewport:{selector:'body',padding:0}};this.$get=['$window','$rootScope','$bsCompiler','$q','$templateCache','$http','$animate','$sce','dimensions','$$rAF','$timeout',function(n,a,o,i,r,s,l,u,c,d,f){function p(i,r){function s(){O.$emit(V.prefixEvent+'.show',F),angular.isDefined(V.onShow)&&angular.isFunction(V.onShow)&&V.onShow(F)}function p(){if(O.$emit(V.prefixEvent+'.hide',F),angular.isDefined(V.onHide)&&angular.isFunction(V.onHide)&&V.onHide(F),B===q){if(Y&&'focus'===V.trigger)return i[0].blur();M()}}function $(){var e=V.trigger.split(' ');angular.forEach(e,function(e){'click'===e||'contextmenu'===e?i.on(e,F.toggle):'manual'!==e&&(i.on('hover'===e?'mouseenter':'focus',F.enter),i.on('hover'===e?'mouseleave':'blur',F.leave),'button'===I&&'hover'!==e&&i.on(h?'touchstart':'mousedown',F.$onFocusElementMouseDown))})}function w(){for(var e=V.trigger.split(' '),t=e.length;t--;){var n=e[t];'click'===n||'contextmenu'===n?i.off(n,F.toggle):'manual'!==n&&(i.off('hover'===n?'mouseenter':'focus',F.enter),i.off('hover'===n?'mouseleave':'blur',F.leave),'button'===I&&'hover'!==n&&i.off(h?'touchstart':'mousedown',F.$onFocusElementMouseDown))}}function y(){'focus'!==V.trigger?B.on('keyup',F.$onKeyUp):i.on('keyup',F.$onFocusKeyUp)}function b(){'focus'!==V.trigger?B.off('keyup',F.$onKeyUp):i.off('keyup',F.$onFocusKeyUp)}function D(){f(function(){B.on('click',k),v.on('click',F.hide),j=!0},0,!1)}function S(){j&&(B.off('click',k),v.off('click',F.hide),j=!1)}function k(e){e.stopPropagation()}function x(e){e=e||V.target||i;var a=e[0],o='BODY'===a.tagName,r=a.getBoundingClientRect(),s={};for(var l in r)s[l]=r[l];null===s.width&&(s=angular.extend({},s,{width:r.right-r.left,height:r.bottom-r.top}));var u=o?{top:0,left:0}:c.offset(a),d={scroll:o?t.documentElement.scrollTop||t.body.scrollTop:e.prop('scrollTop')||0},f=o?{width:t.documentElement.clientWidth,height:n.innerHeight}:null;return angular.extend({},s,d,f,u)}function C(e,t,n,a){var o,i=e.split('-');switch(i[0]){case'right':o={top:t.top+t.height/2-a/2,left:t.left+t.width};break;case'bottom':o={top:t.top+t.height,left:t.left+t.width/2-n/2};break;case'left':o={top:t.top+t.height/2-a/2,left:t.left-n};break;default:o={top:t.top-a,left:t.left+t.width/2-n/2}}if(!i[1])return o;if('top'===i[0]||'bottom'===i[0])switch(i[1]){case'left':o.left=t.left;break;case'right':o.left=t.left+t.width-n}else if('left'===i[0]||'right'===i[0])switch(i[1]){case'top':o.top=t.top-a+t.height;break;case'bottom':o.top=t.top}return o}function T(e,t){var n=B[0],a=n.offsetWidth,o=n.offsetHeight,i=parseInt(c.css(n,'margin-top'),10),r=parseInt(c.css(n,'margin-left'),10);isNaN(i)&&(i=0),isNaN(r)&&(r=0),e.top=e.top+i,e.left=e.left+r,c.setOffset(n,angular.extend({using:function(e){B.css({top:Math.round(e.top)+'px',left:Math.round(e.left)+'px',right:''})}},e),0);var s=n.offsetWidth,l=n.offsetHeight;if('top'===t&&l!==o&&(e.top=e.top+o-l),!/top-left|top-right|bottom-left|bottom-right/.test(t)){var u=E(t,e,s,l);if(u.left?e.left+=u.left:e.top+=u.top,c.setOffset(n,e),/top|right|bottom|left/.test(t)){var d=/top|bottom/.test(t),f=d?2*u.left-a+s:2*u.top-o+l,p=d?'offsetWidth':'offsetHeight';A(f,n[p],d)}}}function E(e,t,n,a){var o={top:0,left:0};if(!F.$viewport)return o;var i=V.viewport&&V.viewport.padding||0,r=x(F.$viewport);if(/right|left/.test(e)){var s=t.top-i-r.scroll,l=t.top+i-r.scroll+a;sr.top+r.height&&(o.top=r.top+r.height-l)}else{var u=t.left-i,c=t.left+i+n;ur.right&&(o.left=r.left+r.width-c)}return o}function A(e,t,n){var a=m('.tooltip-arrow, .arrow',B[0]);a.css(n?'left':'top',50*(1-e/t)+'%').css(n?'top':'left','')}function M(){clearTimeout(P),F.$isShown&&null!==B&&(V.autoClose&&S(),V.keyboard&&b()),z&&(z.$destroy(),z=null),B&&(B.remove(),B=F.$element=null)}var F={},V=F.$options=angular.extend({},e,r),H=F.$promise=o.compile(V),O=F.$scope=V.scope&&V.scope.$new()||a.$new(),I=i[0].nodeName.toLowerCase();if(V.delay&&angular.isString(V.delay)){var N=V.delay.split(',').map(parseFloat);V.delay=N.length>1?{show:N[0],hide:N[1]}:N[0]}F.$id=V.id||i.attr('id')||'',V.title&&(O.title=u.trustAsHtml(V.title)),O.$setEnabled=function(e){O.$$postDigest(function(){F.setEnabled(e)})},O.$hide=function(){O.$$postDigest(function(){F.hide()})},O.$show=function(){O.$$postDigest(function(){F.show()})},O.$toggle=function(){O.$$postDigest(function(){F.toggle()})},F.$isShown=O.$isShown=!1;var P,U,L,B,R,z;H.then(function(e){L=e,F.init()}),F.init=function(){V.delay&&angular.isNumber(V.delay)&&(V.delay={show:V.delay,hide:V.delay}),'self'===V.container?R=i:angular.isElement(V.container)?R=V.container:V.container&&(R=m(V.container)),$(),V.target&&(V.target=angular.isElement(V.target)?V.target:m(V.target)),V.show&&O.$$postDigest(function(){'focus'===V.trigger?i[0].focus():F.show()})},F.destroy=function(){w(),M(),O.$destroy()},F.enter=function(){return clearTimeout(P),U='in',V.delay&&V.delay.show?void(P=setTimeout(function(){'in'===U&&F.show()},V.delay.show)):F.show()},F.show=function(){if(V.bsEnabled&&!F.$isShown){O.$emit(V.prefixEvent+'.show.before',F),angular.isDefined(V.onBeforeShow)&&angular.isFunction(V.onBeforeShow)&&V.onBeforeShow(F);var e,t;V.container?(e=R,t=R[0].lastChild?angular.element(R[0].lastChild):null):(e=null,t=i),B&&M(),z=F.$scope.$new(),B=F.$element=L.link(z,function(e,t){}),B.css({top:'-9999px',left:'-9999px',right:'auto',display:'block',visibility:'hidden'}),V.animation&&B.addClass(V.animation),V.type&&B.addClass(V.prefixClass+'-'+V.type),V.customClass&&B.addClass(V.customClass),t?t.after(B):e.prepend(B),F.$isShown=O.$isShown=!0,g(O),F.$applyPlacement(),angular.version.minor<=2?l.enter(B,e,t,s):l.enter(B,e,t).then(s),g(O),d(function(){B&&B.css({visibility:'visible'}),V.keyboard&&('focus'!==V.trigger&&F.focus(),y())}),V.autoClose&&D()}},F.leave=function(){return clearTimeout(P),U='out',V.delay&&V.delay.hide?void(P=setTimeout(function(){'out'===U&&F.hide()},V.delay.hide)):F.hide()};var Y,q;F.hide=function(e){F.$isShown&&(O.$emit(V.prefixEvent+'.hide.before',F),angular.isDefined(V.onBeforeHide)&&angular.isFunction(V.onBeforeHide)&&V.onBeforeHide(F),Y=e,q=B,angular.version.minor<=2?l.leave(B,p):l.leave(B).then(p),F.$isShown=O.$isShown=!1,g(O),V.keyboard&&null!==B&&b(),V.autoClose&&null!==B&&S())},F.toggle=function(e){e&&e.preventDefault(),F.$isShown?F.leave():F.enter()},F.focus=function(){B[0].focus()},F.setEnabled=function(e){V.bsEnabled=e},F.setViewport=function(e){V.viewport=e},F.$applyPlacement=function(){if(B){var t=V.placement,n=/\s?auto?\s?/i,a=n.test(t);a&&(t=t.replace(n,'')||e.placement),B.addClass(V.placement);var o=x(),i=B.prop('offsetWidth'),r=B.prop('offsetHeight');if(F.$viewport=V.viewport&&m(V.viewport.selector||V.viewport),a){var s=t,l=x(F.$viewport);/bottom/.test(s)&&o.bottom+r>l.bottom?t=s.replace('bottom','top'):/top/.test(s)&&o.top-rl.width&&(t=t.replace('right','left')),B.removeClass(s).addClass(t)}var u=C(t,o,i,r);T(u,t)}},F.$onKeyUp=function(e){27===e.which&&F.$isShown&&(F.hide(),e.stopPropagation())},F.$onFocusKeyUp=function(e){27===e.which&&(i[0].blur(),e.stopPropagation())},F.$onFocusElementMouseDown=function(e){V.mouseDownPreventDefault&&e.preventDefault(),V.mouseDownStopPropagation&&e.stopPropagation(),F.$isShown?i[0].blur():i[0].focus()};var j=!1;return F}function g(e){e.$$phase||e.$root&&e.$root.$$phase||e.$digest()}function m(e,n){return angular.element((n||t).querySelectorAll(e))}var $=/(ip[ao]d|iphone|android)/gi.test(n.navigator.userAgent),h='createTouch'in n.document&&$,v=angular.element(n.document);return p}]}).directive('bsTooltip',['$window','$location','$sce','$parse','$tooltip','$$rAF',function(e,t,n,a,o,i){return{restrict:'EAC',scope:!0,link:function(e,t,a,r){var s,l={scope:e};angular.forEach(['template','templateUrl','controller','controllerAs','titleTemplate','placement','container','delay','trigger','html','animation','backdropAnimation','type','customClass','id'],function(e){angular.isDefined(a[e])&&(l[e]=a[e])});var u=/^(false|0|)$/i;angular.forEach(['html','container'],function(e){angular.isDefined(a[e])&&u.test(a[e])&&(l[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var n='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(a[n])&&(l[t]=e.$eval(a[n]))});var c=t.attr('data-target');angular.isDefined(c)&&(u.test(c)?l.target=!1:l.target=c),e.hasOwnProperty('title')||(e.title=''),a.$observe('title',function(t){if(angular.isDefined(t)||!e.hasOwnProperty('title')){var a=e.title;e.title=n.trustAsHtml(t),angular.isDefined(a)&&i(function(){s&&s.$applyPlacement()})}}),a.$observe('disabled',function(e){e&&s.$isShown&&s.hide()}),a.bsTooltip&&e.$watch(a.bsTooltip,function(t,n){angular.isObject(t)?angular.extend(e,t):e.title=t,angular.isDefined(n)&&i(function(){s&&s.$applyPlacement()})},!0),a.bsShow&&e.$watch(a.bsShow,function(e,t){s&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(tooltip),?/i)),e===!0?s.show():s.hide())}),a.bsEnabled&&e.$watch(a.bsEnabled,function(e,t){s&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|1|,?(tooltip),?/i)),e===!1?s.setEnabled(!1):s.setEnabled(!0))}),a.viewport&&e.$watch(a.viewport,function(e){s&&angular.isDefined(e)&&s.setViewport(e)}),s=o(t,l),e.$on('$destroy',function(){s&&s.destroy(),l=null,s=null})}}}]),angular.module('mgcrea.ngStrap.timepicker',['mgcrea.ngStrap.helpers.dateParser','mgcrea.ngStrap.helpers.dateFormatter','mgcrea.ngStrap.tooltip']).provider('$timepicker',function(){var e=this.defaults={animation:'am-fade',defaultDate:'auto',prefixClass:'timepicker',placement:'bottom-left',templateUrl:'timepicker/timepicker.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,useNative:!0,timeType:'date',timeFormat:'shortTime',timezone:null,modelTimeFormat:null,autoclose:!1,minTime:-(1/0),maxTime:+(1/0),length:5,hourStep:1,minuteStep:5,secondStep:5,roundDisplay:!1,iconUp:'glyphicon glyphicon-chevron-up',iconDown:'glyphicon glyphicon-chevron-down',arrowBehavior:'pager'};this.$get=['$window','$document','$rootScope','$sce','$dateFormatter','$tooltip','$timeout',function(t,n,a,o,i,r,s){function l(t,n,a){function o(e){var t=6e4*g.minuteStep;return new Date(Math.floor(e.getTime()/t)*t)}function l(e,n){var a=e+n;if(t[0].createTextRange){var o=t[0].createTextRange();o.collapse(!0),o.moveStart('character',e),o.moveEnd('character',a),o.select()}else t[0].setSelectionRange?t[0].setSelectionRange(e,a):angular.isUndefined(t[0].selectionStart)&&(t[0].selectionStart=e,t[0].selectionEnd=a)}function d(){t[0].focus()}var f=r(t,angular.extend({},e,a)),p=a.scope,g=f.$options,m=f.$scope,$=g.lang,h=function(e,t,n){return i.formatDate(e,t,$,n)},v=0,w=g.roundDisplay?o(new Date):new Date,y=n.$dateValue||w,b={hour:y.getHours(),meridian:y.getHours()<12,minute:y.getMinutes(),second:y.getSeconds(),millisecond:y.getMilliseconds()},D=i.getDatetimeFormat(g.timeFormat,$),S=i.hoursFormat(D),k=i.timeSeparator(D),x=i.minutesFormat(D),C=i.secondsFormat(D),T=i.showSeconds(D),E=i.showAM(D);m.$iconUp=g.iconUp,m.$iconDown=g.iconDown,m.$select=function(e,t){f.select(e,t)},m.$moveIndex=function(e,t){f.$moveIndex(e,t)},m.$switchMeridian=function(e){f.switchMeridian(e)},f.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())?(f.$date=e,angular.extend(b,{hour:e.getHours(),minute:e.getMinutes(),second:e.getSeconds(),millisecond:e.getMilliseconds()}),f.$build()):f.$isBuilt||f.$build()},f.select=function(e,t,a){n.$dateValue&&!isNaN(n.$dateValue.getTime())||(n.$dateValue='today'===g.defaultDate?new Date:new Date(1970,0,1)),angular.isDate(e)||(e=new Date(e)),0===t?n.$dateValue.setHours(e.getHours()):1===t?n.$dateValue.setMinutes(e.getMinutes()):2===t&&n.$dateValue.setSeconds(e.getSeconds()),n.$setViewValue(angular.copy(n.$dateValue)),n.$render(),g.autoclose&&!a&&s(function(){f.hide(!0)})},f.switchMeridian=function(e){if(n.$dateValue&&!isNaN(n.$dateValue.getTime())){var t=(e||n.$dateValue).getHours();n.$dateValue.setHours(t<12?t+12:t-12),n.$setViewValue(angular.copy(n.$dateValue)),n.$render()}},f.$build=function(){var e,t,n=m.midIndex=parseInt(g.length/2,10),a=[];for(e=0;e1*g.maxTime},m.$arrowAction=function(e,t){'picker'===g.arrowBehavior?f.$setTimeByStep(e,t):f.$moveIndex(e,t)},f.$setTimeByStep=function(e,t){var n=new Date(f.$date||y),a=n.getHours(),o=n.getMinutes(),i=n.getSeconds();0===t?n.setHours(a-parseInt(g.hourStep,10)*e):1===t?n.setMinutes(o-parseInt(g.minuteStep,10)*e):2===t&&n.setSeconds(i-parseInt(g.secondStep,10)*e),f.select(n,t,!0)},f.$moveIndex=function(e,t){var n;0===t?(n=new Date(1970,0,1,b.hour+e*g.length,b.minute,b.second),angular.extend(b,{hour:n.getHours()})):1===t?(n=new Date(1970,0,1,b.hour,b.minute+e*g.length*g.minuteStep,b.second),angular.extend(b,{minute:n.getMinutes()})):2===t&&(n=new Date(1970,0,1,b.hour,b.minute,b.second+e*g.length*g.secondStep),angular.extend(b,{second:n.getSeconds()})),f.$build()},f.$onMouseDown=function(e){if('input'!==e.target.nodeName.toLowerCase()&&e.preventDefault(),e.stopPropagation(),c){var t=angular.element(e.target);'button'!==t[0].nodeName.toLowerCase()&&(t=t.parent()),t.triggerHandler('click')}},f.$onKeyDown=function(e){if(/(38|37|39|40|13)/.test(e.keyCode)&&!e.shiftKey&&!e.altKey){if(e.preventDefault(),e.stopPropagation(),13===e.keyCode)return void f.hide(!0);var t=new Date(f.$date),n=t.getHours(),a=h(t,S).length,o=t.getMinutes(),i=h(t,x).length,r=t.getSeconds(),s=h(t,C).length,u=1,c=/(37|39)/.test(e.keyCode),d=2+1*T+1*E;c&&(37===e.keyCode?v=v<1?d-1:v-1:39===e.keyCode&&(v=v=f.minTime,n=isNaN(f.maxTime)||new Date(e.getTime()).setFullYear(1970,0,1)<=f.maxTime,a=t&&n;u.$setValidity('date',a),u.$setValidity('min',t),u.$setValidity('max',n),a&&(u.$dateValue=e)}}function d(){return!u.$dateValue||isNaN(u.$dateValue.getTime())?'':$(u.$dateValue,f.timeFormat)}var f={scope:e};angular.forEach(['template','templateUrl','controller','controllerAs','placement','container','delay','trigger','keyboard','html','animation','autoclose','timeType','timeFormat','timezone','modelTimeFormat','useNative','hourStep','minuteStep','secondStep','length','arrowBehavior','iconUp','iconDown','roundDisplay','id','prefixClass','prefixEvent','defaultDate'],function(e){angular.isDefined(a[e])&&(f[e]=a[e])});var p=/^(false|0|)$/i;angular.forEach(['html','container','autoclose','useNative','roundDisplay'],function(e){angular.isDefined(a[e])&&p.test(a[e])&&(f[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var n='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(a[n])&&(f[t]=e.$eval(a[n]))}),l&&(f.useNative||s.useNative)&&(f.timeFormat='HH:mm');var g=r(t,u,f);f=g.$options;var m=f.lang,$=function(e,t,n){return o.formatDate(e,t,m,n)};a.bsShow&&e.$watch(a.bsShow,function(e,t){g&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(timepicker),?/i)),e===!0?g.show():g.hide())});var h=i({format:f.timeFormat,lang:m});angular.forEach(['minTime','maxTime'],function(e){angular.isDefined(a[e])&&a.$observe(e,function(t){g.$options[e]=h.getTimeForAttribute(e,t),isNaN(g.$options[e])||g.$build(),c(u.$dateValue)})}),e.$watch(a.ngModel,function(e,t){g.update(u.$dateValue)},!0),u.$parsers.unshift(function(e){var t;if(!e)return u.$setValidity('date',!0),null;var a=angular.isDate(e)?e:h.parse(e,u.$dateValue);return!a||isNaN(a.getTime())?(u.$setValidity('date',!1),n):(c(a),'string'===f.timeType?(t=h.timezoneOffsetAdjust(a,f.timezone,!0),$(t,f.modelTimeFormat||f.timeFormat)):(t=h.timezoneOffsetAdjust(u.$dateValue,f.timezone,!0),'number'===f.timeType?t.getTime():'unix'===f.timeType?t.getTime()/1e3:'iso'===f.timeType?t.toISOString():new Date(t)))}),u.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?NaN:angular.isDate(e)?e:'string'===f.timeType?h.parse(e,null,f.modelTimeFormat):'unix'===f.timeType?new Date(1e3*e):new Date(e),u.$dateValue=h.timezoneOffsetAdjust(t,f.timezone),d()}),u.$render=function(){t.val(d())},e.$on('$destroy',function(){g&&g.destroy(),f=null,g=null})}}}]),angular.module('mgcrea.ngStrap.tab',[]).provider('$tab',function(){var e=this.defaults={animation:'am-fade',template:'tab/tab.tpl.html',navClass:'nav-tabs',activeClass:'active'},t=this.controller=function(t,n,a){var o=this;o.$options=angular.copy(e),angular.forEach(['animation','navClass','activeClass'],function(e){angular.isDefined(a[e])&&(o.$options[e]=a[e])}),t.$navClass=o.$options.navClass,t.$activeClass=o.$options.activeClass,o.$panes=t.$panes=[],o.$activePaneChangeListeners=o.$viewChangeListeners=[],o.$push=function(e){angular.isUndefined(o.$panes.$active)&&t.$setActive(e.name||0),o.$panes.push(e)},o.$remove=function(e){var t,n=o.$panes.indexOf(e),a=o.$panes.$active;t=angular.isString(a)?o.$panes.map(function(e){return e.name}).indexOf(a):o.$panes.$active,o.$panes.splice(n,1),n=0&&t0||(m.off('click',this.checkPositionWithEventLoop),d.off('resize',y),m.off('scroll',b),h(),v(),$&&delete e[$])},x.checkPosition=function(){if(T.length){if(k=(g?a.pageYOffset:m.prop('scrollTop'))||0,S=Math.max(a.innerHeight,f.prop('clientHeight')),kT[e+1].offsetTop))return x.$activateElement(T[e])}},x.checkPositionWithEventLoop=function(){setTimeout(x.checkPosition,1)},x.$activateElement=function(e){if(w){var t=x.$getTrackedElement(w);t&&(t.source.removeClass('active'),u(t.source,'li')&&u(t.source.parent().parent(),'li')&&t.source.parent().parent().removeClass('active'))}w=e.target,e.source.addClass('active'),u(e.source,'li')&&u(e.source.parent().parent(),'li')&&e.source.parent().parent().addClass('active')},x.$getTrackedElement=function(e){return C.filter(function(t){return t.target===e})[0]},x.checkOffsets=function(){angular.forEach(C,function(e){var n=t.querySelector(e.target);e.offsetTop=n?r.offset(n).top:null,c.offset&&null!==e.offsetTop&&(e.offsetTop-=1*c.offset)}),T=C.filter(function(e){return null!==e.offsetTop}).sort(function(e,t){return e.offsetTop-t.offsetTop}),y()},x.trackElement=function(e,t){C.push({target:e,source:t})},x.untrackElement=function(e,t){for(var n,a=C.length;a--;)if(C[a].target===e&&C[a].source===t){n=a;break}C.splice(n,1)},x.activate=function(e){C[e].addClass('active')},x.init(),x}var d=angular.element(a),f=angular.element(o.prop('documentElement')),p=angular.element(a.document.body);return c}]}).directive('bsScrollspy',['$rootScope','debounce','dimensions','$scrollspy',function(e,t,n,a){return{restrict:'EAC',link:function(e,t,n){var o={scope:e};angular.forEach(['offset','target'],function(e){angular.isDefined(n[e])&&(o[e]=n[e])});var i=a(o);i.trackElement(o.target,t),e.$on('$destroy',function(){i&&(i.untrackElement(o.target,t),i.destroy()),o=null,i=null})}}}]).directive('bsScrollspyList',['$rootScope','debounce','dimensions','$scrollspy',function(e,t,n,a){return{restrict:'A',compile:function(e,t){var n=e[0].querySelectorAll('li > a[href]');angular.forEach(n,function(e){var t=angular.element(e);t.parent().attr('bs-scrollspy','').attr('data-target',t.attr('href'))})}}}]),angular.module('mgcrea.ngStrap.select',['mgcrea.ngStrap.tooltip','mgcrea.ngStrap.helpers.parseOptions']).provider('$select',function(){var e=this.defaults={animation:'am-fade',prefixClass:'select',prefixEvent:'$select',placement:'bottom-left',templateUrl:'select/select.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,multiple:!1,allNoneButtons:!1,sort:!0,caretHtml:' ',placeholder:'Choose among the following...',allText:'All',noneText:'None',maxLength:3,maxLengthHtml:'selected',iconCheckmark:'glyphicon glyphicon-ok', +toggle:!1};this.$get=['$window','$document','$rootScope','$tooltip','$timeout',function(t,a,o,i,r){function s(o,s,l){var c={},d=angular.extend({},e,l);c=i(o,d);var f=c.$scope;f.$matches=[],d.multiple?f.$activeIndex=[]:f.$activeIndex=-1,f.$isMultiple=d.multiple,f.$showAllNoneButtons=d.allNoneButtons&&d.multiple,f.$iconCheckmark=d.iconCheckmark,f.$allText=d.allText,f.$noneText=d.noneText,f.$activate=function(e){f.$$postDigest(function(){c.activate(e)})},f.$select=function(e,t){f.$$postDigest(function(){c.select(e)})},f.$isVisible=function(){return c.$isVisible()},f.$isActive=function(e){return c.$isActive(e)},f.$selectAll=function(){for(var e=0;e=f.$matches.length)){var t=f.$matches[e].value;f.$apply(function(){c.activate(e),d.multiple?s.$setViewValue(f.$activeIndex.map(function(e){return angular.isUndefined(f.$matches[e])?null:f.$matches[e].value})):(d.toggle?s.$setViewValue(t===s.$modelValue?n:t):s.$setViewValue(t),c.hide())}),f.$emit(d.prefixEvent+'.select',t,e,c),angular.isDefined(d.onSelect)&&angular.isFunction(d.onSelect)&&d.onSelect(t,e,c)}},c.$updateActiveIndex=function(){d.multiple?angular.isArray(s.$modelValue)?f.$activeIndex=s.$modelValue.map(function(e){return c.$getIndex(e)}):f.$activeIndex=[]:angular.isDefined(s.$modelValue)&&f.$matches.length?f.$activeIndex=c.$getIndex(s.$modelValue):f.$activeIndex=-1},c.$isVisible=function(){return d.minLength&&s?f.$matches.length&&s.$viewValue.length>=d.minLength:f.$matches.length},c.$isActive=function(e){return d.multiple?f.$activeIndex.indexOf(e)!==-1:f.$activeIndex===e},c.$getIndex=function(e){var t;for(t=f.$matches.length;t--&&!angular.equals(f.$matches[t].value,e););return t},c.$onMouseDown=function(e){if(e.preventDefault(),e.stopPropagation(),u){var t,n=angular.element(e.target);if('A'!==e.target.nodeName)for(var a=n.parent();!t&&a.length>0;)'A'===a[0].nodeName&&(t=a),a=a.parent();t?angular.element(t).triggerHandler('click'):n.triggerHandler('click')}},c.$onKeyDown=function(e){if(/(9|13|38|40)/.test(e.keyCode))return 9!==e.keyCode&&(e.preventDefault(),e.stopPropagation()),d.multiple&&9===e.keyCode?c.hide():d.multiple||13!==e.keyCode&&9!==e.keyCode?void(d.multiple||(38===e.keyCode&&f.$activeIndex>0?f.$activeIndex--:38===e.keyCode&&f.$activeIndex<0?f.$activeIndex=f.$matches.length-1:40===e.keyCode&&f.$activeIndex0||e.indexOf('Trident/')>0||e.indexOf('Edge/')>0},c.$selectScrollFix=function(e){'UL'===a[0].activeElement.tagName&&(e.preventDefault(),e.stopImmediatePropagation(),e.target.focus())};var p=c.show;c.show=function(){p(),d.multiple&&c.$element.addClass('select-multiple'),r(function(){c.$element.on(u?'touchstart':'mousedown',c.$onMouseDown),d.keyboard&&o.on('keydown',c.$onKeyDown)},0,!1)};var g=c.hide;return c.hide=function(){!d.multiple&&angular.isUndefined(s.$modelValue)&&(f.$activeIndex=-1),c.$element.off(u?'touchstart':'mousedown',c.$onMouseDown),d.keyboard&&o.off('keydown',c.$onKeyDown),g(!0)},c}var l=/(ip[ao]d|iphone|android)/gi.test(t.navigator.userAgent),u='createTouch'in t.document&&l;return s.defaults=e,s}]}).directive('bsSelect',['$window','$parse','$q','$select','$parseOptions',function(e,t,n,a,o){var i=a.defaults;return{restrict:'EAC',require:'ngModel',link:function(e,t,n,r){var s={scope:e,placeholder:i.placeholder};angular.forEach(['template','templateUrl','controller','controllerAs','placement','container','delay','trigger','keyboard','html','animation','placeholder','allNoneButtons','maxLength','maxLengthHtml','allText','noneText','iconCheckmark','autoClose','id','sort','caretHtml','prefixClass','prefixEvent','toggle'],function(e){angular.isDefined(n[e])&&(s[e]=n[e])});var l=/^(false|0|)$/i;angular.forEach(['html','container','allNoneButtons','sort'],function(e){angular.isDefined(n[e])&&l.test(n[e])&&(s[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide','onSelect'],function(t){var a='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(n[a])&&(s[t]=e.$eval(n[a]))});var u=t.attr('data-multiple');if(angular.isDefined(u)&&(l.test(u)?s.multiple=!1:s.multiple=u),'select'===t[0].nodeName.toLowerCase()){var c=t;c.css('display','none'),t=angular.element(''),c.after(t)}var d=o(n.bsOptions),f=a(t,r,s);f.$isIE()&&t[0].addEventListener('blur',f.$selectScrollFix);var p=d.$match[7].replace(/\|.+/,'').trim();e.$watch(p,function(t,n){d.valuesFn(e,r).then(function(e){f.update(e),r.$render()})},!0),e.$watch(n.ngModel,function(e,t){f.$updateActiveIndex(),r.$render()},!0),r.$render=function(){var e,n;s.multiple&&angular.isArray(r.$modelValue)?(e=r.$modelValue.map(function(e){return n=f.$getIndex(e),n!==-1&&f.$scope.$matches[n].label}).filter(angular.isDefined),e=e.length>(s.maxLength||i.maxLength)?e.length+' '+(s.maxLengthHtml||i.maxLengthHtml):e.join(', ')):(n=f.$getIndex(r.$modelValue),e=n!==-1&&f.$scope.$matches[n].label),t.html((e||s.placeholder)+(s.caretHtml||i.caretHtml))},s.multiple&&(r.$isEmpty=function(e){return!e||0===e.length}),e.$on('$destroy',function(){f&&f.destroy(),s=null,f=null})}}}]),angular.module('mgcrea.ngStrap.popover',['mgcrea.ngStrap.tooltip']).provider('$popover',function(){var e=this.defaults={animation:'am-fade',customClass:'',container:!1,target:!1,placement:'right',templateUrl:'popover/popover.tpl.html',contentTemplate:!1,trigger:'click',keyboard:!0,html:!1,title:'',content:'',delay:0,autoClose:!1};this.$get=['$tooltip',function(t){function n(n,a){var o=angular.extend({},e,a),i=t(n,o);return o.content&&(i.$scope.content=o.content),i}return n}]}).directive('bsPopover',['$window','$sce','$popover',function(e,t,n){var a=e.requestAnimationFrame||e.setTimeout;return{restrict:'EAC',scope:!0,link:function(e,o,i){var r,s={scope:e};angular.forEach(['template','templateUrl','controller','controllerAs','contentTemplate','placement','container','delay','trigger','html','animation','customClass','autoClose','id','prefixClass','prefixEvent','bsEnabled'],function(e){angular.isDefined(i[e])&&(s[e]=i[e])});var l=/^(false|0|)$/i;angular.forEach(['html','container','autoClose'],function(e){angular.isDefined(i[e])&&l.test(i[e])&&(s[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var n='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(i[n])&&(s[t]=e.$eval(i[n]))});var u=o.attr('data-target');angular.isDefined(u)&&(l.test(u)?s.target=!1:s.target=u),angular.forEach(['title','content'],function(n){i[n]&&i.$observe(n,function(o,i){e[n]=t.trustAsHtml(o),angular.isDefined(i)&&a(function(){r&&r.$applyPlacement()})})}),i.bsPopover&&e.$watch(i.bsPopover,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t,angular.isDefined(n)&&a(function(){r&&r.$applyPlacement()})},!0),i.bsShow&&e.$watch(i.bsShow,function(e,t){r&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(popover),?/i)),e===!0?r.show():r.hide())}),i.bsEnabled&&e.$watch(i.bsEnabled,function(e){r&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|1|,?(popover),?/i)),e===!1?r.setEnabled(!1):r.setEnabled(!0))}),i.viewport&&e.$watch(i.viewport,function(e){r&&angular.isDefined(e)&&r.setViewport(e)}),r=n(o,s),e.$on('$destroy',function(){r&&r.destroy(),s=null,r=null})}}}]),angular.module('mgcrea.ngStrap.navbar',[]).provider('$navbar',function(){var e=this.defaults={activeClass:'active',routeAttr:'data-match-route',strict:!1};this.$get=function(){return{defaults:e}}}).directive('bsNavbar',['$window','$location','$navbar',function(e,t,n){var a=n.defaults;return{restrict:'A',link:function(e,n,o,i){var r=angular.copy(a);angular.forEach(Object.keys(a),function(e){angular.isDefined(o[e])&&(r[e]=o[e])}),e.$watch(function(){return t.path()},function(e,t){var a=n[0].querySelectorAll('li['+r.routeAttr+']');angular.forEach(a,function(t){var n=angular.element(t),a=n.attr(r.routeAttr).replace('/','\\/');r.strict&&(a='^'+a+'$');var o=new RegExp(a,'i');o.test(e)?n.addClass(r.activeClass):n.removeClass(r.activeClass)})})}}}]),angular.module('mgcrea.ngStrap.dropdown',['mgcrea.ngStrap.tooltip']).provider('$dropdown',function(){var e=this.defaults={animation:'am-fade',prefixClass:'dropdown',prefixEvent:'dropdown',placement:'bottom-left',templateUrl:'dropdown/dropdown.tpl.html',trigger:'click',container:!1,keyboard:!0,html:!1,delay:0};this.$get=['$window','$rootScope','$tooltip','$timeout',function(t,n,a,o){function i(t,i){function l(e){if(e.target!==t[0])return e.target!==t[0]&&u.hide()}var u={},c=angular.extend({},e,i);u.$scope=c.scope&&c.scope.$new()||n.$new(),u=a(t,c);var d=t.parent();u.$onKeyDown=function(e){if(/(38|40)/.test(e.keyCode)){e.preventDefault(),e.stopPropagation();var t=angular.element(u.$element[0].querySelectorAll('li:not(.divider) a'));if(t.length){var n;angular.forEach(t,function(e,t){s&&s.call(e,':focus')&&(n=t)}),38===e.keyCode&&n>0?n--:40===e.keyCode&&n=0&&(t.template=o.outerHTML,t.templateUrl=n,o.parentNode.removeChild(o))}return function(e,n,o){var i={scope:e};angular.forEach(['template','templateUrl','controller','controllerAs','placement','container','delay','trigger','keyboard','html','animation','id','autoClose'],function(e){angular.isDefined(t[e])&&(i[e]=t[e])});var r=/^(false|0|)$/i;angular.forEach(['html','container'],function(e){angular.isDefined(o[e])&&r.test(o[e])&&(i[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var n='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(o[n])&&(i[t]=e.$eval(o[n]))}),o.bsDropdown&&e.$watch(o.bsDropdown,function(t,n){e.content=t},!0);var s=a(n,i);o.bsShow&&e.$watch(o.bsShow,function(e,t){s&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(dropdown),?/i)),e===!0?s.show():s.hide())}),e.$on('$destroy',function(){s&&s.destroy(),i=null,s=null})}}}}]),angular.module('mgcrea.ngStrap.modal',['mgcrea.ngStrap.core','mgcrea.ngStrap.helpers.dimensions']).provider('$modal',function(){var e=this.defaults={animation:'am-fade',backdropAnimation:'am-fade',customClass:'',prefixClass:'modal',prefixEvent:'modal',placement:'top',templateUrl:'modal/modal.tpl.html',template:'',contentTemplate:!1,container:!1,element:null,backdrop:!0,keyboard:!0,html:!1,show:!0,size:null,zIndex:null};this.$get=['$window','$rootScope','$bsCompiler','$animate','$timeout','$sce','dimensions',function(n,a,o,i,r,s,l){function u(t){function n(){T.$emit(x.prefixEvent+'.show',k),angular.isDefined(x.onShow)&&angular.isFunction(x.onShow)&&x.onShow(k)}function r(){T.$emit(x.prefixEvent+'.hide',k),angular.isDefined(x.onHide)&&angular.isFunction(x.onHide)&&x.onHide(k),d('.modal').length<=0&&g.removeClass(x.prefixClass+'-open'),x.animation&&g.removeClass(x.prefixClass+'-with-'+x.animation)}function l(){x.backdrop&&(A.on('click',b),F.on('click',b),F.on('wheel',D))}function u(){x.backdrop&&(A.off('click',b),F.off('click',b),F.off('wheel',D))}function w(){x.keyboard&&A.on('keyup',k.$onKeyUp)}function y(){x.keyboard&&A.off('keyup',k.$onKeyUp)}function b(e){e.target===e.currentTarget&&('static'===x.backdrop?k.focus():k.hide())}function D(e){e.preventDefault()}function S(){k.$isShown&&null!==A&&(u(),y()),M&&(M.$destroy(),M=null),A&&(A.remove(),A=k.$element=null)}var k={},x=k.$options=angular.extend({},e,t),C=k.$promise=o.compile(x),T=k.$scope=x.scope&&x.scope.$new()||a.$new();x.element||x.container||(x.container='body'),x.zIndex&&($=parseInt(x.zIndex,10),h=$-10),k.$id=x.id||x.element&&x.element.attr('id')||'',f(['title','content'],function(e){x[e]&&(T[e]=s.trustAsHtml(x[e]))}),T.$hide=function(){T.$$postDigest(function(){k.hide()})},T.$show=function(){T.$$postDigest(function(){k.show()})},T.$toggle=function(){T.$$postDigest(function(){k.toggle()})},k.$isShown=T.$isShown=!1;var E,A,M,F=angular.element('
');return F.css({position:'fixed',top:'0px',left:'0px',bottom:'0px',right:'0px'}),C.then(function(e){E=e,k.init()}),k.init=function(){x.show&&T.$$postDigest(function(){k.show()})},k.destroy=function(){S(),F&&(F.remove(),F=null),T.$destroy()},k.show=function(){if(!k.$isShown){var e,t;if(angular.isElement(x.container)?(e=x.container,t=x.container[0].lastChild?angular.element(x.container[0].lastChild):null):x.container?(e=d(x.container),t=e[0]&&e[0].lastChild?angular.element(e[0].lastChild):null):(e=null,t=x.element),A&&S(),M=k.$scope.$new(),A=k.$element=E.link(M,function(e,t){}),x.backdrop&&(A.css({'z-index':$+20*m}),F.css({'z-index':h+20*m}),m++),!T.$emit(x.prefixEvent+'.show.before',k).defaultPrevented){angular.isDefined(x.onBeforeShow)&&angular.isFunction(x.onBeforeShow)&&x.onBeforeShow(k),A.css({display:'block'}).addClass(x.placement),x.customClass&&A.addClass(x.customClass),x.size&&v[x.size]&&angular.element(d('.modal-dialog',A[0])).addClass(v[x.size]),x.animation&&(x.backdrop&&F.addClass(x.backdropAnimation),A.addClass(x.animation)),x.backdrop&&i.enter(F,g,null),angular.version.minor<=2?i.enter(A,e,t,n):i.enter(A,e,t).then(n),k.$isShown=T.$isShown=!0,c(T);var a=A[0];p(function(){a.focus()}),g.addClass(x.prefixClass+'-open'),x.animation&&g.addClass(x.prefixClass+'-with-'+x.animation),l(),w()}}},k.hide=function(){k.$isShown&&(T.$emit(x.prefixEvent+'.hide.before',k).defaultPrevented||(angular.isDefined(x.onBeforeHide)&&angular.isFunction(x.onBeforeHide)&&x.onBeforeHide(k),angular.version.minor<=2?i.leave(A,r):i.leave(A).then(r),x.backdrop&&(m--,i.leave(F)),k.$isShown=T.$isShown=!1,c(T),u(),y()))},k.toggle=function(){k.$isShown?k.hide():k.show()},k.focus=function(){A[0].focus()},k.$onKeyUp=function(e){27===e.which&&k.$isShown&&(k.hide(),e.stopPropagation())},k}function c(e){e.$$phase||e.$root&&e.$root.$$phase||e.$digest()}function d(e,n){return angular.element((n||t).querySelectorAll(e))}var f=angular.forEach,p=n.requestAnimationFrame||n.setTimeout,g=angular.element(n.document.body),m=0,$=1050,h=1040,v={lg:'modal-lg',sm:'modal-sm'};return u}]}).directive('bsModal',['$window','$sce','$parse','$modal',function(e,t,n,a){return{restrict:'EAC',scope:!0,link:function(e,n,o,i){var r={scope:e,element:n,show:!1};angular.forEach(['template','templateUrl','controller','controllerAs','contentTemplate','placement','backdrop','keyboard','html','container','animation','backdropAnimation','id','prefixEvent','prefixClass','customClass','modalClass','size','zIndex'],function(e){angular.isDefined(o[e])&&(r[e]=o[e])}),r.modalClass&&(r.customClass=r.modalClass);var s=/^(false|0|)$/i;angular.forEach(['backdrop','keyboard','html','container'],function(e){angular.isDefined(o[e])&&s.test(o[e])&&(r[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var n='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(o[n])&&(r[t]=e.$eval(o[n]))}),angular.forEach(['title','content'],function(n){o[n]&&o.$observe(n,function(a,o){e[n]=t.trustAsHtml(a)})}),o.bsModal&&e.$watch(o.bsModal,function(t,n){angular.isObject(t)?angular.extend(e,t):e.content=t},!0);var l=a(r);n.on(o.trigger||'click',l.toggle),e.$on('$destroy',function(){l&&l.destroy(),r=null,l=null})}}}]),angular.version.minor<3&&angular.version.dot<14&&angular.module('ng').factory('$$rAF',['$window','$timeout',function(e,t){var n=e.requestAnimationFrame||e.webkitRequestAnimationFrame||e.mozRequestAnimationFrame,a=e.cancelAnimationFrame||e.webkitCancelAnimationFrame||e.mozCancelAnimationFrame||e.webkitCancelRequestAnimationFrame,o=!!n,i=o?function(e){var t=n(e);return function(){a(t)}}:function(e){var n=t(e,16.66,!1);return function(){t.cancel(n)}};return i.supported=o,i}]),angular.module('mgcrea.ngStrap.helpers.parseOptions',[]).provider('$parseOptions',function(){var e=this.defaults={regexp:/^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/};this.$get=['$parse','$q',function(t,n){function a(a,o){function i(e,t){return e.map(function(e,n){var a,o,i={};return i[c]=e,a=u(t,i),o=p(t,i),{label:a,value:o,index:n}})}var r={},s=angular.extend({},e,o);r.$values=[];var l,u,c,d,f,p,g;return r.init=function(){r.$match=l=a.match(s.regexp),u=t(l[2]||l[1]),c=l[4]||l[6],d=l[5],f=t(l[3]||''),p=t(l[2]?l[1]:c),g=t(l[7])},r.valuesFn=function(e,t){return n.when(g(e,t)).then(function(t){return angular.isArray(t)||(t=[]),r.$values=t.length?i(t,e):[],r.$values})},r.displayValue=function(e){var t={};return t[c]=e,u(t)},r.init(),r}return a}]}),angular.module('mgcrea.ngStrap.helpers.dimensions',[]).factory('dimensions',function(){function t(e){var t=e.ownerDocument,o=e.offsetParent||t;if(a(o,'#document'))return t.documentElement;for(;o&&!a(o,'html')&&'static'===n.css(o,'position');)o=o.offsetParent;return o||t.documentElement}var n={},a=n.nodeName=function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()};return n.css=function(t,n,a){var o;return o=t.currentStyle?t.currentStyle[n]:e.getComputedStyle?e.getComputedStyle(t)[n]:t.style[n],a===!0?parseFloat(o)||0:o},n.offset=function(t){var n=t.getBoundingClientRect(),a=t.ownerDocument;return{width:n.width||t.offsetWidth,height:n.height||t.offsetHeight,top:n.top+(e.pageYOffset||a.documentElement.scrollTop)-(a.documentElement.clientTop||0),left:n.left+(e.pageXOffset||a.documentElement.scrollLeft)-(a.documentElement.clientLeft||0)}},n.setOffset=function(e,t,a){var o,i,r,s,l,u,c,d=n.css(e,'position'),f=angular.element(e),p={};'static'===d&&(e.style.position='relative'),l=n.offset(e),r=n.css(e,'top'),u=n.css(e,'left'),c=('absolute'===d||'fixed'===d)&&(r+u).indexOf('auto')>-1,c?(o=n.position(e),s=o.top,i=o.left):(s=parseFloat(r)||0,i=parseFloat(u)||0),angular.isFunction(t)&&(t=t.call(e,a,l)),null!==t.top&&(p.top=t.top-l.top+s),null!==t.left&&(p.left=t.left-l.left+i),'using'in t?t.using.call(f,p):f.css({top:p.top+'px',left:p.left+'px'})},n.position=function(e){var o,i,r={top:0,left:0};return'fixed'===n.css(e,'position')?i=e.getBoundingClientRect():(o=t(e),i=n.offset(e),a(o,'html')||(r=n.offset(o)),r.top+=n.css(o,'borderTopWidth',!0),r.left+=n.css(o,'borderLeftWidth',!0)),{width:e.offsetWidth,height:e.offsetHeight,top:i.top-r.top-n.css(e,'marginTop',!0),left:i.left-r.left-n.css(e,'marginLeft',!0)}},n.height=function(e,t){var a=e.offsetHeight;return t?a+=n.css(e,'marginTop',!0)+n.css(e,'marginBottom',!0):a-=n.css(e,'paddingTop',!0)+n.css(e,'paddingBottom',!0)+n.css(e,'borderTopWidth',!0)+n.css(e,'borderBottomWidth',!0),a},n.width=function(e,t){var a=e.offsetWidth;return t?a+=n.css(e,'marginLeft',!0)+n.css(e,'marginRight',!0):a-=n.css(e,'paddingLeft',!0)+n.css(e,'paddingRight',!0)+n.css(e,'borderLeftWidth',!0)+n.css(e,'borderRightWidth',!0),a},n}),angular.module('mgcrea.ngStrap.helpers.debounce',[]).factory('debounce',['$timeout',function(e){return function(t,n,a){var o=null;return function(){var i=this,r=arguments,s=a&&!o;return o&&e.cancel(o),o=e(function(){o=null,a||t.apply(i,r)},n,!1),s&&t.apply(i,r),o}}}]).factory('throttle',['$timeout',function(e){return function(t,n,a){var o=null;return a||(a={}),function(){var i=this,r=arguments;o||(a.leading!==!1&&t.apply(i,r),o=e(function(){o=null,a.trailing!==!1&&t.apply(i,r)},n,!1))}}}]),angular.module('mgcrea.ngStrap.helpers.dateParser',[]).provider('$dateParser',['$localeProvider',function(e){function t(){this.year=1970,this.month=0,this.day=1,this.hours=0,this.minutes=0,this.seconds=0,this.milliseconds=0}function n(){}function a(e){return!isNaN(parseFloat(e))&&isFinite(e)}function o(e,t){for(var n=e.length,a=t.toString().toLowerCase(),o=0;o12?e.getHours()+2:0),e):null},y.timezoneOffsetAdjust=function(e,t,n){return e?(t&&'UTC'===t&&(e=new Date(e.getTime()),e.setMinutes(e.getMinutes()+(n?-1:1)*e.getTimezoneOffset())),e):null},y.init(),y};return l}]}]),angular.module('mgcrea.ngStrap.helpers.dateFormatter',[]).service('$dateFormatter',['$locale','dateFilter',function(e,t){function n(e){return/(h+)([:\.])?(m+)([:\.])?(s*)[ ]?(a?)/i.exec(e).slice(1)}this.getDefaultLocale=function(){return e.id},this.getDatetimeFormat=function(t,n){return e.DATETIME_FORMATS[t]||t},this.weekdaysShort=function(t){return e.DATETIME_FORMATS.SHORTDAY},this.hoursFormat=function(e){return n(e)[0]},this.minutesFormat=function(e){return n(e)[2]},this.secondsFormat=function(e){return n(e)[4]},this.timeSeparator=function(e){return n(e)[1]},this.showSeconds=function(e){return!!n(e)[4]},this.showAM=function(e){return!!n(e)[5]},this.formatDate=function(e,n,a,o){return t(e,n,o)}}]),angular.module('mgcrea.ngStrap.core',[]).service('$bsCompiler',a),angular.module('mgcrea.ngStrap.datepicker',['mgcrea.ngStrap.helpers.dateParser','mgcrea.ngStrap.helpers.dateFormatter','mgcrea.ngStrap.tooltip']).provider('$datepicker',function(){var e=this.defaults={animation:'am-fade',prefixClass:'datepicker',placement:'bottom-left',templateUrl:'datepicker/datepicker.tpl.html',trigger:'focus',container:!1,keyboard:!0,html:!1,delay:0,useNative:!1,dateType:'date',dateFormat:'shortDate',timezone:null,modelDateFormat:null,dayFormat:'dd',monthFormat:'MMM',yearFormat:'yyyy',monthTitleFormat:'MMMM yyyy',yearTitleFormat:'yyyy',strictFormat:!1,autoclose:!1,minDate:-(1/0),maxDate:+(1/0),startView:0,minView:0,startWeek:0,daysOfWeekDisabled:'',hasToday:!1,hasClear:!1,iconLeft:'glyphicon glyphicon-chevron-left',iconRight:'glyphicon glyphicon-chevron-right'};this.$get=['$window','$document','$rootScope','$sce','$dateFormatter','datepickerViews','$tooltip','$timeout',function(t,n,a,o,i,r,s,l){function u(t,n,a){function o(e){e.selected=u.$isSelected(e.date)}function i(){t[0].focus()}var u=s(t,angular.extend({},e,a)),f=a.scope,p=u.$options,g=u.$scope;p.startView&&(p.startView-=p.minView);var m=r(u);u.$views=m.views;var $=m.viewDate;g.$mode=p.startView,g.$iconLeft=p.iconLeft,g.$iconRight=p.iconRight,g.$hasToday=p.hasToday,g.$hasClear=p.hasClear;var h=u.$views[g.$mode];g.$select=function(e){u.select(e)},g.$selectPane=function(e){u.$selectPane(e)},g.$toggleMode=function(){u.setMode((g.$mode+1)%u.$views.length)},g.$setToday=function(){p.autoclose?(u.setMode(0),u.select(new Date)):u.select(new Date,!0)},g.$clear=function(){p.autoclose?(u.setMode(0),u.select(null)):u.select(null,!0)},u.update=function(e){angular.isDate(e)&&!isNaN(e.getTime())&&(u.$date=e,h.update.call(h,e)),u.$build(!0)},u.updateDisabledDates=function(e){p.disabledDateRanges=e;for(var t=0,n=g.rows.length;t=p.$options.minDate,n=isNaN(p.$options.maxDate)||e.getTime()<=p.$options.maxDate,a=t&&n;s.$setValidity('date',a),s.$setValidity('min',t),s.$setValidity('max',n),a&&(s.$dateValue=e)}}function c(){return!s.$dateValue||isNaN(s.$dateValue.getTime())?'':m(s.$dateValue,d.dateFormat)}var d={scope:e};angular.forEach(['template','templateUrl','controller','controllerAs','placement','container','delay','trigger','html','animation','autoclose','dateType','dateFormat','timezone','modelDateFormat','dayFormat','strictFormat','startWeek','startDate','useNative','lang','startView','minView','iconLeft','iconRight','daysOfWeekDisabled','id','prefixClass','prefixEvent','hasToday','hasClear'],function(e){angular.isDefined(n[e])&&(d[e]=n[e])});var f=/^(false|0|)$/i;angular.forEach(['html','container','autoclose','useNative','hasToday','hasClear'],function(e){angular.isDefined(n[e])&&f.test(n[e])&&(d[e]=!1)}),angular.forEach(['onBeforeShow','onShow','onBeforeHide','onHide'],function(t){var a='bs'+t.charAt(0).toUpperCase()+t.slice(1);angular.isDefined(n[a])&&(d[t]=e.$eval(n[a])); +});var p=i(t,s,d);d=p.$options,r&&d.useNative&&(d.dateFormat='yyyy-MM-dd');var g=d.lang,m=function(e,t){return a.formatDate(e,t,g)},$=o({format:d.dateFormat,lang:g,strict:d.strictFormat});n.bsShow&&e.$watch(n.bsShow,function(e,t){p&&angular.isDefined(e)&&(angular.isString(e)&&(e=!!e.match(/true|,?(datepicker),?/i)),e===!0?p.show():p.hide())}),angular.forEach(['minDate','maxDate'],function(e){angular.isDefined(n[e])&&n.$observe(e,function(t){p.$options[e]=$.getDateForAttribute(e,t),isNaN(p.$options[e])||p.$build(!1),u(s.$dateValue)})}),angular.isDefined(n.dateFormat)&&n.$observe('dateFormat',function(e){p.$options.dateFormat=e}),e.$watch(n.ngModel,function(e,t){p.update(s.$dateValue)},!0),angular.isDefined(n.disabledDates)&&e.$watch(n.disabledDates,function(e,t){e=l(e),t=l(t),e&&p.updateDisabledDates(e)}),s.$parsers.unshift(function(e){var t;if(!e)return s.$setValidity('date',!0),null;var n=$.parse(e,s.$dateValue);return!n||isNaN(n.getTime())?void s.$setValidity('date',!1):(u(n),'string'===d.dateType?(t=$.timezoneOffsetAdjust(n,d.timezone,!0),m(t,d.modelDateFormat||d.dateFormat)):(t=$.timezoneOffsetAdjust(s.$dateValue,d.timezone,!0),'number'===d.dateType?t.getTime():'unix'===d.dateType?t.getTime()/1e3:'iso'===d.dateType?t.toISOString():new Date(t)))}),s.$formatters.push(function(e){var t;return t=angular.isUndefined(e)||null===e?NaN:angular.isDate(e)?e:'string'===d.dateType?$.parse(e,null,d.modelDateFormat):'unix'===d.dateType?new Date(1e3*e):new Date(e),s.$dateValue=$.timezoneOffsetAdjust(t,d.timezone),c()}),s.$render=function(){t.val(c())},e.$on('$destroy',function(){p&&p.destroy(),d=null,p=null})}}}]).provider('datepickerViews',function(){function e(e,t){for(var n=[];e.length>0;)n.push(e.splice(0,t));return n}function t(e,t){return(e%t+t)%t}this.$get=['$dateFormatter','$dateParser','$sce',function(n,a,o){return function(i){var r=i.$scope,s=i.$options,l=s.lang,u=function(e,t){return n.formatDate(e,t,l)},c=a({format:s.dateFormat,lang:l,strict:s.strictFormat}),d=n.weekdaysShort(l),f=d.slice(s.startWeek).concat(d.slice(0,s.startWeek)),p=o.trustAsHtml(''+f.join('')+''),g=i.$date||(s.startDate?c.getDateForAttribute('startDate',s.startDate):new Date),m={year:g.getFullYear(),month:g.getMonth(),date:g.getDate()},$=[{format:s.dayFormat,split:7,steps:{month:1},update:function(e,t){!this.built||t||e.getFullYear()!==m.year||e.getMonth()!==m.month?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getDate()===m.date&&1!==e.getDate()||(m.date=i.$date.getDate(),i.$updateSelected())},build:function(){var n=new Date(m.year,m.month,1),a=n.getTimezoneOffset(),o=new Date(+n-864e5*t(n.getDay()-s.startWeek,7)),l=o.getTimezoneOffset(),d=c.timezoneOffsetAdjust(new Date,s.timezone).toDateString();l!==a&&(o=new Date(+o+6e4*(l-a)));for(var f,g=[],$=0;$<42;$++)f=c.daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth(),o.getDate()+$)),g.push({date:f,isToday:f.toDateString()===d,label:u(f,this.format),selected:i.$date&&this.isSelected(f),muted:f.getMonth()!==m.month,disabled:this.isDisabled(f)});r.title=u(n,s.monthTitleFormat),r.showLabels=!0,r.labels=p,r.rows=e(g,this.split),r.isTodayDisabled=this.isDisabled(new Date),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()&&e.getDate()===i.$date.getDate()},isDisabled:function(e){var t=e.getTime();if(ts.maxDate)return!0;if(s.daysOfWeekDisabled.indexOf(e.getDay())!==-1)return!0;if(s.disabledDateRanges)for(var n=0;n=s.disabledDateRanges[n].start&&t<=s.disabledDateRanges[n].end)return!0;return!1},onKeyDown:function(e){if(i.$date){var t,n=i.$date.getTime();37===e.keyCode?t=new Date(n-864e5):38===e.keyCode?t=new Date(n-6048e5):39===e.keyCode?t=new Date(n+864e5):40===e.keyCode&&(t=new Date(n+6048e5)),this.isDisabled(t)||i.select(t,!0)}}},{name:'month',format:s.monthFormat,split:4,steps:{year:1},update:function(e,t){this.built&&e.getFullYear()===m.year?e.getMonth()!==m.month&&(angular.extend(m,{month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected()):(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build())},build:function(){for(var t,n=[],a=0;a<12;a++)t=new Date(m.year,a,1),n.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=u(t,s.yearTitleFormat),r.showLabels=!1,r.rows=e(n,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()&&e.getMonth()===i.$date.getMonth()},isDisabled:function(e){var t=+new Date(e.getFullYear(),e.getMonth()+1,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getMonth(),n=new Date(i.$date);37===e.keyCode?n.setMonth(t-1):38===e.keyCode?n.setMonth(t-4):39===e.keyCode?n.setMonth(t+1):40===e.keyCode&&n.setMonth(t+4),this.isDisabled(n)||i.select(n,!0)}}},{name:'year',format:s.yearFormat,split:4,steps:{year:12},update:function(e,t){!this.built||t||parseInt(e.getFullYear()/20,10)!==parseInt(m.year/20,10)?(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$build()):e.getFullYear()!==m.year&&(angular.extend(m,{year:i.$date.getFullYear(),month:i.$date.getMonth(),date:i.$date.getDate()}),i.$updateSelected())},build:function(){for(var t,n=m.year-m.year%(3*this.split),a=[],o=0;o<12;o++)t=new Date(n+o,0,1),a.push({date:t,label:u(t,this.format),selected:i.$isSelected(t),disabled:this.isDisabled(t)});r.title=a[0].label+'-'+a[a.length-1].label,r.showLabels=!1,r.rows=e(a,this.split),this.built=!0},isSelected:function(e){return i.$date&&e.getFullYear()===i.$date.getFullYear()},isDisabled:function(e){var t=+new Date(e.getFullYear()+1,0,0);return ts.maxDate},onKeyDown:function(e){if(i.$date){var t=i.$date.getFullYear(),n=new Date(i.$date);37===e.keyCode?n.setYear(t-1):38===e.keyCode?n.setYear(t-4):39===e.keyCode?n.setYear(t+1):40===e.keyCode&&n.setYear(t+4),this.isDisabled(n)||i.select(n,!0)}}}];return{views:s.minView?Array.prototype.slice.call($,s.minView):$,viewDate:m}}}]}),angular.module('mgcrea.ngStrap.button',[]).provider('$button',function(){var e=this.defaults={activeClass:'active',toggleEvent:'click'};this.$get=function(){return{defaults:e}}}).directive('bsCheckboxGroup',function(){return{restrict:'A',require:'ngModel',compile:function(e,t){e.attr('data-toggle','buttons'),e.removeAttr('ng-model');var n=e[0].querySelectorAll('input[type="checkbox"]');angular.forEach(n,function(e){var n=angular.element(e);n.attr('bs-checkbox',''),n.attr('ng-model',t.ngModel+'.'+n.attr('value'))})}}}).directive('bsCheckbox',['$button','$$rAF',function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:'A',require:'ngModel',link:function(e,o,i,r){var s=n,l='INPUT'===o[0].nodeName,u=l?o.parent():o,c=!angular.isDefined(i.trueValue)||i.trueValue;a.test(i.trueValue)&&(c=e.$eval(i.trueValue));var d=!!angular.isDefined(i.falseValue)&&i.falseValue;a.test(i.falseValue)&&(d=e.$eval(i.falseValue));var f='boolean'!=typeof c||'boolean'!=typeof d;f&&(r.$parsers.push(function(e){return e?c:d}),r.$formatters.push(function(e){return angular.equals(e,c)})),r.$render=function(){var e=!!r.$viewValue;t(function(){l&&(o[0].checked=e),u.toggleClass(s.activeClass,e)})},o.bind(s.toggleEvent,function(){e.$apply(function(){l||r.$setViewValue(!u.hasClass('active')),r.$render()})})}}}]).directive('bsRadioGroup',function(){return{restrict:'A',require:'ngModel',compile:function(e,t){e.attr('data-toggle','buttons'),e.removeAttr('ng-model');var n=e[0].querySelectorAll('input[type="radio"]');angular.forEach(n,function(e){angular.element(e).attr('bs-radio',''),angular.element(e).attr('ng-model',t.ngModel)})}}}).directive('bsRadio',['$button','$$rAF',function(e,t){var n=e.defaults,a=/^(true|false|\d+)$/;return{restrict:'A',require:'ngModel',link:function(e,o,i,r){var s,l=n,u='INPUT'===o[0].nodeName,c=u?o.parent():o;i.$observe('value',function(t){s='boolean'!=typeof t&&a.test(t)?e.$eval(t):t,r.$render()}),r.$render=function(){var e=angular.equals(r.$viewValue,s);t(function(){u&&(o[0].checked=e),c.toggleClass(l.activeClass,e)})},o.bind(l.toggleEvent,function(){e.$apply(function(){r.$setViewValue(s),r.$render()})})}}}]),angular.module('mgcrea.ngStrap.collapse',[]).provider('$collapse',function(){var e=this.defaults={animation:'am-collapse',disallowToggle:!1,activeClass:'in',startCollapsed:!1,allowMultiple:!1},t=this.controller=function(t,n,a){function o(e){for(var t=l.$targets.$active,n=0;n=o-w?'bottom':'middle'}function u(){return p[0]===t?t.pageYOffset:p[0].scrollTop}function c(){return p[0]===t?t.document.body.scrollHeight:p[0].scrollHeight}var d={},f=angular.extend({},e,s),p=f.target,g='affix affix-top affix-bottom',m=!1,$=0,h=0,v=0,w=0,y=null,b=null,D=o.parent();if(f.offsetParent)if(f.offsetParent.match(/^\d+$/))for(var S=0;S<1*f.offsetParent-1;S++)D=D.parent();else D=angular.element(f.offsetParent);return d.init=function(){this.$parseOffsets(),h=a.offset(o[0]).top+$,m=f.setWidth&&!o[0].style.width,p.on('scroll',this.checkPosition),p.on('click',this.checkPositionWithEventLoop),r.on('resize',this.$debouncedOnResize),this.checkPosition(),this.checkPositionWithEventLoop()},d.destroy=function(){p.off('scroll',this.checkPosition),p.off('click',this.checkPositionWithEventLoop),r.off('resize',this.$debouncedOnResize)},d.checkPositionWithEventLoop=function(){setTimeout(d.checkPosition,1)},d.checkPosition=function(){var e=u(),t=a.offset(o[0]),n=a.height(o[0]),r=l(b,t,n);y!==r&&(y=r,'top'===r?(b=null,m&&o.css('width',''),f.inlineStyles&&(o.css('position',f.offsetParent?'':'relative'),o.css('top',''))):'bottom'===r?(b=f.offsetUnpin?-(1*f.offsetUnpin):t.top-e,m&&o.css('width',''),f.inlineStyles&&(o.css('position',f.offsetParent?'':'relative'),o.css('top',f.offsetParent?'':i[0].offsetHeight-w-n-h+'px'))):(b=null,m&&o.css('width',o[0].offsetWidth+'px'),f.inlineStyles&&(o.css('position','fixed'),o.css('top',$+'px'))),o.removeClass(g).addClass('affix'+('middle'!==r?'-'+r:'')))},d.$onResize=function(){d.$parseOffsets(),d.checkPosition()},d.$debouncedOnResize=n(d.$onResize,50),d.$parseOffsets=function(){var e=o[0].style.position,t=o[0].style.top;f.inlineStyles&&(o.css('position',f.offsetParent?'':'relative'),o.css('top','')),f.offsetTop&&('auto'===f.offsetTop&&(f.offsetTop='+0'),f.offsetTop.match(/^[-+]\d+$/)?($=1*-f.offsetTop,v=f.offsetParent?a.offset(D[0]).top+1*f.offsetTop:a.offset(o[0]).top-a.css(o[0],'marginTop',!0)+1*f.offsetTop):v=1*f.offsetTop),f.offsetBottom&&(w=f.offsetParent&&f.offsetBottom.match(/^[-+]\d+$/)?c()-(a.offset(D[0]).top+a.height(D[0]))+1*f.offsetBottom+1:1*f.offsetBottom),f.inlineStyles&&(o.css('position',e),o.css('top',t))},d.init(),d}var i=angular.element(t.document.body),r=angular.element(t);return o}]}).directive('bsAffix',['$affix','$window','$timeout',function(e,t,n){return{restrict:'EAC',require:'^?bsAffixTarget',link:function(a,o,i,r){var s={scope:a,target:r?r.$element:angular.element(t)};angular.forEach(['offsetTop','offsetBottom','offsetParent','offsetUnpin','inlineStyles','setWidth'],function(e){if(angular.isDefined(i[e])){var t=i[e];/true/i.test(t)&&(t=!0),/false/i.test(t)&&(t=!1),s[e]=t}});var l;n(function(){l=e(o,s)}),a.$on('$destroy',function(){l&&l.destroy(),s=null,l=null})}}}]).directive('bsAffixTarget',function(){return{controller:['$element',function(e){this.$element=e}]}}),angular.module('mgcrea.ngStrap',['mgcrea.ngStrap.modal','mgcrea.ngStrap.aside','mgcrea.ngStrap.alert','mgcrea.ngStrap.button','mgcrea.ngStrap.select','mgcrea.ngStrap.datepicker','mgcrea.ngStrap.timepicker','mgcrea.ngStrap.navbar','mgcrea.ngStrap.tooltip','mgcrea.ngStrap.popover','mgcrea.ngStrap.dropdown','mgcrea.ngStrap.typeahead','mgcrea.ngStrap.scrollspy','mgcrea.ngStrap.affix','mgcrea.ngStrap.tab','mgcrea.ngStrap.collapse'])}(window,document); +//# sourceMappingURL=angular-strap.min.js.map diff --git a/static/js/angular-strap.min.js.map b/static/js/angular-strap.min.js.map new file mode 100644 index 0000000..8d0e282 --- /dev/null +++ b/static/js/angular-strap.min.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["angular-strap.js","typeahead/typeahead.js","helpers/compiler.js","datepicker/datepicker.js","tooltip/tooltip.js","timepicker/timepicker.js","tab/tab.js","scrollspy/scrollspy.js","select/select.js","popover/popover.js","navbar/navbar.js","dropdown/dropdown.js","modal/modal.js","helpers/raf.js","helpers/parse-options.js","helpers/dimensions.js","helpers/debounce.js","helpers/date-parser.js","helpers/date-formatter.js","button/button.js","collapse/collapse.js","aside/aside.js","alert/alert.js","affix/affix.js","module.js"],"names":["prefixEvent","undefined","templateUrl","options","cache","$templateCache","then","element","res","fetchTemplate","template","fetchPromises","module","$http","get","defaults","animation","prefixClass","data","this","compile","controller","console","controllerAs","resolve","copy","locals","bindToController","angular","forEach","value","isString","$injector","key","invoke","transformTemplate","identity","extend","$template","when","$q","all","templateEl","Error","findElement","contentTemplate","templates","contentEl","removeAttr","html","replace","next","remove","outerHTML","link","scope","trim","contents","linkFn","invokeCtrl","children","instance","ctrl","isObject","arguments","apply","bsCompilerService","$inject","trigger","provider","container","keyboard","delay","minLength","filter","limit","autoSelect","comparator","trimValue","$get","$typeahead","parentScope","$resetMatches","$window","$rootScope","$tooltip","$$rAF","$timeout","$matches","config","$$postDigest","$scope","activate","$activeIndex","select","index","$select","evt","matches","$isVisible","safeDigest","update","$render","$emit","onSelect","$setViewValue","length","isDefined","isFunction","equals","$onMouseDown","preventDefault","stopPropagation","keyCode","$digest","show","$element","hide","$onKeyDown","$$phase","TypeaheadFactory","array","$filter","expression","directive","results","postLink","attr","restrict","require","falseValueRegExp","bsKey","charAt","toUpperCase","slice","test","bsOptions","parsedOptions","$parseOptions","typeahead","watchedOptions","$watchCollection","values","watchOptions","$match","$watch","ngModel","newValue","oldValue","$modelValue","valuesFn","selectMode","$viewValue","substring","displayValue","$formatters","push","modelValue","selected","ss","selectionStart","val","selectionEnd","setSelectionRange","sd","label","destroy","$on","target","placement","titleTemplate","title","type","autoClose","bsEnabled","mouseDownPreventDefault","mouseDownStopPropagation","viewport","selector","padding","TooltipFactory","promise","$bsCompiler","split","clearTimeout","hoverState","onShow","leaveAnimateCallback","destroyTipElement","onHide","_tipToHide","triggers","nodeName","on","isTouch","toggle","enter","unbindTriggerEvents","$onFocusElementMouseDown","off","i","bindKeyboardEvents","tipElement","$onKeyUp","unbindKeyboardEvents","_autoCloseEventsBinded","bindAutoCloseEvents","$body","unbindAutoCloseEvents","stopEventPropagation","event","getPosition","elRect","getBoundingClientRect","rect","p","width","height","top","left","dimensions","offset","el","scroll","outerDims","isBody","document","documentElement","scrollTop","body","prop","clientWidth","innerHeight","position","actualWidth","actualHeight","marginLeft","isNaN","setOffset","using","parseInt","props","css","right","marginTop","tip","offsetHeight","getViewportAdjustedDelta","delta","offsetWidth","isVertical","arrowDelta","replaceArrow","arrowOffsetPosition","viewportDimensions","$viewport","topEdgeOffset","bottomEdgeOffset","viewportPadding","leftEdgeOffset","rightEdgeOffset","dimension","isHorizontal","$arrow","timeout","$isShown","tipScope","$destroy","$options","$promise","$new","toLowerCase","$id","map","parseFloat","$sce","trustAsHtml","$setEnabled","id","$hide","setEnabled","isEnabled","compileData","tipContainer","init","bindTriggerEvents","isElement","focus","onBeforeShow","after","parent","lastChild","display","visibility","clonedElement","addClass","version","prepend","$applyPlacement","$animate","enterAnimateCallback","_blur","leave","onBeforeHide","autoPlace","autoToken","elementPosition","tipWidth","tipHeight","viewportPosition","originalPlacement","removeClass","tipPosition","getCalculatedOffset","applyPlacement","blur","$root","query","querySelectorAll","isNative","tooltip","transclusion","$eval","dataTarget","hasOwnProperty","$observe","bsTooltip","bsShow","match","setViewport","useNative","timeType","timeFormat","timezone","modelTimeFormat","autoclose","minTime","maxTime","Infinity","hourStep","minuteStep","secondStep","roundDisplay","iconUp","iconDown","arrowBehavior","$timepicker","timepickerFactory","formatDate","format","viewDate","hour","startDate","getHours","meridian","coeff","selRange","end","start","isUndefined","collapse","moveStart","moveEnd","focusElement","_init","floorMinutes","time","floor","lang","selectedIndex","date","defaultDate","second","getSeconds","millisecond","getMilliseconds","$dateValue","hoursFormat","$dateFormatter","timeSeparator","minute","minutesFormat","secondsFormat","showSeconds","$iconUp","$moveIndex","$switchMeridian","switchMeridian","isDate","getMinutes","getTime","$build","$isBuilt","keep","Date","setHours","setMinutes","setSeconds","midIndex","hours","disabled","minutes","$date","seconds","rows","$isDisabled","showAM","$isSelected","isAM","selectedTime","$arrowAction","$setTimeByStep","newDate","targetDate","targetEl","triggerHandler","hoursLength","minutesLength","sepLength","lateralMove","count","selectRange","incr","isSeconds","isMeridian","secondsLength","createSelection","createTextRange","_destroy","_show","_hide","navigator","userAgent","isMaxValid","isValid","parsedTime","isMinValid","setFullYear","$setValidity","$parsers","unshift","viewValue","getTimeFormattedString","timepicker","dateParser","$dateParser","validateAgainstMinMaxTime","timezoneOffsetAdjust","NaN","parse","self","navClass","activeClass","$activeClass","$panes","$activePaneChangeListeners","$push","pane","$active","$attrs","$navClass","$remove","active","activeIndex","indexOf","splice","$setActive","name","fn","$pane","$tab","transclude","ngModelCtrl","bsTabsCtrl","attrs","bsActivePane","parsedBsActivePane","assign","$parse","controllers","render","$isActive","spies","debounce","$document","windowEl","bodyEl","throttle","ScrollSpyFactory","scrollEl","isWindowSpy","scrollId","$$count","$scrollspy","unbindViewContentLoaded","unbindIncludeContentLoaded","trackedElements","sortedElements","activeTarget","debouncedCheckOffsets","viewportHeight","debouncedCheckPosition","throttledCheckPosition","checkPositionWithEventLoop","checkOffsets","checkPosition","docEl","$activateElement","offsetTop","setTimeout","activeElement","source","$getTrackedElement","targetElement","querySelector","trackedElement","b","trackElement","toDelete","untrackElement","scrollspy","childEl","child","multiple","allNoneButtons","sort","caretHtml","placeholder","allText","noneText","maxLength","maxLengthHtml","iconCheckmark","SelectFactory","$isMultiple","$showAllNoneButtons","$iconCheckmark","$allText","$activate","$selectNone","$updateActiveIndex","a","$apply","isArray","$getIndex","anchor","anchorCandidate","$selectScrollFix","$isIE","stopImmediatePropagation","ua","tagName","e","dataMultiple","inputEl","addEventListener","join","$isEmpty","content","$popover","PopoverFactory","requestAnimationFrame","bsPopover","popover","routeAttr","$navbar","liElements","li","liElement","pattern","path","RegExp","regexp","matchesSelector","DropdownFactory","$dropdown","onBodyClick","items","parentEl","hasClass","prototype","tAttrs","nextSibling","nodeType","parentNode","removeChild","dropdown","backdrop","size","zIndex","bodyElement","backdropCount","dialogBaseZindex","validSizes","ModalFactory","$modal","unbindBackdropEvents","modalElement","hideOnBackdropClick","backdropElement","preventEventDefault","modalScope","backdropBaseZindex","$show","bottom","destroyModalElement","z-index","defaultPrevented","customClass","minor","backdropAnimation","bindBackdropEvents","which","lg","sm","modalClass","bsModal","modal","dot","cancelAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","rafSupported","raf","timer","cancel","supported","$values","valueName","keyName","displayFn","valueFn","ParseOptionsFactory","groupByFn","factory","offsetParent","docElement","ownerDocument","outer","window","getComputedStyle","extra","currentStyle","boxRect","style","curPosition","curLeft","curCSSTop","curTop","calculatePosition","curElem","curCSSLeft","curOffset","call","offsetParentRect","offsetParentEl","offsetParentElement","func","immediate","args","context","callNow","leading","wait","trailing","year","$localeProvider","milliseconds","ParseDate","noop","indexOfCaseInsensitive","len","str","toString","strict","day","month","getFullYear","getMonth","proto","isNumeric","toDate","regExpMap","sss","$locale","dateFilter","mm","literalRegex","formatParts","escapedLiteralFormat","dateElements","keys","escapedFormat","isFormatStringLiteral","part","trimLiteralEscapeChars","dateRegexParts","escapeReservedSymbols","text","re","abstractRegex","buildDateParseRegex","setMapForFormat","buildDateAbstractRegex","buildDateParseValuesMap","Object","valuesMatch","keyIndex","valueKey","valuesFunctionMap","valueFunction","valuesRegex","exec","setFnMap","DateParserFactory","setMap","m","HH","H","hh","h","EEEE","EEE","DATETIME_FORMATS","SHORTDAY","dd","d","MMMM","MMM","SHORTMONTH","MM","M","DAY","yyyy","yy","y","MONTH","s","setDate","setMonth","regex","$format","regExpForFormat","baseDate","formatRegex","formatSetMap","fromDate","getDate","getDateForAttribute","today","substr","getTimeForAttribute","daylightSavingAdjust","undo","getTimezoneOffset","getDefaultLocale","getDatetimeFormat","weekdaysShort","splitTimeFormat","service","dateType","dateFormat","modelDateFormat","dayFormat","monthFormat","yearFormat","monthTitleFormat","yearTitleFormat","strictFormat","minDate","maxDate","startView","minView","startWeek","daysOfWeekDisabled","hasToday","hasClear","iconLeft","iconRight","DatepickerFactory","$datepicker","pickerViews","views","$iconLeft","$iconRight","$hasToday","$picker","$selectPane","$hasClear","$toggleMode","$views","$mode","setMode","$setToday","$clear","updateDisabledDates","disabledDateRanges","dateRanges","$setDisabledEl","mode","pristine","$updateSelected","built","isDisabled","steps","getUTCFullYear","getUTCMonth","UTC","getUTCDate","shiftKey","altKey","onKeyDown","datepickerViews","previousValue","normalizeDateRanges","ranges","disabledRanges","datepicker","parsedDate","getDateFormattedString","validateAgainstMinMaxDate","disabledDates","arrays","mod","n","arr","weekDaysMin","weekDaysLabelsHtml","picker","weekDaysLabels","concat","firstDayOfMonth","firstDayOfMonthOffset","firstDate","firstDateOffset","build","days","isToday","toDateString","muted","showLabels","labels","isTodayDisabled","isSelected","getDay","months","lastDate","actualMonth","firstYear","years","actualYear","Array","setYear","$button","constantValueRegExp","isInput","trueValue","falseValue","hasExoticValues","isActive","checked","toggleClass","bind","toggleEvent","v","startCollapsed","allowMultiple","activeIndexes","$targets","activeItems","activateItem","$collapse","$viewChangeListeners","$registerToggle","$toggles","$unregisterToggle","$unregisterTarget","deactivateItem","fixActiveItemIndexes","disallowToggle","$activeIndexes","bsCollapseCtrl","bsCollapseToggle","$registerTarget","action","AsideFactory","$aside","bsAside","aside","duration","dismissable","AlertFactory","$alert","bsAlert","alert","AffixFactory","inlineStyles","$affix","setWidth","reset","initialOffsetTop","getRequiredAffixClass","_unpin","getScrollTop","scrollHeight","getScrollHeight","pageYOffset","offsetBottom","elementHeight","initialAffixTop","affixed","unpin","$parseOffsets","affix","offsetUnpin","$onResize","initialTop","$debouncedOnResize","initialPosition","affixTarget","option"],"mappings":"CAOA,SCIAA,EAAAA,EAAAC,GDHE,YA+lGA,SExhGFC,GAAAC,EAAAD,EAAAA,EAAAA,EAAAA,EAAAA,GFkmGI,QEz/FJE,GAAAC,EAAAA,GF0/FM,MEz/FNC,SAAAC,SAAAC,GAAAA,GAAAA,iBAAAA,IF4/FI,QAASC,GAAcC,GACrB,MAAIC,GAAcD,GAAkBC,EAAcD,GGlrGxDE,EAAAF,GAAAG,EAAAC,IACAJ,GAMAK,MAAAA,IACAC,KAAAA,SAAAR,GAGAS,MAAAA,GAAAC,OHylGIC,KExhGJC,QAAAV,SAAAP,GACAkB,EAAAA,UAAAlB,UAAAkB,KAAAA,EAAAA,YACAC,QAAAC,KAAAA,oGACApB,EAAAqB,YAAAC,EAAAtB,SACAA,EAAAuB,SAAAD,GAEA,IAAAE,GAAAA,EAAAxB,YAKAyB,EAAAC,EAAAL,UAAAM,GACAT,EAAAU,EAAAD,WACAN,EAAAQ,EAAAA,aFqhGUR,EEphGVI,QAAAH,KAAAtB,EAAAqB,aACAA,EAAAS,QAAAD,KAAAA,EAAAE,YFqhGUC,EAAoBhC,EAAQgC,mBAAqBP,QAAQQ,SACzDT,EAAmBxB,EAAQwB,gBEvgGrC,IAVAC,QAAAS,QAAAb,EAAAE,SAAAA,EAAAA,GAEAhB,QAAAqB,SAAAD,GACAN,EAAAc,GAAAA,EAAAC,IAAA7B,GAEAc,EAAAc,GAAAA,EAAA7B,OAAAP,KFohGM0B,QAAQS,OAAOb,EAASE,GE/gG9BvB,EACAqB,EAAAc,UAAAE,EAAAC,KAAAA,OAEA,CAAA,IAAAC,EFkhGQ,KAAM,IAAIC,OAAM,6CAFhBnB,GE/gGRoB,UAAAnC,EAAAP,GFkiGM,ME3hGNC,GAAA0C,gBAEArB,EAAAc,UAAAE,EAAAC,KAAAjB,EAAAc,UAAA7B,EAAAN,EAAA0C,iBAAAA,KACAvC,SAAAwC,GACA,GAAAJ,GAAAd,QAAArB,QAAAuC,EAAA,GAKA,OAJAF,GAAAG,oBAAAL,EAAA,IAAAM,WAAAN,WACAM,KAAAA,EAAA,IAGA7C,EAAAD,GAAAA,aF0gGUC,EAAQ0C,kBEpgGlBrB,EAAAiB,UAAAjB,EAAAlB,KAAAkB,EAAAE,UAAAA,EAAAA,EAAAA,mBAAAA,KAAAA,SAAAA,GAEA,GAAAhB,GAAAyB,QAAAA,QAAAT,EAAAY,IACAnC,EAAAyC,EAAA,sBAAAF,EAAA,IAAAM,WAAA,WAAAC,KAAAH,EAAA,GFsgGU,OErgGVpC,GAAAA,aAAAwC,EAAAC,OAAAC,SFqgGiBV,EAAW,GAAGW,aE9/F/Bb,EAAAC,IAAAjB,GAAAlB,KAAA,SAAAoB,GFkgGQ,GEjgGRA,GAAAA,EAAAA,EAAAA,UACAnB,GAAAA,OACA+C,EAAA5C,EAAA6C,QAAAA,cAAAA,kBFmgGQ,IE//FRhD,GAAAc,QAAAd,QAAA,SAAA0C,KAAAvC,EAAA8C,QAAAC,WFggGYC,EE//FZC,EAAAA,EFggGQ,QACEjC,OE//FVE,EFggGUrB,QAASA,EACT+C,KE9/FV,SAAA1B,GFggGY,GADAF,EE7/FZnB,OAAAgD,EACAhD,EAAAqD,CAEA,GAAArC,GAAAA,EAAAF,EAAAK,GAAA,EACA6B,IF6/FgB3B,QAAQS,OAAOsB,EAAWE,SAAUnC,EEz/FpD,IAAAoC,GAAAJ,QAAAK,SAAAC,GAAAA,EAAAA,GF4/FczD,GAAQW,KAAK,0BAA2B4C,GACxCvD,EAAQqD,WAAW1C,KAAK,0BAA2B4C,GAC/CvC,IACFgC,EAAMhC,GAAgBuC,GAG1B,MAAOJ,GAAOO,MAAM,KAAMD,eAQlC,IAAIrD,MA3qGNuD,ECIFC,SAAA,KAAA,QAAA,YAAA,WAAA,cAAA,kBDHEvC,QCIFwC,OAAA,4BAAA,yBAAA,wCAAAC,SAAA,aAAA,WDHI,GCIJC,GAAAnD,KAAAJ,UACAwD,UAAA,UACAtB,YAAA,YACAuB,YAAA,aACAC,UAAA,cACAC,YAAA,+BACAC,QAAA,QACAC,WAAAA,EACAC,UAAAA,EACAC,MAAAA,EDHMN,MAAO,ECMbrD,UAAA4D,EAEAL,OAAA,gBDLMC,MCONK,EDNMJ,YCSNzE,EDRM0E,WCUNG,GDTMF,WCUNG,EDRI9D,MCWJoC,MAAA2B,UAAAA,aAAA,WAAA,QAAA,WAAA,SAAAC,EAAAC,EAAAC,EAAAC,EAAAC,GDVM,QCWNhC,GAAAiC,EAAAA,EAAAA,GDVQ,GCWRjC,MDVYpD,EAAUyB,QAAQS,UAAWtB,EAAU0E,ECYnDlC,GAAA2B,EAAAA,EAAAA,EAEA3B,IAAAA,GAAAkC,EAAAlC,MACAA,EAAAmC,EAAAC,MDXQpC,GCYRyB,cAAAY,WDXUrC,EAAMiC,YACNjC,EAAMsC,aAAe1F,EAAQyE,WAAa,MAE5CrB,ECaRA,gBDZQA,ECaRyB,UAAAc,SAAAC,GDZUxC,EAAMmC,aAAa,WACjBV,EAAWY,SAASG,MAGxBxC,EAAMyC,QAAU,SAASD,EAAOE,GCkBxCjB,EAAAA,aAAA,WACAzB,EAAAiC,OAAAU,MDdQ3C,EAAM4C,WAAa,WCqB3BC,MAAAA,GAAA7C,cDlBQyB,EAAWqB,OAAS,SAASH,GCsBrClB,EAAAA,SAAAY,EACArC,EAAAsC,cAAAE,EAAAA,SDpBYxC,EAAMsC,aAAe1F,EAAQyE,WAAa,MCwBtDwB,EAAAL,GACAT,EAAAxD,EAAAyB,kBDpBQyB,ECuBR3D,SAAAiF,SAAAA,GACA/C,EAAA2B,aAAAA,GDrBQF,ECwBRuB,OAAApG,SAAAH,GACA,GAAA4B,OAAA,CDvBU,GCwBVzB,GAAAqG,EAAAA,SAAAT,GAAAf,KDvBU3D,GAAWoF,cAAc3E,GACzBT,EAAWiF,UC4BrBtB,EAAAA,gBACAC,GAAAR,EAAApD,UD1BUkC,EC2BVgD,MAAAhD,EAAAiC,YAAAkB,UAAAA,EAAAA,EAAAA,GD1Bc9E,QAAQ+E,UAAUxG,EAAQqG,WAAa5E,QAAQgF,WAAWzG,EAAQqG,WC6BhFrG,EAAAoD,SAAAiC,EAAAkB,EAAA9E,KDzBQoD,EC6BRe,WAAAA,WACA,MAAAA,GAAAxC,WAAAiC,EAGAO,EAAAA,SAAAA,QAAAA,QAAAA,SAAAA,EAAAA,aAAAA,EAAAA,WAAAA,QAAAA,EAAAA,YAFAnE,EAAAiF,SAAAtD,QAKAyB,EAAA8B,UAAAA,SAAAhF,GAEAmE,GAAAc,EACAd,KAAAe,EAAAA,EAAAA,SAAAA,OAAAA,MD9BgBpF,QAAQiF,OAAOtD,EAAMiC,SAASO,GAAOjE,MAAOA,KCkC5D,MAAAiE,ID9BQf,ECkCR+B,aAAAA,SAAAA,GDjCUd,ECkCVA,iBDjCUA,EAAIe,mBAENhC,ECoCRA,WAAAzB,SAAAsC,GDnCe,aCqCfoB,KAAAA,EAAAA,YACA1D,EAAAsC,cAAAA,KAAAA,EAAAA,SAAAA,EAAAA,oBDpCYI,EAAIc,iBCsChBxD,EAAAA,mBAEAsC,KAAAtC,EAAAsC,SAAAtC,EAAAiC,SAAAkB,ODpCY1B,EAAWc,OAAOvC,EAAMsC,cCsCpCqB,KAAAA,EAAAA,SAAAA,EAAAA,aAAAA,EDpCY3D,EAAMsC,eCyClBsB,KAAAnC,EAAAA,SAAAmC,EAAAA,aAAAA,EAAAA,SAAAA,OAAAA,EACAnC,EAAAA,eACAmC,QAAAA,YAAAA,EAAAA,gBAGA5B,EAAAA,aAAA,GDxCUhC,EC0CVyB,WDxCQ,IAAImC,GC0CZnC,EAAAzE,IDzCQyE,GAAWmC,KAAO,WAChBA,IACA5B,EC0CV,WDzCgBP,EAAWoC,WC4C3BC,EAAArC,SAAAqC,GAAAA,YAAAA,EAAAA,cACArC,EAAAT,UACAS,GAAAoC,EAAApC,GAAAA,UAAAoC,EAAAE,cDxCa,GAAG,GAER,IC2CRtC,GAAAA,EAAAY,IDhCQ,OAVAZ,GAAWqC,KAAO,WC4C1BA,EAAAA,UAAAA,EAAAA,SAAAA,IAAAA,YAAAA,EAAAA,cD1CclH,EAAQoE,UC6CtBS,GAAAA,EAAAA,IAAAA,UAAAA,EAAAA,YAMAoB,EAAAA,YAEA7C,EAAAgE,aAIAC,KDjDexC,ECyDf,QAAAoB,GAAAqB,GACAlE,EAAAkE,SAAA7F,EAAAgF,OAAAa,EAAAnH,MAAAiH,SAAAhE,EAAA2D,UDpDM,MADAM,GCuDNE,SAAA3G,EDtDayG,MAER9C,OCuDL,iBAAA+C,UAAAE,SAAA9C,GDtDI,MAAO,UAAS4C,EAAOE,EAAY9C,GACjC,MCyDN+C,IAAAhG,QAAAgF,WAAAa,EAAAnH,MAEAS,EAAAiE,KAAAA,SAAAjE,GAEA,MAAA2G,GAAA,UAAAG,EAAAF,EAAA9C,KAGA6C,EAAAI,UAAAvE,EAAAhD,EAAAwH,ODzDOH,UCiEPzH,eAAAA,UAAAA,SAAAA,KAAAA,aAAAA,gBAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GDhEI,GAAIY,GCiERwC,EAAAA,QDhEI,QACEyE,SCiENnG,MDhEMoG,QCiENrG,UDhEM0B,KAAM,SAAkBC,EAAOhD,EAASwH,EAAM1G,GCoEpDd,EAAA2H,IAAAA,SACAtG,IAAAA,IACA2B,MAAA3B,EAIAA,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAA,YAAA,YAAAI,QAAAA,UAAAA,WAAAA,OAAAA,YAAAA,SAAAA,QAAAA,YAAAA,eAAAA,aAAAA,aAAAA,aAAAA,KAAAA,cAAAA,eAAAA,SAAAA,GACAkG,QAAAxB,UAAA1E,EAAAmG,MAAAC,EAAAA,GAAApG,EAAAqG,KDnEQ,ICqERnI,GAAAoD,eDpEQ3B,SAAQC,SAAU,OAAQ,YAAa,YAAa,UAAY,SAASI,GACnEL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KC2E/FL,QAAA8C,SAAA9C,eAAAzB,SAAAuE,eAAAA,SAAA3D,YAAA2D,SAAAA,GACA,GAAAC,GAAAxE,KAAAwE,EAAAA,OAAA5D,GAAAA,cAAA4D,EAAAA,MAAAA,EACAE,SAAAA,UAAA1E,EAAA0E,MAEA2D,EAAAA,GAAAT,EAAAS,MAAAA,EAAAA,OAGAjI,EAAAsE,KAAA2D,iBAAAjI,EAAAsE,KAAAA,eAAAA,MDzEQ,IAAIH,GAAS9C,QAAQ+E,UAAUxG,EAAQuE,QAAUvE,EAAQuE,OAAS3D,EAAS2D,OC2EnFC,EAAA6D,EAAAA,OAAAzH,EAAA4D,MACA8D,EAAAA,EAAAC,YAAAF,EAAAA,WAGAG,EAAA3D,EAAAA,SAGA7E,KAEAqI,GAAAI,MAAAH,EAAAA,cACAlF,IAAAsF,GAAAD,IAAAA,ID7EYjE,ICgFZgE,GAAAG,cAAAA,ED/EQ,IAAIL,GCgFZnC,EAAAA,GD/EYqC,EAAY3D,EAAWzE,EAASc,EAAYlB,EAChD,IAAIA,EAAQ4I,aAAc,CACxB,GAAIH,GAAiBH,EAAcO,OAAO,GAAG9F,QAAQ,OAAQ,IAAIA,QAAQ,UAAW,IAAIM,MCmFlGD,GAAA0F,iBAAAC,EAAAC,SAAAC,EAAAA,GAEA7F,EAAA8F,SAAAF,EAAAA,GAAAA,KAAAA,SAAAA,GACAV,EAAAa,OAAAA,GAIAjI,EAAAkI,cDlFQhG,ECsFR0F,OAAAH,EAAApC,QAAA/B,SAAAmE,EAAAA,GDrFUvF,ECsFVoF,YAAAG,EDrFUL,ECuFVnC,SAAAA,EAAAA,GAAAA,KAAAA,SAAAA,GDtFY,MAAInG,GAAQoJ,aAAeT,EAAOpC,QAAUyC,EAASzC,OAAS,MAC5DrF,GAAWoF,cAAcpF,EAAWmI,WAAWC,UAAU,EAAGpI,EAAWmI,WAAW9C,OAAS,KC+FzGgD,EAAAA,OAAA/E,IAAAmE,EAAAA,EAAAR,MAAA,EAAA3D,IACAgE,EAAAe,OAAAA,OD3FYrI,GAAWiF,eAGfjF,EAAWsI,YAAYC,KAAK,SAASC,GCgG7C,GAAAH,GAAAjB,EAAAiB,aAAAG,ED9FU,OAAIH,GCkGdpD,EAGA1E,QAAArB,UAAAsJ,IAAA,gBAAAA,GDjGmBA,ECoGnBC,KDhGQzI,ECkGRS,QAAAgI,WACA,GAAAC,EAAAxJ,SAAAyJ,EAAAA,YACA,MAAAzJ,GAAA0J,IAAAC,GAEA3J,IAAAA,GAAA4J,EAAAA,UAAAJ,EAAAK,aDjGcN,EAAW/D,OAAe4C,EAAUhD,OAAOH,SAASO,GAAOsE,MAAQhJ,EAAWmI,UCqG5FjG,GAAA3B,QAAAmC,SAAA+F,GAAArB,EAAAiB,aAAAI,GAAAA,CACA,IAAAnB,GAAAA,EAAAA,EAAA2B,WAAAA,QAAAA,iBAAAA,IAAAA,GACAnK,EAAAA,EAAA,GAAA6J,eACArB,EAAAA,EAAA,GAAAuB,YDnGU3J,GAAQ0J,IAAI9J,EAAQ2E,aAAc,EAAQhD,EAAQA,EAAM0B,QACxDjD,EAAQ,GAAG4J,kBAAkBJ,EAAIK,IAEnC7G,EAAMgH,IAAI,WAAY,WIlO9B3J,GAAA+H,EAAA2B,UAIAvJ,EAAAI,KACAH,EAAA,YJqOEY,QIhOF4I,OAAA,0BAAA,sBAAA,sCAAAnG,SAAA,WAAA,WJiOI,GIhOJoG,GAAAtJ,KAAAJ,UACAb,UAAAA,UACAQ,YAAA,GACAgK,YAAAA,UACAtG,YAAA,UACAG,WAAA,EACAtB,QAAA,EACAkE,UAAA,MACAwD,YAAA,2BACAC,SAAA,GACApG,eAAA,EACAqG,QAAAA,cACAC,UAAAA,EACAC,MAAAA,EACAC,MAAAA,EACAC,MAAAA,GJiOML,KIhONM,GJiOM1G,MIhON2G,EJiOMN,WAAW,EACXC,WAAW,EI9NjB3J,yBAAA,EAEA6J,0BAAA,EACAC,UACAC,SAAAtJ,OAEAuJ,QAAAC,GJgOIjK,MI1NJ4D,MAAAsG,UAAAhG,aAAAiG,cAAAlK,KAAAjB,iBAAAA,QAAAA,WAAAA,OAAAA,aAAAA,QAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GJ8NM,QIzNNoL,GAAA/G,EAAA+G,GJiXQ,QIzJRC,KACAC,EAAAA,MAAAA,EAAAzL,YAAA,QAAAqF,GACAzD,QAAAzB,UAAAqE,EAAArE,SAAAkH,QAAAT,WAAAzG,EAAAuL,SACAvL,EAAAkF,OAAAA,GJgMQ,QIrIRsG,KAQAtG,GJ8HU9B,EAAMgD,MAAMpG,EAAQH,YAAc,QAASqF,GIlIrDuG,QAAAA,UAAAA,EAAAA,SAAAA,QAAAA,WAAAA,EAAAA,SJoIYzL,EAAQ0L,OAAOxG,GIhI3BA,IAAAyG,EAAA7F,CACA,GAAAA,GAAA,UAAA9F,EAAAiE,QAAA6B,MAAAc,GAAAA,GAAAA,MACA6E,MJkNQ,QI1GRrL,KJ2GU,GI1GVwL,GAAAC,EAAA5H,QAAAmH,MAAAnH,IJ2GUxC,SI1GVrB,QAAA0L,EAAAC,SAAA9H,GJ2G4B,UAAZA,GAAmC,gBAAZA,EACzB7D,EAAQ0L,GAAG7H,EAASiB,EAAS8G,QACR,WAAZ/H,IACT7D,EAAQ0L,GAAe,UAAZ7H,EAAsB,aAAe,QAASiB,EAAS+G,OIxGhF7L,EAAA8L,GAAAA,UAAAA,EAAAA,aAAAA,OAAAA,EAAAA,OACAlM,WAAA4L,GAAA,UAAAR,GACAhL,EAAAwL,GAAAA,EAAArF,aAAA,YAAArB,EAAAiH,6BJ8GQ,QIzGR/L,KJ2GU,IIzGV,GADAA,GAAAgM,EAAAnI,QAAAmH,MAAA,KACAS,EAAAA,EAAAtF,OAAA8F,KAAApI,CJ0GY,GIzGZ7D,GAAAgM,EAAAL,EJ0G4B,WAAZ9H,GAAmC,gBAAZA,EACzB7D,EAAQgM,IAAInI,EAASiB,EAAS8G,QACT,WAAZ/H,IACT7D,EAAQgM,IAAgB,UAAZnI,EAAsB,aAAe,QAASiB,EAAS+G,OIvGjF7L,EAAAkM,IAAAA,UAAAA,EAAAA,aAAAA,OAAAA,EAAAA,OACArI,WAAAjE,GAAA,UAAAiE,GACAsI,EAAAT,IAAAC,EAAA7G,aAAAsH,YAAAA,EAAAA,4BAMA,QAAAC,KACA,UAAAzM,EAAAiE,QACAsI,EAAAH,GAAAA,QAAAlH,EAAAA,UAEA9E,EAAAgM,GAAAA,QAAAlH,EAAAA,eAIA,QAAAwH,KACAC,UAAA3M,EAAA2M,QAGAvH,EAAAgH,IAAA,QAAAlH,EAAAsH,UAKAI,EAAAd,IAAA,QAAA5G,EAAAgC,eAMA,QAAA2F,KACAzH,EAAAsH,WACAH,EAAAH,GAAAA,QAAAU,GACAF,EAAAR,GAAAA,QAAAlH,EAAAA,MACAwH,GAAA,GJgGa,GAAG,GI5FhB,QAAAI,KACAC,IJ+FYR,EAAWH,IAAI,QAASU,GI1FpCF,EAAAI,IAAAA,QAAA/F,EAAAA,MACAA,GAAAjH,GJ8FQ,QIzFRiN,GAAAC,GACAH,EAAAI,kBJ2FQ,QIpFRC,GAAAA,GJqFUnG,EAAWA,GAAajH,EAAQqK,QAAUjK,CIjFpD,IAAA+M,GAAAE,EAAAA,GAEAF,EAAAA,SAAA1L,EAAAA,QAAA4L,EAAAJ,EAAAA,wBAAAK,IJoFU,KAAK,GAAIF,KAAKH,GACZE,EAAKC,GAAKH,EAAOG,EInF7B,QAAAG,EAAAF,QAAAG,EAAA/L,QAAAS,UAAAiL,GAAAM,MAAAA,EAAAC,MAAAC,EAAAA,KACAC,OAAAA,EAAAA,OAAAA,EAAAA,MACA,IAAAC,GAAAA,GAAAR,IAAAA,EAAAC,KAAAA,GAAAG,EAAAC,OAAAC,GAEAC,GJ4FYA,OAAQE,EAASC,EAASC,gBAAgBC,WAAaF,EAASG,KAAKD,UAAYhH,EAASkH,KAAK,cAAgB,GIxF3HT,EAAAA,GACAL,MAAAjC,EAAAd,gBAAA8D,YAEAd,OAAAlC,EAAAiD,aACA,IJ0FU,OIzFVX,SAAAA,UAAAA,EAAAA,EAAAA,EAAAA,GJ2FQ,QIzFRF,GAAAc,EAAAjB,EAAAA,EAAAA,GJ0FU,GAAIK,GIxFdtC,EAAAd,EAAAc,MAAA,IJ0FU,QAAQA,EAAM,IIzFxB,IAAA,QACAsC,GACAH,IAAAe,EAAAf,IAAAe,EAAAhB,OAAAA,EAAAA,EAAAA,EACAE,KAAAc,EAAAd,KAAAc,EAAAjB,MAEA,MACA,KAAA,SACAK,GACAH,IAAAe,EAAAf,IAAAe,EAAAhB,OACAE,KAAAc,EAAAd,KAAAe,EAAAA,MAAAA,EAAAA,EAAAA,EAEA,MACA,KAAA,OACAb,GACAH,IAAAe,EAAAf,IAAAiB,EAAAA,OAAAA,EAAAA,EAAAA,EACAhB,KAAAc,EAAAd,KAAAc,EAEA,MAGA,SACAZ,GJ4FcH,IAAKe,EAASf,IAAMiB,EIxFlCpD,KAAAkD,EAAAd,KAAApC,EAAAiC,MAAA,EAAAkB,EAAA,GJ6FU,IIzFVnD,EAAA,GJ0FY,MAAOsC,EAET,II1FVF,QAAAE,EAAAA,IAAAY,WAAAA,EAAAd,GJ2FY,OI1FZpC,EAAA,IJ2Fa,IAAK,OI1FlBsC,EAAAF,KAAAc,EAAAd,IACA,MJ6Fa,KI3Fb,QACAE,EAAAtC,KAAAkD,EAAAd,KAAAc,EAAAjB,MAAAkB,MAKAb,IAAAY,SAAAf,EAAAe,IAAAf,UAAAA,EAAAA,GJ6FY,OI5FZnC,EAAA,IJ6Fa,IAAK,MI5FlBsC,EAAAH,IAAAe,EAAAf,IAAAiB,EAAAF,EAAAhB,MACA,MJ+Fa,KAAK,SI3FlBI,EAAAA,IAAAA,EAAAA,IAUA,MAAAe,GJ2FQ,QIvFRC,GAAAD,EAAAA,GAEAf,GAAAA,GAAAH,EAAAA,GACAG,EAAAF,EAAAE,YAIAD,EAAAkB,EAAAA,aACAC,EAAAC,SAAAC,EAAAA,IAAAA,EAAAA,cAAAA,IACAvC,EAAAwC,SAAAA,EAAAA,IAAAA,EAAAA,eAAAA,GJoFcL,OInFdnB,KAAAuB,EAAAvB,GJoFcmB,MInFdlB,KAAAsB,EAAAtB,GJoFUE,EInFVsB,IAAAtB,EAAAH,IAAA0B,EJoFUvB,EAAOF,KAAOE,EAAOF,KAAOiB,EAC5BhB,EAAWkB,UAAUO,EAAKzN,QAAQS,QAChC0M,MInFZlB,SAAAoB,GAGAP,EAAAA,KACAC,IAAAA,KAAAA,MAAAU,EAAAC,KAAAA,KAEA7E,KAAAA,KAAAA,MAAAwE,EAAAN,MAAAA,KACAd,MAAAH,OAOAG,GAAA0B,EAEA,IAAAC,GAAAH,EAAAI,YACA5B,EAAA2B,EAAA7B,YAKAC,IAJA,QJ2EcnD,GI3EdkE,IAAAlB,IACAI,EAAAH,IAAAA,EAAAA,IAAAA,EAAAA,IAGAE,8CAAAC,KAAAA,GAAAD,CAEA,GAAA4B,GAAAD,EAAA9E,EAAAoD,EAAAa,EAAAC,EAUA,IATAa,EAAAE,KACA7B,EAAA8B,MAAAA,EAAAD,KAGAE,EAAAA,KAAAD,EAAAA,IJ0EU/B,EAAWkB,UAAUO,EAAKxB,GIrEpC,wBAAA0B,KAAA9E,GAAAgE,CACA,GAAAe,GAAAA,aAAAA,KAAAA,GAAA9B,EAAAgC,EAAA,EAAAF,EAAA7B,KAAAH,EAAAkB,EAAA,EAAAc,EAAA9B,IAAAD,EAAAkB,EAAAhB,EAAA+B,EAAA,cAAA,cJyEYE,GAAaD,EAAYN,EAAIQ,GAAsBH,KAGvD,QIxERI,GAAA3C,EAAA9H,EAAA0K,EAAAA,GAEA,GAAAP,IACA9B,IAAAsC,EACArC,KAAAsC,EJyEU,KIvEVT,EAAA9B,UAAAoC,MAAAA,EJwEU,IAAII,GIvEdD,EAAAA,UAAAH,EAAAA,SAAAA,SAAAA,EACAN,EAAAM,EAAApC,EAAAoC,UJwEU,IAAI,aAAavH,KAAKkC,GAAY,CAChC,GAAIuF,GIvEhBvB,EAAAf,IAAAwC,EAAAJ,EAAA/B,OACAoC,EAAA1B,EAAAd,IAAAuC,EAAAA,EAAAA,OAAAA,CACAE,GAAAA,EAAAF,IACAV,EAAAW,IAAAA,EAAAL,IAAAA,EACAnC,EAAAmC,EAAAK,IAAAA,EAAAA,SJwEcX,EIvEd9B,IAAA0C,EAAAN,IAAAA,EAAArC,OAAAwC,OJyEiB,CACL,GAAIE,GAAiB1B,EAASd,KAAOuC,EIrEjDE,EAAAZ,EAAAA,KAAAA,EAAAA,CJuEgBW,GAAiBL,EAAmBnC,KIpEpD6B,EAAAI,KAAAA,EAAAS,KAAAC,EACA1N,EAAAkN,EAAAX,QAEAoB,EAAArB,KAAAoB,EAAA3C,KAAAmC,EAAAO,MAAAA,GAMA7E,MAAAA,GJmEQ,QIhERrL,GAAA0K,EAAAwF,EAAAC,GJiEU,GIhEVtD,GAAAA,EAAAA,yBAAAA,EAAAA,GJiEUuD,GAAOrB,IAAIoB,EAAe,OAAS,MAAO,IAAM,EAAId,EAAQa,GAAa,KAAKnB,IAAIoB,EAAe,MAAQ,OAAQ,IAEnH,QI/DR1D,KJgEUpB,aAAagF,GACTnL,EAASoL,UAA2B,OAAf/D,II7DnCgE,EAAA7F,WACA6F,IJgEgBvQ,EAAQoE,UI5DxBmI,KJgEcgE,IACFA,EAASC,WI3DrBD,EAAArL,MAMAqH,IAEAnJ,EAAAgE,SJwDYmF,EAAarH,EAAS+B,SAAW,MAvgBrC,GIzNRjH,MAAAgH,EAAAoE,EAAAqF,SAAAhP,QAAAS,UAAAtB,EAAA0E,GAAA4B,EAAAkE,EAAAsF,SAAAvF,EAAAlK,QAAAjB,GJ4NYoD,EI5NZ8B,EAAAM,OAAAxF,EAAAoD,OAAApD,EAAAoD,MAAAuN,QAAA1L,EAAA0L,OJ6NY9E,EAAWzL,EAAQ,GAAGyL,SAAS+E,aIvN3C1L,IAAAA,EAAA2L,OAAA7Q,QAAAI,SAAAwH,EAAAvD,OAAA,CAGA,GAAArE,GAAAwK,EAAAnG,MAAA+G,MAAA,KAAA0F,IAAAC,WACA3N,GAAAoH,MAAAwG,EAAAC,OAAAjR,GJuNYgH,KAAMoE,EAAM,GInNxBhI,KAAA8N,EAAAA,IACA9N,EAAAmC,GJsNQL,EAAS2L,IAAM7Q,EAAQmR,IAAM/Q,EAAQwH,KAAK,OAAS,GAC/C5H,EAAQwK,QInNpBpH,EAAAgO,MAAAJ,EAAAC,YAAAjR,EAAAwK,QJsNQpH,EIpNR8B,YAAAgC,SAAAA,GJqNU9D,EAAMmC,aAAa,WACjBL,EAASmM,WAAWC,MAGxBlO,EIpNR8B,MAAA8B,WJqNU5D,EAAMmC,aAAa,WACjBL,EAASgC,UAGb9D,EIpNR8B,MAAA8G,WJqNU5I,EAAMmC,aAAa,WACjBL,EAAS8B,UI9MrB5D,EAAAkI,QAAAA,WAGAlI,EAAAmO,aAAAA,WACAhF,EAAAA,YAGArB,EAAA/K,SAAAiD,EAAArC,UAAAA,CJgNQ,II/MRwQ,GACArM,EJgNYqM,EI7MZrM,EAGAsM,EACAxR,CJ6MQkL,GI5MRlE,KAAAhH,SAAAqE,GJ6MUkN,EI5MVvR,EJ6MUkF,EAASuM,SAEXvM,EIrMRlF,KAAAmE,WACAqN,EAAAA,OAAApR,QAAAA,SAAAA,EAAAA,SJsMYJ,EIrMZqE,OACAmN,KAAAA,EAAAxR,MJsMckH,KIrMdlH,EAAAA,QAKA0R,SAAAA,EAAAA,UAGAF,EAAAnH,EACAA,QAAA5I,UAAAkQ,EAAA3R,WJkMYwR,EAAexR,EAAQmE,UI9LnCnE,EAAAmE,YACAf,EAAAmC,EAAAvF,EAAAmE,YJiMUuN,IACI1R,EI/LdqK,SJgMYrK,EI/LZkF,OAAA8B,QAAAA,UAAAA,EAAAA,QAAAA,EAAAA,OAAAA,EAAAA,EAAAA,SJiMchH,EAAQgH,MACV5D,EAAMmC,aAAa,WACO,UAApBvF,EAAQiE,QI5L1BiB,EAAAiF,GAAAyH,QAMAnG,EAAAA,UJ8LQvG,EIpLRoG,QAAA,WACAY,IJqLUT,IACArI,EAAMoN,YAERtL,EInLRoG,MAAAA,WAKApG,MJ+KUmG,cInLVhH,GJoLUiH,EAAa,KIhLvBpG,EAAA8B,OAAAhH,EAAAqE,MAAA2C,UAIAqJ,EAAA5O,WAAA+E,WACAqL,OAAA7R,GAAAkF,EAAAA,QJiLalF,EAAQqE,MAAM2C,OIrL3BhH,EAAA2K,QJuLQzF,EIhLR4M,KAAAA,WACA,GAAA9R,EAAAmE,YAAAe,EAAAoL,SAAA,CJiLUlN,EIhLV2O,MAAAP,EAAAA,YAAAA,eAAAA,GACA/P,QAAA+P,UAAAQ,EAAAA,eAAAvQ,QAAAgF,WAAAzG,EAAA6R,eJiLY7R,EIhLZ8R,aAAA1R,EJkLU,IIhLV0R,GJiLcA,CACA9R,GIhLdmE,WACA4N,EAAAP,EJkLcM,EIjLdA,EAAA1R,GAAAA,UJiLsBqB,QAAQrB,QAAQoR,EAAa,GAAGQ,WI1KtD9M,OAKAqI,EAAA,KAAAC,EAAApN,GAAA6R,GAAAxG,IJ8KU8E,EI9KV2B,EAAA1M,OAAAmL,OJ+KUpE,EAAarH,EAAS+B,SAAWsK,EAAYpO,KAAKoN,EAAU,SAAS4B,EAAe/O,MI5K9FmJ,EAAAvM,KAEAuN,IAAAvN,UAEAwN,KAAAxN,UAKAgP,MAAA8C,OACAA,QAAAA,QJwKYI,WIvKZ,WJyKclS,EAAQa,WAAW0L,EAAW6F,SAASpS,EAAQa,WIrK7DqE,EAAAoL,MAAAA,EAAAA,SAAAtQ,EAAAc,YAAA,IAAAd,EAAAyK,MACAxE,EAAA7C,aAAAA,EAAAA,SAAAA,EAAAA,aAGA8B,EAKA4M,EAAArQ,MAAA4Q,GJkKYN,EIhKZO,QAAA/F,GJkKUrH,EAASoL,SAAWlN,EAAMkN,UAAW,EI/J/CrK,EAAA7C,GAEA+B,EAAAoN,kBAEA9Q,QAAA8K,QAAAA,OAAAwC,EJ+JYyD,EI/JZN,MAAA3F,EAAAwF,EAAAD,EAAAW,GAGAD,EAAAxS,MAAAoE,EAAA2N,EAAAD,GAAA3R,KAAAsS,GJgKUxM,EI9JVf,GJ+JUC,EAAM,WI7JhBmH,GAAAA,EAAAA,KJ+Jc4F,WAAY,YI3J1BlS,EAAA0K,WACAiC,UAAAA,EAAAA,SJ8JgBzH,EAAS0M,QIzJzBtF,OAGAtM,EAAAuL,WJ4JYoB,MASJzH,EIzJRoG,MAAAA,WJ4JU,MAFAD,cIzJVnE,GJ0JUoE,EAAa,MIxJvBtL,EAAAqE,OAAA6C,EAAAA,MAAAA,UAKAmJ,EAAA1E,WAAAA,WACA,QAAAzG,GAEAA,EAAAA,QAEAlF,EAAAyB,MAAA+E,OJgJmBtB,EAASgC,OAQpB,IAAIwL,GInJZA,CJqJQxN,GIjJRyG,KAAAY,SAAAA,GAIA9K,EAAA4Q,WJ+IUjP,EI9IVoP,MAAAG,EAAApG,YAAAf,eAAAA,GJ+Ic/J,QI9Id+E,UAAAxG,EAAA4S,eAAAnR,QAAAgF,WAAAzG,EAAA4S,eACAJ,EAAAA,aAAAjG,GAGArH,EAAAA,EACAe,EAAA7C,EAGApD,QAAAoE,QAAAA,OAAAmI,EACAE,EAAAA,MAAAA,EAAAA,GAGA+F,EAAAxS,MAAA0K,GAAA6B,KAAAA,GJ4IUrH,EAASoL,SAAWlN,EAAMkN,UAAW,EACrCrK,EAAW7C,GIxIrBpD,EAAAwL,UAAAA,OAAAA,GACApI,IAEApD,EAAA0L,WAAAxG,OAAAA,GJ0IY2H,MAeJ3H,EIpIRA,OAAA+G,SAAAA,GJqIcnG,GACFA,EAAIc,iBIjIhB2F,EAAA+D,SJoIYpL,EAASyN,QIhIrB3S,EAAA2K,SJqIQzF,EIjIRlF,MAAA8K,WJkIUyB,EAAW,GAAGqF,SAEhB1M,EI9HRqH,WAAA,SAAA+E,GAGAtR,EAAAsK,UAAAtK,GJ8HQkF,EI5HR2N,YAAAC,SAAA1K,GAEApI,EAAA6S,SAAA/H,GJ6HQ5F,EAASqN,gBAAkB,WIvHnChG,GAAAA,EAAAA,CAIA,GAAAwG,GAAAA,EAAA/F,UACAgG,EAAAzG,eACA0G,EAAA1G,EAAAA,KAAA4B,EAGAjJ,KAGAoF,EAAAuI,EAAA9P,QAAA+P,EAAA,KAAAlS,EAAA0J,WJmHUiC,EIjHV2G,SAAAA,EAAAlG,UJkHU,IIhHV+F,GAAAI,IACA7I,EAAAA,EAAA6I,KAAAA,eJiHcF,EIhHd1G,EAAA4G,KAAAA,eJkHU,IADAjO,EIhHVoF,UAAA6I,EAAAA,UAAApQ,EAAA/C,EAAA8K,SAAAC,UAAA/K,EAAA8K,UJiHc+H,EAAW,CI9GzB,GAAAM,GAAAA,EACA7I,EAAAA,EAAApF,EAAA0K,UJgHgB,UI/GhBxH,KAAA+K,IAAAA,EAAAJ,OAAA/D,EAAAgE,EAAAE,OACA5I,EAAAA,EAAAvH,QAAA,SAAA,OJgHuB,MAAMqF,KAAK+K,IAAsBJ,EAAgBxF,IAAM0F,EAAYC,EAAiB3F,MI7G3GhB,EAAA6G,EAAAD,QAAAA,MAAAf,WAIAiB,OAAAA,KAAAC,IAAAhJ,EAAAyI,KAAAA,EAAAC,EAAAC,KACAM,EAAAF,EAAAA,QAAA/I,OAAAA,SJ6GuB,QAAQlC,KAAK+K,IAAsBJ,EAAgB/D,MAAQgE,EAAWE,EAAiB7F,QI1G9GnI,EAAAsH,EAAAzJ,QAAA+C,QAAAA,SAEAZ,EAAAgC,YAAAA,GAAAA,SAAAA,GJ6GU,GAAImM,GAAcC,EAAoBhJ,EAAWyI,EAAiBC,EAAUC,EAC5EM,GAAeF,EAAa/I,KAE9BpF,EI1GRY,SAAA,SAAAA,GACA0N,KAAApT,EAAAA,OAAAoT,EAAAA,WACA1N,EAAAe,OJ2GYf,EAAIe,oBAGR3B,EIzGRlF,cAAA4K,SAAAA,GAAAhE,KAAAd,EAAAc,QJ2GYxG,EAAQ,GAAGoT,OI1GvB1N,EAAA9F,oBJ8GQkF,EI5GRA,yBAAA,SAAAY,GACA1F,EAAAwK,yBJ6GY9E,EAAIc,iBAEF5G,EAAQ6K,0BACV/E,EAAIe,kBIxGhB+E,EAAAA,SACAnK,EAAAC,GAAAA,OJ4GYtB,EI1GZA,GAAA0L,QJwJQ,IAAIY,IAAyB,CAuM7B,OAAOxH,GAET,QAASe,GAAW7C,GI/C1BqE,EAAAA,SAAArE,EAAAqQ,OAAArQ,EAAAqQ,MAAArM,SAAAhE,EAAA2D,UAGAc,QAAAA,GAAA6L,EAAAtT,GACAgD,MAAA3B,SAAArB,SAAAA,GAAA2N,GAAA4F,iBAAAD,IJreM,GI1NNE,GAAA1O,6BAAA9B,KAAApD,EAAAoD,UAAAuN,WAEA5E,EAAAF,eAAAA,GAAA+E,UAAAA,EACAhE,EAAA5M,QAAAqE,QAAA5C,EAAAG,SJ6uBM,OI9CNiS,OJgDKpM,UI9CLrE,aAAAA,UAAAA,YAAAA,OAAAA,SAAAA,WAAAA,QAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GJ+CI,OACEyE,SI/CNnG,MJgDM0B,OI/CN,EJgDMD,KAAM,SAAkBC,EAAOhD,EAASwH,EAAMkM,GI5CpD,GAAA/L,GACAtG,GACA2B,MAAA3B,EJ+CQA,SAAQC,SAAU,WAAY,cAAe,aAAc,eAAgB,gBAAiB,YAAa,YAAa,QAAS,UAAW,OAAQ,YAAa,oBAAqB,OAAQ,cAAe,MAAQ,SAASI,GACtNL,QAAQ+E,UAAUoB,EAAK9F,MAAO9B,EAAQ8B,GAAO8F,EAAK9F,KAExD,II3CRiG,GAAAjG,eJ4CQL,SI3CRA,SAAA+E,OAAAoB,aAAA,SAAA9F,GACA9B,QAAA8B,UAAAsB,EAAA2Q,KAAA/L,EAAAA,KAAAA,EAAAA,MJ4CYhI,EAAQ8B,IAAO,KItC3BL,QAAAA,SAAA+E,eAAAwN,SAAA,eAAA,UAAA,SAAAlS,GACA,GAAAiG,GAAAA,KAAAA,EAAAK,OAAA4L,GAAAA,cAAAlS,EAAAqG,MAAA,EACAnI,SAAAqK,UAAAzC,EAAAI,MJ0CYhI,EIzCZ8B,GAAAsB,EAAA2Q,MAAAnM,EAAAI,MJ4CQ,IAAIgM,GAAa5T,EAAQwH,KAAK,cIrCtCnG,SAAAwS,UAAAA,KACA7Q,EAAAgF,KAAA4L,GJuCYhU,EAAQqK,QAAS,EIlC7BrK,EAAAyB,OAAA+E,GAGApD,EAAA3B,eAAAwH,WJqCU7F,EIpCV+B,MAAA,IJsCQyC,EAAKsM,SAAS,QAAS,SAASlL,GAC9B,GAAIvH,QAAQ+E,UAAUwC,KAAc5F,EAAM6Q,eAAe,SAAU,CACjE,GAAIhL,GAAW7F,EAAMoH,KACrBpH,GAAMoH,MAAQwG,EAAKC,YAAYjI,GIlC3CkL,QAAA1N,UAAAyC,IACAD,EAAAA,WACA9B,GAAAA,EAAAA,uBJwCQU,EIjCRsM,SAAAzS,WAAAuH,SAAAA,GACAvH,GAAAS,EAAAkB,UJkCYyQ,EIjCZ3M,SAGAU,EAAAnG,WJkCU2B,EIjCV+B,OAAAyC,EAAAuM,UAAA,SAAAnL,EAAAC,GACAxH,QAAAoS,SAAAA,GJkCcpS,QAAQS,OAAOkB,EAAO4F,GI/BpC5F,EAAAoH,MAAAxB,EAIApB,QAAAwM,UAAAnL,IACA7F,EAAA0F,WACA+K,GAAApS,EAAA+E,sBJkCa,GAEDoB,EI/BZiM,QJgCUzQ,EAAM0F,OAAOlB,EAAKwM,OAAQ,SAASpL,EAAUC,GACtC4K,GAAYpS,QAAQ+E,UAAUwC,KAC/BvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,wBI5BxEzM,KAAA,EACAxE,EAAA0F,OAGA+K,EAAApS,UJgCYmG,EI5BZiM,WJ6BUzQ,EAAM0F,OAAOlB,EAAK+C,UAAW,SAAS3B,EAAUC,GACzC4K,GAAYpS,QAAQ+E,UAAUwC,KAC/BvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,0BIzBxEzM,KAAA,EACAxE,EAAA0F,YAAAgC,GAEA+I,EAAAS,YAAAtL,MAQA5F,EAAAgH,UACAhH,EAAAyQ,OAAAA,EAAAA,SAAA1J,SAAAA,GACAnK,GAAAyB,QAAA+E,UAAAwC,IACA6K,EAAAS,YAAAtL,KJyBQ6K,EAAU3O,EAAS9E,EAASJ,GAC5BoD,EAAMgH,IAAI,WAAY,WK73B9B3J,GAAAoT,EAAA1J,UAIAvJ,EAAAI,KACAH,EAAA,YLg4BEY,QKz3BFwC,OAAA,6BAAA,oCAAA,uCAAA,2BAAAC,SAAA,cAAA,WL03BI,GKz3BJC,GAAAnD,KAAAJ,UACAwD,UAAA,UACAtB,YAAA,OACAuB,YAAA,aAEAkQ,UAAA,cACAC,YAAA,iCACAC,QAAAA,QACAC,WAAA,EACAC,UAAAA,EACAC,MAAAA,EACAC,MAAAA,EACAC,WAAAC,EACAxO,SAAA,OACAyO,WAAA,YACAC,SAAAA,KACAC,gBAAA,KACAC,WAAAA,EACAC,UAAAL,EAAAA,GACAM,UAAAN,EAAAA,GACAO,OAAAA,ELy3BMN,SAAU,EKt3BhBhU,WAAA,EAEAkU,WAAAtB,EACAuB,cAAA,EACAC,OAAAxU,iCLu3BMyU,SKt3BNzU,mCLu3BM0U,cAAe,QAEjBtU,MKp3BJ4D,MAAA2Q,UAAArQ,YAAA9E,aAAA8B,OAAAtB,iBAAA0E,WAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GL03BM,QKn3BNkQ,GAAAC,EAAAA,EAAAC,GAcA,QAAAC,GAAAA,GACAC,GAAAA,GAAAC,IAAAC,EAAAA,UACAC,OAAAA,IAAAF,MAAAA,KAAAC,MAAAA,EAAAA,UAAAE,GAAAA,GL2lCQ,QKh0BRC,GAAAtQ,EAAAA,GLi0BU,GAAIuQ,GKh0BdC,EAAA/V,CLi0BU,IKh0BVA,EAAA,GAAA4J,gBAAAmM,CLi0BY,GAAIF,GKh0BhBxU,EAAA2U,GAAAA,iBACAhW,GAAAiW,UAAAxM,GACAzJ,EAAAkW,UAAAvM,YAAAmM,GLi0BYD,EAASM,QAAQ,YAAaL,GAC9BD,EAAStQ,aK9zBrB6Q,GAAAA,GAAAA,kBACApW,EAAA,GAAAwR,kBAAAA,EAAAA,GLg0BqBnQ,QAAQ2U,YAAYhW,EAAQ,GAAGyJ,kBK3zBpD4M,EAAAlB,GAAAA,eAAA9D,EACA8D,EAAA9D,GAAAA,aAAAyE,GL+zBQ,QK5zBR9V,KL6zBUA,EK5zBV,GAAAwR,QLqjBQ,GAAI2D,GAAcrQ,EAAS9E,EAASqB,QAAQS,UAAWtB,EAAU0E,IKj3BzER,EAAA4R,EAAAC,MAEA3W,EAAAuV,EAAAvV,SACAoD,EAAAmS,EAAAqB,OLk3BYC,EAAO7W,EAAQ6W,KK72B3BC,EAAAA,SAAAC,EAAArB,EAAAhB,GACA,MAAAsC,GAAAhX,WAAAmV,EAAAuB,EAAAA,EAAAhC,IAMAuC,EAAAC,EACAC,EAAAtB,EAAAuB,aAAAA,EAAAA,GAAAA,OAAAA,GAAAA,ML+2BYvB,EAAY3U,EAAWmW,YAAcL,EK52BjDtB,GAEAE,KAAA0B,EAAAC,WACAxB,SAAAyB,EAAAD,WAAAC,GACAC,OAAAC,EAAAH,aACAN,OAAAU,EAAAJ,aACAJ,YAAAS,EAAAL,mBAGAnU,EAAAyU,EAAAzC,kBAAAA,EAAAA,WAAAA,GACAhS,EAAApD,EAAAqV,YAAAA,GAIAjS,EAAAmU,EAAA3R,cAAAA,GACA2P,EAAA5P,EAAAC,cAAAA,GLy2BY+R,EAAgBJ,EAAeI,cAAcjC,GKv2BzDtS,EAAA0U,EAAAnW,YAAAiE,GACA2P,EAAAA,EAAA5T,OAAAiE,ELy2BQxC,GAAMyU,QAAU7X,EAAQoV,OKv2BhChS,EAAA2U,UAAAA,EAAA1C,SLy2BQjS,EKx2BRmS,QAAAyC,SAAAA,EAAAjB,GLy2BUxB,EAAY5P,OAAOoR,EAAMnR,IAE3BxC,EKp2BR3B,WAAAwW,SAAAlB,EAAArI,GLq2BU6G,EKp2BVA,WAAAwB,EAAAA,ILs2BQ3T,EKp2BRwS,gBAAAE,SAAAA,GLq2BUP,EKp2BVwB,eAAAmB,ILs2BQ3C,EKp2BR4B,OAAAJ,SAAAK,GLq2Bc3V,QAAQwW,OAAOlB,KAAUrI,MAAMqI,EAAKoB,YKn2BlD5C,EAAA6C,MAAAA,ELq2BY3W,QKp2BZS,OAAAqT,GACAA,KAAAA,EAAA6C,WLq2BcX,OAAQV,EAAKmB,aACbjB,OAAQF,EAAKG,aKl2B3B3B,YAAA5P,EAAAyR,oBAGAlW,EAAAmW,ULm2BsB9B,EAAY8C,UKh2BlC9C,EAAA0C,ULo2BQ1C,EK/1BRrU,OAAAiF,SAAAA,EAAAA,EAAAA,GACAnG,EAAA4U,aAAA0D,MAAApX,EAAAmW,WAAAc,aACA/S,EAAAiS,WAAA,UAAArX,EAAAgX,YAAA,GAAAuB,MAAA,GAAAA,MAAA,KAAA,EAAA,ILi2Be9W,QAAQwW,OAAOlB,KAAOA,EAAO,GAAIwB,MAAKxB,IAC7B,IAAVnR,EAAa1E,EAAWmW,WAAWmB,SAASzB,EAAKjB,YAAgC,IAAVlQ,EAAa1E,EAAWmW,WAAWoB,WAAW1B,EAAKmB,cAAkC,IAAVtS,GAAa1E,EAAWmW,WAAWqB,WAAW3B,EAAKG,cACzMhW,EAAWoF,cAAc7E,QAAQH,KAAKJ,EAAWmW,aK71B3D9B,EAAAyC,UACAhY,EAAAkB,YAAAmW,GACAjS,EAAA,WL+1BcmQ,EAAYrO,MAAK,MAIvBqO,EK91BRrU,eAAAiF,SAAAA,GL+1BU,GAAKjF,EAAWmW,aAAc3I,MAAMxN,EAAWmW,WAAWc,WAA1D,CKv1BV,GAAAQ,IAAAA,GAAAA,EAAA9J,YAAA7O,UACAkB,GAAA0X,WAAAA,SAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,IACA1X,EAAA0U,cAAAA,QAAAA,KAAAA,EAAAA,aACA1U,EAAAiF,YL41BQoP,EK11BR9L,OAAAA,WL21BU,GK11BVsN,GAGA8B,EAFA3O,EAAAuL,EAAAA,SAAA6B,SAAAA,EAAAA,OAAAA,EAAAA,IACA3N,IL41BU,KAAK0C,EAAI,EAAGA,EAAIrM,EAAQuG,OAAQ8F,IAC9BuJ,EAAO,GAAI2C,MAAK,KAAM,EAAG,EAAG5C,EAASC,MAAQ+C,EAAWtM,GAAKrM,EAAQgV,UKz1BjF4D,EAAAE,MACArB,KAAAA,EACAvN,MAAAuL,EAAAzV,EAAAuG,GACAkR,SAAAlC,EAAAwD,OAAApD,EAAA8B,YAAAkB,EAAAtM,GACAyM,SAAArP,EAAAA,YAAAA,EAAAA,IL61BU,IKz1BVoP,GADAlP,IL41BU,KAAK0C,EAAI,EAAGA,EAAIrM,EAAQuG,OAAQ8F,IAC9BoL,EAAS,GAAIc,MAAK,KAAM,EAAG,EAAG,EAAG5C,EAAS8B,QAAUkB,EAAWtM,GAAKrM,EAAQiV,YKz1BxF6D,EAAAE,MACA/B,KAAAA,EACA/M,MAAAuL,EAAAzV,EAAAuG,GACA0Q,SAAA1B,EAAAwD,OAAAxD,EAAA0B,YAAA0B,EAAAA,GACAK,SAAAvP,EAAAA,YAAAA,EAAAA,IL61BU,IKz1BVoP,GADAlP,IL41BU,KAAK0C,EAAI,EAAGA,EAAIrM,EAAQuG,OAAQ8F,IAC9B4K,EAAS,GAAIsB,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG5C,EAASsB,QAAU0B,EAAWtM,GAAKrM,EAAQkV,YKx1B3F8D,EAAAC,MACAlC,KAAAE,EACA/M,MAAA0N,EAAAX,EAAAU,GACAsB,SAAAxP,EAAAqP,OAAAzM,EAAAA,YAAAA,EAAAA,GL01BcwM,SKz1BdtD,EAAA2D,YAAAjC,EAAA,IL41BU,IAAIgC,KKx1Bd7V,KAAAA,EAAA6V,EAAAA,EAAAA,EAAAA,OAAAA,IACArB,EACAxU,EAAA+V,MAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,KAEA/V,EAAAoU,MAAAA,EAAAA,GAAAA,EAAAA,IAIAjC,GAAAA,KAAA6D,EACAhW,EAAAmS,YAAAwD,ELy1BU3V,EKv1BV+V,OAAArD,ELw1BU1S,EAAMiW,MKv1BhBzT,EAAAmT,OAAAH,EAAAD,GAAA5B,MAAAjB,WAAA,GLw1BU1S,EKv1BVoU,cAAAU,ELw1BU3C,EKv1BV3P,UAAA,GLy1BQ2P,EAAY6D,YAAc,SAASrC,EAAMnR,GACvC,QAAK2P,EAAYwD,QAAwC,IAAVnT,EKr1BzD2P,EAAA2D,aAAA3D,EAAA3P,MAAAA,WACA0T,IAAAA,EACA1T,EAAAsS,eAAA3C,EAAAwD,MAAAb,aACAnB,IAAAuC,EACAvC,EAAAnR,eAAA2P,EAAAwD,MAAA7B,aADAoC,SL01BQ/D,EKt1BR+D,YAAAnB,SAAAA,EAAAxC,GLu1BU,GAAI2D,EAQJ,OK71BVA,KAAA1T,ELu1BY0T,EAAevC,EAAKoB,UAA8B,IAAlBxC,EAAS8B,OAAiC,IAAlB9B,EAASsB,OKp1B7E,IAAAsC,EACAD,EAAAhE,EAAAA,UAAA,KAAAK,EAAAC,KAAA,IAAAD,EAAAsB,OACAuC,IAAAjE,ILs1BY+D,EKr1BZvC,EAAAoB,UAAA,KAAAxC,EAAAC,KAAA,IAAAD,EAAA8B,QLu1BiB6B,EAAiC,EAAlBtZ,EAAQ6U,SAAeyE,EAAiC,EAAlBtZ,EAAQ8U,SKl1B9ES,EAAAA,aAAAiE,SAAA7X,EAAAiE,GACA2P,WAAAkE,EAAAA,cACAlE,EAAAkE,eAAA3D,EAAAA,GAEAP,EAAAkE,WAAAvC,EAAAA,ILu1BQ3B,EKp1BRiE,eAAA,SAAA7X,EAAAiE,GLq1BU,GKp1BV6T,GAAAhB,GAAAA,MAAAK,EAAAjK,OAAA7O,GLq1Bc4Y,EKp1BdhT,EAAAA,WACA6T,EAAAf,EAAAM,aLq1BcA,EAAUS,EAAQvC,YKn1BhCvR,KAAA4P,ELq1BYkE,EAAQjB,SAASI,EAAQ/J,SAAS7O,EAAQgV,SAAU,IAAMrT,GKl1BtEmW,IAAAA,EACA2B,EAAAC,WAAAA,EAAAA,SAAAA,EAAAA,WAAAA,IAAAA,GACA,IAAA9T,GACA8T,EAAAA,WAAAnB,EAAA1J,SAAA8G,EAAAC,WAAA5V,IAAAA,GLq1BUuV,EKn1BVmE,OAAAA,EAAA5D,GAAAA,ILq1BQP,EKn1BRuC,WAAA,SAAAnW,EAAAiE,GLo1BU,GKn1BV8T,EACAxX,KAAAT,GLo1BYiY,EKn1BZA,GAAAA,MAAAxB,KAAAA,EAAAA,EAAAA,EAAAA,KAAAA,EAAAA,EAAAA,OAAAA,EAAAA,OAAAA,EAAAA,QLo1BYzW,QAAQS,OAAOyT,GACbC,KKn1Bd8D,EAAA5D,cAEAH,IAAAzT,GLo1BYwX,EKn1BZA,GAAAA,MAAAxC,KAAAA,EAAAA,EAAAA,EAAAA,KAAAA,EAAAA,OAAAA,EAAAA,EAAAA,OAAAA,EAAAA,WAAAA,EAAAA,QLo1BYzV,QAAQS,OAAOyT,GACb8B,OAAQiC,EAAWxB,gBAEF,IAAVtS,IKj1BrB2P,EAAA5O,GAAAA,MAAAA,KAAA,EAAA,EAAAb,EAAAA,KAAAA,EAAAA,OAAAA,EAAAA,OAAAA,EAAAA,EAAAA,OAAAA,EAAAA,YAEArE,QAAA4I,OAAAwB,GACAhF,OAAAA,EAAAA,gBLo1BU0O,EKh1BVoE,ULk1BQpE,EAAY5O,aAAe,SAASb,GAGlC,GKl1BV,UAAA6T,EAAAA,OAAAC,SAAAA,eAAA9T,EAAAc,iBLi1BUd,EAAIe,kBACAkF,EAAS,CK90BvBwJ,GAAAA,GAAApO,QAAA/G,QAAA0F,EAAAA,OACAA,YAAA6T,EAAA,GAAA9N,SAAAzD,gBACAxB,EAAAA,EAAAA,UAIA+S,EAAA7S,eAAA,WLg1BQyO,EAAYpO,WAAa,SAASrB,GK10B1C,GAAA2T,mBAAAlE,KAAAA,EAAAA,WAAAwD,EAAAA,WAAAA,EAAAA,OAAA,CAGA,GAFAjT,EAAA8S,iBACA9S,EAAA+T,kBACAJ,KAAAX,EAAAA,QAEA,WADAvD,GAAAuE,MAAAA,EAGA,IAAAC,GAAAA,GAAAxB,MAAAhD,EAAAwD,OACAiB,EAAAA,EAAAlE,WACAmE,EAAArC,EAAAA,EAAAuB,GAAA5S,OAGAyT,EAAAA,EAAA9B,aACA4B,EAAAhT,EAAAgQ,EAAAA,GAAAA,OL00BckC,EAAUS,EAAQvC,aKr0BhCgD,EAAAzE,EAAAoE,EAAAA,GAAAA,OACAM,EAAA,EACArU,EAAAgB,UAAAqT,KAAArU,EAAAgB,SACAhB,EAAAgB,EAAAqT,EAAArT,EAAA,EAAAqS,CACAiB,KACAtD,KAAAuD,EAAAA,QAAAvD,EAAAc,EAAAd,EAAAA,EAAAA,EAAAA,EAAAc,EAAAA,KAAAA,EAAAA,UAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GLw0BU,IKt0BV6B,IAAAb,EAAAA,GAEAiB,EAAAA,CACA,MAAAK,EAAAA,UAAAL,MACA/C,KLq0BchR,EKr0BdgB,UAAAgQ,EAAA,ELs0BU,IKr0BV2C,GAAAU,IAAA1B,GAAA5J,EAEAiL,EAAAL,IAAAK,IAAApC,GAAAnR,IAAAA,GAAAA,CACAsT,KAAAK,GLq0BYT,EKp0BZjB,SAAA4B,EAAAD,EAAAtL,SAAA7O,EAAAgV,SAAA,KACAyE,EAAAf,EAAAM,EAAAmB,GAAAna,OAEAsa,GAAA7E,EAAAA,IACAoE,IAAAK,GLo0BYT,EKn0BZhB,WAAA4B,EAAAF,EAAAtL,SAAA7O,EAAAiV,WAAA,KACA6E,EAAAE,EAAAzE,EAAAyC,GAAAA,OACAkC,GAAAL,EAAAE,EAAAA,ILo0BqBK,GKl0BrB7E,EAAAA,WAAAkE,EAAA3C,EAAAA,SAAA9W,EAAAkV,WAAA,KACAqF,EAAAL,EAAAT,EAAAS,GAAA3T,OACAzB,GAAAiC,EAAAA,EAAAA,EAAAA,EAAAA,ILo0BqBsT,IK/zBrBE,GAAAA,EAAAhU,iBACA2T,GAAA3T,EAAAA,EAAAA,EAAAA,GAAAA,EAAAA,GAAAA,EAAAA,ILk0BUgP,EKh0BVU,OAAA7V,EAAAoa,GAAAA,GLi0BUD,EKh0BVlE,EAAA,GAAA6D,EAAA,ILi0BUpV,EKh0BVwR,WLo1BQ,IK5zBRlW,GAAA+N,EAAAsD,IL6zBQ8D,GK5zBR3N,KAAA,WL6zBU,MK5zBVxH,IAAAJ,EAAAwW,WL6zBYpW,EAAQ+N,KAAK,OAAQ,YK3zBjCsI,GAAAA,IAAAA,qBAAAA,eAGAgE,IACAlF,EAAApL,KAAAA,OAAA,QACA/J,EAAAwT,KAAAA,WAAAW,QACAnU,EAAAgM,GAAAA,QAAAoK,QAEAiE,MAGA,IAAAC,GAAAnF,EAAAvO,OACAuO,GAAAvO,QAAA,WACA4M,GAAAxT,EAAAwH,WACA8S,EAAAA,IAAAA,QAAAA,GL4zBUD,IAEF,IAAIC,GKxzBZta,EAAAA,ILyzBQmV,GAAYvO,KAAO,YKvzB3B+E,GAAA3L,EAAAwH,KAAA,aAAAxH,EAAAwH,KAAA,cLyzBU8S,IKtzBVtV,EAAAuV,WACApF,EAAAtO,UAAAuM,EAAAA,SAAAA,GAAAA,EAAAA,aAAAA,YAAAA,EAAAA,cACA+B,EAAAA,UACAA,GAAAtO,EAAAA,GAAAsO,UAAAtO,EAAA8E,aAEA,GAAA3L,ILyzBQ,IKvzBRua,GAAAnH,EAAAA,IAkBAI,OLsyBQ2B,GAAYrO,KAAO,SAASsM,GKrzBpC+B,EAAAA,WLuzBcA,EAAYtO,UAAUsO,EAAYtO,SAASmF,IAAIL,EAAU,aAAe,YAAawJ,EAAY5O,cKnzB/G6O,EAAAA,UACAA,GAAAA,EAAAA,IAAAA,UAAAA,EAAAA,YAOA/N,EAAA+L,KAGAI,ELufM,GKp3BNA,GAAA9O,6BAAA1B,KAAAA,EAAAA,UAAAA,WACA2I,EAAA/L,eAAAyQ,GAAAA,UAAAA,CAgYA3I,OA/XAlH,GAAA2U,OAEA3U,EAAAiW,KAAA7W,EAAA6W,oBA4XAhP,EAAAjH,SAAAA,EACAkH,ML+yBKL,UK3yBLzH,gBAAAA,UAAAA,SAAAA,KAAAA,iBAAAA,cAAAA,cAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GL4yBI,GAAIY,GK3yBRwC,EAAAA,SL4yBQwQ,EAAW,6BAA6BxL,KAAKpD,EAAQ4V,UAAUC,UACnE,QACEhT,SK3yBNpG,ML4yBMqG,QAAS,UACT3E,KKzyBN4E,SAAAA,EAAA3H,EAAAwH,EAAA1G,GL81BQ,QKzxBRA,GAAA4Z,GAEA,GAAAC,QAAAA,OAAAC,GAAA,CLyxBU,GKxxBVC,GAAAvM,MAAA1O,EAAA6U,UAAA,GAAA0D,MAAAyC,EAAA7C,WAAA+C,YAAA,KAAA,EAAA,IAAAlb,EAAA6U,QLyxBciG,EAAapM,MAAM1O,EAAQ8U,UAAY,GAAIyD,MAAKyC,EAAW7C,WAAW+C,YAAY,KAAM,EAAG,IAAMlb,EAAQ8U,QKvxBvH5T,EAAAmW,GAAA2D,CLyxBU9Z,GAAWia,aAAa,OAAQJ,GKrxB1C7Z,EAAAka,aAAAC,MAAAJ,GAEA/Z,EAAA6V,aAAAA,MAAAA,GAEAuE,ILuxBUpa,EAAWmW,WAAa2D,IA+C1B,QAASO,KACP,OAAQra,EAAWmW,YAAc3I,MAAMxN,EAAWmW,WAAWc,WAAa,GAAK1C,EAAWvU,EAAWmW,WAAYrX,EAAQyU,YKx5BnIhT,GAAAA,IACA2B,MAAA3B,EL2yBQA,SAAQC,SAAU,WAAY,cAAe,aAAc,eAAgB,YAAa,YAAa,QAAS,UAAW,WAAY,OAAQ,YAAa,YAAa,WAAY,aAAc,WAAY,kBAAmB,YAAa,WAAY,aAAc,aAAc,SAAU,gBAAiB,SAAU,WAAY,eAAgB,KAAM,cAAe,cAAe,eAAiB,SAASI,GAC9YL,QAAQ+E,UAAUoB,EAAK9F,MAAO9B,EAAQ8B,GAAO8F,EAAK9F,KAExD,IKvyBRiG,GAAAjG,eLwyBQL,SKvyBRA,SAAA+E,OAAAoB,YAAA,YAAA,YAAA,gBAAA,SAAA9F,GACA9B,QAAA8B,UAAAsB,EAAA2Q,KAAA/L,EAAAA,KAAAA,EAAAA,MLwyBYhI,EAAQ8B,IAAO,KKlyB3BL,QAAA+Z,SAAAjG,eAAAnV,SAAAc,eAAAlB,UAAAA,SAAAA,GACAA,GAAAA,GAAAwb,KAAA/K,EAAAA,OAAAA,GAAAA,cAAAA,EAAAA,MAAAA,EAEAoG,SAAA7W,UAAA6W,EAAAA,MACApB,EAAAA,GAAArS,EAAA2Q,MAAAgD,EAAArB,OAKA9N,IAAA5H,EAAAuU,WAAA3T,EAAA2T,aAAAvU,EAAAyU,WAAA,QLmyBQ,IKlyBRrR,GAAAwE,EAAAxH,EAAA4I,EAAAC,ELmyBQjJ,GKlyBRwb,EAAAA,QLmyBQ,IKlyBR3E,GAAApV,EAAAG,KACA6T,EAAAzM,SAAA+N,EAAArB,EAAAhB,GLmyBU,MKlyBV8G,GAAAxU,WAAAA,EAAAA,EAAAA,EAAAA,GLoyBYY,GKlyBZ4T,QLmyBUpY,EAAM0F,OAAOlB,EAAKwM,OAAQ,SAASpL,EAAUC,GACtCuS,GAAe/Z,QAAQ+E,UAAUwC,KAClCvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,2BK/xBxEoH,KAAAC,EACAhG,EAAA1V,OLkyBcwb,EAAWtU,SAIjB,IAAIuU,GK7xBZhL,GL8xBUiF,OK7xBV1V,EAAAwb,WL8xBU3E,KK7xBV8E,GL+xBQla,SAAQC,SAAU,UAAW,WAAa,SAASI,GAC7CL,QAAQ+E,UAAUoB,EAAK9F,KK1xBrCsB,EAAA0F,SAAAC,EAAAA,SAAAC,GAEAwS,EAAAtV,SAAAhF,GAAAmW,EAAAA,oBAAAA,EAAAA,GACA3I,MAAA8M,EAAA/K,SAAA3O,KAAA0Z,EAAApD,SAEAuD,EAAAA,EAAAX,gBL6xBQ5X,EKzxBR2X,OAAAA,EAAAE,QAAAA,SAAAH,EAAAA,GACA5Z,EAAAia,OAAAA,EAAA9D,cACAnW,GLuyBQA,EKjxBR8Z,SAAAA,QAAAA,SAAAA,GLkxBU,GKjxBV9Z,ELkxBU,KK/wBVoa,EAEAK,ML8wBYza,GAAWia,aAAa,QAAQ,GK9wB5CQ,ILixBU,IK9wBV5E,GAAA0E,QAAAG,OAAAA,GAAAZ,EAAAhb,EAAA0U,MAAA4G,EAAApa,EAAAmW,WL+wBU,QK9wBV2D,GAAAvF,MAAAsB,EAAApC,YL+wBYzT,EAAWia,aAAa,QAAQ,GK7wB5CM,ILgxBUE,EK9wBVxD,GACA3D,WL8wBcxU,EK9wBdA,UACA+W,EAAAA,EAAAoB,qBAAA6C,EAAAhb,EAAA0U,UAAA,GACAe,EAAAjB,EAAAA,EAAAG,iBAAA3U,EAAAyU,cLgxBUsC,EAAO0E,EAAWG,qBAAqB1a,EAAWmW,WAAYrX,EAAQ0U,UAAU,GK7wB1FqC,WAAA/W,EAAAuY,SL+wBmBxB,EAAKoB,UK3wBxB,SAAA3O,EAAAA,SAEAuN,EAAAA,UAAAA,IACArN,QAAAjI,EAAA2U,SACAyF,EAAAA,cAEA9E,GAAArN,MAAAA,OL6wBQxI,EK3wBRua,YAAAK,KAAApS,SAAAA,GL4wBU,GAAIqN,EAaJ,OAXEA,GK5wBZA,QAAAX,YAAA1M,IAAA,OAAAA,EACAmS,IACApa,QAAAiI,OAAAA,GL4wBmBA,EKxwBnB+R,WAAApE,EAAAA,SACAkE,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,iBL0wB0C,SAArBvb,EAAQwU,SKtwB7BrO,GAAAA,MAAA,IAAAA,GLywBmB,GAAIoS,MAAK7O,GKnwB5BxI,EAAAA,WAAAmW,EAAA3I,qBAAA2I,EAAAc,EAAAA,ULswBiBoD,MAETra,EKnwBRsa,QAAAA,WACAxb,EAAAA,IAAAub,MLwwBQnY,EAAMgH,IAAI,WAAY,WMv1C9B3J,GAAA+a,EAAArR,UAIAvJ,EAAAI,KACAH,EAAA,YN01CEY,QMp1CFP,OAAAA,yBAAAgD,SAAAsB,OAAAyB,WNq1CI,GMp1CJrG,GAAAI,KAAAA,UAGA+a,UAAAtL,UACAhP,SAAAC,mBNm1CMsa,SMl1CNva,WNm1CMwa,YAAa,UM90CnBzW,EAAA0W,KAAAA,WAAAzL,SAAAwL,EAAAA,EAAAA,GAEAF,GAAAA,GAAAI,IAKAJ,GAAAK,SAAAA,QAAAA,KAAAA,GAEAL,QAAAM,SAAA,YAAAC,WAAAA,eAAAA,SAAAA,GACA7a,QAAA2U,UAAAA,EAAA+F,MAAAI,EAAAA,SAAAza,GAAA0a,EAAA1a,MN40CM0D,EAAOiX,UAAYV,EAAKtL,SAASuL,SACjCxW,EM10CN2W,aAAAG,EAAAA,SAAAA,YN20CMP,EAAKI,OAAS3W,EAAO2W,UMx0C3BJ,EAAAW,2BAAAJ,EAAAA,wBN00CMP,EMz0CNM,MAAAzW,SAAAuW,GACAQ,QAAAA,YAAAR,EAAAI,OAAAA,UACA/W,EAAAoX,WAAAA,EAAAA,MAAAA,GN20CQb,EMz0CRa,OAAAA,KAAAb,IN20CMA,EAAKW,QMz0CXC,SAAAA,GN00CQ,GAEIC,GAFAhX,EMz0CZmW,EAAAI,OAAAU,QAAAP,GACAM,EAAAA,EAAAb,OAAAI,OAMAS,GAFAb,QAAAe,SAAAlX,GAEAgX,EAAAA,OAAA9L,IAAA,SAAAwL,GAGAM,MAAAA,GAAAA,ONq0CaC,QMp0CbjX,GNs0CwBmW,EAAKI,OAAOI,QAE5BR,EMl0CRA,OAAAgB,OAAAhB,EAAAI,GNm0CYvW,EMl0CZgX,EACAb,INm0CmBnW,IAAUgX,GAAeA,IAAgBb,EAAKI,OAAO5V,QAC9DqW,IM/zCVb,GAAAQ,GAAA5a,EAAAA,EAAAA,OAAAA,OACAoa,EAAAK,WAAAA,EAAAA,OAAAA,GAAAY,MAAAC,GNm0CUlB,EAAKgB,cAGThB,EMh0CNgB,WAAAZ,EAAAI,WAAAW,SAAAnB,GNi0CQA,EAAKI,OAAOI,QAAU5a,EACtBoa,EAAKK,2BAA2B1a,QAAQ,SAASub,GM7zCzDrY,OAGAuY,EAAAjc,UAAAA,EAAAA,UAAAA,SAAAA,EAAAA,GACA,MAAAic,GAAAA,OAAAA,UAAAA,EAAAA,MAAAA,EAAAA,OAAAA,UAAAA,GAOAnc,MAAAJ,KAAAA,WAEA,GAAAuc,KAGA/Z,OAFA0E,GAAAA,SAAAlH,EACAwc,EAAAA,WAAAlc,EACAic,KN2zCK1V,UMzzCL1H,UAAA,UAAA6H,WAAAA,OAAAA,SAAAA,SAAAA,EAAAA,EAAAA,EAAAA,GN0zCI,GMzzCJhH,GAAAgH,EAAArH,QN0zCI,QMxzCJ4C,SAAA,WAAAwE,UN0zCMyV,YMxzCNC,ENyzCMja,OMxzCNka,ENyzCMpc,YMrzCNmc,SAAA,WAAA,SAAAF,EAAAjc,YNszCMnB,YMnzCNud,SAAAlB,EAAAA,GNozCQ,MMnzCRiB,GAAAA,UAAA/W,EAAAgX,UNqzCMna,KMjzCNka,SAAA7T,EAAAC,EAAA8T,EAAA7T,GNkzCQ,GMhzCR4T,GAAAP,EAAArT,GACA4T,EAAA5T,EAAAA,EN0zCQ,IATI2T,IACFC,EAAWlB,2BAA2B3S,KAAK,WM7yCrD8T,EAAAC,cAAAF,EAAAnB,OAAAI,WAMAe,EAAAlB,YAAAA,KAAAA,SAAA3S,GN4yCY,MM3yCZgU,GAAAA,WAAAC,GN2yCmBhU,KAGP6T,EMxyCZC,aAAA,CNyyCU,GAAIC,GAAqBE,EAAOJ,EAAMC,aACtCF,GAAWlB,2BAA2B3S,KAAK,WACzCgU,EAAmBC,OAAOta,EAAOka,EAAWnB,OAAOI,WMlyC/DnZ,EAAA0F,OAAAyU,EAAAC,aAAA,SAAAxU,EAAAC,GACAnB,EAAAiV,WAAA/T,KACA,SNwyCOvB,UM9xCPyM,UAAA,UAAA,WAAAjL,OAAAA,SAAAA,EAAAA,EAAAA,GN+xCI,OACEnB,SAAW,YAAa,WACxB1E,OM5xCNA,EN6xCMD,KM1xCNma,SAAA7M,EAAA5P,EAAA0c,EAAAK,GAwBAC,QAAAA,KNoxCU,GAAIjY,GAAQ0X,EAAWnB,OAAOU,QAAQzZ,EACtCoP,GAAS8K,EAAWQ,UAAU1a,EAAOwC,GAAS,WAAa,eAAexF,EAASkd,EAAW7M,SAASwL,aAlBzG,GM1xCR7b,GAAAgS,EAAAkL,EN2xCQld,GAAQgS,SAAS,YMxxCzBmL,EAAArJ,SAAA,QAAA,SAAAlL,EAAAA,GACA5F,EAAAyV,MAAAA,EAAAzV,YAAA4F,KAIAsU,EAAAA,KAAAjB,EAAAjZ,KAGAA,EAAAqN,SAAA5P,WACAyc,EAAAA,SAAAZ,EAAAtZ,SAAAA,WAGAma,EAAArJ,SAAA2J,WAAAA,SAAAA,EAAAA,GACAza,EAAAwC,SAAA0X,EAAAnB,MAAAA,KNsxCQmB,EAAWjB,MAAMjZ,GMlxCzBka,EAAAA,IAAAA,WAAAlB,WACAyB,EAAAA,QAAAA,KC9LApc,EAAA2a,2BAAA3S,KAAA,WAKAsU,MAGAC,SPs9CEvc,QOj9CFmD,OAAAA,4BAAA,kCAAA,sCAAAqZ,SAAAhZ,aAAAwI,WPk9CI,GOh9CJsQ,GAAAG,KAAAzc,WACAb,EAAAa,KAAAA,UACAuc,SAAAG,IAIAC,SAAAvS,IP88CM6B,OO78CN,IP+8CI1M,MO58CJ4D,MAAAyZ,UAAAA,YAAA/Y,aAAAA,aAAAA,WAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GPg9CM,QO18CNgZ,GAAAC,EAAAA,GACA,MAAAC,GAAAD,GAAAA,UAAAne,EAAA,GAAAJ,SAAAmR,gBAAAA,EAAAA,cP48CM,QOx8CN4M,GAAAU,GPy8CQ,GOx8CRze,GAAA+d,QAAAS,UAAAA,EAAAA,EPy8Caxe,GAAQI,UAASJ,EAAQI,QAAU+d,EOt8ChD,IAAAO,GAAAA,EAAAA,EAAAA,QAAAA,QAGAC,EAAAA,EAAAA,EAAAA,EAAAA,QACAC,EAAAA,EAAAA,SAAAA,EAAAA,EACA,IAAAC,EAAAA,GAEA,MADAd,GAAAe,GAAAA,UACAC,EAAAA,EAEA,IACAC,GAEAC,EAOAje,EAGAke,EACAC,EACAb,EACAJ,EACAI,EAjBAa,KAKAlR,EAAAA,EAAAA,oBAEAyQ,IA+JAvb,OP0yCQub,GO77CRM,KAAAA,WACAL,KAAAA,QAAAA,EACAC,EAAAA,EAAA3Z,KAAAA,cAAAjF,EAAAge,UACAgB,EAAAA,EAAAA,KAAAA,cAAAA,EAAAA,UAGAV,EAAAE,GAAAA,QAAAxd,KAAAoe,4BP47CUlB,EO37CVM,GAAAA,SAAAE,GP47CUJ,EAASxS,GAAG,SAAUqT,GACtBH,EAAwBhB,EAAShd,KAAKqe,aAAcrf,EAAQge,UOx7CtEU,EAAAzZ,EAAAmF,IAAA,qBAAA4U,GAGAhe,EAAAyd,EAAAA,IAAAA,wBAAAA,GACAO,IACAR,IPw7CYT,EAAMS,GAAYE,IAGtBA,EOr7CRtS,QAAA,WACAuS,KAAAA,UACAC,KAAAA,QAAAA,IPw7CUN,EAASlS,IAAI,QAASpL,KAAKoe,4BAC3BlB,EAAS9R,IAAI,SAAU8S,GOn7CjCR,EAAAY,IAAAA,SAAAA,GAGAX,IAGA1Q,IAGAgR,SAGAhR,GAAAA,KP+6CQyQ,EO16CRrS,cAAAyS,WP26CU,GO16CVA,EAAA1I,OP06CU,CAGA,GAFAnI,GO16CV8Q,EAAAD,EAAAA,YAAAR,EAAAnQ,KAAA,eAAA,EP26CU8Q,EO16CVhR,KAAA6Q,IAAAA,EAAAzS,YAAAkT,EAAApR,KAAA,iBACAF,EAAA6Q,EAAA7Q,GAAAA,WAAA6Q,IAAAA,EAAA,GAAAzU,OACA,MAAAqU,GAAAc,iBAAAV,EAAAzS,GP46CU,KAAK,GAAIA,GAAIyS,EAAevY,OAAQ8F,KOv6C9CqS,IAAAA,QAAAU,YAAAA,EAAA/S,GAAAoT,YAAA,OAAAX,EAAAzS,GAAAoT,WAGAC,IAAAJ,EAAAjT,GAAAhC,UPu6CgB4D,EAAY6Q,EAAezS,GAAGoT,WOl6C9Cf,EAAAc,EAAAA,IAAAvR,EAAA7N,EAAAA,EAAAA,GAAAA,WACA,MAAA2e,GAAAS,iBAAAV,EAAAzS,MPs6CQqS,EOn6CRiB,2BAAA,WPo6CUD,WOn6CV7T,EAAA8T,cAAAC,IPq6CQlB,EAAWc,iBAAmB,SAASpf,GACrC,GAAI2e,EAAc,CAChB,GAAIY,GAAgBjB,EAAWmB,mBAAmBd,EOl6C9DA,KACA3e,EAAAgS,OAAAgB,YAAA,UACAvH,EAAAzL,EAAAwf,OAAA/T,OAAAzL,EAAAwf,EAAA7N,OAAAA,SAAAA,SAAA,OACA3R,EAAA2R,OAAAA,SAAAK,SAAAgB,YAAA,WAKA2L,EAAAF,EAAAta,OPm6CUnE,EOl6CVwf,OAAAvV,SAAAA,UACAwB,EAAAzL,EAAAwf,OAAA,OAAA/T,EAAAzL,EAAAwf,OAAA7N,SAAAA,SAAA,OPm6CY3R,EAAQwf,OAAO7N,SAASA,SAASK,SAAS,WAG9CsM,EO95CRoB,mBAAA/R,SAAAgS,GP+5CU,MO95CVC,GAAAP,OAAAK,SAAAA,GACA,MAAA9f,GAAAA,SAAAggB,IP+5Ca,IAELtB,EO55CR/Q,aAAA8R,WP65CUhe,QO35CVC,QAAAmd,EAAAoB,SAAAA,GACA,GAAAH,GAAAL,EAAAA,cAAAA,EAAAA,OP45CYO,GAAeP,UAAYK,EAAgBrS,EAAWC,OAAOoS,GAAevS,IAAM,KOz5C9F2R,EAAAA,QAAAA,OAAAA,EAAAA,YAAAA,EAAAA,WAAAA,EAAAA,EAAAA,UAIAR,EAAAwB,EAAA7V,OAAAA,SAAAuV,GACAf,MAAApV,QAAAoV,EAAAA,YAAAxU,KAAAA,SAAAA,EAAAA,GAAAuV,MAAAA,GAAAA,UAAAA,EAAAA,YP45CUV,KAEFR,EO15CRyB,aAAAA,SAAAA,EAAAA,GACAtB,EAAAA,MACAxU,OAAAwU,EP25CYe,OO15CZO,KP65CQzB,EAAW0B,eAAiB,SAAS/V,EAAQuV,GAE3C,IAAK,GO35Cff,GP25CmBxS,EAAIwS,EAAgBtY,OAAQ8F,KOx5C/CqS,GAAAA,EAAArS,GAAAhC,SAAAgC,GAAAA,EAAAA,GAAAA,SAAAA,EAAAA,CACAwS,EAAAA,CP05Cc,OAGJA,EAAgB/B,OAAOqD,EAAU,IAEnCzB,EAAWjZ,SAAW,SAAS4G,GO/4CvC5E,EAAA4E,GAAA+F,SAAA,WAGAvK,EAAA4J,OACAiN,EP+wCM,GO18CNR,GAAAle,QAAAyB,QAAAS,GACAqd,EAAAvf,QAAAI,QAAAJ,EAAAI,KAAA+d,oBACAA,EAAAI,QAAA1S,QAAA7L,EAAAI,SAAA8N,KP0kDM,OO/4CN9K,OPi5CKqE,UOh5CLhG,eAAA,aAAA,WAAAK,aAAAA,aAAAA,SAAAA,EAAAA,EAAAA,EAAAA,GPi5CI,OACE+F,SAAU,MACV1E,KO/4CNkd,SAAA3B,EAAA1e,EAAAA,GACAqgB,GAAAA,IAEAjd,MAAAgH,EPg5CQ3I,SO94CR4e,SAAAD,SAAAA,UAAA/V,SAAAjK,GACAigB,QAAAlW,UAAAA,EAAAA,MAAAA,EAAAA,GAAAA,EAAAA,KPg5CQ,IO94CRnK,GAAA0e,EAAA1e,EP+4CQqgB,GO94CRA,aAAArgB,EAAAqK,OAAAjK,GP+4CQgD,EAAMgH,IAAI,WAAY,WAChBiW,IACFA,EAAUD,eAAepgB,EAAQqK,OAAQjK,GOx4CrDqH,EAAA0C,WAGAtC,EAAA,KACA5G,EAAA,YP44COwG,UOx4CP6Y,mBAAA,aAAA1Y,WAAA,aAAA0Y,aAAA,SAAArb,EAAA+Y,EAAAvQ,EAAAiR,GPy4CI,OACE7W,SAAU,IACV5G,QAAS,SAAkBb,EAASwH,GAClC,GAAInE,GAAWrD,EAAQ,GAAGuT,iBAAiB,eQpoDnDlS,SAAAhB,QAAAgD,EAAA,SAAA8c,GAIA3f,GAAAA,GAAAA,QAAAA,QAAAA,EACAC,GAAAkR,SAAAnK,KAAA,eAAA,IAAAA,KAAA,cAAA0Y,EAAA1Y,KAAA,gBRuoDEnG,QQloDFwC,OAAA,yBAAA,yBAAA,wCAAAC,SAAA,UAAA,WRmoDI,GQloDJC,GAAAnD,KAAAJ,UACAwD,UAAA,UACAtB,YAAA,SACAuB,YAAA,UACAmc,UAAA,cACAC,YAAAA,yBACAC,QAAA,QACAC,WAAA,EACAC,UAAAA,EACAC,MAAAA,EACAC,MAAAA,EACAC,UAAAA,EACAC,gBAAA,EACAC,MAAAA,EACAjV,UAAA,oCRmoDM4U,YAAa,gCQhoDnB5f,QAAA4D,MAGAkc,SAAAlN,OACAmN,UAAAhV,EAEAiV,cAAAE,WR+nDMD,cQ7nDNpb;AR8nDMmG,QQ3nDNhM,ER6nDIgB,MQ1nDJ4D,MAAAxB,UAAAoC,YAAAA,aAAAA,WAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GR6nDM,QQznDNpC,GAAAsC,EAAAA,EAAAA,GR0nDQ,GAAIG,MQxnDZzC,EAAAsC,QAAAA,UAAA9E,EAAA0E,ER0nDQO,GAAUX,EAAS9E,EAASJ,EQxnDpCoD,IAAAA,GAAA+d,EAAAnhB,MACAoD,GAAAge,YACAhe,EAAAie,SACAje,EAAAke,gBAGAle,EAAAme,gBR0nDQne,EQxnDRyC,YAAAJ,EAAAG,SRynDQxC,EAAMge,oBAAsBphB,EAAQygB,gBAAkBzgB,EAAQwgB,SAC9Dpd,EAAMie,eAAiBrhB,EAAQihB,cQtnDvC7d,EAAAyC,SAAA7F,EAAA4F,QRwnDQxC,EQvnDRA,UAAAmC,EAAAub,SRwnDQ1d,EQvnDRyC,UAAAF,SAAAC,GRwnDUxC,EAAMmC,aAAa,WACjBM,EAAQJ,SAASG,MAGrBxC,EAAMyC,QAAU,SAASD,EAAOE,GQpnDxC1C,EAAA0a,aAAA,WACAjY,EAAAA,OAAAiY,MRwnDQ1a,EQpnDR4C,WAAAqG,WRqnDU,MQpnDVjJ,GAAA0a,cRsnDQ1a,EAAM0a,UAAY,SAASlY,GACzB,MAAOC,GAAQiY,UAAUlY,IQjnDnCxC,EAAAoe,WAAAA,WACA,IAAA,GAAAnV,GAAA,EAAAA,EAAAjJ,EAAAiC,SAAAkB,OAAA8F,IACAjJ,EAAA0a,UAAAzR,IACAjJ,EAAAyC,QAAAwG,IAOAxG,EAAAA,YAAA,WACAzC,IAAAA,GAAAiC,GAAAA,EAAAA,EAAAU,EAAAA,SAAAA,OAAAA,IACAF,EAAA4b,UAAAA,IRinDcre,EAAMyC,QAAQwG,IAIpBxG,EQ/mDRzC,OAAAsC,SAAAoX,GRgnDU1Z,EAAMiC,SQ/mDhBU,ERgnDUF,EQ/mDVzC,sBRinDQyC,EQ/mDR7F,SAAA0gB,SAAAhb,GAUAtC,MAVApD,GAAA0hB,URinDgB7b,EAAQiY,UAAUlY,GACpBxC,EQjnDdsC,aAAAoX,OAAA1Z,EAAAsC,aAAAmX,QAAAjX,GAAA,GRmnDcxC,EAAMsC,aAAa+D,KAAK7D,GAEtB5F,EAAQ0gB,MAAMtd,EAAMsC,aAAagb,KAAK,SAASgB,EAAGzB,GQ/mDlEpa,MAAAF,GAAAsa,KRmnDY7c,EAAMsC,aAAeE,EQhnDjC+b,EAAAjc,cRonDQG,EQlnDR7F,OAAAwgB,SAAA5a,GRmnDU,KQlnDV1E,QAAAA,YAAAoF,IAAAlD,EAAAsC,GAAAA,GAAAtC,EAAAwC,SAAAA,QRknDU,CAGA,GAAIjE,GAAQyB,EAAMiC,SAASO,GAAOjE,KAClCyB,GQlnDVue,OAAAve,WRmnDYyC,EAAQJ,SAASG,GACb5F,EQlnDhBwgB,SACAtf,EAAAlB,cAAAoD,EAAAsC,aAAAoL,IAAA,SAAAlL,GACA1E,MAAAA,SAAAoF,YAAAA,EAAA3E,SAAAT,IACA,KRonDuBkC,EAAMiC,SAASO,GAAOjE,UAG3B3B,EAAQgM,OQ/mD1B5F,EAAApG,cAAAH,IAAAqB,EAAA0E,YAAAC,EAAAA,GAEA7F,EAAAqG,cAAAT,GRknDcC,EAAQqB,UAGZ9D,EQ7mDV3B,MAAAA,EAAAmgB,YAAA1Y,UAAAA,EAAAtD,EAAAC,GACAzC,QAAAsC,UAAAA,EAAAxE,WAAAgI,QAAA4H,WAAAnP,EAAAA,WR8mDY3B,EQ7mDZqG,SAAAR,EAAAgc,EAAAlgB,KRgnDQkE,EQ7mDRzC,mBAAAsC,WR8mDc1F,EAAQwgB,SACN/e,QQ7mDhBmgB,QAAA1gB,EAAAgI,aACA9F,EAAA3B,aAAAP,EAAAgI,YAAAA,IAAA9F,SAAAiC,GACAjC,MAAAsC,GAAAA,UAAAG,KRgnDczC,EAAMsC,gBQzmDpBM,QAAAA,UAAA9E,EAAAgI,cAAA9F,EAAAiC,SAAAkB,OACAnD,EAAApD,aAAAsE,EAAApD,UAAAA,EAAAgI,aR8mDc9F,EAAMsC,iBAIZG,EQ1mDR7F,WAAAwgB,WR2mDU,MQ1mDVxgB,GAAAoD,WAAAsC,ER6mDiBtC,EAAMiC,SAASkB,QAAUrF,EAAWmI,WAAW9C,QAAUvG,EAAQsE,UAF/DlB,EAAMiC,SAASkB,QAI1BV,EQzmDRD,UAAAA,SAAAA,GACA,MAAA5F,GAAA4F,SACAnE,EAAAiF,aAAArB,QAAAO,QAEAA,EAAAA,eAAAA,GAGAC,EAAAc,UAAAA,SAAAhF,GAEAmE,GAAAc,EACAd,KAAAe,EAAAA,EAAAA,SAAAA,OAAAA,MAEAkF,QAAArF,OAAAtD,EAAAiC,SAAAO,GAAAjE,MAAAA,KRwmDU,MQtmDVmgB,IRwmDQjc,EQrmDRc,aAAAob,SAAApI,GRwmDU,GAFA7T,EQrmDVc,iBRsmDUd,EAAIe,kBACAkF,EQrmDd+V,CRsmDY,GQpmDZC,GRomDgBpI,EAAWlY,QAAQrB,QAAQ0F,EAAIuE,OAEnC,IAA4B,MAAxBvE,EAAIuE,OAAOwB,SQlmD3B,IRmmDc,GAAIkW,GAAkBpI,EAAS5H,UQnmD7C+P,GAAAC,EAAAxb,OAAA,GACAqT,MAAAnY,EAAAqgB,GAAAlI,WRqmDkBkI,EQpmDlBC,GRsmDgBA,EAAkBA,EAAgBhQ,QQhmDlD5K,GACA1F,QAAArB,QAAAgI,GAAAtC,eAAA,SAGAA,EAAAc,eAAAA,WRsmDQf,EQhmDRsB,WAAAD,SAAAA,GRimDU,GAAK,eAAekB,KAAKtC,EAAIgB,SAK7B,MQlmDV0Z,KAAA1a,EAAA9F,UACA8F,EAAAc,iBR+lDYd,EAAIe,mBQ1lDhB7G,EAAA8G,UAAApB,IAAAI,EAAA1C,QAIA2D,EAAAA,OR2lDe/G,EAAQwgB,UAA6B,KAAhB1a,EAAIgB,SAAkC,IAAhBhB,EAAIgB,aQrlD9D9G,EAAA6c,WRylDgC,KAAhB/W,EAAIgB,SAAkB1D,EAAMsC,aAAe,EAAGtC,EAAMsC,eAAyC,KAAhBI,EAAIgB,SAAkB1D,EAAMsC,aAAe,EAAGtC,EAAMsC,aAAetC,EAAMiC,SAASkB,OAAS,EAA4B,KAAhBT,EAAIgB,SAAkB1D,EAAMsC,aAAetC,EAAMiC,SAASkB,OAAS,EAAGnD,EAAMsC,eAAyBjE,QAAQ2U,YAAYhT,EAAMsC,gBAAetC,EAAMsC,aAAe,GQtlDvWG,EAAAmc,YALAC,EAAAtc,OAAAvC,EAAAsC,eR+lDQG,EQvlDRqc,MAAAA,WRwlDU,GQvlDV7X,GAAAA,EAAAuH,UAAAA,SRwlDU,OAAOuQ,GAAGtF,QAAQ,SAAW,GAAKsF,EAAGtF,QAAQ,YAAc,GAAKsF,EAAGtF,QAAQ,SAAW,GQllDhGhX,EAAA6U,iBAAA1T,SAAAA,GACA,OAAAnB,EAAA,GAAA8Z,cAAAyC,UACA1H,EAAAA,iBACA2H,EAAAriB,2BACA6F,EAAAA,OAAAoB,SRulDQ,IQllDRpB,GAAAoB,EAAAA,IRmlDQpB,GQllDR7F,KAAAA,WRmlDU0a,IACI1a,EAAQwgB,UACV3a,EQllDZoB,SAAAmL,SAAA,mBAGAhN,EAAAuV,WACA9U,EAAAqB,SAAA4E,GAAAC,EAAA,aAAA,YAAAlG,EAAAc,cACA3G,EAAAwgB,UACApd,EAAAsC,GAAAA,UAAAG,EAAAsB,aAEAtB,GAAAA,GRmlDQ,IQjlDRzF,GAAAgM,EAAAlF,IAoBA,OR8jDQrB,GAAQqB,KAAO,YQhlDvByT,EAAA6F,UAAA/e,QAAA2U,YAAAlV,EAAAgI,eRklDY9F,EAAMsC,iBAERG,EAAQoB,SAASmF,IAAIL,EAAU,aAAe,YAAalG,EAAQc,cQ7kD7Eua,EAAAtgB,UACAR,EAAA8gB,IAAAA,UAAAA,EAAAA,YAMAzZ,GAAA,IAIA5B,ER23CM,GQznDNzC,GAAAiC,6BAAAA,KAAAA,EAAAA,UAAAA,WACA0G,EAAAyU,eAAAxb,GAAA+I,UAAA6F,CAgQAzQ,OADA2E,GAAAlH,SAAAA,EACAsgB,MR0kDKzZ,UQvkDLrE,YAAAA,UAAAA,SAAAA,KAAAA,UAAAA,gBAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GRwkDI,GAAIxC,GQxkDRggB,EAAAhgB,QRykDI,QACEiH,SQzkDNnG,MR0kDMoG,QQzkDNrG,UR0kDM0B,KAAM,SAAkBC,EAAOhD,EAASwH,EAAM1G,GQtkDpD,GAAA6G,IACAtG,MAAAC,EACAkf,YAAApa,EAAAoB,YRykDQnG,SAAQC,SAAU,WAAY,cAAe,aAAc,eAAgB,YAAa,YAAa,QAAS,UAAW,WAAY,OAAQ,YAAa,cAAe,iBAAkB,YAAa,gBAAiB,UAAW,WAAY,gBAAiB,YAAa,KAAM,OAAQ,YAAa,cAAe,cAAe,UAAY,SAASI,GACtVL,QAAQ+E,UAAUoB,EAAK9F,MAAO9B,EAAQ8B,GAAO8F,EAAK9F,KAExD,IQrkDRiG,GAAAjG,eRskDQL,SQrkDRA,SAAA+E,OAAAoB,YAAA,iBAAA,QAAA,SAAA9F,GACA9B,QAAA8B,UAAAsB,EAAA2Q,KAAA/L,EAAAA,KAAAA,EAAAA,MRskDYhI,EAAQ8B,IAAO,KQ/jD3BL,QAAAA,SAAA+E,eAAA8b,SAAA,eAAA,SAAA,YAAA,SAAAxgB,GACA,GAAAiG,GAAAA,KAAAA,EAAAK,OAAAka,GAAAA,cAAAxgB,EAAAqG,MAAA,EACAnI,SAAAwgB,UAAA5Y,EAAAI,MRmkDYhI,EQlkDZ8B,GAAAsB,EAAA2Q,MAAAnM,EAAAI,MRqkDQ,IAAIsa,GAAeliB,EAAQwH,KAAK,gBQpjDxC,IAXAxH,QAAAoG,UAAAqF,KACA0W,EAAAniB,KAAAA,GACAmiB,EAAAxT,UAAA,EAEAwT,EAAAzQ,SAAA1R,GAOAJ,WAAA2F,EAAAA,GAAAE,SAAAzF,cAAAJ,CAEA,GAAA2F,GAAAsc,CACA7hB,GAAA2O,IAAAyT,UAAAA,QR4jDUpiB,EAAUqB,QAAQrB,QAAQ,2DQxjDpCmiB,EAAA9Z,MAAAA,GR2jDQ,GQxjDRH,GAAAa,EAAAjI,EAAAA,WAEAyE,EAAAO,EAAAyC,EAAAA,EAAAA,EACAzH,GAAAA,SRwjDUd,EAAQ,GAAGoiB,iBAAiB,OAAQ7c,EAAOqc,iBQnjDrD5e,IAAAA,GAAA2F,EAAAF,OAAAG,GAAAA,QAAAC,OAAAA,IAAAA,MRsjDQ7F,GQpjDRuC,OAAA8b,EAAAA,SAAAA,EAAAA,GACAvgB,EAAAiF,SAAAA,EAAAA,GAAAA,KAAAA,SAAAA,GACAR,EAAAO,OAAAyC,GAGAzH,EAAAiF,cAGA,GRkjDQ/C,EQjjDRpD,OAAAA,EAAAwgB,QAAA/e,SAAAmgB,EAAA1gB,GRkjDUyE,EQjjDVgE,qBRkjDUzI,EQjjDV0E,YRkjDW,GACH1E,EQjjDRqD,QAAA9C,WRkjDU,GQjjDVkI,GACAA,CRkjDc3J,GQjjDdwgB,UAAA/e,QAAAmgB,QAAA1gB,EAAAgI,cRkjDYS,EQjjDZA,EAAA8Y,YAAA3R,IAAA,SAAAnP,GRmjDc,MADAiE,GAAQD,EAAOkc,UAAUlgB,GQhjDvCiE,QAAAD,EAAAH,OAAAH,SAAAO,GAAAsE,QACAtE,OAAAD,QAAAkc,WRmjDclY,EQljDdA,EAAA/D,QAAA5F,EAAA2F,WAAAN,EAAAO,WRkjDyB+D,EAASpD,OAAS,KAAOvG,EAAQghB,eAAiBpgB,EAASogB,eAE3DrX,EAAS8Y,KAAK,QQ7iDvC7c,EAAAjE,EAAAA,UAAA4E,EAAA2C,aRijDYS,EAAW/D,QAAeD,EAAOH,OAAOH,SAASO,GAAOsE,OQ5iDpE9G,EAAAN,MAAA6G,GAAA3J,EAAA4gB,cAAA5gB,EAAA2gB,WAAA/f,EAAA+f,aAEA3gB,EAAAwgB,WACA7a,EAAA+c,SAAA,SAAA/gB,GR+iDY,OAAQA,GAA0B,IAAjBA,EAAM4E,SAG3BnD,EAAMgH,IAAI,WAAY,WSt8D9B3J,GAAAkF,EAAAwE,UAIAvJ,EAAAI,KACAH,EAAA,YTy8DEY,QSj8DF1B,OAAAA,0BAAA,2BAAAmE,SAAA,WAAA,WTk8DI,GSj8DJxB,GAAAA,KAAA9B,UACAqD,UAAA,UACAG,YAAA,GACAtB,WAAA,EACA0H,QAAA,EACAmY,UAAA,QACAte,YAAA,2BACAqG,iBAAA,ETk8DMzG,QAAS,QS/7DfjD,UAAA4D,EAEA9B,MAAA,ETg8DM0H,MS77DNxK,GT87DM2iB,QS57DNC,GT67DMve,MS17DNrE,ET27DM0K,WS17DNkY,ET47DI5hB,MSz7DJ4D,MAAAge,WAAAA,SAAAA,GT07DM,QAASC,GAAeziB,EAASkF,GSt7DvC,GAAAtF,GAAA6iB,QAAAA,UAAAA,EAAAA,GTw7DYD,EAAW1d,EAAS9E,EAASJ,ES76DzC6H,OALAJ,GAAAkb,UAEAG,EAAAA,OAAAA,QAAA9d,EAAA8d,SAGAjb,EAEA1E,MAAA0f,OTm7DKpb,US/6DLzH,aAAAA,UAAAA,OAAAA,WAAAA,SAAAA,EAAAA,EAAAA,GTg7DI,GAAI8iB,GSh7DR1f,EAAAA,uBAAAA,EAAAA,UTi7DI,QACEyE,SSj7DNnG,MTk7DM0B,OSj7DN,ETk7DMD,KAAM,SAAkBC,EAAOhD,EAASwH,GS96D9C,GAAAG,GACAtG,GACA2B,MAAA3B,EAIAA,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAA,kBAAAI,YAAAA,YAAAA,QAAAA,UAAAA,OAAAA,YAAAA,cAAAA,YAAAA,KAAAA,cAAAA,cAAAA,aAAAA,SAAAA,GACAkG,QAAAxB,UAAA1E,EAAAmG,MAAAC,EAAAA,GAAApG,EAAAqG,KT+6DQ,IS76DRnI,GAAAoD,eT86DQ3B,SAAQC,SAAU,OAAQ,YAAa,aAAe,SAASI,GACzDL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KSz6D/FL,QAAAA,SAAA+E,eAAAwN,SAAA,eAAA,UAAA,SAAAlS,GACA,GAAAiG,GAAAA,KAAAA,EAAAK,OAAA4L,GAAAA,cAAAlS,EAAAqG,MAAA,EACAnI,SAAAqK,UAAAzC,EAAAI,MT46DYhI,ES36DZ8B,GAAAsB,EAAA2Q,MAAAnM,EAAAI,MT86DQ,IAAIgM,GAAa5T,EAAQwH,KAAK,cSx6DtCnG,SAAAC,UAAAsS,KACApM,EAAAQ,KAAA4L,GACApM,EAAAsM,QAAApS,ET26DY9B,ESz6DZyB,OAAA+E,GT46DQ/E,QAAQC,SAAU,QAAS,WAAa,SAASI,GAC3C8F,EAAK9F,IACP8F,EAAKsM,SAASpS,EAAK,SAASkH,EAAUC,GACpC7F,EAAMtB,GAAOkP,EAAKC,YAAYjI,GAC1BvH,QAAQ+E,UAAUyC,ISt6DpCrB,EAAA,WACAkB,GAAAia,EAAAxQ,wBAMA3K,EAAAnG,WTw6DU2B,ESv6DV0f,OAAAA,EAAAA,UAAA,SAAA9Z,EAAAC,GACAxH,QAAAuhB,SAAAA,GTw6DcvhB,QAAQS,OAAOkB,EAAO4F,GSr6DpC5F,EAAAuf,QAAA3Z,EAIApB,QAAAwM,UAAAnL,IACA7F,EAAA,WACA4f,GAAAvhB,EAAA+E,sBTw6Da,GAEDoB,ESr6DZob,QTs6DU5f,EAAM0F,OAAOlB,EAAKwM,OAAQ,SAASpL,EAAUC,GACtC+Z,GAAYvhB,QAAQ+E,UAAUwC,KAC/BvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,wBSl6DxEzM,KAAA,EACAxE,EAAA0F,OAEAka,EAAAvhB,UTu6DYmG,ESn6DZob,WTo6DU5f,EAAM0F,OAAOlB,EAAK+C,UAAW,SAAS3B,GAC/Bga,GAAYvhB,QAAQ+E,UAAUwC,KAC/BvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,0BSh6DxEzM,KAAA,EACAxE,EAAA0F,YAAAgC,GAEAkY,EAAA1O,YAAAtL,MAQA5F,EAAAgH,UACAhH,EAAA4f,OAAAA,EAAAA,SAAA7Y,SAAAA,GACAnK,GAAAyB,QAAA+E,UAAAwC,IACAga,EAAA1O,YAAAtL,KTg6DQga,EAAUJ,EAASxiB,EAASJ,GAC5BoD,EAAMgH,IAAI,WAAY,WUhkE9B3J,GAAAuiB,EAAA7Y,UAIAvJ,EAAAI,KACAib,EAAA,YVmkEExa,QU7jEFhB,OAAA,4BAAAyD,SAAA,UAAA,WV8jEI,GU9jEJtD,GAAAA,KAAAA,UV+jEMqb,YAAa,SACbgH,UAAW,mBU3jEjBxb,QAAAA,EAIAzG,MAAA4D,KAAA,WACAiD,OACA1E,SAAAvC,MV6jEK6G,UUxjELhG,YAAA+E,UAAA1E,YAAAA,UAAAA,SAAAA,EAAAA,EAAAA,GVyjEI,GAAIlB,GAAWsiB,EAAQtiB,QACvB,QACEiH,SUrjEN,IVsjEM1E,KUpjEN,SAAA8F,EAAAA,EAAAA,EAAAA,GVqjEQ,GUnjERjJ,GAAAmjB,QAAA/iB,KAAAQ,EVojEQa,SUljERA,QAAAC,OAAAyhB,KAAAA,GAAAC,SAAAA,GAEA3hB,QAAA4hB,UAAA5hB,EAAArB,MAAAgjB,EAAAA,GAAAA,EAAAA,MVmjEQhgB,EUjjER0F,OAAA9I,WVkjEU,MUjjEVsjB,GAAAC,QVkjEW,SAASva,EAAUC,GACpB,GUjjEVka,GAAA/iB,EAAAojB,GAAAF,iBAAA,MAAAtjB,EAAAijB,UAAA,IVkjEUxhB,SUhjEVgiB,QAAArb,EAAAY,SAAAoa,GVijEY,GUhjEZC,GAAAjR,QAAApS,QAAAic,GVijEgBqH,EUhjEhBD,EAAAzb,KAAA5H,EAAAijB,WAAAlgB,QAAA,IAAA,MACAsgB,GAAAjQ,SVijEckQ,EAAU,IAAMA,EAAU,IAE5B,IAAIG,GAAS,GAAID,QAAOF,EAAS,IAC7BG,GAAOrb,KAAKY,GACdqa,EAAUjR,SAASpS,EAAQic,aWxmEzCxb,EAAA2S,YAAApT,EAAAic,sBXinEExa,QWvmEFwC,OAAA,2BAAA,2BAAAC,SAAA,YAAA,WXwmEI,GWvmEJC,GAAAnD,KAAAJ,UACAwD,UAAA,UACAtB,YAAA,WACAuB,YAAA,WXwmEMiG,UAAW,cWrmEjBtJ,YAAA,6BAEAiD,QAAAka,QACAha,WAAAuf,EAEAtf,UAAAuf,EXqmEM7gB,MWnmEN8gB,EXomEMvf,MWjmENrE,EXmmEIgB,MWhmEJ4iB,MAAAA,UAAAxjB,aAAAJ,WAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,GXmmEM,QW7lEN2jB,GAAA7d,EAAAgB,GXsoEQ,QAAS+c,GAAY/d,GWpkE7B2B,GAAAA,EAAA4C,SAAAjK,EAAA,GAEA,MAAA0F,GAAAuE,SAAAjK,EAAA,IAAAwjB,EAAA1c,OX0hEQ,GW7lERpB,MACAA,EAAAe,QAAAA,UAAAA,EAAAA,EX8lEQ+c,GW3lERE,OAAAriB,EAAArB,OAAAwjB,EAAA3c,MAAA0J,QAAAgD,EAAAhD,OX4lEQiT,EW3lERE,EAAA1jB,EAAAJ,EX4lEQ,IW3lER+jB,GAAAne,EAAAA,QX4lEQge,GW3lERliB,WAAAoiB,SAAAhe,GX4lEU,GW3lEV,UAAA4d,KAAAA,EAAAA,SX2lEU,CACA5d,EAAIc,iBWxlEdd,EAAAA,iBAGAge,IAAAA,GAAAle,QAAAgM,QAAAA,EAAAA,SAAAA,GAAAA,iBAAAA,sBXwlEU,IAAKkS,EAAMvd,OAAX,CWllEV,GAAAS,EACA4c,SAAA5c,QAAA8c,EAAA,SAAAnW,EAAAtB,GACArF,GAAAA,EAAAA,KAAAA,EAAAA,YAAAA,EAAAA,KAIA5C,KAAA0B,EAAA9F,SAAA4jB,EAAAA,EAAA3c,IAAA,KAAA2c,EAAA3c,SAAArB,EAAAge,EAAAzc,OAAAA,EAAAA,IAAAA,QAAAA,YAAAA,KAAAA,EAAAA,GXklEU2c,EWjlEV3F,GAAArS,GAAA,GAAA8F,UXmlEQ,IWjlER5K,GAAA+c,EAAAC,IXklEQJ,GAAU5c,KAAO,WW/kEzBA,IACA4c,EAAA1c,WACA0c,EAAAA,UAAAA,EAAA3c,UAAA2c,EAAA3c,SAAA6E,GAAA,UAAA8X,EAAAzc,YACAgX,EAAAne,GAAAoE,QAAAA,IACA+Z,GAAAA,GACA4F,EAAAC,SAAA,aAAAD,EAAA3Q,SAAAA,QXklEQ,IAAIlM,GAAO0c,EAAU1c,IW9kE7B0c,GAAAzZ,KAAAyZ,WACAA,EAAAzZ,WACAgU,EAAA/Z,UAAAyf,EAAAA,UAAAA,EAAAA,SAAAA,IAAAA,UAAAA,EAAAA,YACA1Z,EAAAA,IAAAA,QAAAA,GXglEc4Z,EAASC,SAAS,aAAaD,EAAS3Q,YAAY,QW3kElElM,KX8kEQ,IW5kERiD,GAAAE,EAAAjK,OAiBAgD,OX4jEQwgB,GAAUzZ,QAAU,WW1kE5BgU,EAAAyF,IAAAA,QAAAA,GX4kEUzZ,KW9jEVyZ,EXqhEM,GWhmENzF,GAAA4F,QAAA3jB,QAAA2R,EAAAA,SAAAA,MAIA6R,EAAAzc,QAAA8c,UAAAne,iBAAAA,QAAAA,UAAAA,uBAAAA,QAAAA,UAAAA,oBAAAA,QAAAA,UAAAA,mBAAAA,QAAAA,UAAAA,gBX6oEM,OWjkENoe,OXmkEKzc,UWjkEL,cAAA0c,UAAAA,OAAAC,YAAA,SAAApf,EAAAgM,EAAA4S,GXkkEI,OACE/b,SAAU,MACVzE,OWjkEN,EXkkEMnC,QWjkENijB,SAAA3jB,EAAA4jB,GXkkEQ,IWjkERD,EAAAnkB,WAAAA,CXmkEU,IADA,GWjkEVokB,GAAAE,EAAAC,GAAAA,YXkkEiBH,GAAwC,IAAzBA,EAAYC,UAChCD,EAAcA,EAAYA,WW5jEtCnkB,IAAAA,EAAAA,UAAAA,MAAAA,KAAAA,QAAAA,kBAAAA,IAAAoD,EAAAA,SAAAA,EAAAA,UXgkEY8gB,EAAOnkB,YAAcD,EW/jEjC2B,EAAAC,WAAA4iB,YAAAH,IXmkEQ,MW9jERpc,UAAA3E,EAAAhD,EAAAwH,GACAnG,GAAAA,IACA2B,MAAA3B,EAIAA,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAA,YAAAI,YAAAA,QAAAA,UAAAA,WAAAA,OAAAA,YAAAA,KAAAA,aAAAA,SAAAA,GACAkG,QAAAxB,UAAA1E,EAAAmG,MAAAC,EAAAA,GAAApG,EAAAqG,KX8jEU,IW5jEVnI,GAAAoD,eX6jEU3B,SAAQC,SAAU,OAAQ,aAAe,SAASI,GAC5CL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KAEvFL,QW1jEVqH,SAAAlB,eAAA,SAAAoB,eAAAC,UAAAA,SAAAA,GX2jEY,GW1jEZ7F,GAAAuf,KAAA3Z,EAAAA,OAAAA,GAAAA,cAAAA,EAAAA,MAAAA,EACAvH,SAAA+E,UAAAoB,EAAAI,MX2jEchI,EAAQ8B,GAAOsB,EAAM2Q,MAAMnM,EAAKI,OWnjE9C5E,EAAA0F,YXujEY1F,EWtjEZ0F,OAAAyb,EAAAA,WAAA/d,SAAAwC,EAAAC,GACA7F,EAAA3B,QAAAG,IACA,EXwjEU,IAAI2iB,GWtjEdX,EAAAxjB,EAAAJ,EXujEc4H,GWtjEd2c,QXujEYnhB,EAAM0F,OAAOlB,EAAKwM,OAAQ,SAASpL,EAAUC,GACtCsb,GAAa9iB,QAAQ+E,UAAUwC,KAChCvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,yBWnjE1EjK,KAAA,EACAma,EAAAA,OAEAA,EAAArd,UXwjEU9D,EAAMgH,IAAI,WAAY,WAChBma,GAAUA,EAASpa,UYruEnC1J,EAAA,KAIAG,EAAAI,aZyuEES,QYnuEF6I,OAAA,wBAAA,sBAAA,sCAAApG,SAAA,SAAA,WZouEI,GYnuEJnE,GAAAiB,KAAAJ,UACAL,UAAA,UACAmC,kBAAA,UACAyB,YAAA,GACA/D,YAAA,QACAokB,YAAA,QACApgB,UAAA,MACAtB,YAAA,uBACAkE,SAAA,GACAyd,iBAAA,EACAC,WAAA,EZouEMtkB,QAAS,KYjuEfY,UAAA4D,EAEAR,UAAA1C,EACAoB,MAAAggB,EACA9b,MAAA2d,EAEAF,KAAAG,KACAF,OAAAG,KZkuEI7jB,MY/tEJ4D,MAAAkgB,UAAAA,aAAAA,cAAAA,WAAAA,WAAAA,OAAAA,aAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GZ0uEM,QAASC,GAAazf,GAoIpB,QY9qER0f,KAEA5hB,EAAAA,MAAAgD,EAAApG,YAAAH,QAAAmlB,GACAvjB,QAAA+E,UAAAxG,EAAAuL,SAAA9J,QAAAgF,WAAAzG,EAAAuL,SZ8qEYvL,EAAQuL,OAAOyZ,GAyBnB,QAASxZ,KYpqEjBpI,EAAApD,MAAAa,EAAAA,YAAA,QAAAmkB,GACAL,QAAAA,UAAAvR,EAAApT,SAAAc,QAAA2F,WAAAzG,EAAAa,SZsqEYb,EAAQ0L,OAAOsZ,GYlqE3BA,EAAA,UAAAze,QAAA,GACAoe,EAAArU,YAAAtQ,EAAAc,YAAA,SZsqEcd,EYpqEda,WACAmkB,EAAAhe,YAAAA,EAAAA,YAAAA,SAAAA,EAAAA,WA2BA,QAAAie,KACAjlB,EAAAwkB,WACAU,EAAA9Y,GAAAA,QAAA+Y,GACAC,EAAAhZ,GAAAA,QAAA+Y,GACAC,EAAAhZ,GAAAA,QAAAiZ,IAIA,QAAA/Y,KACAtM,EAAAoE,WACA8gB,EAAApZ,IAAA,QAAAkZ,GZ4pEYI,EAAgBhZ,IAAI,QAAS+Y,GAC7BC,EAAgBhZ,IAAI,QAASiZ,IAGjC,QY1pERH,KZ2pEcllB,EAAQoE,UACV8gB,EAAapZ,GAAG,QAASkZ,EAAOxY,UAGpC,QYvpERxM,KACAglB,EAAApT,UZwpEYsT,EYvpEZ9Y,IAAA,QAAA4Y,EAAAxY,UZ0pEQ,QAAS2Y,GAAoBrf,GYrpErCA,EAAAuf,SAAAA,EAAAA,gBACAze,WAAAA,EAAAA,SZupEYoe,EAAOpT,QYnpEnBoT,EAAAA,QZwpEQ,QAASK,GAAoBvf,GYlpErCA,EAAAwf,iBZqpEQ,QYnpERA,KZopEcN,EAAO1U,UAA6B,OAAjB4U,IYjpEjCD,IACAC,KZopEcI,IACFA,EAAW9U,WYhpEvB8U,EAAAN,MAMAE,IAEA9hB,EAAAA,SZ6oEY8hB,EAAeF,EAAO/d,SAAW,MYl8E7C,GAAAjH,MACA6kB,EAAAA,EAAAhW,SAAA7O,QAAA0kB,UAAA9jB,EAAA0E,GACAigB,EAAAA,EAAAA,SAAAV,EAAA5jB,QAAAjB,GZ0tEYoD,EAAQ4hB,EAAOxf,OAASxF,EAAQoD,OAASpD,EAAQoD,MAAMuN,QAAU1L,EAAW0L,MYptExFqU,GAAAhlB,SAAAmR,EAAAnR,YAGA0B,EAAAyC,UAAA,QZqtEYnE,EAAQ0kB,SYhtEpBthB,EAAAyL,SAAA7O,EAAA0kB,OAAA,IACAthB,EAAAyhB,EAAA,IZmtEQG,EAAOnU,IAAM7Q,EAAQmR,IAAMnR,EAAQI,SAAWJ,EAAQI,QAAQwH,KAAK,OAAS,GAC5ElG,GAAU,QAAS,WAAa,SAASI,GYhtEjD0jB,EAAA1jB,KAAAsB,EAAAtB,GAAAkP,EAAAC,YAAAjR,EAAA8B,OZmtEQsB,EYjtER4hB,MAAAhe,WZktEU5D,EAAMmC,aAAa,WACjByf,EAAO9d,UAGX9D,EYjtER4hB,MAAAhZ,WZktEU5I,EAAMmC,aAAa,WACjByf,EAAOhe,UY3sEnB5D,EAAA8hB,QAAAA,WACA9hB,EAAAkiB,aAAAA,WACAF,EAAAA,YZitEQJ,EYhtER1U,SAAAlN,EAAAkN,UAAA,CZitEQ,IYjtER9C,GAAAiY,EAAAzW,EZotEYoW,EAAkB3jB,QAAQrB,QAAQ,eAAiBJ,EAAQc,YAAc,eA0M7E,OY75ERoK,GAAA6D,KACAwC,SAAAA,QACAyT,IAAAA,MZqtEUxX,KAAM,MYltEhBwX,OAAAvT,MAGAzC,MAAAhP,QZmtEQkL,EYjtER8Z,KAAAhe,SAAAA,GZktEUuK,EAAcxQ,EACdikB,EAAOvT,SY7sEjBuT,EAAA7a,KAAAA,WAGAub,EAAAA,MAGAtiB,EAAAgiB,aAAA,WACAA,EAAAA,UZ+sEQJ,EAAO7a,QAAU,WYvsEzB6a,IACAA,IAEAI,EAAArT,SACAqT,EAAAtT,MZysEU1O,EYvsEV2O,YZysEQiT,EAAOhe,KYvsEf,WZwsEU,IYvsEVge,EAAAhlB,SZusEU,CACA,GYvsEV+R,GACAD,CZguEU,IAxBIrQ,QYvsEdkQ,UAAA3R,EAAAmE,YZwsEY4N,EYvsEZA,EAAA5N,UZwsEY2N,EYvsEZA,EAAA9R,UAAAI,GAAAA,UAAAA,QAAAA,QAAAA,EAAAA,UAAAA,GAAAA,WAAAA,MZysEgBJ,EAAQmE,WYpsExB+gB,EAAAA,EAAAQ,EAAAA,WAIAJ,EAAAA,EAAAN,IAAAxf,EAAAmL,GAAAA,UAAAA,QAAAA,QAAAA,EAAAA,GAAAA,WAAAA,OAIA3Q,EAAAwkB,KAEAU,EAAAA,EAAAnW,SACAqW,GAAArW,IZksEUuW,EYlsEVK,EAAAJ,OAAAA,OZmsEUL,EAAeF,EAAO/d,SAAWsK,EAAYpO,KAAKmiB,EAAY,SAASnT,EAAe/O,MYhsEhGwhB,EAAAA,WZksEYM,EAAanW,KY/rEzB3L,UAAAgD,EAAA,GAAAvG,IZksEYulB,EAAgBrW,KY/rE5BtN,UAAA+E,EAAA/E,GAAAoQ,IZksEY+S,MY7rEZ3S,EAAAA,MAAAjS,EAAAH,YAAA,eAAAmlB,GAAAY,iBZ+rEU,CY3rEVV,QAAAA,UAAA9S,EAAApS,eAAA6lB,QAAAA,WAAAA,EAAAA,eZ+rEY7lB,EAAQ6R,aAAamT,GAEvBE,EY5rEV9kB,KZ6rEY6R,QAAS,UYzrErBG,SAAAvR,EAAAA,WACAb,EAAAA,aZ2rEYklB,EY1rEZE,SAAAhT,EAAApS,aAEAklB,EAAAA,MAAA9S,EAAApS,EAAAa,OZ2rEYY,QAAQrB,QAAQqC,EAAY,gBAAiByiB,EAAa,KAAK9S,SAAS0S,EAAW9kB,EAAQykB,OYvrEvGjS,EAAAvG,YZ0rEgBjM,EAAQwkB,UYrrExB/iB,EAAAqkB,SAAA9lB,EAAA+lB,mBZwrEYb,EYtrEZ9S,SAAApS,EAAAa,YZwrEcb,EAAQwkB,UYprEtBQ,EAAA1U,MAAAA,EAAAA,EAAA,MAIA3C,QAAAuX,QAAAA,OAAA,EACApC,EAAAA,MAAAA,EAAA/Q,EAAAD,EAAAW,GZqrEYD,EAASvG,MAAMiZ,EAAcnT,EAAQD,GAAO3R,KAAKsS,GYhrE7DuS,EAAAhlB,SAAAa,EAAAyP,UAAA,EZmrEUrK,EYlrEV0e,EZmrEU,IAAIhX,GAAKuX,EAAa,EY/qEhCc,GAAAA,WACA1Z,EAAAA,UAGAqY,EAAAlS,SAAAA,EAAAA,YAAAA,SACArP,EAAApD,WACA2kB,EAAAne,SAAAxG,EAAAuL,YAAA9J,SAAAgF,EAAAzG,WZirEUgmB,IACA1Z,OAQF0Y,EAAO9d,KAAO,WYzqEtBzF,EAAA4Q,WACAG,EAAAA,MAAAG,EAAAuS,YAAA1Z,eAAAA,GAAAA,mBZ6qEc/J,QAAQ+E,UAAUxG,EAAQ4S,eAAiBnR,QAAQgF,WAAWzG,EAAQ4S,eYxqEpF5S,EAAAA,aAAAglB,GAGAxS,QAAAG,QAAAyS,OAAAA,EZyqEY5S,EAASG,MAAMuS,EAAc1Z,GYtqEzCvF,EAAA7C,MAAAA,GAAAA,KAAAA,GAIAqJ,EAAAA,WZuqEYmY,IYpqEZpS,EAAAhH,MAAAA,IAEAwZ,EAAAvjB,SAAA+E,EAAAxG,UAAA0L,EZsqEUzF,EYrqEVyF,GZsqEUuZ,IYpqEVxY,OAgBAuY,EAAApT,OAAA,WACAsT,EAAAA,SZoqEYF,EAAO9d,OY7pEnB8d,EAAAiB,QZkqEQjB,EAAOpT,MAAQ,WACbsT,EAAa,GAAGtT,SAElBoT,EY7pERhlB,SAAAwkB,SAAA1e,GACA,KAAAof,EAAAA,OAAAF,EAAAG,WACAC,EAAAA,OACAA,EAAAA,oBZitEeJ,EAET,QAAS/e,GAAW7C,GYpoE1BqE,EAAAA,SAAArE,EAAAqQ,OAAArQ,EAAAqQ,MAAArM,SAAAhE,EAAA2D,UAGAc,QAAAA,GAAA6L,EAAAtT,GACAgD,MAAA3B,SAAArB,SAAAA,GAAA2N,GAAA4F,iBAAAD,IZu4DM,GY/tENwS,GAAAzkB,QAAAC,QACAykB,EAAAnhB,EAAA8d,uBAAA9d,EAAA0a,WZguEUiF,EAAcljB,QAAQrB,QAAQ4E,EAAQ+I,SAASG,MY7tEzD0W,EAAAG,EAEAF,EAAAG,KAGAO,EAAA9U,KACAqU,GACAoB,GAAA9iB,WAEA+iB,GAAA,WZi9EM,OYloENnmB,OZooEKyH,UYpoELrH,WAAAA,UAAAA,OAAAA,SAAAA,SAAAA,SAAAA,EAAAA,EAAAA,EAAAA,GZqoEI,OACEyH,SAAU,MACVzE,OYtoEN3B,EZuoEM0B,KYtoEN,SAAAqD,EAAA1E,EAAA9B,EAAA8B,GZuoEQ,GAAI9B,IYnoEZoD,MAAApD,EACAA,QAAA6lB,EZqoEU7e,MAAM,EYhoEhBvF,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAAI,kBAAAA,YAAAA,WAAAA,WAAAA,OAAAA,YAAAA,YAAAA,oBAAAA,KAAAA,cAAAA,cAAAA,cAAAA,aAAAA,OAAAA,UAAAA,SAAAA,GACAL,QAAA+E,UAAAoB,EAAA9F,MAAAA,EAAAiG,GAAAA,EAAAK,MAIA3G,EAAAC,aACA1B,EAAAgI,YAAAlG,EAAAskB,WZkoEQ,IYhoERpmB,GAAAoD,eZioEQ3B,SAAQC,SAAU,WAAY,WAAY,OAAQ,aAAe,SAASI,GACpEL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KAEvFL,QY9nERmG,SAAA,eAAA,SAAA,eAAA,UAAA,SAAA9F,GZ+nEU,GY9nEV8F,GAAAsM,KAAApS,EAAAmG,OAAAe,GAAAA,cAAAC,EAAAA,MAAAA,EACA7F,SAAAtB,UAAAmP,EAAAA,MZ+nEYjR,EAAQ8B,GAAOsB,EAAM2Q,MAAMnM,EAAKI,OYznE5CvG,QAAAmG,SAAA,QAAA,WAAA,SAAA9F,GACAsB,EAAA0F,IACAlB,EAAAnG,SAAAmC,EAAAA,SAAAoF,EAAAC,GACAxH,EAAAA,GAAAS,EAAAkB,YAAA4F,OZgoEYpB,EY5nEZye,SZ6nEUjjB,EAAM0F,OAAOlB,EAAKye,QAAS,SAASrd,EAAUC,GYznExDqd,QAAAtB,SAAAhlB,GAGAI,QAAAwH,OAAA3D,EAAA+E,GAIAsd,EAAAA,QAAAnc,IAEAmc,EZwnEQ,IAAIA,GAAQtB,EAAOhlB,EACnBI,GAAQ0L,GAAGlE,EAAK3D,SAAW,QAASqiB,EAAMta,QAC1C5I,EAAMgH,IAAI,WAAY,Wa/iF9BiI,GAAAA,EAAAyT,UACArkB,EAAA,KAIAqhB,EAAAA,YbkjFMrhB,QariFN4Q,QAAAyT,MAAA,GAAArkB,QAAA4Q,QAAAkU,IAAA,IbsiFI9kB,QariFJ+kB,OAAAA,MAAAA,QAAArV,SAAAA,UAAAA,WAAAA,SAAAA,EAAAA,GbsiFM,GAAI2R,GAAwB9d,EAAQ8d,uBAAyB9d,EAAQyhB,6BAA+BzhB,EAAQ0hB,yBaniFlHF,EAAAvJ,EAAAA,sBAAAA,EAAAA,4BAAAA,EAAAA,yBAAAA,EAAAA,kCACA0J,IAAAvhB,EACAwhB,EAAAD,EAAA,SAAA1J,GbqiFQ,GapiFR7X,GAAAA,EAAAyhB,EbqiFQ,OAAO,YACLL,EAAqBrV,KahiF/B,SAAAyV,GbmiFQ,GAAIC,GAAQzhB,EAAS6X,EAAI,OAAO,EAChC,OAAO,YcnkFfxc,EAAAqmB,OAAAD,IAQA7lB,Od+jFM4lB,GAAIG,UAAYJ,Ec/jFtB/hB,KdmkFEnD,Qc5jFFhB,OAAAT,0CAAAsF,SAAAA,gBAAAA,Wd6jFI,Gc5jFJiD,GAAAA,KAAAye,Ud6jFMvD,Oc1jFNpP,+Kd4jFIrT,Mc1jFJ4D,MAAAqiB,SAAAA,KAAAA,SAAAA,EAAAA,Gd2jFM,QczjFNC,GAAAA,EAAAA,Gd2lFQ,QcjjFRvlB,GAAAyB,EAAA7B,GdkjFU,McjjFVoH,GAAAmI,IAAA,SAAAuD,EAAAzO,GdkjFY,GcljFZjE,GAAAiE,EAAAsE,IAIA3B,OdijFYhH,GAAO0lB,GAAa5S,EACpBnK,EAAQid,EAAU/jB,EAAO7B,GACzBI,EAAQylB,EAAQhkB,EAAO7B,IcljFnC2I,MAAA3B,EdqjFc5G,MAAOA,EcjjFrB0lB,MAAAA,KAnDA,GAAAC,MAEAF,EAAAA,QAAAA,UAAAA,EAAAA,EACA7e,GAAAY,UAEAZ,IAAAA,GACAA,EACA4e,EACAF,EACAC,EACAI,EACAF,CCxBAvb,OfglFQtD,GcvjFRoV,KAAAtJ,WdwjFU9L,EAAcM,OAASwL,EAAQzM,EAAKyM,MAAMrU,EAAQyjB,QcrjF5Dlb,EAAAY,EAAAA,EAAA,IAAAkL,EAAAjR,IACA6jB,EAAA7kB,EAAA+G,IAAA/F,EAAAA,GdujFU8jB,EcrjFVzlB,EAAAmgB,GdsjFU0F,EcrjFV3e,EAAAA,EAAAA,IAAAA,IdsjFUye,EAAUzJ,EAAOtJ,EAAM,GAAKA,EAAM,GAAK4S,GACvC9d,EcrjFVZ,EAAAye,EAAAA,KdujFQze,EAAcY,SAAW,SAAS/F,EAAOlC,GACvC,MAAOmB,GAAGD,KAAK+G,EAAS/F,EAAOlC,IAAaf,KAAK,SAASwI,GAKxD,McxjFZJ,SAAAgB,QAAAA,KACAnG,MAEAmF,EAAA4e,QAAA/jB,EAAAA,OAAAA,EAAAA,EAAAA,MdqjFmBmF,EAAcye,WAGzBze,EcjjFRhH,aAAAA,SAAAA,GdkjFU,GcjjFV6B,KdmjFU,OADAA,GcjjFVzB,GAAAA,EACAJ,EAAA0lB,IC3DAhK,EAAAA,OAOApR,EfynFM,MAAOwb,OAGX5lB,QehnFFrB,OAAAA,wCAAAmnB,QAAA,aAAA,Wf+sFI,Qe7jFJC,GAAAC,Gf8jFM,GAAIA,GAAarnB,EAAQsnB,cepjF/Bpa,EAAAlN,EAAAA,cAAAunB,CACA,IAAAhmB,EAAAvB,EAAA+O,aAAAA,MAAAA,GAAAA,eACA,MAAAwY,IAAA9b,EAAA2b,EAAA,SAAA,WAAAvK,EAAAlO,IAAAyY,EAAA,aACA7lB,EAAAoN,EAAAyY,YfujFM,OerjFN7lB,IAAAvB,EAAA4N,gBfg9EI,GehnFJrM,MfinFQkK,EehnFR+b,EAAAA,SAAAC,SAAAznB,EAAA4c,GfinFM,MehnFNrb,GAAAimB,UAAAC,EAAAznB,SAAA+N,gBAAAA,EAAAA,cfuuFI,OArHA8O,GAAGlO,IehnFPpN,SAAAvB,EAAA+N,EAAAA,GfinFM,GAAIxM,EAQJ,OANEA,GejnFRvB,EAAA0nB,afinFgB1nB,EAAQ2nB,aAAa5Z,GexmFrCyZ,EAAAC,iBACAG,EAAA5nB,iBAAA8M,GAAAA,GAEA9M,EAAA6nB,MAAA9Z,GAEAb,KAAA0a,EAAA1a,WAAAlN,IAAA+O,EAAAA,Gf2mFI8N,EAAGvP,OezmFPsa,SAAAxa,Gf0mFM,GAAIwa,GAAU5nB,EAAQ8M,wBAClBua,EAAarnB,EAAQsnB,ae/lF/BzK,QACA5P,MAAA6a,EAAAA,OAAAA,EAAAA,YACA5a,OAAA6a,EAAAA,QAAAA,EAAAA,aACA5a,IAAA6a,EAAAA,KAAAA,EAAAA,aAAAA,EAAAA,gBAAAA,YAAAA,EAAAA,gBAAAA,WAAAA,GACA5a,KAAA6a,EAAAA,MAAAA,EAAAA,aAAAA,EAAAA,gBAAAA,aAAAA,EAAAA,gBAAAA,YAAAA,KfmmFIpL,EehmFJtO,UAAA2Z,SAAAA,EAAAA,EAAAA,GACA,GAAAha,GACAia,EACAzZ,EAGAR,EACAlO,Ef+lFUooB,Ee5lFVC,EACAL,EAAArZ,EAAAA,IAAA3O,EAAA,YACAooB,EAAAvL,QAAA7c,QAAAA,GACAkoB,IAKAA,YAAAA,IACAJ,EAAAA,MAAAjL,SAAA3O,Yf2lFMma,EezlFNP,EAAAA,OAAAA,Gf0lFME,EezlFNnL,EAAAlO,IAAA3O,EAAA,Of0lFMooB,EezlFNzX,EAAAA,IAAAA,EAAAqX,Qf0lFME,GezlFNE,aAAAzX,GAAA,UAAAzC,KAAA8Z,EAAAI,GAAA3L,QAAA,Wf0lFUyL,GevlFVJ,EAAAzhB,EAAAA,SAAAzG,GACAA,EAAAA,EAAA0oB,IfylFQP,EAAUD,EAAY1a,OerlF9BsB,EAAAvB,WAAAA,IAAAkb,EfwlFQN,EAAUpX,WAAWyX,IAAe,GerlF5C1Z,QAAAtB,WAAAA,KfwlFQxN,EAAUA,EAAQ0oB,KAAKtoB,EAASiM,EAAGoc,IeplF3CC,OAAA1oB,EAAA4O,MfulFQE,EetlFRvB,IAAAvN,EAAAuN,IAAAkb,EAAAlb,IAAA8a,GAEA,OAAA9a,EAAAuB,OfulFQA,EetlFRtB,KAAAsB,EAAAtB,KAAAib,EAAAjb,KAAA2a,GfwlFU,SAAWnoB,GACbA,EAAQ4O,MAAM8Z,KAAKH,EAASzZ,Ge5kFpCyZ,EAAAI,KAAApb,IAAAuB,EAAAvB,IAAA,KAAAC,KAAAsB,EAAAtB,KAAA,QfolFIyP,Ee/kFJ3O,SAAAlO,SAAAA,GfglFM,GepkFNwoB,GACAD,EAVAjb,Gf8kFQH,Ie5kFR,EAGAqb,KAAAA,EA4BA,OfkjF0C,UAAhC3L,EAAGlO,IAAI3O,EAAS,YerkF1BuoB,EAAAA,EAAApb,yBfwkFQqb,EAAiBC,EAAoBzoB,GenkF7CsN,EAAAuP,EAAAvP,OAAAtN,GACAiN,EAAAjN,EAAAkP,UACAhC,EAAA6B,EAAAA,OAAAA,IAEA3B,EAAAA,KAAAmb,EAAAA,IAAAA,EAAA5Z,kBAAA,GfqkFQ4Z,EAAiBnb,MAAQyP,EAAGlO,IAAI6Z,EAAgB,mBAAmB,Ke1jF3Evb,MAAAoa,EAAArnB,YACAkN,OAAAka,EAAAA,aACAja,IAAA1B,EAAA2b,IAAAA,EAAAja,IAAA0P,EAAAlO,IAAA0Y,EAAAzZ,aAAAA,GACAR,KAAAga,EAAAA,KAAAA,EAAAA,KAAAA,EAAAzY,IAAA3O,EAAA2O,cAAAyY,KfykFIvK,EerjFJ3P,OAAA3L,SAAAA,EAAAA,GfsjFM,GAAIA,GAAQvB,EAAQ+O,YAMpB,OeljFN9B,GACA1L,GAAAA,EAAAvB,IAAAA,EAAAkP,aAAAA,GAAAA,EAAAA,IAAAA,EAAAA,gBAAAA,GAEA3N,GAAAsb,EAAAlO,IAAA3O,EAAA,cAAA,GAAA6c,EAAAlO,IAAA3O,EAAA,iBAAA,GAAA6c,EAAAlO,IAAA3O,EAAA,kBAAA,GAAA6c,EAAAlO,IAAA3O,EAAA,qBAAA,GAEAuB,Gf+iFIsb,Ee7iFJ5P,MAAA1L,SAAAA,EAAAA,Gf8iFM,GAAIA,GAAQvB,EAAQkP,WgBlvF1B,ODuMAqY,Gf6iFQhmB,GAASsb,EAAGlO,IAAI3O,EAAS,cAAc,GAAQ6c,EAAGlO,IAAI3O,EAAS,eAAe,GgBtvFtFuB,GAAAsb,EAAA6L,IAAAA,EAAAC,eAAAA,GAAAA,EAAAA,IAAAA,EAAAA,gBAAAA,GAAAA,EAAAA,IAAAA,EAAAA,mBAAAA,GAAAA,EAAAA,IAAAA,EAAAA,oBAAAA,GAEApnB,GAEAsb,IhB0vFExb,QgBxvFFhB,OAAA4P,sCAAAkX,QAAA,YAAA,WAAA,SAAAniB,GhByvFI,MgBxvFJA,UAAA0hB,EAAAzW,EAAAA,GhByvFM,GAAIA,GAAU,IACd,OgBxvFNA,YhByvFQ,GgBxvFRA,GAAArP,KACAgoB,EAAAD,UACAD,EAAAhlB,IAAAklB,CAkBA,OhBuuFY3Y,IACFjL,EgBxvFV0hB,OAAAzW,GhB0vFQA,EgBxvFRvM,EAAAmlB,WhByvFU5Y,EAAU,KgBvvFpBA,GhByvFYyY,EAAKhlB,MAAMmlB,EAASD,IgBjvFhCzB,GAAA,GACA2B,GACA7Y,EAAAA,MAAA4Y,EAAAD,GAEA3Y,OhBsvFOkX,QgBnvFPlX,YAAA,WAAA,SAAAjL,GhBovFI,MgBnvFJ,UAAApF,EAAAmpB,EAAAA,GhBovFM,GAAI9Y,GgBnvFVvM,IhBqvFM,OADK9D,KAASA,MgBlvFpBqQ,WhBovFQ,GgBnvFRA,GAAArP,KACAgoB,EAAAhpB,ShBovFaqQ,KACCrQ,EAAQmpB,WAAY,GACtBL,EgBnvFZM,MAAAH,EAAAD,GhBqvFU3Y,EAAUjL,EAAS,WACjBiL,EAAU,KACNrQ,EAAQqpB,YAAa,GiBtyFrC5oB,EAAAqD,MAAAmlB,EAAAD,IAOAM,GAAA,SjBuyFE7nB,QiBlyFFT,OAAAgY,wCAAA9U,SAAA,eAAA,kBAAA,SAAAqlB,GjBmyFI,QiBlyFJC,KjBmyFMxoB,KAAKsoB,KAAO,KiBhyFlBG,KAAAA,MAAAxF,EAAAjjB,KAAAwoB,IAAAA,EjBmyFMxoB,KAAK4X,MAAQ,EiBlyFnB6Q,KAAAA,QAAAxF,EAAAjjB,KAAAgY,QAAArX,EjBqyFMX,KAAKwoB,aAAe,EAwCtB,QiB3yFJE,MjB4yFI,QiB3yFJpiB,GAAAsJ,GjB4yFM,OiB5yFNlC,MAAArC,WAAAA,KAAAA,SAAAA,GjB8yFI,QAASsd,GAAuBriB,EAAO3F,GiBzyF3C,IAAAf,GAHAgpB,GAAAtiB,EAAAf,OjB8yFUsjB,EAAMloB,EAAMmoB,WAAWlZ,ciB3yFjChQ,EAAAI,EAAAA,EAAAJ,EAAAA,IACA8U,GAAAA,EAAArJ,GAAAuE,gBAAAiZ,EACAE,MAAA1d,EAKA,UjBwvFIod,EiBtyFJ3Q,UAAAnX,gBAAAA,SAAAA,GjBuyFMX,KAAKwoB,aAAe7nB,GAEtB8nB,EiBxyFJ7Q,UAAAjX,WAAAA,SAAAA,GjByyFMX,KAAKgY,QAAUrX,GAEjB8nB,EiB1yFJzoB,UAAA4X,WAAAA,SAAAA,GjB2yFM5X,KAAK8X,QAAUnX,GAEjB8nB,EiB5yFJO,UAAAroB,SAAAA,SAAAA,GjB6yFMX,KAAK4X,MAAQjX,GAEf8nB,EiB9yFJQ,UAAAtoB,SAAAA,WjB+yFM,MAAOX,MAAK4X,OAEd6Q,EiBhzFJH,UAAA3nB,QAAAA,SAAAA,GjBizFMX,KAAKgpB,IAAMroB,GAEb8nB,EiBjzFJH,UAAAY,SAAAA,SAAAA,GACAlpB,KAAAipB,MAAAtoB,GjBmzFI8nB,EiBjzFJ7Q,UAAAjX,YAAAmU,SAAAA,GACA9U,KAAA8X,KAAAA,GjBmzFI2Q,EiBjzFJD,UAAAA,SAAApS,SAAAA,GAaA,MAZApW,MAAAsoB,KAAAtoB,EAAAA,cjBkzFMA,KAAKipB,MAAQtoB,EAAMwoB,WiB/yFzBV,KAAAA,IAAAxF,EAAAA,UACAjjB,KAAA4X,MAAAL,EAAAvX,WjBizFMA,KAAK8X,QAAUnX,EAAMuW,aiB9yF3BlX,KAAAopB,QAAAX,EAAAxF,aAEAjjB,KAAAwoB,aAAAE,EAAAA,kBAGAW,MjB8yFIZ,EAAUxF,UAAUqG,OAAS,WiB1yFjC,MAAAX,IAAAA,MAAAA,KAAAA,KAAAA,KAAAriB,MAAA3F,KAAAA,IAAAA,KAAAA,MAAAA,KAAAA,QAAAA,KAAAA,QAAAA,KAAAA,cjB6yFI,IiB3yFJyoB,GAAAzoB,EAAAmoB,UAkBAlpB,EAAA8a,KAAAA,UjByyFMhG,OiBtyFN6U,YjBuyFMR,QiBtyFNS,EjBwyFIxpB,MAAK4D,MiBtyFT5E,UAAA+pB,aAAA,SAAAU,EAAAC,GjBuyFM,GiBtyFNC,GAAA,SAAArlB,GjBk7FQ,QiBvwFRslB,GAAAlV,GACA,GAAAmV,GAAAA,EAAAC,EACA,OAAAC,GAAAC,GjBywFQ,QiBtwFRvpB,GAAAiU,GjBuwFU,GiBtwFVuV,GAAAC,EAAAxV,GACAyV,EAAAC,EAAAD,QAAAA,MAAAA,QjBuwFcP,EiBtwFd,kBAEAC,EAAAC,EAAAvkB,MAAA8F,GjBswFc0e,EiBrwFd3f,OAAA2f,KAAAA,GjBswFcM,IAWJ,OAVA5pB,SAAQC,QAAQmpB,EAAa,SAASM,GiBpwFhDE,GAAAA,EAAAF,GjBswFcA,EAAOC,EAAuBD,OAE9B,KAAK,GAAI9e,GAAI,EAAGA,EAAI0e,EAAaxkB,OAAQ8F,IiBlwFvD8e,EAAAG,EAAAA,MAAAA,EAAAC,IAAAA,KAAAA,KAAAA,EAAAA,IAaAF,GAAAH,KAAAA,KjB2vFiBG,EAAe5I,KAAK,IAE7B,QiBxvFR8I,GAAAA,GjByvFU,MAAOA,GAAKxoB,QAAQ,MAAO,UAAUA,QAAQ,KAAM,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,MAAO,OAAOA,QAAQ,OAAQ,SAEtO,QiBvvFRgoB,GAAAC,GACA,MAAAQ,SAAAC,KAAAA,GjByvFQ,QiBrvFRD,GAAAD,GjBsvFU,MAAOA,GAAKxoB,QAAQ,WAAY,MAElC,QAAS2oB,GAAoBD,GiBhvFrC,IAAA,GAFAV,GAAAY,OAAAjW,KAAAA,GACA8V,EAAAI,EACAC,EAAAA,EAAAA,EAAAA,EAAAL,OAAAA,IjBovFYA,EAAKA,EAAGpgB,MAAM,KAAOiB,EAAI,KAAKoW,KAAK,IAAM8H,EAAUQ,EAAa1e,IAAM,IiBhvFlF,OAAA0e,IAAAA,QAAAA,IAAAe,EAAAd,KAAAT,MjBovFQ,QiBlvFRwB,GAAAA,GACA,GAAAC,GAAAA,EAAAA,EACA,OAAAC,GAAAA,GjBovFQ,QiBlvFRC,GAAAA,GjB0vFU,IiBvvFV,GAEAD,GACAE,EAEAD,EjBgvFcC,EiBrvFdpB,EAAAgB,OAAAK,KAAAA,GACAJ,EAAAD,GAAAA,QAAA,cAAA,KAOAG,KjB+uFqE,QAAnDH,EAAcK,EAAYC,KAAKZ,KiB5uFjD/P,EAAAjK,EAAAA,GACAwa,EAAAvQ,EAAAA,GjB8uFYyQ,EAAgBG,EAASL,GiB1uFrCC,EAAAK,KAAAA,EjB6uFU,OAAOL,GArMT,GiBjvFRxQ,GACA8Q,EAtDAC,EAAA1C,QAAA7nB,UAAAtB,EAAA0E,GACAonB,KACAC,GACAC,IAAA,WACAC,GAAA7sB,aACA0hB,EAAA1hB,EAAA+pB,OAAA,cAAA,mBACA+C,GAAAA,aACAC,EAAAA,EAAAtC,OAAAuC,cAAAC,mBACAC,GAAA,mBACAC,EAAAntB,EAAA+pB,OAAA,iBAAA,oBACAqD,GAAAA,oBACAC,EAAAA,EAAA5C,OAAAuC,eAAAM,iBACAC,EAAAA,QACAC,KAAAxtB,EAAA+pB,iBAAA0D,IAAAhL,KAAA,KACAiL,IAAAA,EAAAV,iBAAAC,SAAAxK,KAAA,KACAkL,GAAA,yBACAC,EAAA5tB,EAAA+pB,OAAA,yBAAA,2BjBuyFUqD,KAAM3C,EAAQuC,iBAAiBa,MAAMpL,KAAK,KiBpyFpD4K,IAAAf,EAAAA,iBAAAA,WAAAA,KAAAA,KACA9B,GAAAA,gBACA5gB,EAAAA,EAAA8O,OAAAA,eAAAA,iBACAoV,KAAA1D,gCACAO,GAAAP,WACAqC,EAAArC,EAAA3R,OAAAA,wBAAAA,kBAEAkU,GACAC,IAAAxC,EAAA5R,gBACAqU,GAAAzC,EAAA5R,WACAsU,EAAAA,EAAApD,WACAqD,GAAAA,EAAArD,WACAwD,EAAAA,EAAA9C,WACA+C,GAAA/C,EAAA2D,SACArM,EAAA0I,EAAA5R,SjBsyFUoU,GiBtyFVxC,EAAAxR,SjBuyFUiU,EiBvyFVzC,EAAAppB,SjBwyFU8rB,KAAMpD,EiBvyFhB0D,IAAAA,EjByyFUF,GiBzyFV9C,EAAAppB,QjB0yFUmsB,EAAG/C,EAAM2D,QiBzyFnBV,EAAAA,SAAA1rB,GAAA,GAAAiX,GAAAoV,KAAAA,WAAArE,EjB4yFY,OAAO3oB,MAAKwX,SAAS7W,EAAM0S,MAAM,OAASuE,EAAQ,GAAKA,IAEzDwU,KiB7yFV,SAAAY,GjB8yFY,MAAOhtB,MAAKgtB,SAASrE,EAAuBc,EAAQuC,iBAAiBa,MAAOlsB,KAE9E0rB,IiB/yFV,SAAAW,GjBgzFY,MAAOhtB,MAAKgtB,SAASrE,EAAuBc,EAAQuC,iBAAiBM,WAAY3rB,KiB9yF7FgsB,GAAA,SAAAhsB,GAAA,MAAAX,MAAAka,SAAAA,EAAAvZ,EAAA,IACAisB,EAAA,SAAAjsB,GAAA,MAAAX,MAAAW,SAAA,EAAAA,EAAA4E,IjBqzFUmnB,KAAMtD,EAAMlP,YiBjzFtByS,GAAAM,SAAAA,GACAzB,MAAAA,MAAAA,YAAAA,IAAAA,EAAAA,IAGA9Q,EAAAA,SAAAwS,GACAD,MAAAE,GAAAA,GAAAA,IAAAD,IAAAxS,EAAAA,OAAAwS,KAAAA,YAAAA,IAAAA,EAAAA,GAAAA,KAAAA,YAAAA,EAAAA,ICnHA,OlBy6FQxS,GiBhzFRuS,KAAA7lB,WjBizFUsT,EAAYwS,QAAUzD,EAAQuC,iBAAiBhtB,EAAQ0V,SAAW1V,EAAQ0V,OiB9yFpFgG,EAAAA,EAAAA,EAAA0S,SAEA5B,EAAA9W,EAAA+U,EAAAuC,UjBgzFQtR,EiB9yFR2S,QAAA3Y,SAAAyY,GACA,MAAAG,SAAAA,OAAA5Y,IAAAiW,MAAAA,EAAAjW,WACA3P,EAAAA,KAAAsoB,IjBgzFQ3S,EiB7yFR3E,MAAAqX,SAAA1f,EAAA0f,EAAAjW,EAAAzD,GACAgB,IAAArJ,EAAAtG,EAAAQ,iBAAAmP,IAAAA,GACAjU,QAAA6sB,OAAAjiB,KAAAiiB,EAAAA,EAAAvX,EAAAhR,GAAA2V,EAAAwS,QAAAxZ,GjB8yFU,IAAI2Z,GAAc3Y,EAASyY,EAAgBzY,GAAUuY,EiB3yF/DxU,EAAA6Q,EAAAA,EAAAA,GAAAA,EAGAzb,EAAAkI,EAAAsV,KAAA5S,EjB2yFU,KiB1yFV1T,EAAA,OAAA,CAGA,KAAA,GjBwyFcgR,GAAOqX,IAAa1f,MAAM0f,EAASjW,YAAa,GAAIsR,IAAY8E,SAASH,IAAY,GAAI3E,IAAY8E,SAAS,GAAIhW,MAAK,KAAM,EAAG,EAAG,IiBxyFjJkB,EAAAA,EAAAA,EAAAA,EAAAA,OAAAA,EAAAA,IjB0yFgB6U,EAAajiB,IAAIiiB,EAAajiB,GAAGqc,KAAK3R,EAAMhR,EAAQsG,EAAI,GiBtyFxE,IAAA0K,GAAAA,EAAAA,QAEA,OAAApV,UAAAA,EAAAqoB,IAAA,MAAAvQ,EAAA+U,WAGA/U,GjByyFQiC,EiBvyFR+S,oBAAA,SAAA3sB,EAAAH,GjBwyFU,GiBvyFVoV,EjBwyFU,IiBvyFVtV,UjBuyFcE,EiBvyFdC,CACAmV,GAAAA,GAAAjV,GAAAyW,KjBwyFYxB,GiBvyFZ,GAAAwB,MAAAmW,EAAAxE,cAAAwE,EAAAvE,WAAAuE,EAAAF,WAAA,YAAA1sB,EAAA,EAAA,GAAA,EAAA,EAAA,EAAA,YAAAA,EAAA,UjByyFYiV,GiBxyFZtV,QAAAE,SAAAA,IAAAA,EAAAA,MAAAA,UjBwyFmB,GAAI4W,MAAK5W,EAAMgtB,OAAO,EAAGhtB,EAAM4E,OAAS,IiBryF3DwQ,EAAAA,GjBuyFmB,GAAIwB,MAAK1J,SAASlN,EAAO,KiBpyF5CitB,QAAAA,SAAAA,IAAAjtB,IAAAA,EAAAG,OACA6U,YAAAA,IAAAA,EAAAA,KAAAA,EAAAA,GAGA,GAAA4B,MAAAA,EjBsyFU,OiBpyFV5B,IjBsyFQ+E,EiBpyFRkT,oBAAAjtB,SAAAuZ,EAAAA,GjBqyFU,GAAIvE,EiB7wFd,OjB+wFYA,GiBryFZ7U,QAAA6U,GACA,GAAA4B,OAAA2C,YAAA,KAAA,EAAA,GACAQ,QAAAA,SAAA/Z,IAAA4W,EAAAlE,MAAA,UjBqyFmB,GAAIkE,MAAK5W,EAAMgtB,OAAO,EAAGhtB,EAAM4E,OAAS,IAAI2U,YAAY,KAAM,EAAG,GiBlyFpFvE,EAAAA,GjBoyFmB,GAAI4B,MAAK1J,SAASlN,EAAO,KAAKuZ,YAAY,KAAM,EAAG,GiBxxFtE2T,QAAAA,SAAAA,IAAA9X,IAAApV,EAAAoV,OACA,YAAAA,IAAAhC,EAAAA,KAAAA,EAAAA,GjB2xFmB2G,EAAYI,MAAMna,EAAO,GAAI4W,MAAK,KAAM,EAAG,EAAG,KiB9wFjEmD,EAAAE,qBAAA,SAAA7E,GACA,MAAAA,IAIAA,EAAArC,SAAAA,EAAAA,WAAA,GAAAqC,EAAAjB,WAAA,EAAA,GACAiB,GAJA,MjBuxFQ2E,EAAYE,qBAAuB,SAAS7E,EAAMrC,EAAUoa,GiBhxFpE,MAAA/X,IAYAyU,GAAAI,QAAAA,IACA7U,EAAA2U,GAAAA,MAAAA,EAAAA,WjBywFY3U,EAAK0B,WAAW1B,EAAKmB,cAAgB4W,KAAY,GAAK/X,EAAKgY,sBiBrwFvE9D,GjBiwFmB,MkB5+FnBjqB,EAAAguB,OACAvE,EAKAzpB,OAAAiuB,QlBgjGExtB,QkB5iGFytB,OAAAA,2CAAArY,QAAAA,kBAAAA,UAAAA,aAAAA,SAAAA,EAAAA,GlBsjGI,QkBviGJsY,GAAA1a,GlBwiGM,MAAO,wCAAwC4X,KAAK3W,GAAQvN,MAAM,GAVpEnH,KkB5iGJguB,iBAAAhC,WlB6iGM,MAAOvC,GAAQtZ,IAEjBnQ,KkB3iGJiuB,kBAAA,SAAAvZ,EAAAmB,GlB4iGM,MAAO4T,GAAQuC,iBAAiBtX,IAAWA,GAE7C1U,KkBziGJkuB,cAAAC,SAAA1a,GlB0iGM,MAAOgW,GAAQuC,iBAAiBC,UAKlCjsB,KkBriGJsW,YAAA6X,SAAA1a,GlBsiGM,MAAO0a,GAAgB1a,GAAY,IAErCzT,KkBniGJ0W,cAAAyX,SAAA1a,GlBoiGM,MAAO0a,GAAgB1a,GAAY,IAErCzT,KkBjiGJ2W,cAAAwX,SAAA1a,GlBkiGM,MAAO0a,GAAgB1a,GAAY,IAErCzT,KkB/hGJwW,cAAA2X,SAAA1a,GlBgiGM,MAAO0a,GAAgB1a,GAAY,IAErCzT,KkB9hGJ4W,YAAA8S,SAAAhV,GlB+hGM,QAASyZ,EAAgB1a,GAAY,IEtlG3ChT,KAAAA,OAAA,SAAAgT,GAGA,QAAA1Q,EAAA1B,GAAAR,IFwlGIb,KEzhGJyU,WAAAlV,SAAAwW,EAAArB,EAAA1V,EAAAA,GF0hGM,MEzhGNmB,GAAA4V,EAAArB,EAAAhB,OF4hGEjT,QAAQhB,OAAO,0BAA2B2uB,QAAQ,cAAerrB,GAwFjEtC,QG3qGF0C,OAAA,6BAAA,oCAAA,uCAAA,2BAAAD,SAAA,cAAA,WH4qGI,GG3qGJE,GAAApD,KAAAJ,UACAkC,UAAA,UACAuB,YAAA,aAEAkQ,UAAA,cACA8a,YAAA,iCACAC,QAAAA,QACA5a,WAAA,EACA6a,UAAAA,EACAC,MAAAA,EACAC,MAAAA,EACAC,WAAAA,EACAC,SAAAA,OACAC,WAAAA,YACAC,SAAAA,KACAjb,gBAAA,KACAkb,UAAA/a,KACAgb,YAAAhb,MACAib,WAAA,OACAC,iBAAA,YACAC,gBAAA,OACAC,cAAAA,EACAC,WAAA,EACAC,UAAAtb,EAAAA,GACAub,UAAAvb,EAAAA,GACAwb,UAAA,EH2qGMN,QAAS,EGxqGfjvB,UAAA4D,EAEAurB,mBAAA,GACAC,UAAArkB,EACAskB,UAAAzvB,EAEA0vB,SAAAE,mCHwqGMD,UGtqGNE,oCHwqGIzvB,MGtqGJ4D,MAAA5E,UAAAywB,YAAAhgB,aAAAA,OAAAA,iBAAAA,kBAAAA,WAAAA,WAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GH0qGM,QGnqGNggB,GAAAC,EAAAC,EAAAA,GAoKAF,QAAAA,GAAA9iB,GACAA,EAAAhE,SAAAiK,EAAAW,YAAA5G,EAAAoJ,MH2oGQ,QGzoGR3W,KH0oGUA,EGzoGV,GAAAwR,QAvKA,GAAA+D,GAAA+a,EAAA/a,EAAAA,QAAAA,UAAAA,EAAAA,IACAvS,EAAApD,EAAAgwB,MACA5sB,EAAAwtB,EAAAN,SACAltB,EAAAytB,EAAA7wB,MACAoD,GAAA0tB,YAAA9wB,EAAAowB,WAAAA,EAAAA,QACAhtB,IAAAA,GAAApD,EAAAqwB,EACAI,GAAAM,OAAAN,EAAArtB,KAIAA,IAAAA,GAAAyC,EAAAkR,QHiqGQ3T,GGhqGRqtB,MAAA9qB,EAAAoR,UHiqGQ3T,EAAMwtB,UAAY5wB,EAAQswB,SG/pGlCltB,EAAA4tB,WAAAA,EAAAT,UHiqGQntB,EGhqGRqtB,UAAAO,EAAArvB,SHiqGQyB,EAAM6tB,UAAYjxB,EAAQqwB,QG/pGlCjtB,IAAAA,GAAA8tB,EAAAC,OAAA/tB,EAAAguB,MHiqGQhuB,GGhqGRqtB,QAAAY,SAAAjuB,GHiqGUqtB,EAAY9qB,OAAOoR,IAErB3T,EGhqGRpD,YAAA4U,SAAAjT,GHiqGU8uB,EGhqGVA,YAAA9uB,IHkqGQyB,EAAM8tB,YGhqGd,WHiqGUT,EGhqGVA,SAAArtB,EAAAmV,MAAA,GAAAkY,EAAAU,OAAA5qB,SHkqGQnD,EAAMkuB,UAAY,WG/pG1BC,EAAAA,WACAd,EAAA7b,QAAAA,GACA6b,EAAAY,OAAAA,GAAA9Y,QHkqGYkY,EGhqGZ9qB,OAAA,GAAA4S,OAAA,IHmqGQnV,EAAMmuB,OAAS,WG5pGvBd,EAAAvqB,WAEAuqB,EAAAxY,QAAAlB,GACA0Z,EAAA1X,OAAAA,OH8pGY0X,EAAY9qB,OAAO,MAAM,IGvpGrC8qB,EAAAe,OAAAA,SAAAA,GACAxxB,QAAAyxB,OAAAA,KAAAC,MAAAA,EAAAA,aACAjB,EAAA1X,MAAA3V,EACA3B,EAAAC,OAAAA,KAAA0B,EAAAiJ,IH4pGUokB,EAAYrY,QAAO,IAErBqY,EGxpGRhvB,oBAAA,SAAAiwB,GHypGU1xB,EGxpGVyB,mBAAAP,CHypGU,KGxpGVA,GAAAA,GAAAA,EAAAmW,EAAAA,EAAAA,KAAA9Q,OAAAwQ,EAAAA,EAAAA,IHypGYtV,QAAQC,QAAQ0B,EAAM6V,KAAK5M,GAAIokB,EAAYkB,iBAG/ClB,EAAY9qB,OAAS,SAASoR,EAAMuB,GGvpG5C7W,QAAA2vB,OAAAA,GACAlwB,QAAAoF,OAAAA,EAAA7E,cAAAsV,MAAAA,EAAAA,WAAAA,aACA7V,EAAAiF,WAAAA,GAAAA,MAAAA,IH2pGYjF,EGzpGZuvB,WAAA,MH2pGertB,EAAMguB,OAAS9Y,GAClBpX,EG1pGZoF,cAAA7E,QAAAH,KAAAyV,IACAtV,EAAAS,UAAAonB,EAAAvS,YAAAmT,GAAAD,EAAAlT,WAAAA,EAAAyX,MAAAA,OHiqGY/sB,QAAQS,OAAOyT,GACb2T,KAAMvS,EAAKmT,cG5pGzBuG,MAAAY,EAAAA,WAEAjuB,KAAAguB,EAAAQ,YAEAnB,EAAArY,QAAAA,EAAAA,MAAAA,GH6pGYqY,EAAYrY,WAGhBqY,EGxpGRoB,QAAA,SAAAd,GACAA,EAAAA,MAAArI,EHypGUqI,EAAUN,EAAYU,OAAO/tB,EAAMguB,OGtpG7CX,EAAAqB,UHypGQrB,EGvpGR/uB,OAAA0B,SAAA6V,GHwpGc4Y,KAAa,GAAQd,EAAQgB,QAC7BF,KAAa,GAAUd,EAAQgB,QGrpG7CtB,EAAAA,MAAArX,KAAAA,IHwpGQqX,EAAYqB,gBAAkB,WGppGtCrB,IAAAA,GAAAA,GAAAkB,EAAAA,EAAAA,EAAAA,KAAAprB,OAAAoH,EAAAA,EAAAA,IACAA,QAAAkL,QAAAkY,EAAAiB,KAAAA,GAAArkB,IHwpGQ8iB,EGppGRwB,YAAAA,SAAAA,GAIA,MAAAvY,GAAAA,WAAAnB,IHmpGQkY,EGlpGR/W,eAAAwY,SAAAA,GHmpGUvkB,EGnpGVsc,SAAAvQ,EAAAyY,WAAAA,EAAAA,OHqpGQ1B,EAAYO,YAAc,SAASrvB,GGppG3C8uB,GAAAA,GAAArY,EAAAA,MHspGcsB,EAAa,GAAInB,MAAKA,KAAK6Z,IAAIzc,EAAS2T,MAAQ2I,EAAM3I,MAAQ,GAAK3nB,EAAOgU,EAASsU,OAASgI,EAAMhI,OAAS,GAAKtoB,EAAO,GGnpGrI8uB,SAAAA,OAAA9pB,GAEAb,KAAAc,EAAAA,iBACAd,MAAAe,EAAAA,cAEAkQ,KAAAhL,EAAAsmB,eHopGU5B,EGlpGV9W,UHopGQ8W,EAAY9pB,aAAe,SAASb,GAGlC,GAFAA,EGlpGV6T,iBHmpGU7T,EAAIe,kBACAkF,EAAS,CGhpGvB0kB,GAAAA,GAAAtpB,QAAA/G,QAAA0F,EAAAA,OACAA,YAAA6T,EAAA,GAAA9N,SAAAzD,gBACAxB,EAAAA,EAAAA,UAGA+S,EAAA7S,eAAA,WHmpGQ2pB,EGhpGRtpB,WAAA,SAAArB,GHipGU,GGhpGV1C,mBAAAgF,KAAAtC,EAAAgB,WAAAhB,EAAAwsB,WAAAxsB,EAAAysB,OHgpGU,CAGA,GAFAzsB,EAAIc,iBACJd,EAAIe,kBACgB,KAAhBf,EAAIgB,QAQN,YGzpGZ1D,EAAAguB,MAKAtsB,EAAAA,OAAAiC,WHipGgB0pB,EAAYY,QAAQjuB,EAAMguB,MAAQ,KAHpCX,EAAYvpB,MAAK,GGpoG/B9G,GAAAoyB,UAAA5gB,GH6oGU9M,EAAYiC,WAQd,IGzoGR3G,GAAA+N,EAAAsD,IH0oGQgf,GGzoGR7oB,KAAA,WH0oGU,MGzoGVxH,IAAAJ,EAAAwW,WH0oGYpW,EAAQ+N,KAAK,OAAQ,YGxoGjCsI,GAAAA,IAAAA,qBAAAA,eAGAgE,IACAgW,EAAAtmB,KAAAA,OAAA,QACA/J,EAAAwT,KAAAA,WAAAW,QACAnU,EAAAgM,GAAAA,QAAAoK,QAEAiE,MAGA,IAAAC,GAAA+V,EAAAzpB,OACAypB,GAAAzpB,QAAA,WACA4M,GAAAxT,EAAAwH,WACA8S,EAAAA,IAAAA,QAAAA,GHyoGUD,IAEF,IGpoGRC,GAAA1a,EAAAoE,IHqoGQqsB,GGpoGRrwB,KAAA,YHqoGe2L,GAAW3L,EAAQwH,KAAK,aAAexH,EAAQwH,KAAK,cACzD8S,IACAtV,EAAS,WGloGnBuV,EAAA8V,WACAA,EAAAvpB,SAAA4E,GAAA0H,EAAAA,aAAAA,YAAAA,EAAAA,cACAid,EAAAA,UACAA,EAAAxpB,GAAAA,UAAA8E,EAAA5E,cAEA/G,GAAAA,IHqoGQ,IGnoGRua,GAAAnH,EAAAA,IAmBA,OHinGQid,GAAYvpB,KAAO,SAASsM,GGjoGpCid,EAAAA,WHmoGUA,EAAYxpB,SAASmF,IAAIL,EAAU,aAAe,YAAa0kB,EAAY9pB,cG/nGrF6pB,EAAAA,UACApwB,EAAAowB,IAAAA,UAAAA,EAAAA,YAMA/oB,EAAA+L,KAKAid,EH67FM,GGtqGN7c,GAAA6c,6BAAAjrB,KAAAA,EAAAA,UAAAA,WACAuG,EAAAikB,eAAAhwB,GAAAgwB,UAAAhwB,CA2OAmD,OAvOAvC,GAAA8vB,OAAA+B,EAAAA,KAAAhC,EAAAA,oBAsOA3oB,EAAAlH,SAAAA,EACA4vB,MH2nGK/oB,UGxnGLrE,gBAAAA,UAAAA,SAAAA,KAAAA,iBAAAA,cAAAA,cAAAA,SAAAA,EAAAA,EAAAA,EAAAA,EAAAA,EAAAA,GHynGI,GAAIwQ,GAAW,6BAA6BxL,KAAKpD,EAAQ4V,UAAUC,UACnE,QACEhT,SGznGNpG,MH0nGMqG,QAAS,UACT3E,KGvnGN4E,SAAAA,EAAA3H,EAAAwH,EAAA1G,GHkrGQ,QGpmGRwxB,GAAAC,GHqmGU,MGnmGVC,IAAAC,EAAAtsB,OACAusB,EADA,KH+mGQ,QGlmGR5xB,GAAA4Z,GAEA,GAAAC,QAAA7Z,OAAAA,GAAA,CHkmGU,GAAI+Z,GAAavM,MAAMokB,EAAWriB,SAASqf,UAAYiD,EAAW5a,WAAa2a,EAAWriB,SAASqf,QG9lG7G5uB,EAAAka,MAAAC,EAAA5K,SAAA6K,UAAAA,EAAAA,WAAAA,EAAAA,SAAAA,QAEAvE,EAAAA,GAAAA,CAEA7V,GAAAoa,aAAA,OAAAP,GH8lGU7Z,EG7lGVA,aAAAia,MAAAF,GH8lGU/Z,EG1lGVia,aAAA,MAAAL,GH2lGcC,IAAS7Z,EAAWmW,WAAa0b,IA+CvC,QAASC,KACP,OAAQ9xB,EAAWmW,YAAc3I,MAAMxN,EAAWmW,WAAWc,WAAa,GAAK1C,EAAWvU,EAAWmW,WAAYrX,EAAQsvB,YGtvGnI7tB,GAAAA,IACA2B,MAAA3B,EHynGQA,SAAQC,SAAU,WAAY,cAAe,aAAc,eAAgB,YAAa,YAAa,QAAS,UAAW,OAAQ,YAAa,YAAa,WAAY,aAAc,WAAY,kBAAmB,YAAa,eAAgB,YAAa,YAAa,YAAa,OAAQ,YAAa,UAAW,WAAY,YAAa,qBAAsB,KAAM,cAAe,cAAe,WAAY,YAAc,SAASI,GACxaL,QAAQ+E,UAAUoB,EAAK9F,MAAO9B,EAAQ8B,GAAO8F,EAAK9F,KAExD,IGrnGRiG,GAAAjG,eHsnGQL,SGrnGRA,SAAA+E,OAAAoB,YAAA,YAAA,YAAA,WAAA,YAAA,SAAA9F,GACA9B,QAAA8B,UAAAsB,EAAA2Q,KAAA/L,EAAAA,KAAAA,EAAAA,MHsnGYhI,EAAQ8B,IAAO,KGhnG3B9B,QAAAA,SAAA8yB,eAAAriB,SAAAA,eAAAA,UAAAA,SAAAA,GAEA,GAAAmD,GAAAA,KAAA5T,EAAAuU,OAAAA,GAAAvU,cAAAsvB,EAAAA,MAAA,EAEAzY,SAAA7W,UAAA6W,EAAAA,MAEApB,EAAAA,GAAArS,EAAA2Q,MAAAgD,EAAArB;EAIA,IAAA+F,GAAAC,EAAAA,EAAAA,EAAAA,EHgnGQ1b,GGhnGRA,EAAAsvB,SAAAzY,GAAAA,EAAAA,YAAAA,EAAAA,WAAAA,aHknGQ,IGlnGRkT,GAAA/pB,EAAA6vB,KHmnGYpa,EAAa,SAASsB,EAAMrB,GGhnGxC,MAAAtB,GAAAqB,WAAAsB,EAAArB,EAAAmB,IAEA4E,EAAAqX,GHknGUpd,OGjnGVjU,EAAAG,WHknGUiV,KGjnGV7N,EHknGU+gB,OGjnGV+I,EAAA9rB,cHmnGYY,GGjnGZkrB,QHknGU1vB,EAAM0F,OAAOlB,EAAKwM,OAAQ,SAASpL,EAAUC,GACtC6pB,GAAerxB,QAAQ+E,UAAUwC,KAClCvH,QAAQG,SAASoH,KAAWA,IAAaA,EAASqL,MAAM,2BG9mGxE3S,KAAA,EAEAD,EAAA+E,OAGAssB,EAAAriB,UHinGQhP,QAAQC,SAAU,UAAW,WAAa,SAASI,GAC7CL,QAAQ+E,UAAUoB,EAAK9F,KGzmGrCL,EAAAA,SAAA+E,EAAAoB,SAAA0nB,GACA1nB,EAAA6I,SAAA3O,GAAA2Z,EAAAzS,oBAAAA,EAAAA,GACA8pB,MAAAriB,EAAA6e,SAAAtmB,KAAAA,EAAAA,QAAAA,GH2mGciqB,EAA0B/xB,EAAWmW,gBGpmGnD5V,QAAA+E,UAAAoB,EAAA0nB,aAIA1nB,EAAAsM,SAAAye,aAAAC,SAAAA,GACAE,EAAAF,SAAAA,WAAA5pB,IAIA5F,EAAA3B,OAAA+E,EAAAA,QAAA0sB,SAAAA,EAAAjqB,GACA7F,EAAA0F,OAAAoqB,EAAAA,cHqmGW,GAKCzxB,QAAQ+E,UAAUoB,EAAKsrB,gBACzB9vB,EAAM0F,OAAOlB,EAAKsrB,cAAe,SAASL,EAAgBH,GGjmGpEG,EAAAI,EAAAF,GACAL,EAAAza,EAAAya,GACAzX,GACAH,EAAAA,oBAAArK,KHgnGQvP,EG1lGR6xB,SAAAA,QAAAA,SAAAA,GH2lGU,GG1lGV7xB,EH2lGU,KGxlGVoa,EAEA2X,MHulGY/xB,GAAWia,aAAa,QAAQ,GGvlG5C8X,IH0lGU,IGvlGVlc,GAAA0E,EAAAG,MAAAA,EAAAmX,EAAA/yB,WHwlGU,QGvlGV+yB,GAAAtd,MAAAsB,EAAAwY,eHwlGYruB,GAAWia,aAAa,QAAQ,IAGlC8X,EGvlGV9a,GACAkX,WHulGcrvB,EGvlGdA,UACA+W,EAAAA,EAAAoB,qBAAA4a,EAAA/yB,EAAA0U,UAAA,GACAe,EAAA4Z,EAAAA,EAAAE,iBAAAvvB,EAAAsvB,cHylGUvY,EAAO0E,EAAWG,qBAAqB1a,EAAWmW,WAAYrX,EAAQ0U,UAAU,GGtlG1FqC,WAAA/W,EAAAuY,SHwlGmBxB,EAAKoB,UGplGxB,SAAA3O,EAAAA,SAEAuN,EAAAA,UAAAA,IACArN,QAAAjI,EAAA2U,SACAyF,EAAAA,cAEA9E,GAAArN,MAAAA,OHslGQxI,EGplGRua,YAAAK,KAAApS,SAAAA,GHqlGU,GAAIqN,EAaJ,OAXEA,GGrlGZA,QAAAX,YAAA1M,IAAA,OAAAA,EACAmS,IACApa,QAAAiI,OAAAA,GHqlGmBA,EG9kGnB+R,WAAApE,EAAAA,SACA2b,EAAAA,MAAAA,EAAAA,KAAAA,EAAAA,iBHglG0C,SAArBhzB,EAAQqvB,SG5kG7BlpB,GAAAA,MAAA,IAAAA,GH+kGmB,GAAIoS,MAAK7O,GGzkG5BxI,EAAAA,WAAAmW,EAAA3I,qBAAA2I,EAAAc,EAAAA,UH4kGiB6a,MAET9xB,EGzkGR4xB,QAAAA,WACA9yB,EAAAA,IAAAgzB,MASA9uB,EAAAA,IAAA,WAAA,WAQAkH,GAAAqZ,EAAAA,UACA0O,EAAAA,KACAL,EAAAvsB,YHkkGOrC,SAAS,kBAAmB,WG3jGnC,QAAAkvB,GAAAC,EAAA5G,GH8jGM,IG7jGN,GAAA0G,MH6jGaG,EAAI/sB,OAAS,GG1jG1BvF,EAAA4D,KAAA0uB,EAAAxW,OAAA,EAAA2H,GH6jGM,OGzjGNrhB,GH2jGI,QGxjGJyT,GAAAA,EAAA7W,GHyjGM,OGxjGNyV,EAAAA,EAAAA,GAAAgX,EH0jGIzrB,KAAK4D,MAAS,iBAAkB,cAAe,OAAQ,SAAS2S,EAAgBmE,EAAa1K,GAC3F,MGxjGNyK,UAAAA,GHyjGQ,GGzjGR/F,GAAA1V,EAAAsvB,OAAAzY,EAAAA,EAAAA,SAAAkT,EAAA/pB,EAAA6vB,KH4jGYpa,EAAa,SAASsB,EAAMrB,GG1jGxC,MAAA6d,GAAAhc,WAAA2X,EAAAA,EAAArY,IAEA2c,EAAAA,GAEA9d,OAAAG,EAAA4d,WACA5c,KAAAlB,EAAA2T,OAAAzT,EAAAqU,eAAAnT,EAAAyX,EAAAA,cAAAA,GH8jGYkF,EAAiBH,EAAYprB,MAAMnI,EAAQkwB,WAAWyD,OAAOJ,EAAYprB,MAAM,EAAGnI,EAAQkwB,YG5jGtGS,EAAAA,EAAAA,YAAAA,+BAAAA,EAAAA,KAAAA,qCAAAA,SACAjb,EAAA1V,EAAAwvB,QAAAA,EAAAA,UAAAA,EAAAA,oBAAAA,YAAAA,EAAAA,WAAAA,GAAAA,OACApkB,GACA6mB,KAAAA,EAAAA,cH8jGUhI,MG9jGVA,EAAAE,WH+jGUpT,KAAMlB,EAAU2Y,WG7jG1BmC,IHgkGUjb,OG/jGVjU,EAAAS,UHgkGUkJ,MGhkGVke,EHikGU2I,OACEhI,MGlkGZlT,GHokGU7Q,OGnkGVutB,SAAArb,EAAAA,IHokGiBpX,KGnkGjB+wB,OAAAvD,GAAAA,EAAA7Y,gBAAAoB,EAAAyX,MAAAzX,EAAAoT,aAAAxU,EAAAsU,OAKAtU,QAAAA,OAAAoB,GACA0c,KAAA3B,EAAAA,MAAAA,cHgkGgB7H,MAAOwJ,EAAO1a,MAAMoR,WACpBpT,KAAM0c,EAAO1a,MAAMyV,YG7jGnCiF,EAAAG,UACAC,EAAAA,YAAAD,EAAAA,MAAA7E,IAAAA,EAAAA,YACApZ,EAAAme,KAAAL,EAAAlb,MAAAqb,UACAH,EAAAM,oBHkkGUC,MG9jGVC,WACA,GAAAjK,GAAAA,GAAAA,MAAAA,EAAAA,KAAAA,EAAAA,MAAAA,GACA6J,EAAAxnB,EAAA0iB,oBACA/E,EAAAvO,GAAAoT,OAAAA,EAAAiF,MAAAvb,EAAAA,EAAA2R,SAAA4J,EAAAA,UAAA3J,IACA8J,EAAAxqB,EAAAA,oBAAAsN,EAAAiT,EAAAA,qBAAAA,GAAAA,MAAAA,EAAAA,UAAAA,cAAAkK,KAAAC,IAAAzF,EAAAA,GAAAA,OAAAA,EAAAA,KAAAA,EAAAA,IHmkGY,KGnkGZ0F,GAAAzqB,GAAAO,KAAAkqB,EAAApK,EAAAG,EAAAA,GAAAA,IHokGcH,EGpkGdnR,EAAAmZ,qBAAAhI,GAAAA,MAAAA,EAAAA,cAAAA,EAAAA,WAAAA,EAAAA,UAAAA,IHqkGciK,EAAKxqB,MACHsN,KAAMiT,EGpkGtB5mB,QAAAoH,EAAAiL,iBAAAme,EACAxwB,MAAAixB,EAAArK,EAAAhpB,KAAA0U,QACAtS,SAAAkxB,EAAAd,OAAAA,KAAAA,WAAAA,GACApwB,MAAA6V,EAAA7N,aAAAA,EAAAA,MACAhI,SAAAmxB,KAAAA,WAAAvC,IAGAwC,GAAAA,MAAA/e,EAAAsB,EAAAA,EAAAA,kBACA3T,EAAAixB,YAAAtb,EHskGY3V,EAAMkxB,OAASd,EGpkG3BxB,EAAAA,KAAA5mB,EAAA2L,EAAAA,KAAAA,OACA3T,EAAAuT,gBAAAwB,KAAAA,WAAAA,GAAAA,OAGAnX,KAAA2V,OAAA3W,GHqkGUw0B,WG/jGVx0B,SAAAyxB,GHgkGY,MG/jGZgC,GAAApnB,OAAArM,EAAAA,gBAAAyxB,EAAAlrB,MAAA8F,eAAA0K,EAAAoT,aAAAsJ,EAAA1a,MAAAoR,YAAApT,EAAAyX,YAAAiF,EAAA1a,MAAAyV,WHikGUwD,WG/jGV,SAAAjb,GHgkGY,GAAIJ,GAAOI,EAAKoB,SAChB,IAAIxB,EAAO3W,EAAQ8vB,SAAWnZ,EAAO3W,EAAQ+vB,QAAS,OAAO,CAC7D,IAAI/vB,EAAQmwB,mBAAmBtT,QAAQ9F,EAAK0d,eAAkB,OAAO,CG7jGjF,IAAAz0B,EAAAyxB,mBH+jGc,IAAK,GAAIplB,GAAI,EAAGA,EAAIrM,EAAQyxB,mBAAmBlrB,OAAQ8F,IG7jGrEmmB,GAAAA,GAAAxyB,EAAA8F,mBAAAA,GAAAA,OAAAA,GAAAA,EAAAA,mBAAAA,GAAAA,IACA2tB,OAAA1a,CAIA,QAAAU,GHgkGU+Y,UGzjGVxxB,SAAAgxB,GH0jGY,GAAKyB,EAAO1a,MAAZ,CGtjGZrD,GACAtK,GADAsK,EAAA+Z,EAAAA,MAAAA,SAEAwC,MAAAA,EAAAA,QAAAA,EAAAA,GAAAA,MAAAA,EAAAA,OAAAA,KAAAA,EAAAA,QAAAA,EAAAA,GAAAA,MAAAA,EAAAA,QAAAA,KAAAA,EAAAA,QAAAA,EAAAA,GAAAA,MAAAA,EAAAA,OAAAA,KAAAA,EAAAA,UAAAA,EAAAA,GAAAA,MAAAA,EAAAA,SAAA3I,KAAA0I,WAAAvY,IAAAga,EAAA9tB,OAAA8T,GAAA,OH6jGUuD,KG3jGV,QH4jGUtH,OG3jGVjU,EAAAS,YH4jGUkJ,MG5jGVke,EH6jGU2I,OACE3I,KG9jGZvS,GHgkGU7Q,OG/jGVutB,SAAArb,EAAAA,GHgkGiBpX,KG/jGjB+wB,OAAA5H,EAAAA,gBAAAF,EAAAX,KHskGuBvS,EAAKoT,aAAexU,EAASsU,QGjkGpD+J,QAAA9xB,OAAAyT,GAEA+e,MAAAA,EAAAA,MAAAA,WACAzK,KAAAA,EAAAA,MAAAA,YAEAA,EAAAA,oBATAxoB,QAAAS,OAAAyT,GAAAsU,KAAAA,EAAAwJ,MAAA1a,cAAAhC,MAAA0c,EAAA1a,MAAAyV,WHkkGgBzX,KAAM0c,EAAO1a,MAAMyV,YAErBiF,EAAOrb,WASX4b,MGnkGV9pB,WHskGY,IAAK,GGtkGjB2O,GAAAlP,KHskGqB0C,EAAI,EAAGA,EAAI,GAAIA,IACtB4d,EAAQ,GAAI1R,MAAK5C,EAAS2T,KAAMjd,EAAG,GGrkGjDjJ,EAAAoH,MACApH,KAAAixB,EACAjxB,MAAA6V,EAAAyb,EAAA1zB,KAAAoK,QACApK,SAAAyyB,EAAAra,YAAA6Q,GHukGgBpR,SAAU7X,KAAKgxB,WAAW/H,IAG9B7mB,GAAMoH,MAAQiL,EAAWwU,EAAOjqB,EAAQ4vB,iBGrkGpDoC,EAAAA,YAAAjb,EACA3T,EAAAuxB,KAAAA,EAAAD,EAAA3d,KAAAmT,OACAlpB,KAAA+wB,OAAA4C,GAEAnC,WAAA,SAAA1sB,GACA,MAAA2tB,GAAA1a,OAAAhC,EAAAmT,gBAAAuJ,EAAA1a,MAAAmR,eAAAnT,EAAAoT,aAAAsJ,EAAA1a,MAAAoR,YHwkGU6H,WAAY,SAASjb,GGrkG/B,GAAA6d,IAAAA,GAAAnB,MAAA1a,EAAAA,cAAAoR,EAAAA,WAAAA,EAAAA,EACA,OAAA1Q,GAAAlB,EAAAkb,SAAA1a,EAAAA,UAAAA,EAAAA,SHwkGUyZ,UGjkGVxxB,SAAAgxB,GHkkGY,GAAKyB,EAAO1a,MAAZ,CG9jGZrD,GAAAA,GAAAga,EAAAA,MAAAA,WACAtkB,EAAA,GAAAmN,MAAAkb,EAAA1a,MACAkZ,MAAAA,EAAAA,QAAAA,EAAAA,SAAAA,EAAAA,GAAAA,KAAAA,EAAAA,QAAAA,EAAAA,SAAAA,EAAAA,GAAAA,KAAAA,EAAAA,QAAAA,EAAAA,SAAAA,EAAAA,GAAAA,KAAAA,EAAAA,SAAAA,EAAAA,SAAAA,EAAAA,GAAA3I,KAAA0I,WAAAvY,IAAAga,EAAA9tB,OAAA8T,GAAA,OHqkGUuD,KGnkGV,OHokGUtH,OGnkGVjU,EAAAS,WHokGUkJ,MGpkGVke,EHqkGU2I,OACE3I,KGtkGZvS,IHwkGU7Q,OGvkGVutB,SAAArb,EAAAA,IHwkGiBpX,KGvkGjB+wB,OAAA7H,GAAAA,SAAAvU,EAAAA,cAAA,GAAA,MAAA9G,SAAA8G,EAAA2T,KAAA,GAAA,KACA7nB,QAAAS,OAAAyT,GAAA2T,KAAAmK,EAAA1a,MAAAmR,cAAAD,MAAAwJ,EAAA1a,MAAAoR,WAAApT,KAAA0c,EAAA1a,MAAAyV,YACAiF,EAAA3B,UH4kGuB/a,EAAKmT,gBAAkBvU,EAAS2T,OACzC7nB,QAAQS,OAAOyT,GG1kG7Bqe,KAAAP,EAAA1a,MAAAmR,cACA2K,MAAAA,EAAAlf,MAAAA,WACAmf,KAAAA,EAAAA,MAAAA,YAEArB,EAAApnB,oBH8kGU2nB,MG5kGVjd,WHglGY,IAAK,GGhlGjB8B,GAAA3O,EAAAuL,EAAA6T,KAAAtoB,EAAA0U,MAAAA,EAAAA,KAAAA,OAAA/L,KHglGqB0C,EAAI,EAAGA,EAAI,GAAIA,IACtBid,EAAO,GAAI/Q,MAAKsc,EAAYxoB,EAAG,EAAG,GG/kGhDjJ,EAAAoH,MACApH,KAAAixB,EACAjxB,MAAA6V,EAAA6b,EAAA9zB,KAAAoK,QACApK,SAAAyyB,EAAAra,YAAAkQ,GHilGgBzQ,SAAU7X,KAAKgxB,WAAW1I,IAG9BlmB,GAAMoH,MAAQsqB,EAAM,GAAG5qB,MAAQ,IAAM4qB,EAAMA,EAAMvuB,OAAS,GAAG2D,MG/kGzE8nB,EAAAA,YAAAjb,EACA3T,EAAAuxB,KAAAA,EAAAG,EAAA/d,KAAAmT,OACAlpB,KAAA+wB,OAAA4C,GAEAnC,WAAA,SAAA1sB,GACA,MAAA2tB,GAAA1a,OAAAhC,EAAAmT,gBAAAuJ,EAAA1a,MAAAmR,eHklGU8H,WAAY,SAASjb,GG/kG/B,GAAAge,IAAAA,GAAAtB,MAAA1a,EAAAmR,cAAAA,EAAAA,EAAAA,EACA,OAAAzQ,GAAAlB,EAAAkb,SAAA1a,EAAAA,UAAAA,EAAAA,SHklGUyZ,UG3kGVxxB,SAAAgxB,GH4kGY,GAAKyB,EAAO1a,MAAZ,CGvkGZ4X,GAAAA,GAAAV,EAAA+E,MAAA/Q,cACAtO,EAAAA,GAAAA,MAAAA,EAAAA,MH2kGgC,MAAhB7P,EAAIgB,QAAgB2S,EAAQwb,QAAQF,EAAa,GAA6B,KAAhBjvB,EAAIgB,QAAgB2S,EAAQwb,QAAQF,EAAa,GAA6B,KAAhBjvB,EAAIgB,QAAgB2S,EAAQwb,QAAQF,EAAa,GAA6B,KAAhBjvB,EAAIgB,SAAgB2S,EAAQwb,QAAQF,EAAa,GAC1O/zB,KAAKgxB,WAAWvY,IAAUga,EAAO9tB,OAAO8T,GAAS,MmBpwHlEhY,QAIAb,MAAAA,EAAAA,QAAAA,MAAAA,UAAAA,MAAAA,KAAAA,EAAAA,EAAAA,SAAAA,EACAqb,SAAAtG,QnBywHElU,QmBpwHFb,OAAAA,4BAAAA,SAAAA,UAAAA,WnBqwHI,GAAIA,GAAWI,KAAKJ,UAClBqb,YAAa,SmBjwHnBxU,YAAA,QnBowHIzG,MmBjwHJ6G,KAAA,WACAC,OACA7G,SAAAL,MnBowHK6G,UmBjwHLhE,kBAAAkQ,WnBkwHI,OACE9L,SmBjwHNyY,InBkwHMxY,QmBjwHNwY,UnBkwHMrf,QmBjwHNqf,SAAAlgB,EAAA2I,GnBkwHQ3I,EAAQwH,KAAK,cAAe,WAC5BxH,EAAQyC,WAAW,WACnB,IAAIY,GAAWrD,EAAQ,GAAGuT,iBAAiB,yBmB5vHnDlM,SAAA/F,QAAA+B,EAAA,SAAA8c,GAEA3f,GAAAA,GAAAs0B,QAAAt0B,QAAAA,EACAu0B,GAAAA,KAAAA,cAAA,IAEA7U,EAAA1Y,KAAA,WAAAA,EAAAmB,QAAA,IAAAuX,EAAA1Y,KAAA,gBnB+vHKH,UmB1vHLzH,cAAAY,UAAAA,QAAAA,SAAAA,EAAAA,GnB2vHI,GmBxvHJA,GAAAw0B,EAAAh1B,SACA+0B,EAAAC,oBnByvHI,QACEvtB,SmBvvHNstB,InBwvHMrtB,QmBvvHNutB,UnBwvHMlyB,KAAM,SAAkBC,EAAOhD,EAASwH,EAAM1G,GmBtvHpD,GAAAo0B,GAAAA,EACAH,EAAAG,UAAAH,EAAAA,GAAA/sB,SACAktB,EAAAlyB,EAAAwE,EAAA0tB,SAAAA,EnBwvHYD,GAAY5zB,QAAQ+E,UAAUoB,EAAKytB,YAAaztB,EAAKytB,SmBpvHjEE,GAAAA,KAAAF,EAAAA,aACAA,EAAAE,EAAAA,MAAA3tB,EAAAytB,WnBuvHQ,ImBpvHRC,KAAAha,QAAA+Z,UAAAC,EAAAA,aAAAA,EAAAA,UnBqvHYH,GAAoB/sB,KAAKR,EAAK0tB,cmBlvH1Cp0B,EAAAsI,EAAAA,MAAAC,EAAA6rB,YnBqvHQ,IAAIC,GAAuC,iBAAdF,IAAiD,iBAAfC,EAC3DC,KmB/uHZr0B,EAAAiF,SAAAsD,KAAA,SAAA6R,GAEA,MAAAka,GAAAt0B,EAAAmI,InBivHUnI,EmB/uHVk0B,YAAA3rB,KAAAgsB,SAAAD,GACA7V,MAAAA,SAAA+V,OAAAA,EAAAzZ,MAKA7b,EAAAu1B,QAAAC,WACAxyB,GAAAA,KAAAlC,EAAAmI,UnB8uHUlE,GmB5uHV,WACAjE,IAAAoF,EAAAA,GAAAA,QAAAqZ,GnB6uHYA,EAAc+V,YAAY11B,EAAQic,YAAauZ,MAGnDp1B,EAAQu1B,KAAK31B,EAAQ41B,YAAa,WAChCxyB,EAAMue,OAAO,WACNyT,GmBtuHjB3tB,EAAAnB,eAAAqZ,EAAAqE,SAAA,WAGAnc,EAAA1B,mBnB2uHOsB,UmBtuHPhE,eAAA,WnBuuHI,OACEoE,SmBtuHNpG,InBuuHMqG,QmBtuHNrG,UnBuuHMR,QAAS,SAAkBb,EAASwH,GAClCxH,EAAQwH,KAAK,cAAe,WAC5BxH,EAAQyC,WAAW,WmBjuH3B4E,IAAAA,GAAArH,EAAA,GAAAuT,iBAAA,sBAEA/S,SAAAA,QAAAs0B,EAAAt0B,SAAAA,GACAu0B,QAAAA,QAAAA,GAAAvtB,KAAA,WAAA,IAEAnG,QAAArB,QAAAmgB,GAAA3Y,KAAA,WAAAA,EAAAmB,enBouHKtB,UmB/tHLzH,WAAAY,UAAAA,QAAAA,SAAAA,EAAAA,GnBguHI,GmB7tHJA,GAAAw0B,EAAAh1B,SACA+0B,EAAAC,oBnB8tHI,QACEvtB,SmB5tHNqM,InB6tHMpM,QmB5tHN,UnB6tHM3E,KmB5tHNxB,SAAAoS,EAAA8hB,EAAAA,EAAAA,GnB6tHQ,GmBztHR30B,GnBytHYlB,EmB5tHZY,EACAe,EAAAk0B,UAAAA,EAAAA,GAAAA,SnB6tHYlW,EAAgByV,EAAUh1B,EAAQ2R,SAAW3R,CAEjDwH,GAAKsM,SAAS,QAAS,SAAS2hB,GmBvtHxCl0B,EAFAwE,iBAAAA,IAAAgvB,EAAA/sB,KAAAytB,GAEAL,EAAA/zB,MAAAA,GAEA2zB,EnB2tHUl0B,EAAWiF,YmBrtHrB/F,EAAAu1B,QAAAC,WACAxyB,GAAAA,GAAA3B,QAAAiF,OAAAxF,EAAAmI,WAAA1H,EnBwtHUwD,GmBttHVjE,WACAA,IAAAiF,EAAAA,GAAAA,QAAAA,GnButHYwZ,EAAc+V,YAAY11B,EAAQic,YAAauZ,MAGnDp1B,EAAQu1B,KAAK31B,EAAQ41B,YAAa,WAChCxyB,EAAMue,OAAO,WoB53HvBlhB,EAAA6F,cAAA3E,GAIAf,EAAAI,mBpBg4HES,QAAQhB,OAAO,8BAA+ByD,SAAS,YAAa,WoBx3HtE,GAAAhD,GAAAA,KAAAF,UACAH,UAAAG,cAGA+a,gBAAAta,EACAA,YAAAC,KpBw3HMo0B,gBoBv3HNtvB,EpBw3HMuvB,eAAe,GoBn3HrBt0B,EAAAC,KAAAR,WAAA,SAAAsE,EAAAyB,EAAAuV,GpB46HM,QoB/1HNwZ,GAAAC,GpBi2HQ,IAAK,GADDD,GAAgBja,EAAKka,SAAS1Z,QACzBlQ,EAAI,EAAGA,EAAI2pB,EAAczvB,OAAQ8F,IACpCzG,EAAQowB,EAAc3pB,KoB71HpC2pB,EAAAr0B,GAAAA,EAAAA,GAAAA,GAEAq0B,EAAAnZ,KAAAlb,EAAAA,SAAA4E,SpB+1HYyvB,EAAc3pB,GAAK0P,EAAKka,SAAS1vB,OAAS,GAIhD,QoB71HN0vB,GAAA1Z,GpB81HQ,GAAI2Z,GAAcna,EAAKka,SAAS1Z,OAChC,OAAO2Z,GAAYrZ,QAAQlb,QAE7B,QoB51HNoa,GAAAga,GpB61HQ,GoB31HRha,GAAAka,EAAA1Z,SAAAO,QAAAD,QAAAlb,EpB41HYiE,SoBz1HZmW,EAAAA,SAAAka,QAAA1Z,OAAAM,EAAAlb,GpB61HM,QAASw0B,GAAax0B,GACfoa,EAAKtL,SAASslB,eoBv1H3BnxB,EAAAA,SAAA2X,QAAAO,OAAA,EAAA,GAEAsZ,EAAAx1B,SAAAA,QAAAA,QAAAA,SACAw1B,EAAAA,SAAAl1B,QAAAA,KAAAA,GpBwwHM,GoBr3HN6a,GAAAta,IpBs3HMsa,GoBr3HNA,SAAAtL,QAAA3O,KAAAlB,GpBs3HMa,QAAQC,SAAU,YAAa,iBAAkB,cAAe,iBAAkB,iBAAmB,SAASI,GACxGL,QAAQ+E,UAAUgW,EAAO1a,MAAOia,EAAKtL,SAAS3O,GAAO0a,EAAO1a,KoBl3HxEia,IAAAA,GAAAka,eAEAla,SAAAsa,SAAAA,iBAAAA,iBAAAA,iBAAAA,SAAAA,GAEAC,QAAAA,UAAA9Z,EAAA1a,KAAA1B,EAAAA,KAAAA,EAAAA,MACA2b,EAAAwa,SAAA9sB,IAAArJ,KpBq3HM2b,EoBl3HNA,YpBm3HMA,EAAKka,YoBh3HXla,EAAAya,wBpBk3HMza,EoBj3HNua,gBAAAC,SAAA1Z,GAEAd,EAAAwa,SAAAzZ,KAAAA,IAEAf,EAAA0a,gBAAAA,SAAAr2B,GACA2b,EAAAnW,SAAAmW,KAAAka,IpBk3HMla,EoB72HNya,kBAAAT,SAAAA,GpB82HQ,GoB52HRW,GAAAA,EAAAt2B,SAAAA,QAAAA,EpB62HQ2b,GAAKwa,SAASzZ,OAAOlX,EAAO,IAE9BmW,EoBz2HNA,kBAAAsa,SAAA30B,GpB02HQ,GoBz2HRub,GAAAA,EAAAA,SAAAA,QAAAA,EpB02HQlB,GAAKka,SAASnZ,OAAOlX,EAAO,GACxBmW,EAAKtL,SAASslB,eoBt2H1Bha,EAAAQ,GAEAoa,EAAAh1B,GpBw2HQoa,EoBv2HRA,qBAAApa,QAAAA,SAAAA,GpBw2HUsb,OAGJlB,EoBv2HNoa,SAAAA,QAAAx0B,EAAAA,SAAAA,mBAAAA,GpBw2HMoa,EAAKgB,WAAavX,EAAOuX,WAAa,SAASpb,GoBr2HrDoa,QAAAsa,QAAAA,GACApZ,EAAAA,SAAAA,QAAAA,GpBu2HoBlB,EAAKtL,SAASmmB,gBAAkBpB,EAAS7zB,GACnD+0B,EAAe/0B,GoBn2HzBw0B,EAAA1lB,GpBu2HQsL,EAAKsa,qBAAqB30B,QAAQ,SAASub,GoBp2HnDA,OpBw2HMlB,EoBl2HN8a,eAAA9a,WACA,MAAAA,GAAA1P,SAAAA,cACAzG,EAAAowB,SAAAA,QpBo2HgD,IAAjCja,EAAKka,SAAS1Z,QAAQhW,OAAewV,EAAKka,SAAS1Z,QAAQ,OoBpzH1Evb,MAAA4D,KAAA,WACAkD,GAAAA,KpBu1HM,OoBt1HN5G,GAAAA,SAAAN,EACAuC,EAAAjC,WAAAyG,EAEA0V,KpBq1HK5V,UoBl1HL4V,cAAA,UAAA,WAAA,YAAA,SAAArY,EAAAwN,EAAA4jB,GpBm1HI,OACEtuB,SoBh1HNuV,WAAA/W,cpBi1HMpF,YAAc,SAAU,WAAY,SAAUk1B,EAAUl1B,YACxDiC,KoB90HNka,SAAA7T,EAAAC,EAAA8T,EAAA7T,GpB+0HQ,GoB70HR2T,GAAAuE,EAAAlY,GpB80HYotB,EoB30HZ/Z,EAAArT,EpB40HY2T,KACFyZ,EoB30HVd,qBAAAc,KAAAD,WpB40HYxZ,EoB10HZ5b,cAAAu0B,EAAAa,oBpB40HUxZ,EoBx0HVyZ,YAAA/Z,KAAAA,SAAArT,GpBy0HY,GAAIjI,QAAQmgB,QAAQlY,GAClBotB,EoBx0Hdd,WAAAA,OACAc,CpBy0Hc,GAAId,GAAgBc,EAAeD,gBAC/Bp1B,SAAQmgB,QAAQoU,GoBv0HlCtsB,EAAAA,QAAAA,EAAAA,SpBy0HkBotB,EAAe/Z,WAAwB,EAAbrT,GAEnBssB,IAA+B,EAAbtsB,GAC3BotB,EAAe/Z,WAAwB,EAAbrT,GoB/zH1C5B,MAAA4B,WpBu0HOjC,UoB1zHP2C,mBAAA,WpB2zHI,OACEtC,SAAW,YAAa,eACxB3E,KoBzzHN/C,SAAAgD,EAAAhD,EAAAmd,EAAAK,GpB0zHQ,GoBzzHRkZ,GAAAje,EAAA,EpB0zHQzY,GoBzzHRwF,KAAAA,cAAAmxB,YpB0zHQD,EoBzzHRA,gBAAAlxB,GpB0zHQxC,EoBzzHRA,IAAAue,WAAAA,WpB0zHUmV,EAAeN,kBAAkBp2B,KAEnCA,EAAQ0L,GAAG,QAAS,WAClB,IAAKyR,EAAM1E,SAAU,CoBpzH/BpR,GAAA7B,GAAA2X,EAAAwZ,kBAAAvkB,uBAAA+K,EAAAwZ,iBAAAvkB,EAAAA,iBAAAA,EAAAA,SAAAA,QAAAA,EAEAskB,GAAA/Z,WAAA,EAAAnX,GACAkC,EAAA6Z,gBpByzHKla,UoB7yHLrH,oBAAA02B,WAAArmB,SAAA5P,GpB8yHI,OACEiH,SoB3yHNgvB,YAAAE,epB4yHM7zB,KoBzyHNC,SAAAA,EAAAhD,EAAAmd,EAAAK,GpBmzHQ,QAASC,KACP,GAAIjY,GoBxyHdA,EAAA+W,SAAAE,QAAAzc,GACA62B,EAAAH,EAAAD,iBpByyHcI,EAAS,aoBtyHvBzkB,SAAAykB,QAAA72B,GpBwyHgBuc,EAAOE,QAAQjX,UoBryH/BkxB,EAAAT,YpBwyHqBzwB,IAAU+W,IoBryH/BkB,EAAAA,YpBwyHUrL,EAASykB,GAAQ72B,EAAS02B,EAAermB,SAASwL,aApBpD,GoBzyHR6a,GAAAL,EAAAA,EpB0yHQr2B,GAAQgS,SAAS,YoBvyHzB0kB,EAAAjZ,SAAAA,WACAzd,EAAAwF,SAAAkxB,EAAAb,SAAApZ,WpB0yHQia,EoBxyHRE,gBAAA52B,GpByyHQgD,EoBxyHR3B,IAAAA,WAAAkb,WpByyHUma,EoBxyHVja,kBAAAzc,KC1PAqB,EAAA40B,qBAAA5sB,KAAA,WAIA7I,MAEAE,SrBkjIEW,QqB9iIFiB,OAAAA,wBAAA,yBAAAwB,SAAA,SAAA,WrB+iII,GqB9iIJC,GAAAnD,KAAAJ,UACAR,UAAA,0BACAokB,YAAA,QACApgB,YAAA,QACAtB,UAAA,QACAkE,YAAA,uBrB+iIMtE,iBAAiB,EqB5iIvB1B,WAAA4D,EAEAxE,QAAA82B,KrB6iIM1S,UqB3iIN2S,ErB4iIM/yB,UqBziINpE,ErB0iIM8C,MqBxiINq0B,ErByiIMnwB,MqBviIN,ErByiIIhG,MqBriIJ4D,MAAAsyB,SAAAA,SAAAA,GrBsiIM,QAASA,GAAa5xB,GqBhiI5BmC,GAAAA,MAEAzH,EAAAyB,QAAAS,UAAAtB,EAAA0E,EAEAlC,OADAyE,GAAAmd,EAAAhlB,GrBmiIM,MqB/hINA,OrBiiIKyH,UqBjiILrH,WAAAA,UAAAA,OAAAA,SAAAA,SAAAA,EAAAA,EAAAA,GrBkiII,OACEyH,SAAU,MACVzE,OqBniIN3B,ErBoiIM0B,KqBniIN,SAAAqD,EAAA1E,EAAA9B,EAAA8B,GrBoiIQ,GAAI9B,IqBhiIZoD,MAAA2E,EACAtG,QAAAC,EACAsF,MAAAvF,EAIAA,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAA,kBAAAI,YAAAA,WAAAA,WAAAA,OAAAA,YAAAA,aAAAA,SAAAA,GACAkG,QAAAxB,UAAA1E,EAAAmG,MAAAC,EAAAA,GAAApG,EAAAqG,KrBiiIQ,IqB/hIRnI,GAAAoD,erBgiIQ3B,SAAQC,SAAU,WAAY,WAAY,OAAQ,aAAe,SAASI,GACpEL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KAEvFL,QqB7hIRmG,SAAA,eAAA,SAAA,eAAA,UAAA,SAAA9F,GrB8hIU,GqB7hIV8F,GAAAsM,KAAApS,EAAAmG,OAAAe,GAAAA,cAAAC,EAAAA,MAAAA,EACA7F,SAAAtB,UAAAmP,EAAAA,MrB8hIYjR,EAAQ8B,GAAOsB,EAAM2Q,MAAMnM,EAAKI,OqBxhI5CvG,QAAAmG,SAAA,QAAA,WAAA,SAAA9F,GACAsB,EAAA0F,IACAlB,EAAAnG,SAAAmC,EAAAA,SAAAoF,EAAAC,GACAxH,EAAAA,GAAAS,EAAAkB,YAAA4F,OrB+hIYpB,EqB3hIZwvB,SrB4hIUh0B,EAAM0F,OAAOlB,EAAKwvB,QAAS,SAASpuB,EAAUC,GqBxhIxDouB,QAAAF,SAAAn3B,GAGAI,QAAAwH,OAAA3D,EAAA+E,GAIAquB,EAAAA,QAAAltB,IAEAktB,ErBuhIQ,IAAIA,GAAQF,EAAOn3B,EACnBI,GAAQ0L,GAAGlE,EAAK3D,SAAW,QAASozB,EAAMrrB,QAC1C5I,EAAMgH,IAAI,WAAY,WsBvnI9B3J,GAAA42B,EAAAltB,UAIAvJ,EAAAI,KACAH,EAAA,YtB0nIEY,QsBrnIF0C,OAAA,wBAAA,yBAAAD,SAAA,SAAA,WtBsnII,GsBrnIJ9D,GAAAY,KAAAJ,UACA4jB,UAAA,UACApgB,YAAA,QACA4C,YAAA,QAEAswB,UAAA,KACA7sB,YAAA,uBACA8sB,WAAAA,EtBqnIMn3B,QAAS,KsBlnIfY,UAAA4D,EAEAR,UAAAozB,EtBmnIMxwB,MsBjnINywB,EtBknIMH,UsB/mINt3B,EtBgnIMyK,MsB9mINgtB,EtB+mIMF,asB5mIN/xB,EtB8mIIxE,MAAK4D,MsB5mITY,SAAAiF,WAAAA,SAAAA,EAAAA,GtB6mIM,QAAS+sB,GAAalyB,GsBzmI5B,GAAA0B,MACAhH,EAAAs3B,QAAAp1B,UAAAtB,EAAA0E,EtB2mIQmyB,GsB1mIRzwB,EAAAhH,GtB2mIQy3B,EsB1mIRzwB,OAAAA,cAAAA,EAAAA,YACA5B,EAAAA,OtB2mIUqyB,EsB1mIVA,OAAAvwB,KAAAA,EAAAA,KtB4mIQ,IAAIF,GAAOywB,EAAOzwB,IsBzlI1B5D,OtB0lIYpD,GAAQs3B,WsBxmIpBG,EAAAA,KAAAA,WtB0mIYzwB,IsBtmIZ5B,EAAAoyB,WtBwmIcC,EAAOvwB,QsBlmIrB,IAAAlH,EAAAs3B,YAIAG,EtBomIM,MsBhmINz3B,OtBkmIKyH,UsBlmILrH,WAAAA,UAAAA,OAAAA,SAAAA,SAAAA,EAAAA,EAAAA,GtBmmII,OACEyH,SAAU,MACVzE,OsBpmIN3B,EtBqmIM0B,KsBpmIN,SAAAqD,EAAA1E,EAAA9B,EAAA8B,GtBqmIQ,GAAI9B,IsBjmIZoD,MAAA2E,EACAtG,QAAAC,EACAsF,MAAAvF,EAIAA,SAAAC,SAAA,WAAA,cAAA,aAAA,eAAA,YAAAI,WAAAA,OAAAA,YAAAA,YAAAA,WAAAA,eAAAA,SAAAA,GACAkG,QAAAxB,UAAA1E,EAAAmG,MAAAC,EAAAA,GAAApG,EAAAqG,KtBkmIQ,IsBhmIRnI,GAAAoD,etBimIQ3B,SAAQC,SAAU,WAAY,OAAQ,YAAa,eAAiB,SAASI,GACvEL,QAAQ+E,UAAUoB,EAAK9F,KAASiG,EAAiBK,KAAKR,EAAK9F,MAAO9B,EAAQ8B,IAAO,KAEvFL,QsB7lIR+I,SAAA,eAAA,SAAA,eAAA,UAAA,SAAA1I,GtB8lIU,GAAIkG,GAAQ,KAAOlG,EAAImG,OAAO,GAAGC,cAAgBpG,EAAIqG,MAAM,EsB1lIrE1G,SAAAC,UAAAkG,EAAAI,MACAhI,EAAA8B,GAAAsB,EAAA2Q,MAAAnM,EAAAI,OtB8lIa5E,EAAM6Q,eAAe,WACxB7Q,EAAMoH,MAAQ,IsBvlIxB/I,QAAAmG,SAAA,QAAA,UAAA,QAAA,SAAA9F,GACAsB,EAAA0F,IACAlB,EAAAnG,SAAAmC,EAAAA,SAAAoF,EAAAC,GACAxH,EAAAA,GAAAS,EAAAkB,YAAA4F,OtB6lIYpB,EsBzlIZ8vB,StB0lIUt0B,EAAM0F,OAAOlB,EAAK8vB,QAAS,SAAS1uB,EAAUC,GsBtlIxD0uB,QAAAF,SAAAz3B,GAGAI,QAAAwH,OAAA3D,EAAA+E,GAIA2uB,EAAAA,QAAAxtB,IAEAwtB,EtBqlIQ,IAAIA,GAAQF,EAAOz3B,EACnBI,GAAQ0L,GAAGlE,EAAK3D,SAAW,QAAS0zB,EAAM3rB,QAC1C5I,EAAMgH,IAAI,WAAY,WuBntI9B3J,GAAAk3B,EAAAxtB,UAIAvJ,EAAAI,KACAye,EAAA,YvBstIEhe,QuB/sIF0c,OAAAA,wBAAApQ,oCAAAG,oCAAAA,SAAAA,SAAAA,WvBgtII,GuB/sIJtN,GAAAsd,KAAAzc,UAEAge,UAAAmY,OvB+sIMC,cuB7sINC,EvB8sIMC,UuB3sIN/3B,EvB6sIIgB,MuBzsIJ4D,MAAAozB,UAAA,WAAA,aAAA,SAAAhzB,EAAAgZ,EAAAvQ,GvB4sIM,QuBzsINwqB,GAAAA,EAAA3yB,GvBi0IQ,QuB7pIR4yB,GAAAC,EAAA7pB,EAAAf,GvB8pIU,GuB7pIVU,GAAAmqB,IvB8pIcC,EAAeC,GuB5pI7B,OAAArqB,IAAAwR,EvB8pImB,MuB3pInB2Y,OAAAA,EACAze,EAAAwe,GAAAnzB,EAAAA,IAAAuzB,SAAA5e,SvB6pIsC,OAAjB6e,GAAyBlqB,EAASf,IAAMkrB,EAAgBC,GAAmBL,EAAeG,EuB1pI/GF,SvB6pIiB,SuBxpIjB,QAAAR,KvB2pIU,MAAOne,GAAS,KAAO3U,EAAUA,EAAQuzB,YAAc5e,EAAS,GAAG1L,UAErE,QAASqqB,KuBnpIjB7wB,MAAAkS,GAAA,KAAA3U,EAAAA,EAAA+I,SAAAG,KAAAmqB,aAAArzB,EAAAI,GAAAA,aA5LA,GAAAqa,MACA+Y,EAAAA,QAAAt2B,UAAAtB,EAAA0E,GACAqzB,EAAA34B,EAAAqK,OACAuuB,EAAA,+BAEA7mB,GAAA3R,EAEAJ,EAAAwnB,EACAyQ,EAAAzQ,EACA/H,EAAApT,EvBwsIYmsB,EuBvsIZzmB,EvBwsIY4mB,EAAU,KACVC,EuBvsIZ,KACA7mB,EAAAtQ,EAAArB,QvBwsIQ,IAAIJ,EAAQwnB,aACV,GAAIxnB,EAAQwnB,aAAanT,MAAM,SuBrsIzCyjB,IAAArmB,GAAAA,GAAA,EAAApF,EAAA,EAAArM,EAAAwnB,aAAA,EAAAnb,IAEArL,EAAA63B,EAAAA,aAKAlf,GAAA7N,QAAA1L,QAAAkf,EAAAA,aAwKAxX,OvB8hIQgwB,GuBhsIRxY,KAAAA,WACAte,KAAAoe,gBvBisIU6Y,EAAmBxqB,EAAWC,OAAOtN,EAAQ,IAAImN,IAAMmrB,EuB7rIjEZ,EAAA3tB,EAAA4tB,WAAA33B,EAAA,GAAA6nB,MAAA5a,MAGAsM,EAAAvN,GAAAA,SAAApL,KAAAA,eACA2Y,EAAAvN,GAAAA,QAAApL,KAAAA,4BACAkd,EAAA9R,GAAAA,SAAApL,KAAAA,oBvB6rIUA,KAAKse,gBuBzrIfwY,KAAA1Y,8BvB4rIQ0Y,EAAO3tB,QAAU,WuBprIzB2tB,EAAAxY,IAAAA,SAAAte,KAAAse,eAGA3F,EAAA1L,IAAAA,QAAAmqB,KAAAA,4BACAla,EAAA5P,IAAAA,SAAAb,KAAAC,qBvBqrIQoqB,EuBjrIRgB,2BAAAF,WAGAlZ,WAAAiZ,EAAAG,cAAA,IvBirIQhB,EuB9qIRgB,cAAA,WvB+qIU,GuB9qIVF,GAAAR,IACA9pB,EAAAypB,EAAArqB,OAAAtN,EAAA,IACAA,EAAAqN,EAAAH,OAAAlN,EAAA,IvB+qIc04B,EAAQZ,EAAsBU,EAAOtqB,EAAUmqB,EuB7qI7DE,KAAAd,IvB+qIUc,EuB9qIVv4B,EACA2O,QAAA3O,GvB+qIYw4B,EAAQ,KACJb,GuB7qIhB33B,EAAAJ,IAAA+4B,QAAAA,IvBgrIgB/4B,EuB9qIhB63B,eAGAe,EAAAtqB,IAAAA,WAAAL,EAAAA,aAAAA,GAAAA,YvB6qIc7N,EAAQ2O,IAAI,MAAO,MuB1qIjC,WAAA3O,GAEAw4B,EvB2qIgB54B,EAAQ+4B,cuB3qIxB,EAAAlB,EAAAA,aAEA9oB,EAAAxB,IAAAvN,EvB8qIgB+3B,GuB3qIhBa,EAAA7pB,IAAA,QAAA,IAEA3O,EAAA2O,evB6qIc3O,EAAQ2O,IAAI,WAAY/O,EAAQwnB,aAAe,GAAK,YuB3qIlEpnB,EAAAJ,IAAA63B,MAAAA,EAAArQ,aAAA,GAAArJ,EAAA,GAAAhP,aAAAqpB,EAAAC,EAAAR,EAAA,SvB+qIYW,EAAQ,KACJb,GuBzqIhB33B,EAAAgT,IAAAA,QAAA4kB,EAAA5lB,GAAA9C,YAAAwpB,MAIAE,EAAAA,eACAlB,EAAAe,IAAAA,WAAAA,SACAf,EAAAxY,IAAAA,MAAAA,EAAAA,QAIAwY,EAAAe,YAAAA,GAAAzmB,SAAA,SAAA,WAAA0mB,EAAA,IAAAA,EAAA,OvByqIQhB,EuBvqIRmB,UAAA74B,WAEA03B,EAAA93B,gBvBuqIU83B,EuBtqIV13B,iBvBwqIQ03B,EAAOoB,mBAAqBlb,EAAS8Z,EAAOkB,UAAW,IACvDlB,EuBrqIR93B,cAAAyf,WvBsqIU,GuBrqIV0Z,GAAA1Z,EAAA,GAAAwI,MAAA3Z,SACAtO,EAAAyf,EAAA,GAAAwI,MAAA1a,GvBsqIcvN,GAAQ63B,euBpqItBz3B,EAAAJ,IAAAyf,WAAApL,EAAAmT,aAAA,GAAA,YvBsqIYpnB,EuBrqIZs4B,IAAAA,MAAAA,KvBuqIc14B,EuBrqIdyf,YACA,SvBqqIgBzf,EuBrqIhByf,YvBsqIczf,EuBrqIdyf,UAAAhS,MvBuqIgBzN,EuBrqIhByf,UAAApL,MAAA,cACAoL,EAAA,GAAAzf,EAAAyf,UvBuqIgBA,EADEzf,EAAQwnB,aACE/Z,EAAWC,OAAOqE,EAAO,IAAIxE,IAA0B,EAApBvN,EAAQyf,UuBlqIvE+H,EAAAA,OAAAxnB,EAAAw4B,IAAAA,IAAAnkB,EAAAtF,IAAA3O,EAAA,GAAA,aAAA,GAAA,EAAAJ,EAAAyf,WAIA+Y,EAAAA,EAAAA,EAAAx4B,WAKAA,EAAA63B,eAEAz3B,EADAA,EAAAonB,cAAA2R,EAAAA,aAAAA,MAAAA,aACAb,KAAAW,EAAAA,OAAAA,EAAAA,IAAAA,IAAAA,EAAAA,OAAAA,EAAAA,KAAAA,EAAAA,EAAAA,aAAAA,EvBmqIoD,EAAvBj5B,EAAQw4B,cuB3pIrCH,EAAAA,eAEAj4B,EAAA6N,IAAAA,WAAAwR,GACArf,EAAA2O,IAAA,MAAAkqB,KA+BApxB,EAAAA,OACAiwB,EvBsgIM,GuBzsIN3Z,GAAA4Z,QAAA33B,QAAA4E,EAAA+I,SAAAG,MACAgQ,EAAAwa,QAAAA,QAAA1zB,EvBu1IM,OuBlpINhF,OvBopIKyH,UuBppIL4C,WAAA+uB,SAAAA,UAAAnyB,WAAAxF,SAAArB,EAAA4E,EAAAA,GvBqpII,OACE6C,SuBrpINnG,MvBspIMoG,QuBrpINrG,kBvBspIM0B,KuBrpIN,SAAArB,EAAAA,EAAAA,EAAAA,GvBspIQ,GuBrpIR9B,IvBspIUoD,MuBrpIVA,EvBspIUiH,OuBrpIVrK,EAAAq5B,EAAAA,SAAAA,QAAAA,QAAAA,GvBupIQ53B,SAAQC,SAAU,YAAa,eAAgB,eAAgB,cAAe,eAAgB,YAAc,SAASI,GuBnpI7H,GAAAg3B,QAAAA,UAAAA,EAAAA,IAAAA,CACA1zB,GAAAA,GAAAwC,EAAA9F,EAAAg3B,SAAAhB,KAAA13B,KAAAJ,GAAAA,GvBspIgB,SAASoI,KAAKixB,KAASA,GAAS,GuBrpIhDj2B,EAAAtB,GAAAu3B,IvBypIQ,IuBtpIRP,EvBupIQ1zB,GAAS,WACP0zB,EAAQhB,EAAO13B,EAASJ,KuBhpIlCyH,EAAAA,IAAA,WAAA,WACAqxB,GAAAA,EAAA3uB,UACAjJ,EAAA,KACAF,EAAAiG,YCzPAxF,UAAA,gBAAA,WxB8hMGmmB,OA7oDG1mB,YAAc,WAAY,SAAS+F,GACjCjG,KAAKiG,SAAWA,OAItBxF,QAAQhB,OAAO,kBAAoB,uBAAwB,uBAAwB,uBAAwB,wBAAyB,wBAAyB,4BAA6B,4BAA6B,wBAAyB,yBAA0B,yBAA0B,0BAA2B,2BAA4B,2BAA4B,uBAAwB,qBAAsB,6BACpamnB,OAAQ7Z","file":"angular-strap.min.js","sourcesContent":["(function(window, document, undefined) {\n'use strict';\n\n// Source: typeahead/typeahead.js\nangular.module('mgcrea.ngStrap.typeahead', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions'])\n\n .provider('$typeahead', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'typeahead',\n prefixEvent: '$typeahead',\n placement: 'bottom-left',\n templateUrl: 'typeahead/typeahead.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n minLength: 1,\n filter: 'bsAsyncFilter',\n limit: 6,\n autoSelect: false,\n comparator: '',\n trimValue: true\n };\n\n this.$get = function ($window, $rootScope, $tooltip, $$rAF, $timeout) {\n\n function TypeaheadFactory (element, controller, config) {\n\n var $typeahead = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $typeahead = $tooltip(element, options);\n var parentScope = config.scope;\n var scope = $typeahead.$scope;\n\n scope.$resetMatches = function () {\n scope.$matches = [];\n scope.$activeIndex = options.autoSelect ? 0 : -1; // If set to 0, the first match will be highlighted\n };\n scope.$resetMatches();\n\n scope.$activate = function (index) {\n scope.$$postDigest(function () {\n $typeahead.activate(index);\n });\n };\n\n scope.$select = function (index, evt) {\n scope.$$postDigest(function () {\n $typeahead.select(index);\n });\n };\n\n scope.$isVisible = function () {\n return $typeahead.$isVisible();\n };\n\n // Public methods\n\n $typeahead.update = function (matches) {\n scope.$matches = matches;\n if (scope.$activeIndex >= matches.length) {\n scope.$activeIndex = options.autoSelect ? 0 : -1;\n }\n\n // wrap in a $timeout so the results are updated\n // before repositioning\n safeDigest(scope);\n $$rAF($typeahead.$applyPlacement);\n };\n\n $typeahead.activate = function (index) {\n scope.$activeIndex = index;\n };\n\n $typeahead.select = function (index) {\n if (index === -1) return;\n var value = scope.$matches[index].value;\n // console.log('$setViewValue', value);\n controller.$setViewValue(value);\n controller.$render();\n scope.$resetMatches();\n if (parentScope) parentScope.$digest();\n // Emit event\n scope.$emit(options.prefixEvent + '.select', value, index, $typeahead);\n if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n options.onSelect(value, index, $typeahead);\n }\n };\n\n // Protected methods\n\n $typeahead.$isVisible = function () {\n if (!options.minLength || !controller) {\n return !!scope.$matches.length;\n }\n // minLength support\n return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength;\n };\n\n $typeahead.$getIndex = function (value) {\n var index;\n for (index = scope.$matches.length; index--;) {\n if (angular.equals(scope.$matches[index].value, value)) break;\n }\n return index;\n };\n\n $typeahead.$onMouseDown = function (evt) {\n // Prevent blur on mousedown\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n $typeahead.$onKeyDown = function (evt) {\n if (!/(38|40|13)/.test(evt.keyCode)) return;\n\n // Let ngSubmit pass if the typeahead tip is hidden or no option is selected\n if ($typeahead.$isVisible() && !(evt.keyCode === 13 && scope.$activeIndex === -1)) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // Select with enter\n if (evt.keyCode === 13 && scope.$matches.length) {\n $typeahead.select(scope.$activeIndex);\n // Navigate with keyboard\n } else if (evt.keyCode === 38 && scope.$activeIndex > 0) {\n scope.$activeIndex--;\n } else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) {\n scope.$activeIndex++;\n } else if (angular.isUndefined(scope.$activeIndex)) {\n scope.$activeIndex = 0;\n }\n scope.$digest();\n };\n\n // Overrides\n\n var show = $typeahead.show;\n $typeahead.show = function () {\n show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed immediately.\n $timeout(function () {\n if ($typeahead.$element) {\n $typeahead.$element.on('mousedown', $typeahead.$onMouseDown);\n if (options.keyboard) {\n if (element) element.on('keydown', $typeahead.$onKeyDown);\n }\n }\n }, 0, false);\n };\n\n var hide = $typeahead.hide;\n $typeahead.hide = function () {\n if ($typeahead.$element) $typeahead.$element.off('mousedown', $typeahead.$onMouseDown);\n if (options.keyboard) {\n if (element) element.off('keydown', $typeahead.$onKeyDown);\n }\n if (!options.autoSelect) {\n $typeahead.activate(-1);\n }\n hide();\n };\n\n return $typeahead;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n TypeaheadFactory.defaults = defaults;\n return TypeaheadFactory;\n\n };\n\n })\n\n .filter('bsAsyncFilter', function ($filter) {\n return function (array, expression, comparator) {\n if (array && angular.isFunction(array.then)) {\n return array.then(function (results) {\n return $filter('filter')(results, expression, comparator);\n });\n }\n return $filter('filter')(array, expression, comparator);\n };\n })\n\n .directive('bsTypeahead', function ($window, $parse, $q, $typeahead, $parseOptions) {\n\n var defaults = $typeahead.defaults;\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Fixes firefox bug when using objects in model with typeahead\n // Yes this breaks any other directive using a 'change' event on this input,\n // but if it is using the 'change' event why is it used with typeahead?\n element.off('change');\n\n // Directive options\n var options = {\n scope: scope\n };\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'filter', 'limit', 'minLength', 'watchOptions', 'selectMode', 'autoSelect', 'comparator', 'id', 'prefixEvent', 'prefixClass'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'trimValue', 'filter'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show, hide and select events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Disable browser autocompletion\n if (!element.attr('autocomplete')) element.attr('autocomplete', 'off');\n\n // Build proper bsOptions\n var filter = angular.isDefined(options.filter) ? options.filter : defaults.filter;\n var limit = options.limit || defaults.limit;\n var comparator = options.comparator || defaults.comparator;\n\n var bsOptions = attr.bsOptions;\n if (filter) {\n bsOptions += ' | ' + filter + ':$viewValue';\n if (comparator) bsOptions += ':' + comparator;\n }\n if (limit) bsOptions += ' | limitTo:' + limit;\n var parsedOptions = $parseOptions(bsOptions);\n\n // Initialize typeahead\n var typeahead = $typeahead(element, controller, options);\n\n // Watch options on demand\n if (options.watchOptions) {\n // Watch bsOptions values before filtering for changes, drop function calls\n var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').replace(/\\(.*\\)/g, '').trim();\n scope.$watchCollection(watchedOptions, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue);\n parsedOptions.valuesFn(scope, controller).then(function (values) {\n typeahead.update(values);\n controller.$render();\n });\n });\n }\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('$watch', element.attr('ng-model'), newValue);\n scope.$modelValue = newValue; // Publish modelValue on scope for custom templates\n parsedOptions.valuesFn(scope, controller)\n .then(function (values) {\n // Prevent input with no future prospect if selectMode is truthy\n // @TODO test selectMode\n if (options.selectMode && !values.length && newValue.length > 0) {\n controller.$setViewValue(controller.$viewValue.substring(0, controller.$viewValue.length - 1));\n return;\n }\n if (values.length > limit) values = values.slice(0, limit);\n typeahead.update(values);\n // Queue a new rendering that will leverage collection loading\n controller.$render();\n });\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var displayValue = parsedOptions.displayValue(modelValue);\n\n // If we can determine the displayValue, use that\n if (displayValue) {\n return displayValue;\n }\n\n // If there's no display value, attempt to use the modelValue.\n // If the model is an object not much we can do\n if (angular.isDefined(modelValue) && typeof modelValue !== 'object') {\n return modelValue;\n }\n return '';\n });\n\n // Model rendering in view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n if (controller.$isEmpty(controller.$viewValue)) {\n return element.val('');\n }\n var index = typeahead.$getIndex(controller.$modelValue);\n var selected = index !== -1 ? typeahead.$scope.$matches[index].label : controller.$viewValue;\n selected = angular.isObject(selected) ? parsedOptions.displayValue(selected) : selected;\n var value = selected ? selected.toString().replace(/<(?:.|\\n)*?>/gm, '') : '';\n var ss = element[0].selectionStart;\n var sd = element[0].selectionEnd;\n element.val(options.trimValue === false ? value : value.trim());\n element[0].setSelectionRange(ss, sd);\n };\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (typeahead) typeahead.destroy();\n options = null;\n typeahead = null;\n });\n\n }\n };\n\n });\n\n// Source: tooltip/tooltip.js\nangular.module('mgcrea.ngStrap.tooltip', ['mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$tooltip', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n customClass: '',\n prefixClass: 'tooltip',\n prefixEvent: 'tooltip',\n container: false,\n target: false,\n placement: 'top',\n templateUrl: 'tooltip/tooltip.tpl.html',\n template: '',\n titleTemplate: false,\n trigger: 'hover focus',\n keyboard: false,\n html: false,\n show: false,\n title: '',\n type: '',\n delay: 0,\n autoClose: false,\n bsEnabled: true,\n mouseDownPreventDefault: true,\n mouseDownStopPropagation: true,\n viewport: {\n selector: 'body',\n padding: 0\n }\n };\n\n this.$get = function ($window, $rootScope, $bsCompiler, $q, $templateCache, $http, $animate, $sce, dimensions, $$rAF, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n var $body = angular.element($window.document);\n\n function TooltipFactory (element, config) {\n\n var $tooltip = {};\n\n // Common vars\n var options = $tooltip.$options = angular.extend({}, defaults, config);\n var promise = $tooltip.$promise = $bsCompiler.compile(options);\n var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n var nodeName = element[0].nodeName.toLowerCase();\n if (options.delay && angular.isString(options.delay)) {\n var split = options.delay.split(',').map(parseFloat);\n options.delay = split.length > 1 ? {show: split[0], hide: split[1]} : split[0];\n }\n\n // Store $id to identify the triggering element in events\n // give priority to options.id, otherwise, try to use\n // element id if defined\n $tooltip.$id = options.id || element.attr('id') || '';\n\n // Support scope as string options\n if (options.title) {\n scope.title = $sce.trustAsHtml(options.title);\n }\n\n // Provide scope helpers\n scope.$setEnabled = function (isEnabled) {\n scope.$$postDigest(function () {\n $tooltip.setEnabled(isEnabled);\n });\n };\n scope.$hide = function () {\n scope.$$postDigest(function () {\n $tooltip.hide();\n });\n };\n scope.$show = function () {\n scope.$$postDigest(function () {\n $tooltip.show();\n });\n };\n scope.$toggle = function () {\n scope.$$postDigest(function () {\n $tooltip.toggle();\n });\n };\n // Publish isShown as a protected var on scope\n $tooltip.$isShown = scope.$isShown = false;\n\n // Private vars\n var timeout;\n var hoverState;\n\n // Fetch, compile then initialize tooltip\n var compileData;\n var tipElement;\n var tipContainer;\n var tipScope;\n promise.then(function (data) {\n compileData = data;\n $tooltip.init();\n });\n\n $tooltip.init = function () {\n\n // Options: delay\n if (options.delay && angular.isNumber(options.delay)) {\n options.delay = {\n show: options.delay,\n hide: options.delay\n };\n }\n\n // Replace trigger on touch devices ?\n // if(isTouch && options.trigger === defaults.trigger) {\n // options.trigger.replace(/hover/g, 'click');\n // }\n\n // Options : container\n if (options.container === 'self') {\n tipContainer = element;\n } else if (angular.isElement(options.container)) {\n tipContainer = options.container;\n } else if (options.container) {\n tipContainer = findElement(options.container);\n }\n\n // Options: trigger\n bindTriggerEvents();\n\n // Options: target\n if (options.target) {\n options.target = angular.isElement(options.target) ? options.target : findElement(options.target);\n }\n\n // Options: show\n if (options.show) {\n scope.$$postDigest(function () {\n if (options.trigger === 'focus') {\n element[0].focus();\n } else {\n $tooltip.show();\n }\n });\n }\n\n };\n\n $tooltip.destroy = function () {\n\n // Unbind events\n unbindTriggerEvents();\n\n // Remove element\n destroyTipElement();\n\n // Destroy scope\n scope.$destroy();\n\n };\n\n $tooltip.enter = function () {\n\n clearTimeout(timeout);\n hoverState = 'in';\n if (!options.delay || !options.delay.show) {\n return $tooltip.show();\n }\n\n timeout = setTimeout(function () {\n if (hoverState === 'in') $tooltip.show();\n }, options.delay.show);\n\n };\n\n $tooltip.show = function () {\n if (!options.bsEnabled || $tooltip.$isShown) return;\n\n scope.$emit(options.prefixEvent + '.show.before', $tooltip);\n if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n options.onBeforeShow($tooltip);\n }\n var parent;\n var after;\n if (options.container) {\n parent = tipContainer;\n if (tipContainer[0].lastChild) {\n after = angular.element(tipContainer[0].lastChild);\n } else {\n after = null;\n }\n } else {\n parent = null;\n after = element;\n }\n\n\n // Hide any existing tipElement\n if (tipElement) destroyTipElement();\n // Fetch a cloned element linked from template\n tipScope = $tooltip.$scope.$new();\n tipElement = $tooltip.$element = compileData.link(tipScope, function (clonedElement, scope) {});\n\n // Set the initial positioning. Make the tooltip invisible\n // so IE doesn't try to focus on it off screen.\n tipElement.css({top: '-9999px', left: '-9999px', right: 'auto', display: 'block', visibility: 'hidden'});\n\n // Options: animation\n if (options.animation) tipElement.addClass(options.animation);\n // Options: type\n if (options.type) tipElement.addClass(options.prefixClass + '-' + options.type);\n // Options: custom classes\n if (options.customClass) tipElement.addClass(options.customClass);\n\n // Append the element, without any animations. If we append\n // using $animate.enter, some of the animations cause the placement\n // to be off due to the transforms.\n if (after) {\n after.after(tipElement);\n } else {\n parent.prepend(tipElement);\n }\n\n $tooltip.$isShown = scope.$isShown = true;\n safeDigest(scope);\n\n // Now, apply placement\n $tooltip.$applyPlacement();\n\n // Once placed, animate it.\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.enter(tipElement, parent, after, enterAnimateCallback);\n } else {\n $animate.enter(tipElement, parent, after).then(enterAnimateCallback);\n }\n safeDigest(scope);\n\n $$rAF(function () {\n // Once the tooltip is placed and the animation starts, make the tooltip visible\n if (tipElement) tipElement.css({visibility: 'visible'});\n\n // Bind events\n if (options.keyboard) {\n if (options.trigger !== 'focus') {\n $tooltip.focus();\n }\n bindKeyboardEvents();\n }\n });\n\n if (options.autoClose) {\n bindAutoCloseEvents();\n }\n\n };\n\n function enterAnimateCallback () {\n scope.$emit(options.prefixEvent + '.show', $tooltip);\n if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n options.onShow($tooltip);\n }\n }\n\n $tooltip.leave = function () {\n\n clearTimeout(timeout);\n hoverState = 'out';\n if (!options.delay || !options.delay.hide) {\n return $tooltip.hide();\n }\n timeout = setTimeout(function () {\n if (hoverState === 'out') {\n $tooltip.hide();\n }\n }, options.delay.hide);\n\n };\n\n var _blur;\n var _tipToHide;\n $tooltip.hide = function (blur) {\n\n if (!$tooltip.$isShown) return;\n scope.$emit(options.prefixEvent + '.hide.before', $tooltip);\n if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n options.onBeforeHide($tooltip);\n }\n\n // store blur value for leaveAnimateCallback to use\n _blur = blur;\n\n // store current tipElement reference to use\n // in leaveAnimateCallback\n _tipToHide = tipElement;\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.leave(tipElement, leaveAnimateCallback);\n } else {\n $animate.leave(tipElement).then(leaveAnimateCallback);\n }\n\n $tooltip.$isShown = scope.$isShown = false;\n safeDigest(scope);\n\n // Unbind events\n if (options.keyboard && tipElement !== null) {\n unbindKeyboardEvents();\n }\n\n if (options.autoClose && tipElement !== null) {\n unbindAutoCloseEvents();\n }\n };\n\n function leaveAnimateCallback () {\n scope.$emit(options.prefixEvent + '.hide', $tooltip);\n if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n options.onHide($tooltip);\n }\n\n // check if current tipElement still references\n // the same element when hide was called\n if (tipElement === _tipToHide) {\n // Allow to blur the input when hidden, like when pressing enter key\n if (_blur && options.trigger === 'focus') {\n return element[0].blur();\n }\n\n // clean up child scopes\n destroyTipElement();\n }\n }\n\n $tooltip.toggle = function (evt) {\n if (evt) { evt.preventDefault(); }\n if ($tooltip.$isShown) {\n $tooltip.leave();\n } else {\n $tooltip.enter();\n }\n };\n\n $tooltip.focus = function () {\n tipElement[0].focus();\n };\n\n $tooltip.setEnabled = function (isEnabled) {\n options.bsEnabled = isEnabled;\n };\n\n $tooltip.setViewport = function (viewport) {\n options.viewport = viewport;\n };\n\n // Protected methods\n\n $tooltip.$applyPlacement = function () {\n if (!tipElement) return;\n\n // Determine if we're doing an auto or normal placement\n var placement = options.placement;\n var autoToken = /\\s?auto?\\s?/i;\n var autoPlace = autoToken.test(placement);\n\n if (autoPlace) {\n placement = placement.replace(autoToken, '') || defaults.placement;\n }\n\n // Need to add the position class before we get\n // the offsets\n tipElement.addClass(options.placement);\n\n // Get the position of the target element\n // and the height and width of the tooltip so we can center it.\n var elementPosition = getPosition();\n var tipWidth = tipElement.prop('offsetWidth');\n var tipHeight = tipElement.prop('offsetHeight');\n\n // Refresh viewport position\n $tooltip.$viewport = options.viewport && findElement(options.viewport.selector || options.viewport);\n\n // If we're auto placing, we need to check the positioning\n if (autoPlace) {\n var originalPlacement = placement;\n var viewportPosition = getPosition($tooltip.$viewport);\n\n if (/bottom/.test(originalPlacement) && elementPosition.bottom + tipHeight > viewportPosition.bottom) {\n placement = originalPlacement.replace('bottom', 'top');\n } else if (/top/.test(originalPlacement) && elementPosition.top - tipHeight < viewportPosition.top) {\n placement = originalPlacement.replace('top', 'bottom');\n }\n\n if (/left/.test(originalPlacement) && elementPosition.left - tipWidth < viewportPosition.left) {\n placement = placement.replace('left', 'right');\n } else if (/right/.test(originalPlacement) && elementPosition.right + tipWidth > viewportPosition.width) {\n placement = placement.replace('right', 'left');\n }\n\n tipElement.removeClass(originalPlacement).addClass(placement);\n }\n\n // Get the tooltip's top and left coordinates to center it with this directive.\n var tipPosition = getCalculatedOffset(placement, elementPosition, tipWidth, tipHeight);\n applyPlacement(tipPosition, placement);\n };\n\n $tooltip.$onKeyUp = function (evt) {\n if (evt.which === 27 && $tooltip.$isShown) {\n $tooltip.hide();\n evt.stopPropagation();\n }\n };\n\n $tooltip.$onFocusKeyUp = function (evt) {\n if (evt.which === 27) {\n element[0].blur();\n evt.stopPropagation();\n }\n };\n\n $tooltip.$onFocusElementMouseDown = function (evt) {\n if (options.mouseDownPreventDefault) { evt.preventDefault(); }\n if (options.mouseDownStopPropagation) { evt.stopPropagation(); }\n // Some browsers do not auto-focus buttons (eg. Safari)\n if ($tooltip.$isShown) {\n element[0].blur();\n } else {\n element[0].focus();\n }\n };\n\n // bind/unbind events\n function bindTriggerEvents () {\n var triggers = options.trigger.split(' ');\n angular.forEach(triggers, function (trigger) {\n if (trigger === 'click' || trigger === 'contextmenu') {\n element.on(trigger, $tooltip.toggle);\n } else if (trigger !== 'manual') {\n element.on(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n element.on(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n if (nodeName === 'button' && trigger !== 'hover') {\n element.on(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n }\n }\n });\n }\n\n function unbindTriggerEvents () {\n var triggers = options.trigger.split(' ');\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i];\n if (trigger === 'click' || trigger === 'contextmenu') {\n element.off(trigger, $tooltip.toggle);\n } else if (trigger !== 'manual') {\n element.off(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n element.off(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n if (nodeName === 'button' && trigger !== 'hover') {\n element.off(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n }\n }\n }\n }\n\n function bindKeyboardEvents () {\n if (options.trigger !== 'focus') {\n tipElement.on('keyup', $tooltip.$onKeyUp);\n } else {\n element.on('keyup', $tooltip.$onFocusKeyUp);\n }\n }\n\n function unbindKeyboardEvents () {\n if (options.trigger !== 'focus') {\n tipElement.off('keyup', $tooltip.$onKeyUp);\n } else {\n element.off('keyup', $tooltip.$onFocusKeyUp);\n }\n }\n\n var _autoCloseEventsBinded = false;\n function bindAutoCloseEvents () {\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n // Stop propagation when clicking inside tooltip\n tipElement.on('click', stopEventPropagation);\n\n // Hide when clicking outside tooltip\n $body.on('click', $tooltip.hide);\n\n _autoCloseEventsBinded = true;\n }, 0, false);\n }\n\n function unbindAutoCloseEvents () {\n if (_autoCloseEventsBinded) {\n tipElement.off('click', stopEventPropagation);\n $body.off('click', $tooltip.hide);\n _autoCloseEventsBinded = false;\n }\n }\n\n function stopEventPropagation (event) {\n event.stopPropagation();\n }\n\n // Private methods\n\n function getPosition ($element) {\n $element = $element || (options.target || element);\n\n var el = $element[0];\n var isBody = el.tagName === 'BODY';\n\n var elRect = el.getBoundingClientRect();\n var rect = {};\n\n // IE8 has issues with angular.extend and using elRect directly.\n // By coping the values of elRect into a new object, we can continue to use extend\n /* eslint-disable guard-for-in */\n for (var p in elRect) { // eslint-disable-line\n // DO NOT use hasOwnProperty when inspecting the return of getBoundingClientRect.\n rect[p] = elRect[p];\n }\n /* eslint-enable guard-for-in */\n\n if (rect.width === null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n rect = angular.extend({}, rect, {width: elRect.right - elRect.left, height: elRect.bottom - elRect.top});\n }\n var elOffset = isBody ? {top: 0, left: 0} : dimensions.offset(el);\n var scroll = {scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.prop('scrollTop') || 0};\n var outerDims = isBody ? {width: document.documentElement.clientWidth, height: $window.innerHeight} : null;\n\n return angular.extend({}, rect, scroll, outerDims, elOffset);\n }\n\n function getCalculatedOffset (placement, position, actualWidth, actualHeight) {\n var offset;\n var split = placement.split('-');\n\n switch (split[0]) {\n case 'right':\n offset = {\n top: position.top + position.height / 2 - actualHeight / 2,\n left: position.left + position.width\n };\n break;\n case 'bottom':\n offset = {\n top: position.top + position.height,\n left: position.left + position.width / 2 - actualWidth / 2\n };\n break;\n case 'left':\n offset = {\n top: position.top + position.height / 2 - actualHeight / 2,\n left: position.left - actualWidth\n };\n break;\n default:\n offset = {\n top: position.top - actualHeight,\n left: position.left + position.width / 2 - actualWidth / 2\n };\n break;\n }\n\n if (!split[1]) {\n return offset;\n }\n\n // Add support for corners @todo css\n if (split[0] === 'top' || split[0] === 'bottom') {\n switch (split[1]) {\n case 'left':\n offset.left = position.left;\n break;\n case 'right':\n offset.left = position.left + position.width - actualWidth;\n break;\n default:\n break;\n }\n } else if (split[0] === 'left' || split[0] === 'right') {\n switch (split[1]) {\n case 'top':\n offset.top = position.top - actualHeight + position.height;\n break;\n case 'bottom':\n offset.top = position.top;\n break;\n default:\n break;\n }\n }\n\n return offset;\n }\n\n function applyPlacement (offset, placement) {\n var tip = tipElement[0];\n var width = tip.offsetWidth;\n var height = tip.offsetHeight;\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt(dimensions.css(tip, 'margin-top'), 10);\n var marginLeft = parseInt(dimensions.css(tip, 'margin-left'), 10);\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0;\n if (isNaN(marginLeft)) marginLeft = 0;\n\n offset.top = offset.top + marginTop;\n offset.left = offset.left + marginLeft;\n\n // dimensions setOffset doesn't round pixel values\n // so we use setOffset directly with our own function\n dimensions.setOffset(tip, angular.extend({\n using: function (props) {\n tipElement.css({\n top: Math.round(props.top) + 'px',\n left: Math.round(props.left) + 'px',\n right: ''\n });\n }\n }, offset), 0);\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = tip.offsetWidth;\n var actualHeight = tip.offsetHeight;\n\n if (placement === 'top' && actualHeight !== height) {\n offset.top = offset.top + height - actualHeight;\n }\n\n // If it's an exotic placement, exit now instead of\n // applying a delta and changing the arrow\n if (/top-left|top-right|bottom-left|bottom-right/.test(placement)) return;\n\n var delta = getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight);\n\n if (delta.left) {\n offset.left += delta.left;\n } else {\n offset.top += delta.top;\n }\n\n dimensions.setOffset(tip, offset);\n\n if (/top|right|bottom|left/.test(placement)) {\n var isVertical = /top|bottom/.test(placement);\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight;\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';\n\n replaceArrow(arrowDelta, tip[arrowOffsetPosition], isVertical);\n }\n }\n\n // @source https://github.com/twbs/bootstrap/blob/v3.3.5/js/tooltip.js#L380\n function getViewportAdjustedDelta (placement, position, actualWidth, actualHeight) {\n var delta = {top: 0, left: 0};\n if (!$tooltip.$viewport) return delta;\n\n var viewportPadding = options.viewport && options.viewport.padding || 0;\n var viewportDimensions = getPosition($tooltip.$viewport);\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = position.top - viewportPadding - viewportDimensions.scroll;\n var bottomEdgeOffset = position.top + viewportPadding - viewportDimensions.scroll + actualHeight;\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset;\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;\n }\n } else {\n var leftEdgeOffset = position.left - viewportPadding;\n var rightEdgeOffset = position.left + viewportPadding + actualWidth;\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset;\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset;\n }\n }\n\n return delta;\n }\n\n function replaceArrow (delta, dimension, isHorizontal) {\n var $arrow = findElement('.tooltip-arrow, .arrow', tipElement[0]);\n\n $arrow.css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isHorizontal ? 'top' : 'left', '');\n }\n\n function destroyTipElement () {\n // Cancel pending callbacks\n clearTimeout(timeout);\n\n if ($tooltip.$isShown && tipElement !== null) {\n if (options.autoClose) {\n unbindAutoCloseEvents();\n }\n\n if (options.keyboard) {\n unbindKeyboardEvents();\n }\n }\n\n if (tipScope) {\n tipScope.$destroy();\n tipScope = null;\n }\n\n if (tipElement) {\n tipElement.remove();\n tipElement = $tooltip.$element = null;\n }\n }\n\n return $tooltip;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n return TooltipFactory;\n\n };\n\n })\n\n .directive('bsTooltip', function ($window, $location, $sce, $parse, $tooltip, $$rAF) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n var tooltip;\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'titleTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'backdropAnimation', 'type', 'customClass', 'id'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // should not parse target attribute (anchor tag), only data-target #1454\n var dataTarget = element.attr('data-target');\n if (angular.isDefined(dataTarget)) {\n if (falseValueRegExp.test(dataTarget)) {\n options.target = false;\n } else {\n options.target = dataTarget;\n }\n }\n\n // overwrite inherited title value when no value specified\n // fix for angular 1.3.1 531a8de72c439d8ddd064874bf364c00cedabb11\n if (!scope.hasOwnProperty('title')) {\n scope.title = '';\n }\n\n // Observe scope attributes for change\n attr.$observe('title', function (newValue) {\n if (angular.isDefined(newValue) || !scope.hasOwnProperty('title')) {\n var oldValue = scope.title;\n scope.title = $sce.trustAsHtml(newValue);\n if (angular.isDefined(oldValue)) {\n $$rAF(function () {\n if (tooltip) tooltip.$applyPlacement();\n });\n }\n }\n });\n\n attr.$observe('disabled', function (newValue) {\n if (newValue && tooltip.$isShown) {\n tooltip.hide();\n }\n });\n\n // Support scope as an object\n if (attr.bsTooltip) {\n scope.$watch(attr.bsTooltip, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.title = newValue;\n }\n if (angular.isDefined(oldValue)) {\n $$rAF(function () {\n if (tooltip) tooltip.$applyPlacement();\n });\n }\n }, true);\n }\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!tooltip || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(tooltip),?/i);\n if (newValue === true) {\n tooltip.show();\n } else {\n tooltip.hide();\n }\n });\n }\n\n // Enabled binding support\n if (attr.bsEnabled) {\n scope.$watch(attr.bsEnabled, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.bsEnabled, newValue, oldValue);\n if (!tooltip || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(tooltip),?/i);\n if (newValue === false) {\n tooltip.setEnabled(false);\n } else {\n tooltip.setEnabled(true);\n }\n });\n }\n\n // Viewport support\n if (attr.viewport) {\n scope.$watch(attr.viewport, function (newValue) {\n if (!tooltip || !angular.isDefined(newValue)) return;\n tooltip.setViewport(newValue);\n });\n }\n\n // Initialize popover\n tooltip = $tooltip(element, options);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (tooltip) tooltip.destroy();\n options = null;\n tooltip = null;\n });\n\n }\n };\n\n });\n\n// Source: timepicker/timepicker.js\nangular.module('mgcrea.ngStrap.timepicker', ['mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip'])\n\n .provider('$timepicker', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n defaultDate: 'auto',\n // uncommenting the following line will break backwards compatability\n // prefixEvent: 'timepicker',\n prefixClass: 'timepicker',\n placement: 'bottom-left',\n templateUrl: 'timepicker/timepicker.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n // lang: $locale.id,\n useNative: true,\n timeType: 'date',\n timeFormat: 'shortTime',\n timezone: null,\n modelTimeFormat: null,\n autoclose: false,\n minTime: -Infinity,\n maxTime: +Infinity,\n length: 5,\n hourStep: 1,\n minuteStep: 5,\n secondStep: 5,\n roundDisplay: false,\n iconUp: 'glyphicon glyphicon-chevron-up',\n iconDown: 'glyphicon glyphicon-chevron-down',\n arrowBehavior: 'pager'\n };\n\n this.$get = function ($window, $document, $rootScope, $sce, $dateFormatter, $tooltip, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n if (!defaults.lang) {\n defaults.lang = $dateFormatter.getDefaultLocale();\n }\n\n function timepickerFactory (element, controller, config) {\n\n var $timepicker = $tooltip(element, angular.extend({}, defaults, config));\n var parentScope = config.scope;\n var options = $timepicker.$options;\n var scope = $timepicker.$scope;\n\n var lang = options.lang;\n var formatDate = function (date, format, timezone) {\n return $dateFormatter.formatDate(date, format, lang, timezone);\n };\n\n function floorMinutes (time) {\n // coeff used to floor current time to nearest minuteStep interval\n var coeff = 1000 * 60 * options.minuteStep;\n return new Date(Math.floor(time.getTime() / coeff) * coeff);\n }\n\n // View vars\n\n var selectedIndex = 0;\n var defaultDate = options.roundDisplay ? floorMinutes(new Date()) : new Date();\n var startDate = controller.$dateValue || defaultDate;\n var viewDate = {\n hour: startDate.getHours(),\n meridian: startDate.getHours() < 12,\n minute: startDate.getMinutes(),\n second: startDate.getSeconds(),\n millisecond: startDate.getMilliseconds()\n };\n\n var format = $dateFormatter.getDatetimeFormat(options.timeFormat, lang);\n\n var hoursFormat = $dateFormatter.hoursFormat(format);\n var timeSeparator = $dateFormatter.timeSeparator(format);\n var minutesFormat = $dateFormatter.minutesFormat(format);\n var secondsFormat = $dateFormatter.secondsFormat(format);\n var showSeconds = $dateFormatter.showSeconds(format);\n var showAM = $dateFormatter.showAM(format);\n\n scope.$iconUp = options.iconUp;\n scope.$iconDown = options.iconDown;\n\n // Scope methods\n\n scope.$select = function (date, index) {\n $timepicker.select(date, index);\n };\n scope.$moveIndex = function (value, index) {\n $timepicker.$moveIndex(value, index);\n };\n scope.$switchMeridian = function (date) {\n $timepicker.switchMeridian(date);\n };\n\n // Public methods\n\n $timepicker.update = function (date) {\n // console.warn('$timepicker.update() newValue=%o', date);\n if (angular.isDate(date) && !isNaN(date.getTime())) {\n $timepicker.$date = date;\n angular.extend(viewDate, {\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds(),\n millisecond: date.getMilliseconds()\n });\n $timepicker.$build();\n } else if (!$timepicker.$isBuilt) {\n $timepicker.$build();\n }\n };\n\n $timepicker.select = function (date, index, keep) {\n // console.warn('$timepicker.select', date, scope.$mode);\n if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n controller.$dateValue = options.defaultDate === 'today' ? new Date() : new Date(1970, 0, 1);\n }\n\n if (!angular.isDate(date)) date = new Date(date);\n if (index === 0) controller.$dateValue.setHours(date.getHours());\n else if (index === 1) controller.$dateValue.setMinutes(date.getMinutes());\n else if (index === 2) controller.$dateValue.setSeconds(date.getSeconds());\n controller.$setViewValue(angular.copy(controller.$dateValue));\n controller.$render();\n if (options.autoclose && !keep) {\n $timeout(function () {\n $timepicker.hide(true);\n });\n }\n };\n\n $timepicker.switchMeridian = function (date) {\n if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n return;\n }\n var hours = (date || controller.$dateValue).getHours();\n controller.$dateValue.setHours(hours < 12 ? hours + 12 : hours - 12);\n controller.$setViewValue(angular.copy(controller.$dateValue));\n controller.$render();\n };\n\n // Protected methods\n\n $timepicker.$build = function () {\n // console.warn('$timepicker.$build() viewDate=%o', viewDate);\n var i;\n var midIndex = scope.midIndex = parseInt(options.length / 2, 10);\n var hours = [];\n var hour;\n for (i = 0; i < options.length; i++) {\n hour = new Date(1970, 0, 1, viewDate.hour - (midIndex - i) * options.hourStep);\n hours.push({\n date: hour,\n label: formatDate(hour, hoursFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(hour, 0),\n disabled: $timepicker.$isDisabled(hour, 0)\n });\n }\n var minutes = [];\n var minute;\n for (i = 0; i < options.length; i++) {\n minute = new Date(1970, 0, 1, 0, viewDate.minute - (midIndex - i) * options.minuteStep);\n minutes.push({\n date: minute,\n label: formatDate(minute, minutesFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(minute, 1),\n disabled: $timepicker.$isDisabled(minute, 1)\n });\n }\n var seconds = [];\n var second;\n for (i = 0; i < options.length; i++) {\n second = new Date(1970, 0, 1, 0, 0, viewDate.second - (midIndex - i) * options.secondStep);\n seconds.push({\n date: second,\n label: formatDate(second, secondsFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(second, 2),\n disabled: $timepicker.$isDisabled(second, 2)\n });\n }\n\n var rows = [];\n for (i = 0; i < options.length; i++) {\n if (showSeconds) {\n rows.push([hours[i], minutes[i], seconds[i]]);\n } else {\n rows.push([hours[i], minutes[i]]);\n }\n }\n scope.rows = rows;\n scope.showSeconds = showSeconds;\n scope.showAM = showAM;\n scope.isAM = ($timepicker.$date || hours[midIndex].date).getHours() < 12;\n scope.timeSeparator = timeSeparator;\n $timepicker.$isBuilt = true;\n };\n\n $timepicker.$isSelected = function (date, index) {\n if (!$timepicker.$date) return false;\n else if (index === 0) {\n return date.getHours() === $timepicker.$date.getHours();\n } else if (index === 1) {\n return date.getMinutes() === $timepicker.$date.getMinutes();\n } else if (index === 2) {\n return date.getSeconds() === $timepicker.$date.getSeconds();\n }\n };\n\n $timepicker.$isDisabled = function (date, index) {\n var selectedTime;\n if (index === 0) {\n selectedTime = date.getTime() + viewDate.minute * 6e4 + viewDate.second * 1e3;\n } else if (index === 1) {\n selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.second * 1e3;\n } else if (index === 2) {\n selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.minute * 6e4;\n }\n return selectedTime < options.minTime * 1 || selectedTime > options.maxTime * 1;\n };\n\n scope.$arrowAction = function (value, index) {\n if (options.arrowBehavior === 'picker') {\n $timepicker.$setTimeByStep(value, index);\n } else {\n $timepicker.$moveIndex(value, index);\n }\n };\n\n $timepicker.$setTimeByStep = function (value, index) {\n var newDate = new Date($timepicker.$date || startDate);\n var hours = newDate.getHours();\n var minutes = newDate.getMinutes();\n var seconds = newDate.getSeconds();\n if (index === 0) {\n newDate.setHours(hours - (parseInt(options.hourStep, 10) * value));\n } else if (index === 1) {\n newDate.setMinutes(minutes - (parseInt(options.minuteStep, 10) * value));\n } else if (index === 2) {\n newDate.setSeconds(seconds - (parseInt(options.secondStep, 10) * value));\n }\n $timepicker.select(newDate, index, true);\n };\n\n $timepicker.$moveIndex = function (value, index) {\n var targetDate;\n if (index === 0) {\n targetDate = new Date(1970, 0, 1, viewDate.hour + (value * options.length), viewDate.minute, viewDate.second);\n angular.extend(viewDate, {\n hour: targetDate.getHours()\n });\n } else if (index === 1) {\n targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + (value * options.length * options.minuteStep), viewDate.second);\n angular.extend(viewDate, {\n minute: targetDate.getMinutes()\n });\n } else if (index === 2) {\n targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute, viewDate.second + (value * options.length * options.secondStep));\n angular.extend(viewDate, {\n second: targetDate.getSeconds()\n });\n }\n $timepicker.$build();\n };\n\n $timepicker.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n if (evt.target.nodeName.toLowerCase() !== 'input') evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n targetEl = targetEl.parent();\n }\n targetEl.triggerHandler('click');\n }\n };\n\n $timepicker.$onKeyDown = function (evt) {\n if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n // Close on enter\n if (evt.keyCode === 13) {\n $timepicker.hide(true);\n return;\n }\n\n // Navigate with keyboard\n var newDate = new Date($timepicker.$date);\n var hours = newDate.getHours();\n var hoursLength = formatDate(newDate, hoursFormat).length;\n var minutes = newDate.getMinutes();\n var minutesLength = formatDate(newDate, minutesFormat).length;\n var seconds = newDate.getSeconds();\n var secondsLength = formatDate(newDate, secondsFormat).length;\n var sepLength = 1;\n var lateralMove = /(37|39)/.test(evt.keyCode);\n var count = 2 + showSeconds * 1 + showAM * 1;\n\n // Navigate indexes (left, right)\n if (lateralMove) {\n if (evt.keyCode === 37) selectedIndex = selectedIndex < 1 ? count - 1 : selectedIndex - 1;\n else if (evt.keyCode === 39) selectedIndex = selectedIndex < count - 1 ? selectedIndex + 1 : 0;\n }\n\n // Update values (up, down)\n var selectRange = [0, hoursLength];\n var incr = 0;\n if (evt.keyCode === 38) incr = -1;\n if (evt.keyCode === 40) incr = +1;\n var isSeconds = selectedIndex === 2 && showSeconds;\n var isMeridian = selectedIndex === 2 && !showSeconds || selectedIndex === 3 && showSeconds;\n if (selectedIndex === 0) {\n newDate.setHours(hours + incr * parseInt(options.hourStep, 10));\n // re-calculate hours length because we have changed hours value\n hoursLength = formatDate(newDate, hoursFormat).length;\n selectRange = [0, hoursLength];\n } else if (selectedIndex === 1) {\n newDate.setMinutes(minutes + incr * parseInt(options.minuteStep, 10));\n // re-calculate minutes length because we have changes minutes value\n minutesLength = formatDate(newDate, minutesFormat).length;\n selectRange = [hoursLength + sepLength, minutesLength];\n } else if (isSeconds) {\n newDate.setSeconds(seconds + incr * parseInt(options.secondStep, 10));\n // re-calculate seconds length because we have changes seconds value\n secondsLength = formatDate(newDate, secondsFormat).length;\n selectRange = [hoursLength + sepLength + minutesLength + sepLength, secondsLength];\n } else if (isMeridian) {\n if (!lateralMove) $timepicker.switchMeridian();\n selectRange = [hoursLength + sepLength + minutesLength + sepLength + (secondsLength + sepLength) * showSeconds, 2];\n }\n $timepicker.select(newDate, selectedIndex, true);\n createSelection(selectRange[0], selectRange[1]);\n parentScope.$digest();\n };\n\n // Private\n\n function createSelection (start, length) {\n var end = start + length;\n if (element[0].createTextRange) {\n var selRange = element[0].createTextRange();\n selRange.collapse(true);\n selRange.moveStart('character', start);\n selRange.moveEnd('character', end);\n selRange.select();\n } else if (element[0].setSelectionRange) {\n element[0].setSelectionRange(start, end);\n } else if (angular.isUndefined(element[0].selectionStart)) {\n element[0].selectionStart = start;\n element[0].selectionEnd = end;\n }\n }\n\n function focusElement () {\n element[0].focus();\n }\n\n // Overrides\n\n var _init = $timepicker.init;\n $timepicker.init = function () {\n if (isNative && options.useNative) {\n element.prop('type', 'time');\n element.css('-webkit-appearance', 'textfield');\n return;\n } else if (isTouch) {\n element.prop('type', 'text');\n element.attr('readonly', 'true');\n element.on('click', focusElement);\n }\n _init();\n };\n\n var _destroy = $timepicker.destroy;\n $timepicker.destroy = function () {\n if (isNative && options.useNative) {\n element.off('click', focusElement);\n }\n _destroy();\n };\n\n var _show = $timepicker.show;\n $timepicker.show = function () {\n if ((!isTouch && element.attr('readonly')) || element.attr('disabled')) return;\n _show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n if ($timepicker.$element) $timepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n if (options.keyboard) {\n if (element) element.on('keydown', $timepicker.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $timepicker.hide;\n $timepicker.hide = function (blur) {\n if (!$timepicker.$isShown) return;\n if ($timepicker.$element) $timepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n if (options.keyboard) {\n if (element) element.off('keydown', $timepicker.$onKeyDown);\n }\n _hide(blur);\n };\n\n return $timepicker;\n\n }\n\n timepickerFactory.defaults = defaults;\n return timepickerFactory;\n\n };\n\n })\n\n\n .directive('bsTimepicker', function ($window, $parse, $q, $dateFormatter, $dateParser, $timepicker) {\n\n var defaults = $timepicker.defaults;\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {\n scope: scope\n };\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'autoclose', 'timeType', 'timeFormat', 'timezone', 'modelTimeFormat', 'useNative', 'hourStep', 'minuteStep', 'secondStep', 'length', 'arrowBehavior', 'iconUp', 'iconDown', 'roundDisplay', 'id', 'prefixClass', 'prefixEvent', 'defaultDate'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoclose', 'useNative', 'roundDisplay'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Initialize timepicker\n if (isNative && (options.useNative || defaults.useNative)) options.timeFormat = 'HH:mm';\n var timepicker = $timepicker(element, controller, options);\n options = timepicker.$options;\n\n var lang = options.lang;\n var formatDate = function (date, format, timezone) {\n return $dateFormatter.formatDate(date, format, lang, timezone);\n };\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!timepicker || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(timepicker),?/i);\n if (newValue === true) {\n timepicker.show();\n } else {\n timepicker.hide();\n }\n });\n }\n\n // Initialize parser\n var dateParser = $dateParser({\n format: options.timeFormat,\n lang: lang\n });\n\n // Observe attributes for changes\n angular.forEach(['minTime', 'maxTime'], function (key) {\n // console.warn('attr.$observe(%s)', key, attr[key]);\n if (angular.isDefined(attr[key])) {\n attr.$observe(key, function (newValue) {\n timepicker.$options[key] = dateParser.getTimeForAttribute(key, newValue);\n if (!isNaN(timepicker.$options[key])) timepicker.$build();\n validateAgainstMinMaxTime(controller.$dateValue);\n });\n }\n });\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue, controller.$dateValue);\n timepicker.update(controller.$dateValue);\n }, true);\n\n function validateAgainstMinMaxTime (parsedTime) {\n if (!angular.isDate(parsedTime)) return;\n var isMinValid = isNaN(options.minTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) >= options.minTime;\n var isMaxValid = isNaN(options.maxTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) <= options.maxTime;\n var isValid = isMinValid && isMaxValid;\n controller.$setValidity('date', isValid);\n controller.$setValidity('min', isMinValid);\n controller.$setValidity('max', isMaxValid);\n // Only update the model when we have a valid date\n if (!isValid) {\n return;\n }\n controller.$dateValue = parsedTime;\n }\n\n // viewValue -> $parsers -> modelValue\n controller.$parsers.unshift(function (viewValue) {\n // console.warn('$parser(\"%s\"): viewValue=%o', element.attr('ng-model'), viewValue);\n var date;\n // Null values should correctly reset the model value & validity\n if (!viewValue) {\n // BREAKING CHANGE:\n // return null (not undefined) when input value is empty, so angularjs 1.3\n // ngModelController can go ahead and run validators, like ngRequired\n controller.$setValidity('date', true);\n return null;\n }\n var parsedTime = angular.isDate(viewValue) ? viewValue : dateParser.parse(viewValue, controller.$dateValue);\n if (!parsedTime || isNaN(parsedTime.getTime())) {\n controller.$setValidity('date', false);\n // Return undefined, causes ngModelController to\n // invalidate model value\n return undefined;\n }\n validateAgainstMinMaxTime(parsedTime);\n\n if (options.timeType === 'string') {\n date = dateParser.timezoneOffsetAdjust(parsedTime, options.timezone, true);\n return formatDate(date, options.modelTimeFormat || options.timeFormat);\n }\n date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n if (options.timeType === 'number') {\n return date.getTime();\n } else if (options.timeType === 'unix') {\n return date.getTime() / 1000;\n } else if (options.timeType === 'iso') {\n return date.toISOString();\n }\n return new Date(date);\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var date;\n if (angular.isUndefined(modelValue) || modelValue === null) {\n date = NaN;\n } else if (angular.isDate(modelValue)) {\n date = modelValue;\n } else if (options.timeType === 'string') {\n date = dateParser.parse(modelValue, null, options.modelTimeFormat);\n } else if (options.timeType === 'unix') {\n date = new Date(modelValue * 1000);\n } else {\n date = new Date(modelValue);\n }\n // Setup default value?\n // if(isNaN(date.getTime())) date = new Date(new Date().setMinutes(0) + 36e5);\n controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n return getTimeFormattedString();\n });\n\n // viewValue -> element\n controller.$render = function () {\n // console.warn('$render(\"%s\"): viewValue=%o', element.attr('ng-model'), controller.$viewValue);\n element.val(getTimeFormattedString());\n };\n\n function getTimeFormattedString () {\n return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.timeFormat);\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (timepicker) timepicker.destroy();\n options = null;\n timepicker = null;\n });\n\n }\n };\n\n });\n\n// Source: tab/tab.js\nangular.module('mgcrea.ngStrap.tab', [])\n\n .provider('$tab', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n template: 'tab/tab.tpl.html',\n navClass: 'nav-tabs',\n activeClass: 'active'\n };\n\n var controller = this.controller = function ($scope, $element, $attrs) {\n var self = this;\n\n // Attributes options\n self.$options = angular.copy(defaults);\n angular.forEach(['animation', 'navClass', 'activeClass'], function (key) {\n if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n });\n\n // Publish options on scope\n $scope.$navClass = self.$options.navClass;\n $scope.$activeClass = self.$options.activeClass;\n\n self.$panes = $scope.$panes = [];\n\n // Please use $activePaneChangeListeners if you use `bsActivePane`\n // Because we removed `ngModel` as default, we rename viewChangeListeners to\n // activePaneChangeListeners to make more sense.\n self.$activePaneChangeListeners = self.$viewChangeListeners = [];\n\n self.$push = function (pane) {\n if (angular.isUndefined(self.$panes.$active)) {\n $scope.$setActive(pane.name || 0);\n }\n self.$panes.push(pane);\n };\n\n self.$remove = function (pane) {\n var index = self.$panes.indexOf(pane);\n var active = self.$panes.$active;\n var activeIndex;\n if (angular.isString(active)) {\n activeIndex = self.$panes.map(function (pane) {\n return pane.name;\n }).indexOf(active);\n } else {\n activeIndex = self.$panes.$active;\n }\n\n // remove pane from $panes array\n self.$panes.splice(index, 1);\n\n if (index < activeIndex) {\n // we removed a pane before the active pane, so we need to\n // decrement the active pane index\n activeIndex--;\n } else if (index === activeIndex && activeIndex === self.$panes.length) {\n // we remove the active pane and it was the one at the end,\n // so select the previous one\n activeIndex--;\n }\n if (activeIndex >= 0 && activeIndex < self.$panes.length) {\n self.$setActive(self.$panes[activeIndex].name || activeIndex);\n } else {\n self.$setActive();\n }\n };\n\n self.$setActive = $scope.$setActive = function (value) {\n self.$panes.$active = value;\n self.$activePaneChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n self.$isActive = $scope.$isActive = function ($pane, $index) {\n return self.$panes.$active === $pane.name || self.$panes.$active === $index;\n };\n\n };\n\n this.$get = function () {\n var $tab = {};\n $tab.defaults = defaults;\n $tab.controller = controller;\n return $tab;\n };\n\n })\n\n .directive('bsTabs', function ($window, $animate, $tab, $parse) {\n\n var defaults = $tab.defaults;\n\n return {\n require: ['?ngModel', 'bsTabs'],\n transclude: true,\n scope: true,\n controller: ['$scope', '$element', '$attrs', $tab.controller],\n templateUrl: function (element, attr) {\n return attr.template || defaults.template;\n },\n link: function postLink (scope, element, attrs, controllers) {\n\n var ngModelCtrl = controllers[0];\n var bsTabsCtrl = controllers[1];\n\n // 'ngModel' does interfere with form validation\n // and status, use `bsActivePane` instead to avoid it\n if (ngModelCtrl) {\n\n // Update the modelValue following\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n ngModelCtrl.$setViewValue(bsTabsCtrl.$panes.$active);\n });\n\n // modelValue -> $formatters -> viewValue\n ngModelCtrl.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n bsTabsCtrl.$setActive(modelValue);\n return modelValue;\n });\n\n }\n\n if (attrs.bsActivePane) {\n // adapted from angularjs ngModelController bindings\n // https://github.com/angular/angular.js/blob/v1.3.1/src%2Fng%2Fdirective%2Finput.js#L1730\n var parsedBsActivePane = $parse(attrs.bsActivePane);\n\n // Update bsActivePane value with change\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n parsedBsActivePane.assign(scope, bsTabsCtrl.$panes.$active);\n });\n\n // watch bsActivePane for value changes\n scope.$watch(attrs.bsActivePane, function (newValue, oldValue) {\n bsTabsCtrl.$setActive(newValue);\n }, true);\n }\n }\n };\n\n })\n\n .directive('bsPane', function ($window, $animate, $sce) {\n\n return {\n require: ['^?ngModel', '^bsTabs'],\n scope: true,\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsTabsCtrl = controllers[1];\n\n // Add base class\n element.addClass('tab-pane');\n\n // Observe title attribute for change\n attrs.$observe('title', function (newValue, oldValue) {\n scope.title = $sce.trustAsHtml(newValue);\n });\n\n // Save tab name into scope\n scope.name = attrs.name;\n\n // Add animation class\n if (bsTabsCtrl.$options.animation) {\n element.addClass(bsTabsCtrl.$options.animation);\n }\n\n attrs.$observe('disabled', function (newValue, oldValue) {\n scope.disabled = scope.$eval(newValue);\n });\n\n // Push pane to parent bsTabs controller\n bsTabsCtrl.$push(scope);\n\n // remove pane from tab controller when pane is destroyed\n scope.$on('$destroy', function () {\n bsTabsCtrl.$remove(scope);\n });\n\n function render () {\n var index = bsTabsCtrl.$panes.indexOf(scope);\n $animate[bsTabsCtrl.$isActive(scope, index) ? 'addClass' : 'removeClass'](element, bsTabsCtrl.$options.activeClass);\n }\n\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n render();\n });\n render();\n\n }\n };\n\n });\n\n// Source: scrollspy/scrollspy.js\nangular.module('mgcrea.ngStrap.scrollspy', ['mgcrea.ngStrap.helpers.debounce', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$scrollspy', function () {\n\n // Pool of registered spies\n var spies = this.$$spies = {};\n\n var defaults = this.defaults = {\n debounce: 150,\n throttle: 100,\n offset: 100\n };\n\n this.$get = function ($window, $document, $rootScope, dimensions, debounce, throttle) {\n\n var windowEl = angular.element($window);\n var docEl = angular.element($document.prop('documentElement'));\n var bodyEl = angular.element($window.document.body);\n\n // Helper functions\n\n function nodeName (element, name) {\n return element[0].nodeName && element[0].nodeName.toLowerCase() === name.toLowerCase();\n }\n\n function ScrollSpyFactory (config) {\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n if (!options.element) options.element = bodyEl;\n var isWindowSpy = nodeName(options.element, 'body');\n var scrollEl = isWindowSpy ? windowEl : options.element;\n var scrollId = isWindowSpy ? 'window' : options.id;\n\n // Use existing spy\n if (spies[scrollId]) {\n spies[scrollId].$$count++;\n return spies[scrollId];\n }\n\n var $scrollspy = {};\n\n // Private vars\n var unbindViewContentLoaded;\n var unbindIncludeContentLoaded;\n var trackedElements = $scrollspy.$trackedElements = [];\n var sortedElements = [];\n var activeTarget;\n var debouncedCheckPosition;\n var throttledCheckPosition;\n var debouncedCheckOffsets;\n /* eslint-disable no-unused-vars */\n var viewportHeight;\n /* eslint-enable no-unused-vars */\n var scrollTop;\n\n $scrollspy.init = function () {\n\n // Setup internal ref counter\n this.$$count = 1;\n\n // Bind events\n debouncedCheckPosition = debounce(this.checkPosition, options.debounce);\n throttledCheckPosition = throttle(this.checkPosition, options.throttle);\n scrollEl.on('click', this.checkPositionWithEventLoop);\n windowEl.on('resize', debouncedCheckPosition);\n scrollEl.on('scroll', throttledCheckPosition);\n\n debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce);\n unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', debouncedCheckOffsets);\n unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', debouncedCheckOffsets);\n debouncedCheckOffsets();\n\n // Register spy for reuse\n if (scrollId) {\n spies[scrollId] = $scrollspy;\n }\n\n };\n\n $scrollspy.destroy = function () {\n\n // Check internal ref counter\n this.$$count--;\n if (this.$$count > 0) {\n return;\n }\n\n // Unbind events\n scrollEl.off('click', this.checkPositionWithEventLoop);\n windowEl.off('resize', debouncedCheckPosition);\n scrollEl.off('scroll', throttledCheckPosition);\n unbindViewContentLoaded();\n unbindIncludeContentLoaded();\n if (scrollId) {\n delete spies[scrollId];\n }\n };\n\n $scrollspy.checkPosition = function () {\n\n // Not ready yet\n if (!sortedElements.length) return;\n\n // Calculate the scroll position\n scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop('scrollTop')) || 0;\n\n // Calculate the viewport height for use by the components\n viewportHeight = Math.max($window.innerHeight, docEl.prop('clientHeight'));\n\n // Activate first element if scroll is smaller\n if (scrollTop < sortedElements[0].offsetTop && activeTarget !== sortedElements[0].target) {\n return $scrollspy.$activateElement(sortedElements[0]);\n }\n\n // Activate proper element\n for (var i = sortedElements.length; i--;) {\n if (angular.isUndefined(sortedElements[i].offsetTop) || sortedElements[i].offsetTop === null) continue;\n if (activeTarget === sortedElements[i].target) continue;\n if (scrollTop < sortedElements[i].offsetTop) continue;\n if (sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) continue;\n return $scrollspy.$activateElement(sortedElements[i]);\n }\n\n };\n\n $scrollspy.checkPositionWithEventLoop = function () {\n // IE 9 throws an error if we use 'this' instead of '$scrollspy'\n // in this setTimeout call\n setTimeout($scrollspy.checkPosition, 1);\n };\n\n // Protected methods\n\n $scrollspy.$activateElement = function (element) {\n if (activeTarget) {\n var activeElement = $scrollspy.$getTrackedElement(activeTarget);\n if (activeElement) {\n activeElement.source.removeClass('active');\n if (nodeName(activeElement.source, 'li') && nodeName(activeElement.source.parent().parent(), 'li')) {\n activeElement.source.parent().parent().removeClass('active');\n }\n }\n }\n activeTarget = element.target;\n element.source.addClass('active');\n if (nodeName(element.source, 'li') && nodeName(element.source.parent().parent(), 'li')) {\n element.source.parent().parent().addClass('active');\n }\n };\n\n $scrollspy.$getTrackedElement = function (target) {\n return trackedElements.filter(function (obj) {\n return obj.target === target;\n })[0];\n };\n\n // Track offsets behavior\n\n $scrollspy.checkOffsets = function () {\n\n angular.forEach(trackedElements, function (trackedElement) {\n var targetElement = document.querySelector(trackedElement.target);\n trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null;\n if (options.offset && trackedElement.offsetTop !== null) trackedElement.offsetTop -= options.offset * 1;\n });\n\n sortedElements = trackedElements\n .filter(function (el) {\n return el.offsetTop !== null;\n })\n .sort(function (a, b) {\n return a.offsetTop - b.offsetTop;\n });\n\n debouncedCheckPosition();\n\n };\n\n $scrollspy.trackElement = function (target, source) {\n trackedElements.push({target: target, source: source});\n };\n\n $scrollspy.untrackElement = function (target, source) {\n var toDelete;\n for (var i = trackedElements.length; i--;) {\n if (trackedElements[i].target === target && trackedElements[i].source === source) {\n toDelete = i;\n break;\n }\n }\n trackedElements.splice(toDelete, 1);\n };\n\n $scrollspy.activate = function (i) {\n trackedElements[i].addClass('active');\n };\n\n // Initialize plugin\n\n $scrollspy.init();\n return $scrollspy;\n\n }\n\n return ScrollSpyFactory;\n\n };\n\n })\n\n .directive('bsScrollspy', function ($rootScope, debounce, dimensions, $scrollspy) {\n\n return {\n restrict: 'EAC',\n link: function postLink (scope, element, attr) {\n\n var options = {scope: scope};\n angular.forEach(['offset', 'target'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n var scrollspy = $scrollspy(options);\n scrollspy.trackElement(options.target, element);\n\n scope.$on('$destroy', function () {\n if (scrollspy) {\n scrollspy.untrackElement(options.target, element);\n scrollspy.destroy();\n }\n options = null;\n scrollspy = null;\n });\n\n }\n };\n\n })\n\n\n .directive('bsScrollspyList', function ($rootScope, debounce, dimensions, $scrollspy) {\n\n return {\n restrict: 'A',\n compile: function postLink (element, attr) {\n var children = element[0].querySelectorAll('li > a[href]');\n angular.forEach(children, function (child) {\n var childEl = angular.element(child);\n childEl.parent().attr('bs-scrollspy', '').attr('data-target', childEl.attr('href'));\n });\n }\n\n };\n\n });\n\n// Source: select/select.js\nangular.module('mgcrea.ngStrap.select', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions'])\n\n .provider('$select', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'select',\n prefixEvent: '$select',\n placement: 'bottom-left',\n templateUrl: 'select/select.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n multiple: false,\n allNoneButtons: false,\n sort: true,\n caretHtml: ' ',\n placeholder: 'Choose among the following...',\n allText: 'All',\n noneText: 'None',\n maxLength: 3,\n maxLengthHtml: 'selected',\n iconCheckmark: 'glyphicon glyphicon-ok',\n toggle: false\n };\n\n this.$get = function ($window, $document, $rootScope, $tooltip, $timeout) {\n\n // var bodyEl = angular.element($window.document.body);\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n\n function SelectFactory (element, controller, config) {\n\n var $select = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $select = $tooltip(element, options);\n var scope = $select.$scope;\n\n scope.$matches = [];\n if (options.multiple) {\n scope.$activeIndex = [];\n } else {\n scope.$activeIndex = -1;\n }\n scope.$isMultiple = options.multiple;\n scope.$showAllNoneButtons = options.allNoneButtons && options.multiple;\n scope.$iconCheckmark = options.iconCheckmark;\n scope.$allText = options.allText;\n scope.$noneText = options.noneText;\n\n scope.$activate = function (index) {\n scope.$$postDigest(function () {\n $select.activate(index);\n });\n };\n\n scope.$select = function (index, evt) {\n scope.$$postDigest(function () {\n $select.select(index);\n });\n };\n\n scope.$isVisible = function () {\n return $select.$isVisible();\n };\n\n scope.$isActive = function (index) {\n return $select.$isActive(index);\n };\n\n scope.$selectAll = function () {\n for (var i = 0; i < scope.$matches.length; i++) {\n if (!scope.$isActive(i)) {\n scope.$select(i);\n }\n }\n };\n\n scope.$selectNone = function () {\n for (var i = 0; i < scope.$matches.length; i++) {\n if (scope.$isActive(i)) {\n scope.$select(i);\n }\n }\n };\n\n // Public methods\n\n $select.update = function (matches) {\n scope.$matches = matches;\n $select.$updateActiveIndex();\n };\n\n $select.activate = function (index) {\n if (options.multiple) {\n if ($select.$isActive(index)) {\n scope.$activeIndex.splice(scope.$activeIndex.indexOf(index), 1);\n } else {\n scope.$activeIndex.push(index);\n }\n if (options.sort) scope.$activeIndex.sort(function (a, b) { return a - b; }); // use numeric sort instead of default sort\n } else {\n scope.$activeIndex = index;\n }\n return scope.$activeIndex;\n };\n\n $select.select = function (index) {\n if (angular.isUndefined(index) || index < 0 || index >= scope.$matches.length) { return; }\n var value = scope.$matches[index].value;\n scope.$apply(function () {\n $select.activate(index);\n if (options.multiple) {\n controller.$setViewValue(scope.$activeIndex.map(function (index) {\n if (angular.isUndefined(scope.$matches[index])) {\n return null;\n }\n return scope.$matches[index].value;\n }));\n } else {\n if (options.toggle) {\n controller.$setViewValue((value === controller.$modelValue) ? undefined : value);\n } else {\n controller.$setViewValue(value);\n }\n // Hide if single select\n $select.hide();\n }\n });\n // Emit event\n scope.$emit(options.prefixEvent + '.select', value, index, $select);\n if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n options.onSelect(value, index, $select);\n }\n };\n\n // Protected methods\n\n $select.$updateActiveIndex = function () {\n if (options.multiple) {\n if (angular.isArray(controller.$modelValue)) {\n scope.$activeIndex = controller.$modelValue.map(function (value) {\n return $select.$getIndex(value);\n });\n } else {\n scope.$activeIndex = [];\n }\n } else {\n if (angular.isDefined(controller.$modelValue) && scope.$matches.length) {\n scope.$activeIndex = $select.$getIndex(controller.$modelValue);\n } else {\n scope.$activeIndex = -1;\n }\n }\n };\n\n $select.$isVisible = function () {\n if (!options.minLength || !controller) {\n return scope.$matches.length;\n }\n // minLength support\n return scope.$matches.length && controller.$viewValue.length >= options.minLength;\n };\n\n $select.$isActive = function (index) {\n if (options.multiple) {\n return scope.$activeIndex.indexOf(index) !== -1;\n }\n return scope.$activeIndex === index;\n };\n\n $select.$getIndex = function (value) {\n var index;\n for (index = scope.$matches.length; index--;) {\n if (angular.equals(scope.$matches[index].value, value)) break;\n }\n return index;\n };\n\n $select.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n var anchor;\n\n if (evt.target.nodeName !== 'A') {\n var anchorCandidate = targetEl.parent();\n while (!anchor && anchorCandidate.length > 0) {\n if (anchorCandidate[0].nodeName === 'A') {\n anchor = anchorCandidate;\n }\n anchorCandidate = anchorCandidate.parent();\n }\n }\n\n if (anchor) {\n angular.element(anchor).triggerHandler('click');\n } else {\n targetEl.triggerHandler('click');\n }\n }\n };\n\n $select.$onKeyDown = function (evt) {\n if (!/(9|13|38|40)/.test(evt.keyCode)) return;\n // Let tab propagate\n if (evt.keyCode !== 9) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // release focus on tab\n if (options.multiple && evt.keyCode === 9) {\n return $select.hide();\n }\n\n // Select with enter\n if (!options.multiple && (evt.keyCode === 13 || evt.keyCode === 9)) {\n return $select.select(scope.$activeIndex);\n }\n\n if (!options.multiple) {\n // Navigate with keyboard\n if (evt.keyCode === 38 && scope.$activeIndex > 0) scope.$activeIndex--;\n else if (evt.keyCode === 38 && scope.$activeIndex < 0) scope.$activeIndex = scope.$matches.length - 1;\n else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) scope.$activeIndex++;\n else if (angular.isUndefined(scope.$activeIndex)) scope.$activeIndex = 0;\n scope.$digest();\n }\n };\n\n $select.$isIE = function () {\n var ua = $window.navigator.userAgent;\n return ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0;\n };\n\n $select.$selectScrollFix = function (e) {\n if ($document[0].activeElement.tagName === 'UL') {\n e.preventDefault();\n e.stopImmediatePropagation();\n e.target.focus();\n }\n };\n\n // Overrides\n\n var _show = $select.show;\n $select.show = function () {\n _show();\n if (options.multiple) {\n $select.$element.addClass('select-multiple');\n }\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n $select.$element.on(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n if (options.keyboard) {\n element.on('keydown', $select.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $select.hide;\n $select.hide = function () {\n if (!options.multiple && angular.isUndefined(controller.$modelValue)) {\n scope.$activeIndex = -1;\n }\n $select.$element.off(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n if (options.keyboard) {\n element.off('keydown', $select.$onKeyDown);\n }\n _hide(true);\n };\n\n return $select;\n\n }\n\n SelectFactory.defaults = defaults;\n return SelectFactory;\n\n };\n\n })\n\n .directive('bsSelect', function ($window, $parse, $q, $select, $parseOptions) {\n\n var defaults = $select.defaults;\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {scope: scope, placeholder: defaults.placeholder};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'placeholder', 'allNoneButtons', 'maxLength', 'maxLengthHtml', 'allText', 'noneText', 'iconCheckmark', 'autoClose', 'id', 'sort', 'caretHtml', 'prefixClass', 'prefixEvent', 'toggle'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'allNoneButtons', 'sort'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show, hide and select events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Only parse data-multiple. Angular sets existence attributes to true (multiple/required/etc), they apply this\n // to data-multiple as well for some reason, so we'll parse this ourselves and disregard multiple\n var dataMultiple = element.attr('data-multiple');\n if (angular.isDefined(dataMultiple)) {\n if (falseValueRegExp.test(dataMultiple)) {\n options.multiple = false;\n } else {\n options.multiple = dataMultiple;\n }\n }\n\n // Add support for select markup\n if (element[0].nodeName.toLowerCase() === 'select') {\n var inputEl = element;\n inputEl.css('display', 'none');\n element = angular.element('');\n inputEl.after(element);\n }\n\n // Build proper bsOptions\n var parsedOptions = $parseOptions(attr.bsOptions);\n\n // Initialize select\n var select = $select(element, controller, options);\n\n if (select.$isIE()) {\n element[0].addEventListener('blur', select.$selectScrollFix);\n }\n\n // Watch bsOptions values before filtering for changes\n var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').trim();\n scope.$watch(watchedOptions, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue);\n parsedOptions.valuesFn(scope, controller)\n .then(function (values) {\n select.update(values);\n controller.$render();\n });\n }, true);\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue);\n select.$updateActiveIndex();\n controller.$render();\n }, true);\n\n // Model rendering in view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var selected;\n var index;\n if (options.multiple && angular.isArray(controller.$modelValue)) {\n selected = controller.$modelValue.map(function (value) {\n index = select.$getIndex(value);\n return index !== -1 ? select.$scope.$matches[index].label : false;\n }).filter(angular.isDefined);\n if (selected.length > (options.maxLength || defaults.maxLength)) {\n selected = selected.length + ' ' + (options.maxLengthHtml || defaults.maxLengthHtml);\n } else {\n selected = selected.join(', ');\n }\n } else {\n index = select.$getIndex(controller.$modelValue);\n selected = index !== -1 ? select.$scope.$matches[index].label : false;\n }\n element.html((selected || options.placeholder) + (options.caretHtml || defaults.caretHtml));\n };\n\n if (options.multiple) {\n controller.$isEmpty = function (value) {\n return !value || value.length === 0;\n };\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (select) select.destroy();\n options = null;\n select = null;\n });\n\n }\n };\n\n });\n\n// Source: popover/popover.js\nangular.module('mgcrea.ngStrap.popover', ['mgcrea.ngStrap.tooltip'])\n\n .provider('$popover', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n customClass: '',\n // uncommenting the next two lines will break backwards compatability\n // prefixClass: 'popover',\n // prefixEvent: 'popover',\n container: false,\n target: false,\n placement: 'right',\n templateUrl: 'popover/popover.tpl.html',\n contentTemplate: false,\n trigger: 'click',\n keyboard: true,\n html: false,\n title: '',\n content: '',\n delay: 0,\n autoClose: false\n };\n\n this.$get = function ($tooltip) {\n\n function PopoverFactory (element, config) {\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n var $popover = $tooltip(element, options);\n\n // Support scope as string options [/*title, */content]\n if (options.content) {\n $popover.$scope.content = options.content;\n }\n\n return $popover;\n\n }\n\n return PopoverFactory;\n\n };\n\n })\n\n .directive('bsPopover', function ($window, $sce, $popover) {\n\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr) {\n\n var popover;\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'customClass', 'autoClose', 'id', 'prefixClass', 'prefixEvent', 'bsEnabled'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoClose'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // should not parse target attribute (anchor tag), only data-target #1454\n var dataTarget = element.attr('data-target');\n if (angular.isDefined(dataTarget)) {\n if (falseValueRegExp.test(dataTarget)) {\n options.target = false;\n } else {\n options.target = dataTarget;\n }\n }\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n if (angular.isDefined(oldValue)) {\n requestAnimationFrame(function () {\n if (popover) popover.$applyPlacement();\n });\n }\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsPopover) {\n scope.$watch(attr.bsPopover, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n if (angular.isDefined(oldValue)) {\n requestAnimationFrame(function () {\n if (popover) popover.$applyPlacement();\n });\n }\n }, true);\n }\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(popover),?/i);\n if (newValue === true) {\n popover.show();\n } else {\n popover.hide();\n }\n });\n }\n\n // Enabled binding support\n if (attr.bsEnabled) {\n scope.$watch(attr.bsEnabled, function (newValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(popover),?/i);\n if (newValue === false) {\n popover.setEnabled(false);\n } else {\n popover.setEnabled(true);\n }\n });\n }\n\n // Viewport support\n if (attr.viewport) {\n scope.$watch(attr.viewport, function (newValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n popover.setViewport(newValue);\n });\n }\n\n // Initialize popover\n popover = $popover(element, options);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (popover) popover.destroy();\n options = null;\n popover = null;\n });\n\n }\n };\n\n });\n\n// Source: navbar/navbar.js\nangular.module('mgcrea.ngStrap.navbar', [])\n\n .provider('$navbar', function () {\n\n var defaults = this.defaults = {\n activeClass: 'active',\n routeAttr: 'data-match-route',\n strict: false\n };\n\n this.$get = function () {\n return {defaults: defaults};\n };\n\n })\n\n .directive('bsNavbar', function ($window, $location, $navbar) {\n\n var defaults = $navbar.defaults;\n\n return {\n restrict: 'A',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = angular.copy(defaults);\n angular.forEach(Object.keys(defaults), function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Watch for the $location\n scope.$watch(function () {\n\n return $location.path();\n\n }, function (newValue, oldValue) {\n\n var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']');\n\n angular.forEach(liElements, function (li) {\n\n var liElement = angular.element(li);\n var pattern = liElement.attr(options.routeAttr).replace('/', '\\\\/');\n if (options.strict) {\n pattern = '^' + pattern + '$';\n }\n var regexp = new RegExp(pattern, 'i');\n\n if (regexp.test(newValue)) {\n liElement.addClass(options.activeClass);\n } else {\n liElement.removeClass(options.activeClass);\n }\n\n });\n\n });\n\n }\n\n };\n\n });\n\n// Source: dropdown/dropdown.js\nangular.module('mgcrea.ngStrap.dropdown', ['mgcrea.ngStrap.tooltip'])\n\n .provider('$dropdown', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'dropdown',\n prefixEvent: 'dropdown',\n placement: 'bottom-left',\n templateUrl: 'dropdown/dropdown.tpl.html',\n trigger: 'click',\n container: false,\n keyboard: true,\n html: false,\n delay: 0\n };\n\n this.$get = function ($window, $rootScope, $tooltip, $timeout) {\n\n var bodyEl = angular.element($window.document.body);\n var matchesSelector = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector;\n\n function DropdownFactory (element, config) {\n\n var $dropdown = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n /* var scope = */$dropdown.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n $dropdown = $tooltip(element, options);\n var parentEl = element.parent();\n\n // Protected methods\n\n $dropdown.$onKeyDown = function (evt) {\n if (!/(38|40)/.test(evt.keyCode)) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n // Retrieve focused index\n var items = angular.element($dropdown.$element[0].querySelectorAll('li:not(.divider) a'));\n if (!items.length) return;\n var index;\n angular.forEach(items, function (el, i) {\n if (matchesSelector && matchesSelector.call(el, ':focus')) index = i;\n });\n\n // Navigate with keyboard\n if (evt.keyCode === 38 && index > 0) index--;\n else if (evt.keyCode === 40 && index < items.length - 1) index++;\n else if (angular.isUndefined(index)) index = 0;\n items.eq(index)[0].focus();\n\n };\n\n // Overrides\n\n var show = $dropdown.show;\n $dropdown.show = function () {\n show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n if (options.keyboard && $dropdown.$element) $dropdown.$element.on('keydown', $dropdown.$onKeyDown);\n bodyEl.on('click', onBodyClick);\n }, 0, false);\n if (parentEl.hasClass('dropdown')) parentEl.addClass('open');\n };\n\n var hide = $dropdown.hide;\n $dropdown.hide = function () {\n if (!$dropdown.$isShown) return;\n if (options.keyboard && $dropdown.$element) $dropdown.$element.off('keydown', $dropdown.$onKeyDown);\n bodyEl.off('click', onBodyClick);\n if (parentEl.hasClass('dropdown')) parentEl.removeClass('open');\n hide();\n };\n\n var destroy = $dropdown.destroy;\n $dropdown.destroy = function () {\n bodyEl.off('click', onBodyClick);\n destroy();\n };\n\n // Private functions\n\n function onBodyClick (evt) {\n if (evt.target === element[0]) return;\n return evt.target !== element[0] && $dropdown.hide();\n }\n\n return $dropdown;\n\n }\n\n return DropdownFactory;\n\n };\n\n })\n\n .directive('bsDropdown', function ($window, $sce, $dropdown) {\n\n return {\n restrict: 'EAC',\n scope: true,\n compile: function (tElement, tAttrs) {\n\n // Support for inlined template (next sibling)\n // It must be fetched before compilation\n if (!tAttrs.bsDropdown) {\n var nextSibling = tElement[0].nextSibling;\n while (nextSibling && nextSibling.nodeType !== 1) {\n nextSibling = nextSibling.nextSibling;\n }\n if (nextSibling && nextSibling.className.split(' ').indexOf('dropdown-menu') >= 0) {\n tAttrs.template = nextSibling.outerHTML;\n tAttrs.templateUrl = undefined;\n nextSibling.parentNode.removeChild(nextSibling);\n }\n }\n\n return function postLink (scope, element, attr) {\n\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'id', 'autoClose'], function (key) {\n if (angular.isDefined(tAttrs[key])) options[key] = tAttrs[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as an object\n if (attr.bsDropdown) {\n scope.$watch(attr.bsDropdown, function (newValue, oldValue) {\n scope.content = newValue;\n }, true);\n }\n\n // Initialize dropdown\n var dropdown = $dropdown(element, options);\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!dropdown || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(dropdown),?/i);\n if (newValue === true) {\n dropdown.show();\n } else {\n dropdown.hide();\n }\n });\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (dropdown) dropdown.destroy();\n options = null;\n dropdown = null;\n });\n\n };\n }\n };\n\n });\n\n// Source: modal/modal.js\nangular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$modal', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n backdropAnimation: 'am-fade',\n customClass: '',\n prefixClass: 'modal',\n prefixEvent: 'modal',\n placement: 'top',\n templateUrl: 'modal/modal.tpl.html',\n template: '',\n contentTemplate: false,\n container: false,\n element: null,\n backdrop: true,\n keyboard: true,\n html: false,\n show: true,\n size: null,\n zIndex: null\n };\n\n this.$get = function ($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {\n\n var forEach = angular.forEach;\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n var bodyElement = angular.element($window.document.body);\n\n var backdropCount = 0;\n var dialogBaseZindex = 1050;\n var backdropBaseZindex = 1040;\n\n var validSizes = {\n lg: 'modal-lg',\n sm: 'modal-sm'\n };\n\n function ModalFactory (config) {\n\n var $modal = {};\n\n // Common vars\n var options = $modal.$options = angular.extend({}, defaults, config);\n var promise = $modal.$promise = $bsCompiler.compile(options);\n var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n if (!options.element && !options.container) {\n options.container = 'body';\n }\n\n if (options.zIndex) {\n dialogBaseZindex = parseInt(options.zIndex, 10);\n backdropBaseZindex = dialogBaseZindex - 10;\n }\n\n // Store $id to identify the triggering element in events\n // give priority to options.id, otherwise, try to use\n // element id if defined\n $modal.$id = options.id || options.element && options.element.attr('id') || '';\n\n // Support scope as string options\n forEach(['title', 'content'], function (key) {\n if (options[key]) scope[key] = $sce.trustAsHtml(options[key]);\n });\n\n // Provide scope helpers\n scope.$hide = function () {\n scope.$$postDigest(function () {\n $modal.hide();\n });\n };\n scope.$show = function () {\n scope.$$postDigest(function () {\n $modal.show();\n });\n };\n scope.$toggle = function () {\n scope.$$postDigest(function () {\n $modal.toggle();\n });\n };\n // Publish isShown as a protected var on scope\n $modal.$isShown = scope.$isShown = false;\n\n // Fetch, compile then initialize modal\n var compileData;\n var modalElement;\n var modalScope;\n var backdropElement = angular.element('
');\n backdropElement.css({position: 'fixed', top: '0px', left: '0px', bottom: '0px', right: '0px'});\n promise.then(function (data) {\n compileData = data;\n $modal.init();\n });\n\n $modal.init = function () {\n\n // Options: show\n if (options.show) {\n scope.$$postDigest(function () {\n $modal.show();\n });\n }\n\n };\n\n $modal.destroy = function () {\n\n // Remove element\n destroyModalElement();\n\n // remove backdrop element\n if (backdropElement) {\n backdropElement.remove();\n backdropElement = null;\n }\n\n // Destroy scope\n scope.$destroy();\n };\n\n $modal.show = function () {\n if ($modal.$isShown) return;\n\n var parent;\n var after;\n if (angular.isElement(options.container)) {\n parent = options.container;\n after = options.container[0].lastChild ? angular.element(options.container[0].lastChild) : null;\n } else {\n if (options.container) {\n parent = findElement(options.container);\n after = parent[0] && parent[0].lastChild ? angular.element(parent[0].lastChild) : null;\n } else {\n parent = null;\n after = options.element;\n }\n }\n\n // destroy any existing modal elements\n if (modalElement) destroyModalElement();\n\n // create a new scope, so we can destroy it and all child scopes\n // when destroying the modal element\n modalScope = $modal.$scope.$new();\n // Fetch a cloned element linked from template (noop callback is required)\n modalElement = $modal.$element = compileData.link(modalScope, function (clonedElement, scope) {});\n\n if (options.backdrop) {\n // set z-index\n modalElement.css({'z-index': dialogBaseZindex + (backdropCount * 20)});\n backdropElement.css({'z-index': backdropBaseZindex + (backdropCount * 20)});\n\n // increment number of backdrops\n backdropCount++;\n }\n\n if (scope.$emit(options.prefixEvent + '.show.before', $modal).defaultPrevented) {\n return;\n }\n if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n options.onBeforeShow($modal);\n }\n\n // Set the initial positioning.\n modalElement.css({display: 'block'}).addClass(options.placement);\n\n // Options: customClass\n if (options.customClass) {\n modalElement.addClass(options.customClass);\n }\n\n // Options: size\n if (options.size && validSizes[options.size]) {\n angular.element(findElement('.modal-dialog', modalElement[0])).addClass(validSizes[options.size]);\n }\n\n // Options: animation\n if (options.animation) {\n if (options.backdrop) {\n backdropElement.addClass(options.backdropAnimation);\n }\n modalElement.addClass(options.animation);\n }\n\n if (options.backdrop) {\n $animate.enter(backdropElement, bodyElement, null);\n }\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.enter(modalElement, parent, after, enterAnimateCallback);\n } else {\n $animate.enter(modalElement, parent, after).then(enterAnimateCallback);\n }\n\n $modal.$isShown = scope.$isShown = true;\n safeDigest(scope);\n // Focus once the enter-animation has started\n // Weird PhantomJS bug hack\n var el = modalElement[0];\n requestAnimationFrame(function () {\n el.focus();\n });\n\n bodyElement.addClass(options.prefixClass + '-open');\n if (options.animation) {\n bodyElement.addClass(options.prefixClass + '-with-' + options.animation);\n }\n\n // Bind events\n bindBackdropEvents();\n bindKeyboardEvents();\n };\n\n function enterAnimateCallback () {\n scope.$emit(options.prefixEvent + '.show', $modal);\n if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n options.onShow($modal);\n }\n }\n\n $modal.hide = function () {\n if (!$modal.$isShown) return;\n\n if (scope.$emit(options.prefixEvent + '.hide.before', $modal).defaultPrevented) {\n return;\n }\n if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n options.onBeforeHide($modal);\n }\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.leave(modalElement, leaveAnimateCallback);\n } else {\n $animate.leave(modalElement).then(leaveAnimateCallback);\n }\n\n if (options.backdrop) {\n // decrement number of backdrops\n backdropCount--;\n $animate.leave(backdropElement);\n }\n $modal.$isShown = scope.$isShown = false;\n safeDigest(scope);\n\n // Unbind events\n unbindBackdropEvents();\n unbindKeyboardEvents();\n };\n\n function leaveAnimateCallback () {\n scope.$emit(options.prefixEvent + '.hide', $modal);\n if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n options.onHide($modal);\n }\n if (findElement('.modal').length <= 0) {\n bodyElement.removeClass(options.prefixClass + '-open');\n }\n if (options.animation) {\n bodyElement.removeClass(options.prefixClass + '-with-' + options.animation);\n }\n }\n\n $modal.toggle = function () {\n if ($modal.$isShown) {\n $modal.hide();\n } else {\n $modal.show();\n }\n };\n\n $modal.focus = function () {\n modalElement[0].focus();\n };\n\n // Protected methods\n\n $modal.$onKeyUp = function (evt) {\n\n if (evt.which === 27 && $modal.$isShown) {\n $modal.hide();\n evt.stopPropagation();\n }\n\n };\n\n function bindBackdropEvents () {\n if (options.backdrop) {\n modalElement.on('click', hideOnBackdropClick);\n backdropElement.on('click', hideOnBackdropClick);\n backdropElement.on('wheel', preventEventDefault);\n }\n }\n\n function unbindBackdropEvents () {\n if (options.backdrop) {\n modalElement.off('click', hideOnBackdropClick);\n backdropElement.off('click', hideOnBackdropClick);\n backdropElement.off('wheel', preventEventDefault);\n }\n }\n\n function bindKeyboardEvents () {\n if (options.keyboard) {\n modalElement.on('keyup', $modal.$onKeyUp);\n }\n }\n\n function unbindKeyboardEvents () {\n if (options.keyboard) {\n modalElement.off('keyup', $modal.$onKeyUp);\n }\n }\n\n // Private helpers\n\n function hideOnBackdropClick (evt) {\n if (evt.target !== evt.currentTarget) return;\n if (options.backdrop === 'static') {\n $modal.focus();\n } else {\n $modal.hide();\n }\n }\n\n function preventEventDefault (evt) {\n evt.preventDefault();\n }\n\n function destroyModalElement () {\n if ($modal.$isShown && modalElement !== null) {\n // un-bind events\n unbindBackdropEvents();\n unbindKeyboardEvents();\n }\n\n if (modalScope) {\n modalScope.$destroy();\n modalScope = null;\n }\n\n if (modalElement) {\n modalElement.remove();\n modalElement = $modal.$element = null;\n }\n }\n\n return $modal;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n return ModalFactory;\n\n };\n\n })\n\n .directive('bsModal', function ($window, $sce, $parse, $modal) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation', 'backdropAnimation', 'id', 'prefixEvent', 'prefixClass', 'customClass', 'modalClass', 'size', 'zIndex'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Options: alias modalClass to customClass\n if (options.modalClass) {\n options.customClass = options.modalClass;\n }\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsModal) {\n scope.$watch(attr.bsModal, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize modal\n var modal = $modal(options);\n\n // Trigger\n element.on(attr.trigger || 'click', modal.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (modal) modal.destroy();\n options = null;\n modal = null;\n });\n\n }\n };\n\n });\n\n// Source: helpers/raf.js\nif (angular.version.minor < 3 && angular.version.dot < 14) {\n angular.module('ng')\n\n .factory('$$rAF', function ($window, $timeout) {\n\n var requestAnimationFrame = $window.requestAnimationFrame ||\n $window.webkitRequestAnimationFrame ||\n $window.mozRequestAnimationFrame;\n\n var cancelAnimationFrame = $window.cancelAnimationFrame ||\n $window.webkitCancelAnimationFrame ||\n $window.mozCancelAnimationFrame ||\n $window.webkitCancelRequestAnimationFrame;\n\n var rafSupported = !!requestAnimationFrame;\n var raf = rafSupported ?\n function (fn) {\n var id = requestAnimationFrame(fn);\n return function () {\n cancelAnimationFrame(id);\n };\n } :\n function (fn) {\n var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n return function () {\n $timeout.cancel(timer);\n };\n };\n\n raf.supported = rafSupported;\n\n return raf;\n\n });\n}\n\n// Source: helpers/parse-options.js\nangular.module('mgcrea.ngStrap.helpers.parseOptions', [])\n\n .provider('$parseOptions', function () {\n\n var defaults = this.defaults = {\n regexp: /^\\s*(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+group\\s+by\\s+(.*))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(.*?)(?:\\s+track\\s+by\\s+(.*?))?$/\n };\n\n this.$get = function ($parse, $q) {\n\n function ParseOptionsFactory (attr, config) {\n\n var $parseOptions = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n $parseOptions.$values = [];\n\n // Private vars\n var match;\n var displayFn;\n var valueName;\n /* eslint-disable no-unused-vars */\n var keyName;\n var groupByFn;\n /* eslint-enable no-unused-vars */\n var valueFn;\n var valuesFn;\n\n $parseOptions.init = function () {\n $parseOptions.$match = match = attr.match(options.regexp);\n displayFn = $parse(match[2] || match[1]);\n valueName = match[4] || match[6];\n keyName = match[5];\n groupByFn = $parse(match[3] || '');\n valueFn = $parse(match[2] ? match[1] : valueName);\n valuesFn = $parse(match[7]);\n };\n\n $parseOptions.valuesFn = function (scope, controller) {\n return $q.when(valuesFn(scope, controller))\n .then(function (values) {\n if (!angular.isArray(values)) {\n values = [];\n }\n $parseOptions.$values = values.length ? parseValues(values, scope) : [];\n return $parseOptions.$values;\n });\n };\n\n $parseOptions.displayValue = function (modelValue) {\n var scope = {};\n scope[valueName] = modelValue;\n return displayFn(scope);\n };\n\n // Private functions\n\n function parseValues (values, scope) {\n return values.map(function (match, index) {\n var locals = {};\n var label;\n var value;\n locals[valueName] = match;\n label = displayFn(scope, locals);\n value = valueFn(scope, locals);\n return {label: label, value: value, index: index};\n });\n }\n\n $parseOptions.init();\n return $parseOptions;\n\n }\n\n return ParseOptionsFactory;\n\n };\n\n });\n\n// Source: helpers/dimensions.js\nangular.module('mgcrea.ngStrap.helpers.dimensions', [])\n\n .factory('dimensions', function () {\n\n var fn = {};\n\n /**\n * Test the element nodeName\n * @param element\n * @param name\n */\n var nodeName = fn.nodeName = function (element, name) {\n return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase();\n };\n\n /**\n * Returns the element computed style\n * @param element\n * @param prop\n * @param extra\n */\n fn.css = function (element, prop, extra) {\n var value;\n if (element.currentStyle) { // IE\n value = element.currentStyle[prop];\n } else if (window.getComputedStyle) {\n value = window.getComputedStyle(element)[prop];\n } else {\n value = element.style[prop];\n }\n return extra === true ? parseFloat(value) || 0 : value;\n };\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * @required-by bootstrap-tooltip, bootstrap-affix\n * @url http://api.jquery.com/offset/\n * @param element\n */\n fn.offset = function (element) {\n var boxRect = element.getBoundingClientRect();\n var docElement = element.ownerDocument;\n return {\n width: boxRect.width || element.offsetWidth,\n height: boxRect.height || element.offsetHeight,\n top: boxRect.top + (window.pageYOffset || docElement.documentElement.scrollTop) - (docElement.documentElement.clientTop || 0),\n left: boxRect.left + (window.pageXOffset || docElement.documentElement.scrollLeft) - (docElement.documentElement.clientLeft || 0)\n };\n };\n\n /**\n * Provides set equivalent of jQuery's offset function:\n * @required-by bootstrap-tooltip\n * @url http://api.jquery.com/offset/\n * @param element\n * @param options\n * @param i\n */\n fn.setOffset = function (element, options, i) {\n var curPosition;\n var curLeft;\n var curCSSTop;\n var curTop;\n var curOffset;\n var curCSSLeft;\n var calculatePosition;\n var position = fn.css(element, 'position');\n var curElem = angular.element(element);\n var props = {};\n\n // Set position first, in-case top/left are set even on static elem\n if (position === 'static') {\n element.style.position = 'relative';\n }\n\n curOffset = fn.offset(element);\n curCSSTop = fn.css(element, 'top');\n curCSSLeft = fn.css(element, 'left');\n calculatePosition = (position === 'absolute' || position === 'fixed') &&\n (curCSSTop + curCSSLeft).indexOf('auto') > -1;\n\n // Need to be able to calculate position if either\n // top or left is auto and position is either absolute or fixed\n if (calculatePosition) {\n curPosition = fn.position(element);\n curTop = curPosition.top;\n curLeft = curPosition.left;\n } else {\n curTop = parseFloat(curCSSTop) || 0;\n curLeft = parseFloat(curCSSLeft) || 0;\n }\n\n if (angular.isFunction(options)) {\n options = options.call(element, i, curOffset);\n }\n\n if (options.top !== null) {\n props.top = (options.top - curOffset.top) + curTop;\n }\n if (options.left !== null) {\n props.left = (options.left - curOffset.left) + curLeft;\n }\n\n if ('using' in options) {\n options.using.call(curElem, props);\n } else {\n curElem.css({\n top: props.top + 'px',\n left: props.left + 'px'\n });\n }\n };\n\n /**\n * Provides read-only equivalent of jQuery's position function\n * @required-by bootstrap-tooltip, bootstrap-affix\n * @url http://api.jquery.com/offset/\n * @param element\n */\n fn.position = function (element) {\n\n var offsetParentRect = {top: 0, left: 0};\n var offsetParentEl;\n var offset;\n\n // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n if (fn.css(element, 'position') === 'fixed') {\n\n // We assume that getBoundingClientRect is available when computed position is fixed\n offset = element.getBoundingClientRect();\n\n } else {\n\n // Get *real* offsetParentEl\n offsetParentEl = offsetParentElement(element);\n\n // Get correct offsets\n offset = fn.offset(element);\n if (!nodeName(offsetParentEl, 'html')) {\n offsetParentRect = fn.offset(offsetParentEl);\n }\n\n // Add offsetParent borders\n offsetParentRect.top += fn.css(offsetParentEl, 'borderTopWidth', true);\n offsetParentRect.left += fn.css(offsetParentEl, 'borderLeftWidth', true);\n }\n\n // Subtract parent offsets and element margins\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n top: offset.top - offsetParentRect.top - fn.css(element, 'marginTop', true),\n left: offset.left - offsetParentRect.left - fn.css(element, 'marginLeft', true)\n };\n\n };\n\n /**\n * Returns the closest, non-statically positioned offsetParent of a given element\n * @required-by fn.position\n * @param element\n */\n function offsetParentElement (element) {\n var docElement = element.ownerDocument;\n var offsetParent = element.offsetParent || docElement;\n if (nodeName(offsetParent, '#document')) return docElement.documentElement;\n while (offsetParent && !nodeName(offsetParent, 'html') && fn.css(offsetParent, 'position') === 'static') {\n offsetParent = offsetParent.offsetParent;\n }\n return offsetParent || docElement.documentElement;\n }\n\n /**\n * Provides equivalent of jQuery's height function\n * @required-by bootstrap-affix\n * @url http://api.jquery.com/height/\n * @param element\n * @param outer\n */\n fn.height = function (element, outer) {\n var value = element.offsetHeight;\n if (outer) {\n value += fn.css(element, 'marginTop', true) + fn.css(element, 'marginBottom', true);\n } else {\n value -= fn.css(element, 'paddingTop', true) + fn.css(element, 'paddingBottom', true) + fn.css(element, 'borderTopWidth', true) + fn.css(element, 'borderBottomWidth', true);\n }\n return value;\n };\n\n /**\n * Provides equivalent of jQuery's width function\n * @required-by bootstrap-affix\n * @url http://api.jquery.com/width/\n * @param element\n * @param outer\n */\n fn.width = function (element, outer) {\n var value = element.offsetWidth;\n if (outer) {\n value += fn.css(element, 'marginLeft', true) + fn.css(element, 'marginRight', true);\n } else {\n value -= fn.css(element, 'paddingLeft', true) + fn.css(element, 'paddingRight', true) + fn.css(element, 'borderLeftWidth', true) + fn.css(element, 'borderRightWidth', true);\n }\n return value;\n };\n\n return fn;\n\n });\n\n// Source: helpers/debounce.js\nangular.module('mgcrea.ngStrap.helpers.debounce', [])\n\n// @source jashkenas/underscore\n// @url https://github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L693\n.factory('debounce', function ($timeout) {\n return function (func, wait, immediate) {\n var timeout = null;\n return function () {\n var context = this;\n var args = arguments;\n var callNow = immediate && !timeout;\n if (timeout) {\n $timeout.cancel(timeout);\n }\n timeout = $timeout(function later () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }, wait, false);\n if (callNow) {\n func.apply(context, args);\n }\n return timeout;\n };\n };\n})\n\n\n// @source jashkenas/underscore\n// @url https://github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L661\n.factory('throttle', function ($timeout) {\n return function (func, wait, options) {\n var timeout = null;\n if (!options) options = {};\n return function () {\n var context = this;\n var args = arguments;\n if (!timeout) {\n if (options.leading !== false) {\n func.apply(context, args);\n }\n timeout = $timeout(function later () {\n timeout = null;\n if (options.trailing !== false) {\n func.apply(context, args);\n }\n }, wait, false);\n }\n };\n };\n});\n\n// Source: helpers/date-parser.js\nangular.module('mgcrea.ngStrap.helpers.dateParser', [])\n\n.provider('$dateParser', function ($localeProvider) {\n\n // define a custom ParseDate object to use instead of native Date\n // to avoid date values wrapping when setting date component values\n function ParseDate () {\n this.year = 1970;\n this.month = 0;\n this.day = 1;\n this.hours = 0;\n this.minutes = 0;\n this.seconds = 0;\n this.milliseconds = 0;\n }\n\n ParseDate.prototype.setMilliseconds = function (value) { this.milliseconds = value; };\n ParseDate.prototype.setSeconds = function (value) { this.seconds = value; };\n ParseDate.prototype.setMinutes = function (value) { this.minutes = value; };\n ParseDate.prototype.setHours = function (value) { this.hours = value; };\n ParseDate.prototype.getHours = function () { return this.hours; };\n ParseDate.prototype.setDate = function (value) { this.day = value; };\n ParseDate.prototype.setMonth = function (value) { this.month = value; };\n ParseDate.prototype.setFullYear = function (value) { this.year = value; };\n ParseDate.prototype.fromDate = function (value) {\n this.year = value.getFullYear();\n this.month = value.getMonth();\n this.day = value.getDate();\n this.hours = value.getHours();\n this.minutes = value.getMinutes();\n this.seconds = value.getSeconds();\n this.milliseconds = value.getMilliseconds();\n return this;\n };\n\n ParseDate.prototype.toDate = function () {\n return new Date(this.year, this.month, this.day, this.hours, this.minutes, this.seconds, this.milliseconds);\n };\n\n var proto = ParseDate.prototype;\n\n function noop () {\n }\n\n function isNumeric (n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function indexOfCaseInsensitive (array, value) {\n var len = array.length;\n var str = value.toString().toLowerCase();\n for (var i = 0; i < len; i++) {\n if (array[i].toLowerCase() === str) { return i; }\n }\n return -1; // Return -1 per the \"Array.indexOf()\" method.\n }\n\n var defaults = this.defaults = {\n format: 'shortDate',\n strict: false\n };\n\n this.$get = function ($locale, dateFilter) {\n\n var DateParserFactory = function (config) {\n\n var options = angular.extend({}, defaults, config);\n\n var $dateParser = {};\n\n /* eslint-disable key-spacing, quote-props */\n var regExpMap = {\n 'sss' : '[0-9]{3}',\n 'ss' : '[0-5][0-9]',\n 's' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'mm' : '[0-5][0-9]',\n 'm' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'HH' : '[01][0-9]|2[0-3]',\n 'H' : options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]',\n 'hh' : '[0][1-9]|[1][012]',\n 'h' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'a' : 'AM|PM',\n 'EEEE' : $locale.DATETIME_FORMATS.DAY.join('|'),\n 'EEE' : $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n 'dd' : '0[1-9]|[12][0-9]|3[01]',\n 'd' : options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]',\n 'MMMM' : $locale.DATETIME_FORMATS.MONTH.join('|'),\n 'MMM' : $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n 'MM' : '0[1-9]|1[012]',\n 'M' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'yyyy' : '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}',\n 'yy' : '[0-9]{2}',\n 'y' : options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}'\n };\n\n var setFnMap = {\n 'sss' : proto.setMilliseconds,\n 'ss' : proto.setSeconds,\n 's' : proto.setSeconds,\n 'mm' : proto.setMinutes,\n 'm' : proto.setMinutes,\n 'HH' : proto.setHours,\n 'H' : proto.setHours,\n 'hh' : proto.setHours,\n 'h' : proto.setHours,\n 'EEEE' : noop,\n 'EEE' : noop,\n 'dd' : proto.setDate,\n 'd' : proto.setDate,\n 'a' : function (value) { var hours = this.getHours() % 12; return this.setHours(value.match(/pm/i) ? hours + 12 : hours); },\n 'MMMM' : function (value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.MONTH, value)); },\n 'MMM' : function (value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.SHORTMONTH, value)); },\n 'MM' : function (value) { return this.setMonth(1 * value - 1); },\n 'M' : function (value) { return this.setMonth(1 * value - 1); },\n 'yyyy' : proto.setFullYear,\n 'yy' : function (value) { return this.setFullYear(2000 + 1 * value); },\n 'y' : function (value) { return (1 * value <= 50 && value.length === 2) ? this.setFullYear(2000 + 1 * value) : this.setFullYear(1 * value); }\n };\n /* eslint-enable key-spacing, quote-props */\n\n var regex;\n var setMap;\n\n $dateParser.init = function () {\n $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format;\n regex = regExpForFormat($dateParser.$format);\n setMap = setMapForFormat($dateParser.$format);\n };\n\n $dateParser.isValid = function (date) {\n if (angular.isDate(date)) return !isNaN(date.getTime());\n return regex.test(date);\n };\n\n $dateParser.parse = function (value, baseDate, format, timezone) {\n // check for date format special names\n if (format) format = $locale.DATETIME_FORMATS[format] || format;\n if (angular.isDate(value)) value = dateFilter(value, format || $dateParser.$format, timezone);\n var formatRegex = format ? regExpForFormat(format) : regex;\n var formatSetMap = format ? setMapForFormat(format) : setMap;\n var matches = formatRegex.exec(value);\n if (!matches) return false;\n // use custom ParseDate object to set parsed values\n var date = baseDate && !isNaN(baseDate.getTime()) ? new ParseDate().fromDate(baseDate) : new ParseDate().fromDate(new Date(1970, 0, 1, 0));\n for (var i = 0; i < matches.length - 1; i++) {\n if (formatSetMap[i]) formatSetMap[i].call(date, matches[i + 1]);\n }\n // convert back to native Date object\n var newDate = date.toDate();\n\n // check new native Date object for day values overflow\n if (parseInt(date.day, 10) !== newDate.getDate()) {\n return false;\n }\n\n return newDate;\n };\n\n $dateParser.getDateForAttribute = function (key, value) {\n var date;\n\n if (value === 'today') {\n var today = new Date();\n date = new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, (key === 'minDate' ? 0 : -1));\n } else if (angular.isString(value) && value.match(/^\".+\"$/)) { // Support {{ dateObj }}\n date = new Date(value.substr(1, value.length - 2));\n } else if (isNumeric(value)) {\n date = new Date(parseInt(value, 10));\n } else if (angular.isString(value) && value.length === 0) { // Reset date\n date = key === 'minDate' ? -Infinity : +Infinity;\n } else {\n date = new Date(value);\n }\n\n return date;\n };\n\n $dateParser.getTimeForAttribute = function (key, value) {\n var time;\n\n if (value === 'now') {\n time = new Date().setFullYear(1970, 0, 1);\n } else if (angular.isString(value) && value.match(/^\".+\"$/)) {\n time = new Date(value.substr(1, value.length - 2)).setFullYear(1970, 0, 1);\n } else if (isNumeric(value)) {\n time = new Date(parseInt(value, 10)).setFullYear(1970, 0, 1);\n } else if (angular.isString(value) && value.length === 0) { // Reset time\n time = key === 'minTime' ? -Infinity : +Infinity;\n } else {\n time = $dateParser.parse(value, new Date(1970, 0, 1, 0));\n }\n\n return time;\n };\n\n /* Handle switch to/from daylight saving.\n * Hours may be non-zero on daylight saving cut-over:\n * > 12 when midnight changeover, but then cannot generate\n * midnight datetime, so jump to 1AM, otherwise reset.\n * @param date (Date) the date to check\n * @return (Date) the corrected date\n *\n * __ copied from jquery ui datepicker __\n */\n $dateParser.daylightSavingAdjust = function (date) {\n if (!date) {\n return null;\n }\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n return date;\n };\n\n /* Correct the date for timezone offset.\n * @param date (Date) the date to adjust\n * @param timezone (string) the timezone to adjust for\n * @param undo (boolean) to add or subtract timezone offset\n * @return (Date) the corrected date\n */\n $dateParser.timezoneOffsetAdjust = function (date, timezone, undo) {\n if (!date) {\n return null;\n }\n // Right now, only 'UTC' is supported.\n if (timezone && timezone === 'UTC') {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + (undo ? -1 : 1) * date.getTimezoneOffset());\n }\n return date;\n };\n\n // Private functions\n\n function regExpForFormat (format) {\n // `format` string can contain literal values.\n // These need to be escaped by surrounding with\n // single quotes (e.g. `\"h 'in the morning'\"`).\n // In order to output a single quote, escape it - i.e.,\n // two single quotes in a sequence (e.g. `\"h 'o''clock'\"`).\n\n var re = buildDateAbstractRegex(format);\n return buildDateParseRegex(re);\n }\n\n function buildDateAbstractRegex (format) {\n var escapedFormat = escapeReservedSymbols(format);\n var escapedLiteralFormat = escapedFormat.replace(/''/g, '\\\\\\'');\n var literalRegex = /('(?:\\\\'|.)*?')/;\n var formatParts = escapedLiteralFormat.split(literalRegex);\n var dateElements = Object.keys(regExpMap);\n var dateRegexParts = [];\n\n angular.forEach(formatParts, function (part) {\n if (isFormatStringLiteral(part)) {\n part = trimLiteralEscapeChars(part);\n } else {\n // Abstract replaces to avoid collisions\n for (var i = 0; i < dateElements.length; i++) {\n part = part.split(dateElements[i]).join('${' + i + '}');\n }\n }\n dateRegexParts.push(part);\n });\n\n return dateRegexParts.join('');\n }\n\n function escapeReservedSymbols (text) {\n return text.replace(/\\\\/g, '[\\\\\\\\]')\n .replace(/-/g, '[-]')\n .replace(/\\./g, '[.]')\n .replace(/\\*/g, '[*]')\n .replace(/\\+/g, '[+]')\n .replace(/\\?/g, '[?]')\n .replace(/\\$/g, '[$]')\n .replace(/\\^/g, '[^]')\n .replace(/\\//g, '[/]')\n .replace(/\\\\s/g, '[\\\\s]');\n }\n\n function isFormatStringLiteral (text) {\n return /^'.*'$/.test(text);\n }\n\n function trimLiteralEscapeChars (text) {\n return text.replace(/^'(.*)'$/, '$1');\n }\n\n function buildDateParseRegex (abstractRegex) {\n var dateElements = Object.keys(regExpMap);\n var re = abstractRegex;\n\n // Replace abstracted values\n for (var i = 0; i < dateElements.length; i++) {\n re = re.split('${' + i + '}').join('(' + regExpMap[dateElements[i]] + ')');\n }\n\n return new RegExp('^' + re + '$', ['i']);\n }\n\n function setMapForFormat (format) {\n var re = buildDateAbstractRegex(format);\n return buildDateParseValuesMap(re);\n }\n\n function buildDateParseValuesMap (abstractRegex) {\n var dateElements = Object.keys(regExpMap);\n var valuesRegex = new RegExp('\\\\${(\\\\d+)}', 'g');\n var valuesMatch;\n var keyIndex;\n var valueKey;\n var valueFunction;\n var valuesFunctionMap = [];\n\n /* eslint-disable no-cond-assign */\n while ((valuesMatch = valuesRegex.exec(abstractRegex)) !== null) {\n keyIndex = valuesMatch[1];\n valueKey = dateElements[keyIndex];\n valueFunction = setFnMap[valueKey];\n\n valuesFunctionMap.push(valueFunction);\n }\n\n return valuesFunctionMap;\n }\n\n $dateParser.init();\n return $dateParser;\n\n };\n\n return DateParserFactory;\n\n };\n\n});\n\n// Source: helpers/date-formatter.js\nangular.module('mgcrea.ngStrap.helpers.dateFormatter', [])\n\n .service('$dateFormatter', function ($locale, dateFilter) {\n\n // The unused `lang` arguments are on purpose. The default implementation does not\n // use them and it always uses the locale loaded into the `$locale` service.\n // Custom implementations might use it, thus allowing different directives to\n // have different languages.\n\n this.getDefaultLocale = function () {\n return $locale.id;\n };\n\n // Format is either a data format name, e.g. \"shortTime\" or \"fullDate\", or a date format\n // Return either the corresponding date format or the given date format.\n this.getDatetimeFormat = function (format, lang) {\n return $locale.DATETIME_FORMATS[format] || format;\n };\n\n this.weekdaysShort = function (lang) {\n return $locale.DATETIME_FORMATS.SHORTDAY;\n };\n\n function splitTimeFormat (format) {\n return /(h+)([:\\.])?(m+)([:\\.])?(s*)[ ]?(a?)/i.exec(format).slice(1);\n }\n\n // h:mm a => h\n this.hoursFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[0];\n };\n\n // h:mm a => mm\n this.minutesFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[2];\n };\n\n // h:mm:ss a => ss\n this.secondsFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[4];\n };\n\n // h:mm a => :\n this.timeSeparator = function (timeFormat) {\n return splitTimeFormat(timeFormat)[1];\n };\n\n // h:mm:ss a => true, h:mm a => false\n this.showSeconds = function (timeFormat) {\n return !!splitTimeFormat(timeFormat)[4];\n };\n\n // h:mm a => true, H.mm => false\n this.showAM = function (timeFormat) {\n return !!splitTimeFormat(timeFormat)[5];\n };\n\n this.formatDate = function (date, format, lang, timezone) {\n return dateFilter(date, format, timezone);\n };\n\n });\n\n// Source: helpers/compiler.js\n// NOTICE: This file was forked from the angular-material project (github.com/angular/material)\n// MIT Licensed - Copyright (c) 2014-2015 Google, Inc. http://angularjs.org\n\nangular.module('mgcrea.ngStrap.core', [])\n .service('$bsCompiler', bsCompilerService);\n\nfunction bsCompilerService ($q, $http, $injector, $compile, $controller, $templateCache) {\n\n /*\n * @ngdoc service\n * @name $bsCompiler\n * @module material.core\n * @description\n * The $bsCompiler service is an abstraction of angular's compiler, that allows the developer\n * to easily compile an element with a templateUrl, controller, and locals.\n *\n * @usage\n * \n * $bsCompiler.compile({\n * templateUrl: 'modal.html',\n * controller: 'ModalCtrl',\n * locals: {\n * modal: myModalInstance;\n * }\n * }).then(function(compileData) {\n * compileData.element; // modal.html's template in an element\n * compileData.link(myScope); //attach controller & scope to element\n * });\n * \n */\n\n /*\n * @ngdoc method\n * @name $bsCompiler#compile\n * @description A helper to compile an HTML template/templateUrl with a given controller,\n * locals, and scope.\n * @param {object} options An options object, with the following properties:\n *\n * - `controller` - `{(string=|function()=}` Controller fn that should be associated with\n * newly created scope or the name of a registered controller if passed as a string.\n * - `controllerAs` - `{string=}` A controller alias name. If present the controller will be\n * published to scope under the `controllerAs` name.\n * - `template` - `{string=}` An html template as a string.\n * - `templateUrl` - `{string=}` A path to an html template.\n * - `transformTemplate` - `{function(template)=}` A function which transforms the template after\n * it is loaded. It will be given the template string as a parameter, and should\n * return a a new string representing the transformed template.\n * - `resolve` - `{Object.=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the compiler\n * will wait for them all to be resolved, or if one is rejected before the controller is\n * instantiated `compile()` will fail..\n * * `key` - `{string}`: a name of a dependency to be injected into the controller.\n * * `factory` - `{string|function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is injected and the return value is treated as the\n * dependency. If the result is a promise, it is resolved before its value is\n * injected into the controller.\n *\n * @returns {object=} promise A promise, which will be resolved with a `compileData` object.\n * `compileData` has the following properties:\n *\n * - `element` - `{element}`: an uncompiled element matching the provided template.\n * - `link` - `{function(scope)}`: A link function, which, when called, will compile\n * the element and instantiate the provided controller (if given).\n * - `locals` - `{object}`: The locals which will be passed into the controller once `link` is\n * called. If `bindToController` is true, they will be coppied to the ctrl instead\n * - `bindToController` - `bool`: bind the locals to the controller, instead of passing them in.\n */\n this.compile = function (options) {\n\n if (options.template && /\\.html$/.test(options.template)) {\n console.warn('Deprecated use of `template` option to pass a file. Please use the `templateUrl` option instead.');\n options.templateUrl = options.template;\n options.template = '';\n }\n\n var templateUrl = options.templateUrl;\n var template = options.template || '';\n var controller = options.controller;\n var controllerAs = options.controllerAs;\n var resolve = angular.copy(options.resolve || {});\n var locals = angular.copy(options.locals || {});\n var transformTemplate = options.transformTemplate || angular.identity;\n var bindToController = options.bindToController;\n\n // Take resolve values and invoke them.\n // Resolves can either be a string (value: 'MyRegisteredAngularConst'),\n // or an invokable 'factory' of sorts: (value: function ValueGetter($dependency) {})\n angular.forEach(resolve, function (value, key) {\n if (angular.isString(value)) {\n resolve[key] = $injector.get(value);\n } else {\n resolve[key] = $injector.invoke(value);\n }\n });\n // Add the locals, which are just straight values to inject\n // eg locals: { three: 3 }, will inject three into the controller\n angular.extend(resolve, locals);\n\n if (template) {\n resolve.$template = $q.when(template);\n } else if (templateUrl) {\n resolve.$template = fetchTemplate(templateUrl);\n } else {\n throw new Error('Missing `template` / `templateUrl` option.');\n }\n\n if (options.titleTemplate) {\n resolve.$template = $q.all([resolve.$template, fetchTemplate(options.titleTemplate)])\n .then(function (templates) {\n var templateEl = angular.element(templates[0]);\n findElement('[ng-bind=\"title\"]', templateEl[0])\n .removeAttr('ng-bind')\n .html(templates[1]);\n return templateEl[0].outerHTML;\n });\n }\n\n if (options.contentTemplate) {\n // TODO(mgcrea): deprecate?\n resolve.$template = $q.all([resolve.$template, fetchTemplate(options.contentTemplate)])\n .then(function (templates) {\n var templateEl = angular.element(templates[0]);\n var contentEl = findElement('[ng-bind=\"content\"]', templateEl[0])\n .removeAttr('ng-bind')\n .html(templates[1]);\n // Drop the default footer as you probably don't want it if you use a custom contentTemplate\n if (!options.templateUrl) contentEl.next().remove();\n return templateEl[0].outerHTML;\n });\n }\n\n // Wait for all the resolves to finish if they are promises\n return $q.all(resolve).then(function (locals) {\n\n var template = transformTemplate(locals.$template);\n if (options.html) {\n template = template.replace(/ng-bind=\"/ig, 'ng-bind-html=\"');\n }\n // var element = options.element || angular.element('
').html(template.trim()).contents();\n var element = angular.element('
').html(template.trim()).contents();\n var linkFn = $compile(element);\n\n // Return a linking function that can be used later when the element is ready\n return {\n locals: locals,\n element: element,\n link: function link (scope) {\n locals.$scope = scope;\n\n // Instantiate controller if it exists, because we have scope\n if (controller) {\n var invokeCtrl = $controller(controller, locals, true);\n if (bindToController) {\n angular.extend(invokeCtrl.instance, locals);\n }\n // Support angular@~1.2 invokeCtrl\n var ctrl = angular.isObject(invokeCtrl) ? invokeCtrl : invokeCtrl();\n // See angular-route source for this logic\n element.data('$ngControllerController', ctrl);\n element.children().data('$ngControllerController', ctrl);\n\n if (controllerAs) {\n scope[controllerAs] = ctrl;\n }\n }\n\n return linkFn.apply(null, arguments);\n }\n };\n });\n\n };\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n var fetchPromises = {};\n function fetchTemplate (template) {\n if (fetchPromises[template]) return fetchPromises[template];\n return (fetchPromises[template] = $http.get(template, {cache: $templateCache})\n .then(function (res) {\n return res.data;\n }));\n }\n\n}\n\n// Source: datepicker/datepicker.js\nangular.module('mgcrea.ngStrap.datepicker', [\n 'mgcrea.ngStrap.helpers.dateParser',\n 'mgcrea.ngStrap.helpers.dateFormatter',\n 'mgcrea.ngStrap.tooltip'])\n\n .provider('$datepicker', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n // Uncommenting the following line will break backwards compatability\n // prefixEvent: 'datepicker',\n prefixClass: 'datepicker',\n placement: 'bottom-left',\n templateUrl: 'datepicker/datepicker.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n // lang: $locale.id,\n useNative: false,\n dateType: 'date',\n dateFormat: 'shortDate',\n timezone: null,\n modelDateFormat: null,\n dayFormat: 'dd',\n monthFormat: 'MMM',\n yearFormat: 'yyyy',\n monthTitleFormat: 'MMMM yyyy',\n yearTitleFormat: 'yyyy',\n strictFormat: false,\n autoclose: false,\n minDate: -Infinity,\n maxDate: +Infinity,\n startView: 0,\n minView: 0,\n startWeek: 0,\n daysOfWeekDisabled: '',\n hasToday: false,\n hasClear: false,\n iconLeft: 'glyphicon glyphicon-chevron-left',\n iconRight: 'glyphicon glyphicon-chevron-right'\n };\n\n this.$get = function ($window, $document, $rootScope, $sce, $dateFormatter, datepickerViews, $tooltip, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n if (!defaults.lang) defaults.lang = $dateFormatter.getDefaultLocale();\n\n function DatepickerFactory (element, controller, config) {\n\n var $datepicker = $tooltip(element, angular.extend({}, defaults, config));\n var parentScope = config.scope;\n var options = $datepicker.$options;\n var scope = $datepicker.$scope;\n if (options.startView) options.startView -= options.minView;\n\n // View vars\n\n var pickerViews = datepickerViews($datepicker);\n $datepicker.$views = pickerViews.views;\n var viewDate = pickerViews.viewDate;\n scope.$mode = options.startView;\n scope.$iconLeft = options.iconLeft;\n scope.$iconRight = options.iconRight;\n scope.$hasToday = options.hasToday;\n scope.$hasClear = options.hasClear;\n var $picker = $datepicker.$views[scope.$mode];\n\n // Scope methods\n\n scope.$select = function (date) {\n $datepicker.select(date);\n };\n scope.$selectPane = function (value) {\n $datepicker.$selectPane(value);\n };\n scope.$toggleMode = function () {\n $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length);\n };\n scope.$setToday = function () {\n if (options.autoclose) {\n $datepicker.setMode(0);\n $datepicker.select(new Date());\n } else {\n $datepicker.select(new Date(), true);\n }\n };\n scope.$clear = function () {\n if (options.autoclose) {\n $datepicker.setMode(0);\n $datepicker.select(null);\n } else {\n $datepicker.select(null, true);\n }\n };\n\n // Public methods\n\n $datepicker.update = function (date) {\n // console.warn('$datepicker.update() newValue=%o', date);\n if (angular.isDate(date) && !isNaN(date.getTime())) {\n $datepicker.$date = date;\n $picker.update.call($picker, date);\n }\n // Build only if pristine\n $datepicker.$build(true);\n };\n\n $datepicker.updateDisabledDates = function (dateRanges) {\n options.disabledDateRanges = dateRanges;\n for (var i = 0, l = scope.rows.length; i < l; i++) {\n angular.forEach(scope.rows[i], $datepicker.$setDisabledEl);\n }\n };\n\n $datepicker.select = function (date, keep) {\n // console.warn('$datepicker.select', date, scope.$mode);\n if (angular.isDate(date)) {\n if (!angular.isDate(controller.$dateValue) || isNaN(controller.$dateValue.getTime())) {\n controller.$dateValue = new Date(date);\n }\n } else {\n controller.$dateValue = null;\n }\n if (!scope.$mode || keep) {\n controller.$setViewValue(angular.copy(date));\n controller.$render();\n if (options.autoclose && !keep) {\n $timeout(function () { $datepicker.hide(true); });\n }\n } else {\n angular.extend(viewDate, {year: date.getFullYear(), month: date.getMonth(), date: date.getDate()});\n $datepicker.setMode(scope.$mode - 1);\n $datepicker.$build();\n }\n };\n\n $datepicker.setMode = function (mode) {\n // console.warn('$datepicker.setMode', mode);\n scope.$mode = mode;\n $picker = $datepicker.$views[scope.$mode];\n $datepicker.$build();\n };\n\n // Protected methods\n\n $datepicker.$build = function (pristine) {\n // console.warn('$datepicker.$build() viewDate=%o', viewDate);\n if (pristine === true && $picker.built) return;\n if (pristine === false && !$picker.built) return;\n $picker.build.call($picker);\n };\n\n $datepicker.$updateSelected = function () {\n for (var i = 0, l = scope.rows.length; i < l; i++) {\n angular.forEach(scope.rows[i], updateSelected);\n }\n };\n\n $datepicker.$isSelected = function (date) {\n return $picker.isSelected(date);\n };\n\n $datepicker.$setDisabledEl = function (el) {\n el.disabled = $picker.isDisabled(el.date);\n };\n\n $datepicker.$selectPane = function (value) {\n var steps = $picker.steps;\n // set targetDate to first day of month to avoid problems with\n // date values rollover. This assumes the viewDate does not\n // depend on the day of the month\n var targetDate = new Date(Date.UTC(viewDate.year + ((steps.year || 0) * value), viewDate.month + ((steps.month || 0) * value), 1));\n angular.extend(viewDate, {year: targetDate.getUTCFullYear(), month: targetDate.getUTCMonth(), date: targetDate.getUTCDate()});\n $datepicker.$build();\n };\n\n $datepicker.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n targetEl = targetEl.parent();\n }\n targetEl.triggerHandler('click');\n }\n };\n\n $datepicker.$onKeyDown = function (evt) {\n if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n if (evt.keyCode === 13) {\n if (!scope.$mode) {\n $datepicker.hide(true);\n } else {\n scope.$apply(function () { $datepicker.setMode(scope.$mode - 1); });\n }\n return;\n }\n\n // Navigate with keyboard\n $picker.onKeyDown(evt);\n parentScope.$digest();\n };\n\n // Private\n\n function updateSelected (el) {\n el.selected = $datepicker.$isSelected(el.date);\n }\n\n function focusElement () {\n element[0].focus();\n }\n\n // Overrides\n\n var _init = $datepicker.init;\n $datepicker.init = function () {\n if (isNative && options.useNative) {\n element.prop('type', 'date');\n element.css('-webkit-appearance', 'textfield');\n return;\n } else if (isTouch) {\n element.prop('type', 'text');\n element.attr('readonly', 'true');\n element.on('click', focusElement);\n }\n _init();\n };\n\n var _destroy = $datepicker.destroy;\n $datepicker.destroy = function () {\n if (isNative && options.useNative) {\n element.off('click', focusElement);\n }\n _destroy();\n };\n\n var _show = $datepicker.show;\n $datepicker.show = function () {\n if ((!isTouch && element.attr('readonly')) || element.attr('disabled')) return;\n _show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n // if $datepicker is no longer showing, don't setup events\n if (!$datepicker.$isShown) return;\n $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n if (options.keyboard) {\n element.on('keydown', $datepicker.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $datepicker.hide;\n $datepicker.hide = function (blur) {\n if (!$datepicker.$isShown) return;\n $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n if (options.keyboard) {\n element.off('keydown', $datepicker.$onKeyDown);\n }\n _hide(blur);\n };\n\n return $datepicker;\n\n }\n\n DatepickerFactory.defaults = defaults;\n return DatepickerFactory;\n\n };\n\n })\n\n .directive('bsDatepicker', function ($window, $parse, $q, $dateFormatter, $dateParser, $datepicker) {\n\n // var defaults = $datepicker.defaults;\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'autoclose', 'dateType', 'dateFormat', 'timezone', 'modelDateFormat', 'dayFormat', 'strictFormat', 'startWeek', 'startDate', 'useNative', 'lang', 'startView', 'minView', 'iconLeft', 'iconRight', 'daysOfWeekDisabled', 'id', 'prefixClass', 'prefixEvent', 'hasToday', 'hasClear'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoclose', 'useNative', 'hasToday', 'hasClear'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Initialize datepicker\n var datepicker = $datepicker(element, controller, options);\n options = datepicker.$options;\n // Set expected iOS format\n if (isNative && options.useNative) options.dateFormat = 'yyyy-MM-dd';\n\n var lang = options.lang;\n\n var formatDate = function (date, format) {\n return $dateFormatter.formatDate(date, format, lang);\n };\n\n var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!datepicker || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(datepicker),?/i);\n if (newValue === true) {\n datepicker.show();\n } else {\n datepicker.hide();\n }\n });\n }\n\n // Observe attributes for changes\n angular.forEach(['minDate', 'maxDate'], function (key) {\n // console.warn('attr.$observe(%s)', key, attr[key]);\n if (angular.isDefined(attr[key])) {\n attr.$observe(key, function (newValue) {\n // console.warn('attr.$observe(%s)=%o', key, newValue);\n datepicker.$options[key] = dateParser.getDateForAttribute(key, newValue);\n // Build only if dirty\n if (!isNaN(datepicker.$options[key])) datepicker.$build(false);\n validateAgainstMinMaxDate(controller.$dateValue);\n });\n }\n });\n\n // Observe date format\n if (angular.isDefined(attr.dateFormat)) {\n attr.$observe('dateFormat', function (newValue) {\n datepicker.$options.dateFormat = newValue;\n });\n }\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n datepicker.update(controller.$dateValue);\n }, true);\n\n // Normalize undefined/null/empty array,\n // so that we don't treat changing from undefined->null as a change.\n function normalizeDateRanges (ranges) {\n if (!ranges || !ranges.length) return null;\n return ranges;\n }\n\n if (angular.isDefined(attr.disabledDates)) {\n scope.$watch(attr.disabledDates, function (disabledRanges, previousValue) {\n disabledRanges = normalizeDateRanges(disabledRanges);\n previousValue = normalizeDateRanges(previousValue);\n\n if (disabledRanges) {\n datepicker.updateDisabledDates(disabledRanges);\n }\n });\n }\n\n function validateAgainstMinMaxDate (parsedDate) {\n if (!angular.isDate(parsedDate)) return;\n var isMinValid = isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate;\n var isMaxValid = isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate;\n var isValid = isMinValid && isMaxValid;\n controller.$setValidity('date', isValid);\n controller.$setValidity('min', isMinValid);\n controller.$setValidity('max', isMaxValid);\n // Only update the model when we have a valid date\n if (isValid) controller.$dateValue = parsedDate;\n }\n\n // viewValue -> $parsers -> modelValue\n controller.$parsers.unshift(function (viewValue) {\n // console.warn('$parser(\"%s\"): viewValue=%o', element.attr('ng-model'), viewValue);\n var date;\n // Null values should correctly reset the model value & validity\n if (!viewValue) {\n controller.$setValidity('date', true);\n // BREAKING CHANGE:\n // return null (not undefined) when input value is empty, so angularjs 1.3\n // ngModelController can go ahead and run validators, like ngRequired\n return null;\n }\n var parsedDate = dateParser.parse(viewValue, controller.$dateValue);\n if (!parsedDate || isNaN(parsedDate.getTime())) {\n controller.$setValidity('date', false);\n // return undefined, causes ngModelController to\n // invalidate model value\n return;\n }\n validateAgainstMinMaxDate(parsedDate);\n\n if (options.dateType === 'string') {\n date = dateParser.timezoneOffsetAdjust(parsedDate, options.timezone, true);\n return formatDate(date, options.modelDateFormat || options.dateFormat);\n }\n date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n if (options.dateType === 'number') {\n return date.getTime();\n } else if (options.dateType === 'unix') {\n return date.getTime() / 1000;\n } else if (options.dateType === 'iso') {\n return date.toISOString();\n }\n return new Date(date);\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var date;\n if (angular.isUndefined(modelValue) || modelValue === null) {\n date = NaN;\n } else if (angular.isDate(modelValue)) {\n date = modelValue;\n } else if (options.dateType === 'string') {\n date = dateParser.parse(modelValue, null, options.modelDateFormat);\n } else if (options.dateType === 'unix') {\n date = new Date(modelValue * 1000);\n } else {\n date = new Date(modelValue);\n }\n // Setup default value?\n // if (isNaN(date.getTime())) {\n // var today = new Date();\n // date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0);\n // }\n controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n return getDateFormattedString();\n });\n\n // viewValue -> element\n controller.$render = function () {\n // console.warn('$render(\"%s\"): viewValue=%o', element.attr('ng-model'), controller.$viewValue);\n element.val(getDateFormattedString());\n };\n\n function getDateFormattedString () {\n return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.dateFormat);\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (datepicker) datepicker.destroy();\n options = null;\n datepicker = null;\n });\n\n }\n };\n\n })\n\n .provider('datepickerViews', function () {\n\n // var defaults = this.defaults = {\n // dayFormat: 'dd',\n // daySplit: 7\n // };\n\n // Split array into smaller arrays\n function split (arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n }\n\n // Modulus operator\n function mod (n, m) {\n return ((n % m) + m) % m;\n }\n\n this.$get = function ($dateFormatter, $dateParser, $sce) {\n\n return function (picker) {\n\n var scope = picker.$scope;\n var options = picker.$options;\n\n var lang = options.lang;\n var formatDate = function (date, format) {\n return $dateFormatter.formatDate(date, format, lang);\n };\n var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});\n\n var weekDaysMin = $dateFormatter.weekdaysShort(lang);\n var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek));\n var weekDaysLabelsHtml = $sce.trustAsHtml('' + weekDaysLabels.join('') + '');\n\n var startDate = picker.$date || (options.startDate ? dateParser.getDateForAttribute('startDate', options.startDate) : new Date());\n var viewDate = {year: startDate.getFullYear(), month: startDate.getMonth(), date: startDate.getDate()};\n\n var views = [{\n format: options.dayFormat,\n split: 7,\n steps: {month: 1},\n update: function (date, force) {\n if (!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getDate() !== viewDate.date || date.getDate() === 1) {\n // chaging picker current month will cause viewDate.date to be set to first day of the month,\n // in $datepicker.$selectPane, so picker would not update selected day display if\n // user picks first day of the new month.\n // As a workaround, we are always forcing update when picked date is first day of month.\n viewDate.date = picker.$date.getDate();\n picker.$updateSelected();\n }\n },\n build: function () {\n var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1);\n var firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset();\n var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 7) * 864e5);\n var firstDateOffset = firstDate.getTimezoneOffset();\n var today = dateParser.timezoneOffsetAdjust(new Date(), options.timezone).toDateString();\n // Handle daylight time switch\n if (firstDateOffset !== firstDayOfMonthOffset) firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 60e3);\n var days = [];\n var day;\n for (var i = 0; i < 42; i++) { // < 7 * 6\n day = dateParser.daylightSavingAdjust(new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i));\n days.push({date: day, isToday: day.toDateString() === today, label: formatDate(day, this.format), selected: picker.$date && this.isSelected(day), muted: day.getMonth() !== viewDate.month, disabled: this.isDisabled(day)});\n }\n scope.title = formatDate(firstDayOfMonth, options.monthTitleFormat);\n scope.showLabels = true;\n scope.labels = weekDaysLabelsHtml;\n scope.rows = split(days, this.split);\n scope.isTodayDisabled = this.isDisabled(new Date());\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate();\n },\n isDisabled: function (date) {\n var time = date.getTime();\n\n // Disabled because of min/max date.\n if (time < options.minDate || time > options.maxDate) return true;\n\n // Disabled due to being a disabled day of the week\n if (options.daysOfWeekDisabled.indexOf(date.getDay()) !== -1) return true;\n\n // Disabled because of disabled date range.\n if (options.disabledDateRanges) {\n for (var i = 0; i < options.disabledDateRanges.length; i++) {\n if (time >= options.disabledDateRanges[i].start && time <= options.disabledDateRanges[i].end) {\n return true;\n }\n }\n }\n\n return false;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualTime = picker.$date.getTime();\n var newDate;\n\n if (evt.keyCode === 37) newDate = new Date(actualTime - 1 * 864e5);\n else if (evt.keyCode === 38) newDate = new Date(actualTime - 7 * 864e5);\n else if (evt.keyCode === 39) newDate = new Date(actualTime + 1 * 864e5);\n else if (evt.keyCode === 40) newDate = new Date(actualTime + 7 * 864e5);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }, {\n name: 'month',\n format: options.monthFormat,\n split: 4,\n steps: {year: 1},\n update: function (date, force) {\n if (!this.built || date.getFullYear() !== viewDate.year) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getMonth() !== viewDate.month) {\n angular.extend(viewDate, {month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$updateSelected();\n }\n },\n build: function () {\n // var firstMonth = new Date(viewDate.year, 0, 1);\n var months = [];\n var month;\n for (var i = 0; i < 12; i++) {\n month = new Date(viewDate.year, i, 1);\n months.push({date: month, label: formatDate(month, this.format), selected: picker.$isSelected(month), disabled: this.isDisabled(month)});\n }\n scope.title = formatDate(month, options.yearTitleFormat);\n scope.showLabels = false;\n scope.rows = split(months, this.split);\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth();\n },\n isDisabled: function (date) {\n var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0);\n return lastDate < options.minDate || date.getTime() > options.maxDate;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualMonth = picker.$date.getMonth();\n var newDate = new Date(picker.$date);\n\n if (evt.keyCode === 37) newDate.setMonth(actualMonth - 1);\n else if (evt.keyCode === 38) newDate.setMonth(actualMonth - 4);\n else if (evt.keyCode === 39) newDate.setMonth(actualMonth + 1);\n else if (evt.keyCode === 40) newDate.setMonth(actualMonth + 4);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }, {\n name: 'year',\n format: options.yearFormat,\n split: 4,\n steps: {year: 12},\n update: function (date, force) {\n if (!this.built || force || parseInt(date.getFullYear() / 20, 10) !== parseInt(viewDate.year / 20, 10)) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getFullYear() !== viewDate.year) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$updateSelected();\n }\n },\n build: function () {\n var firstYear = viewDate.year - viewDate.year % (this.split * 3);\n var years = [];\n var year;\n for (var i = 0; i < 12; i++) {\n year = new Date(firstYear + i, 0, 1);\n years.push({date: year, label: formatDate(year, this.format), selected: picker.$isSelected(year), disabled: this.isDisabled(year)});\n }\n scope.title = years[0].label + '-' + years[years.length - 1].label;\n scope.showLabels = false;\n scope.rows = split(years, this.split);\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear();\n },\n isDisabled: function (date) {\n var lastDate = +new Date(date.getFullYear() + 1, 0, 0);\n return lastDate < options.minDate || date.getTime() > options.maxDate;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualYear = picker.$date.getFullYear();\n var newDate = new Date(picker.$date);\n\n if (evt.keyCode === 37) newDate.setYear(actualYear - 1);\n else if (evt.keyCode === 38) newDate.setYear(actualYear - 4);\n else if (evt.keyCode === 39) newDate.setYear(actualYear + 1);\n else if (evt.keyCode === 40) newDate.setYear(actualYear + 4);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }];\n\n return {\n views: options.minView ? Array.prototype.slice.call(views, options.minView) : views,\n viewDate: viewDate\n };\n\n };\n\n };\n\n });\n\n// Source: button/button.js\nangular.module('mgcrea.ngStrap.button', [])\n\n .provider('$button', function () {\n\n var defaults = this.defaults = {\n activeClass: 'active',\n toggleEvent: 'click'\n };\n\n this.$get = function () {\n return {defaults: defaults};\n };\n\n })\n\n .directive('bsCheckboxGroup', function () {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink (element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"checkbox\"]');\n angular.forEach(children, function (child) {\n var childEl = angular.element(child);\n childEl.attr('bs-checkbox', '');\n childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value'));\n });\n }\n\n };\n\n })\n\n .directive('bsCheckbox', function ($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support label > input[type=\"checkbox\"]\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true;\n if (constantValueRegExp.test(attr.trueValue)) {\n trueValue = scope.$eval(attr.trueValue);\n }\n var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false;\n if (constantValueRegExp.test(attr.falseValue)) {\n falseValue = scope.$eval(attr.falseValue);\n }\n\n // Parse exotic values\n var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean';\n if (hasExoticValues) {\n controller.$parsers.push(function (viewValue) {\n // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue);\n return viewValue ? trueValue : falseValue;\n });\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n return angular.equals(modelValue, trueValue);\n });\n }\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = !!controller.$viewValue;\n $$rAF(function () {\n if (isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function () {\n scope.$apply(function () {\n // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n if (!isInput) {\n controller.$setViewValue(!activeElement.hasClass('active'));\n }\n controller.$render();\n });\n });\n\n }\n\n };\n\n })\n\n .directive('bsRadioGroup', function () {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink (element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"radio\"]');\n angular.forEach(children, function (child) {\n angular.element(child).attr('bs-radio', '');\n angular.element(child).attr('ng-model', attr.ngModel);\n });\n }\n\n };\n\n })\n\n .directive('bsRadio', function ($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support `label > input[type=\"radio\"]` markup\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var value;\n attr.$observe('value', function (v) {\n if (typeof v !== 'boolean' && constantValueRegExp.test(v)) {\n value = scope.$eval(v);\n } else {\n value = v;\n }\n controller.$render();\n });\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = angular.equals(controller.$viewValue, value);\n $$rAF(function () {\n if (isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function () {\n scope.$apply(function () {\n // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n controller.$setViewValue(value);\n controller.$render();\n });\n });\n\n }\n\n };\n\n });\n\n// Source: collapse/collapse.js\nangular.module('mgcrea.ngStrap.collapse', [])\n\n .provider('$collapse', function () {\n\n var defaults = this.defaults = {\n animation: 'am-collapse',\n disallowToggle: false,\n activeClass: 'in',\n startCollapsed: false,\n allowMultiple: false\n };\n\n var controller = this.controller = function ($scope, $element, $attrs) {\n var self = this;\n\n // Attributes options\n self.$options = angular.copy(defaults);\n angular.forEach(['animation', 'disallowToggle', 'activeClass', 'startCollapsed', 'allowMultiple'], function (key) {\n if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['disallowToggle', 'startCollapsed', 'allowMultiple'], function (key) {\n if (angular.isDefined($attrs[key]) && falseValueRegExp.test($attrs[key])) {\n self.$options[key] = false;\n }\n });\n\n self.$toggles = [];\n self.$targets = [];\n\n self.$viewChangeListeners = [];\n\n self.$registerToggle = function (element) {\n self.$toggles.push(element);\n };\n self.$registerTarget = function (element) {\n self.$targets.push(element);\n };\n\n self.$unregisterToggle = function (element) {\n var index = self.$toggles.indexOf(element);\n // remove toggle from $toggles array\n self.$toggles.splice(index, 1);\n };\n self.$unregisterTarget = function (element) {\n var index = self.$targets.indexOf(element);\n\n // remove element from $targets array\n self.$targets.splice(index, 1);\n\n if (self.$options.allowMultiple) {\n // remove target index from $active array values\n deactivateItem(element);\n }\n\n // fix active item indexes\n fixActiveItemIndexes(index);\n\n self.$viewChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n // use array to store all the currently open panels\n self.$targets.$active = !self.$options.startCollapsed ? [0] : [];\n self.$setActive = $scope.$setActive = function (value) {\n if (angular.isArray(value)) {\n self.$targets.$active = value;\n } else if (!self.$options.disallowToggle && isActive(value)) {\n deactivateItem(value);\n } else {\n activateItem(value);\n }\n\n self.$viewChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n self.$activeIndexes = function () {\n if (self.$options.allowMultiple) {\n return self.$targets.$active;\n }\n return self.$targets.$active.length === 1 ? self.$targets.$active[0] : -1;\n };\n\n function fixActiveItemIndexes (index) {\n // item with index was removed, so we\n // need to adjust other items index values\n var activeIndexes = self.$targets.$active;\n for (var i = 0; i < activeIndexes.length; i++) {\n if (index < activeIndexes[i]) {\n activeIndexes[i] = activeIndexes[i] - 1;\n }\n\n // the last item is active, so we need to\n // adjust its index\n if (activeIndexes[i] === self.$targets.length) {\n activeIndexes[i] = self.$targets.length - 1;\n }\n }\n }\n\n function isActive (value) {\n var activeItems = self.$targets.$active;\n return activeItems.indexOf(value) !== -1;\n }\n\n function deactivateItem (value) {\n var index = self.$targets.$active.indexOf(value);\n if (index !== -1) {\n self.$targets.$active.splice(index, 1);\n }\n }\n\n function activateItem (value) {\n if (!self.$options.allowMultiple) {\n // remove current selected item\n self.$targets.$active.splice(0, 1);\n }\n\n if (self.$targets.$active.indexOf(value) === -1) {\n self.$targets.$active.push(value);\n }\n }\n\n };\n\n this.$get = function () {\n var $collapse = {};\n $collapse.defaults = defaults;\n $collapse.controller = controller;\n return $collapse;\n };\n\n })\n\n .directive('bsCollapse', function ($window, $animate, $collapse) {\n\n return {\n require: ['?ngModel', 'bsCollapse'],\n controller: ['$scope', '$element', '$attrs', $collapse.controller],\n link: function postLink (scope, element, attrs, controllers) {\n\n var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n if (ngModelCtrl) {\n\n // Update the modelValue following\n bsCollapseCtrl.$viewChangeListeners.push(function () {\n ngModelCtrl.$setViewValue(bsCollapseCtrl.$activeIndexes());\n });\n\n // modelValue -> $formatters -> viewValue\n ngModelCtrl.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n if (angular.isArray(modelValue)) {\n // model value is an array, so just replace\n // the active items directly\n bsCollapseCtrl.$setActive(modelValue);\n } else {\n var activeIndexes = bsCollapseCtrl.$activeIndexes();\n\n if (angular.isArray(activeIndexes)) {\n // we have an array of selected indexes\n if (activeIndexes.indexOf(modelValue * 1) === -1) {\n // item with modelValue index is not active\n bsCollapseCtrl.$setActive(modelValue * 1);\n }\n } else if (activeIndexes !== modelValue * 1) {\n bsCollapseCtrl.$setActive(modelValue * 1);\n }\n }\n return modelValue;\n });\n\n }\n\n }\n };\n\n })\n\n .directive('bsCollapseToggle', function () {\n\n return {\n require: ['^?ngModel', '^bsCollapse'],\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n // Add base attr\n element.attr('data-toggle', 'collapse');\n\n // Push pane to parent bsCollapse controller\n bsCollapseCtrl.$registerToggle(element);\n\n // remove toggle from collapse controller when toggle is destroyed\n scope.$on('$destroy', function () {\n bsCollapseCtrl.$unregisterToggle(element);\n });\n\n element.on('click', function () {\n if (!attrs.disabled) {\n var index = attrs.bsCollapseToggle && attrs.bsCollapseToggle !== 'bs-collapse-toggle' ? attrs.bsCollapseToggle : bsCollapseCtrl.$toggles.indexOf(element);\n bsCollapseCtrl.$setActive(index * 1);\n scope.$apply();\n }\n });\n\n }\n };\n\n })\n\n .directive('bsCollapseTarget', function ($animate) {\n\n return {\n require: ['^?ngModel', '^bsCollapse'],\n // scope: true,\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n // Add base class\n element.addClass('collapse');\n\n // Add animation class\n if (bsCollapseCtrl.$options.animation) {\n element.addClass(bsCollapseCtrl.$options.animation);\n }\n\n // Push pane to parent bsCollapse controller\n bsCollapseCtrl.$registerTarget(element);\n\n // remove pane target from collapse controller when target is destroyed\n scope.$on('$destroy', function () {\n bsCollapseCtrl.$unregisterTarget(element);\n });\n\n function render () {\n var index = bsCollapseCtrl.$targets.indexOf(element);\n var active = bsCollapseCtrl.$activeIndexes();\n var action = 'removeClass';\n if (angular.isArray(active)) {\n if (active.indexOf(index) !== -1) {\n action = 'addClass';\n }\n } else if (index === active) {\n action = 'addClass';\n }\n\n $animate[action](element, bsCollapseCtrl.$options.activeClass);\n }\n\n bsCollapseCtrl.$viewChangeListeners.push(function () {\n render();\n });\n render();\n\n }\n };\n\n });\n\n// Source: aside/aside.js\nangular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal'])\n\n .provider('$aside', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade-and-slide-right',\n prefixClass: 'aside',\n prefixEvent: 'aside',\n placement: 'right',\n templateUrl: 'aside/aside.tpl.html',\n contentTemplate: false,\n container: false,\n element: null,\n backdrop: true,\n keyboard: true,\n html: false,\n show: true\n };\n\n this.$get = function ($modal) {\n\n function AsideFactory (config) {\n\n var $aside = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $aside = $modal(options);\n\n return $aside;\n\n }\n\n return AsideFactory;\n\n };\n\n })\n\n .directive('bsAside', function ($window, $sce, $aside) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsAside) {\n scope.$watch(attr.bsAside, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize aside\n var aside = $aside(options);\n\n // Trigger\n element.on(attr.trigger || 'click', aside.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (aside) aside.destroy();\n options = null;\n aside = null;\n });\n\n }\n };\n\n });\n\n// Source: alert/alert.js\n// @BUG: following snippet won't compile correctly\n\nangular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal'])\n\n .provider('$alert', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'alert',\n prefixEvent: 'alert',\n placement: null,\n templateUrl: 'alert/alert.tpl.html',\n container: false,\n element: null,\n backdrop: false,\n keyboard: true,\n show: true,\n // Specific options\n duration: false,\n type: false,\n dismissable: true\n };\n\n this.$get = function ($modal, $timeout) {\n\n function AlertFactory (config) {\n\n var $alert = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $alert = $modal(options);\n\n // Support scope as string options [/*title, content, */ type, dismissable]\n $alert.$scope.dismissable = !!options.dismissable;\n if (options.type) {\n $alert.$scope.type = options.type;\n }\n\n // Support auto-close duration\n var show = $alert.show;\n if (options.duration) {\n $alert.show = function () {\n show();\n $timeout(function () {\n $alert.hide();\n }, options.duration * 1000);\n };\n }\n\n return $alert;\n\n }\n\n return AlertFactory;\n\n };\n\n })\n\n .directive('bsAlert', function ($window, $sce, $alert) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['keyboard', 'html', 'container', 'dismissable'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // overwrite inherited title value when no value specified\n // fix for angular 1.3.1 531a8de72c439d8ddd064874bf364c00cedabb11\n if (!scope.hasOwnProperty('title')) {\n scope.title = '';\n }\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content', 'type'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsAlert) {\n scope.$watch(attr.bsAlert, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize alert\n var alert = $alert(options);\n\n // Trigger\n element.on(attr.trigger || 'click', alert.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (alert) alert.destroy();\n options = null;\n alert = null;\n });\n\n }\n };\n\n });\n\n// Source: affix/affix.js\nangular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions', 'mgcrea.ngStrap.helpers.debounce'])\n\n .provider('$affix', function () {\n\n var defaults = this.defaults = {\n offsetTop: 'auto',\n inlineStyles: true,\n setWidth: true\n };\n\n this.$get = function ($window, debounce, dimensions) {\n\n var bodyEl = angular.element($window.document.body);\n var windowEl = angular.element($window);\n\n function AffixFactory (element, config) {\n\n var $affix = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n var targetEl = options.target;\n\n // Initial private vars\n var reset = 'affix affix-top affix-bottom';\n var setWidth = false;\n var initialAffixTop = 0;\n var initialOffsetTop = 0;\n var offsetTop = 0;\n var offsetBottom = 0;\n var affixed = null;\n var unpin = null;\n\n var parent = element.parent();\n // Options: custom parent\n if (options.offsetParent) {\n if (options.offsetParent.match(/^\\d+$/)) {\n for (var i = 0; i < (options.offsetParent * 1) - 1; i++) {\n parent = parent.parent();\n }\n } else {\n parent = angular.element(options.offsetParent);\n }\n }\n\n $affix.init = function () {\n\n this.$parseOffsets();\n initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop;\n setWidth = options.setWidth && !element[0].style.width;\n\n // Bind events\n targetEl.on('scroll', this.checkPosition);\n targetEl.on('click', this.checkPositionWithEventLoop);\n windowEl.on('resize', this.$debouncedOnResize);\n\n // Both of these checkPosition() calls are necessary for the case where\n // the user hits refresh after scrolling to the bottom of the page.\n this.checkPosition();\n this.checkPositionWithEventLoop();\n\n };\n\n $affix.destroy = function () {\n\n // Unbind events\n targetEl.off('scroll', this.checkPosition);\n targetEl.off('click', this.checkPositionWithEventLoop);\n windowEl.off('resize', this.$debouncedOnResize);\n\n };\n\n $affix.checkPositionWithEventLoop = function () {\n\n // IE 9 throws an error if we use 'this' instead of '$affix'\n // in this setTimeout call\n setTimeout($affix.checkPosition, 1);\n\n };\n\n $affix.checkPosition = function () {\n // if (!this.$element.is(':visible')) return\n\n var scrollTop = getScrollTop();\n var position = dimensions.offset(element[0]);\n var elementHeight = dimensions.height(element[0]);\n\n // Get required affix class according to position\n var affix = getRequiredAffixClass(unpin, position, elementHeight);\n\n // Did affix status changed this last check?\n if (affixed === affix) return;\n affixed = affix;\n\n if (affix === 'top') {\n unpin = null;\n if (setWidth) {\n element.css('width', '');\n }\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', '');\n }\n } else if (affix === 'bottom') {\n if (options.offsetUnpin) {\n unpin = -(options.offsetUnpin * 1);\n } else {\n // Calculate unpin threshold when affixed to bottom.\n // Hopefully the browser scrolls pixel by pixel.\n unpin = position.top - scrollTop;\n }\n if (setWidth) {\n element.css('width', '');\n }\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', (options.offsetParent) ? '' : ((bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop) + 'px'));\n }\n } else { // affix === 'middle'\n unpin = null;\n if (setWidth) {\n element.css('width', element[0].offsetWidth + 'px');\n }\n if (options.inlineStyles) {\n element.css('position', 'fixed');\n element.css('top', initialAffixTop + 'px');\n }\n }\n\n // Add proper affix class\n element.removeClass(reset).addClass('affix' + ((affix !== 'middle') ? '-' + affix : ''));\n\n };\n\n $affix.$onResize = function () {\n $affix.$parseOffsets();\n $affix.checkPosition();\n };\n $affix.$debouncedOnResize = debounce($affix.$onResize, 50);\n\n $affix.$parseOffsets = function () {\n var initialPosition = element[0].style.position;\n var initialTop = element[0].style.top;\n // Reset position to calculate correct offsetTop\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', '');\n }\n\n if (options.offsetTop) {\n if (options.offsetTop === 'auto') {\n options.offsetTop = '+0';\n }\n if (options.offsetTop.match(/^[-+]\\d+$/)) {\n initialAffixTop = - options.offsetTop * 1;\n if (options.offsetParent) {\n offsetTop = dimensions.offset(parent[0]).top + (options.offsetTop * 1);\n } else {\n offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + (options.offsetTop * 1);\n }\n } else {\n offsetTop = options.offsetTop * 1;\n }\n }\n\n if (options.offsetBottom) {\n if (options.offsetParent && options.offsetBottom.match(/^[-+]\\d+$/)) {\n // add 1 pixel due to rounding problems...\n offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + (options.offsetBottom * 1) + 1;\n } else {\n offsetBottom = options.offsetBottom * 1;\n }\n }\n\n // Bring back the element's position after calculations\n if (options.inlineStyles) {\n element.css('position', initialPosition);\n element.css('top', initialTop);\n }\n };\n\n // Private methods\n\n function getRequiredAffixClass (_unpin, position, elementHeight) {\n var scrollTop = getScrollTop();\n var scrollHeight = getScrollHeight();\n\n if (scrollTop <= offsetTop) {\n return 'top';\n } else if (_unpin !== null) {\n return scrollTop + _unpin <= position.top ? 'middle' : 'bottom';\n } else if (offsetBottom !== null && (position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom)) {\n return 'bottom';\n }\n return 'middle';\n }\n\n function getScrollTop () {\n return targetEl[0] === $window ? $window.pageYOffset : targetEl[0].scrollTop;\n }\n\n function getScrollHeight () {\n return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight;\n }\n\n $affix.init();\n return $affix;\n\n }\n\n return AffixFactory;\n\n };\n\n })\n\n .directive('bsAffix', function ($affix, $window, $timeout) {\n\n return {\n restrict: 'EAC',\n require: '^?bsAffixTarget',\n link: function postLink (scope, element, attr, affixTarget) {\n\n var options = {scope: scope, target: affixTarget ? affixTarget.$element : angular.element($window)};\n angular.forEach(['offsetTop', 'offsetBottom', 'offsetParent', 'offsetUnpin', 'inlineStyles', 'setWidth'], function (key) {\n if (angular.isDefined(attr[key])) {\n var option = attr[key];\n if (/true/i.test(option)) option = true;\n if (/false/i.test(option)) option = false;\n options[key] = option;\n }\n });\n\n var affix;\n $timeout(function () { affix = $affix(element, options); });\n scope.$on('$destroy', function () {\n if (affix) affix.destroy();\n options = null;\n affix = null;\n });\n\n }\n };\n\n })\n\n .directive('bsAffixTarget', function () {\n return {\n controller: function ($element) {\n this.$element = $element;\n }\n };\n });\n\n// Source: module.js\nangular.module('mgcrea.ngStrap', [\n 'mgcrea.ngStrap.modal',\n 'mgcrea.ngStrap.aside',\n 'mgcrea.ngStrap.alert',\n 'mgcrea.ngStrap.button',\n 'mgcrea.ngStrap.select',\n 'mgcrea.ngStrap.datepicker',\n 'mgcrea.ngStrap.timepicker',\n 'mgcrea.ngStrap.navbar',\n 'mgcrea.ngStrap.tooltip',\n 'mgcrea.ngStrap.popover',\n 'mgcrea.ngStrap.dropdown',\n 'mgcrea.ngStrap.typeahead',\n 'mgcrea.ngStrap.scrollspy',\n 'mgcrea.ngStrap.affix',\n 'mgcrea.ngStrap.tab',\n 'mgcrea.ngStrap.collapse'\n]);\n\n})(window, document);\n","'use strict';\n\nangular.module('mgcrea.ngStrap.typeahead', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions'])\n\n .provider('$typeahead', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'typeahead',\n prefixEvent: '$typeahead',\n placement: 'bottom-left',\n templateUrl: 'typeahead/typeahead.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n minLength: 1,\n filter: 'bsAsyncFilter',\n limit: 6,\n autoSelect: false,\n comparator: '',\n trimValue: true\n };\n\n this.$get = function ($window, $rootScope, $tooltip, $$rAF, $timeout) {\n\n function TypeaheadFactory (element, controller, config) {\n\n var $typeahead = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $typeahead = $tooltip(element, options);\n var parentScope = config.scope;\n var scope = $typeahead.$scope;\n\n scope.$resetMatches = function () {\n scope.$matches = [];\n scope.$activeIndex = options.autoSelect ? 0 : -1; // If set to 0, the first match will be highlighted\n };\n scope.$resetMatches();\n\n scope.$activate = function (index) {\n scope.$$postDigest(function () {\n $typeahead.activate(index);\n });\n };\n\n scope.$select = function (index, evt) {\n scope.$$postDigest(function () {\n $typeahead.select(index);\n });\n };\n\n scope.$isVisible = function () {\n return $typeahead.$isVisible();\n };\n\n // Public methods\n\n $typeahead.update = function (matches) {\n scope.$matches = matches;\n if (scope.$activeIndex >= matches.length) {\n scope.$activeIndex = options.autoSelect ? 0 : -1;\n }\n\n // wrap in a $timeout so the results are updated\n // before repositioning\n safeDigest(scope);\n $$rAF($typeahead.$applyPlacement);\n };\n\n $typeahead.activate = function (index) {\n scope.$activeIndex = index;\n };\n\n $typeahead.select = function (index) {\n if (index === -1) return;\n var value = scope.$matches[index].value;\n // console.log('$setViewValue', value);\n controller.$setViewValue(value);\n controller.$render();\n scope.$resetMatches();\n if (parentScope) parentScope.$digest();\n // Emit event\n scope.$emit(options.prefixEvent + '.select', value, index, $typeahead);\n if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n options.onSelect(value, index, $typeahead);\n }\n };\n\n // Protected methods\n\n $typeahead.$isVisible = function () {\n if (!options.minLength || !controller) {\n return !!scope.$matches.length;\n }\n // minLength support\n return scope.$matches.length && angular.isString(controller.$viewValue) && controller.$viewValue.length >= options.minLength;\n };\n\n $typeahead.$getIndex = function (value) {\n var index;\n for (index = scope.$matches.length; index--;) {\n if (angular.equals(scope.$matches[index].value, value)) break;\n }\n return index;\n };\n\n $typeahead.$onMouseDown = function (evt) {\n // Prevent blur on mousedown\n evt.preventDefault();\n evt.stopPropagation();\n };\n\n $typeahead.$onKeyDown = function (evt) {\n if (!/(38|40|13)/.test(evt.keyCode)) return;\n\n // Let ngSubmit pass if the typeahead tip is hidden or no option is selected\n if ($typeahead.$isVisible() && !(evt.keyCode === 13 && scope.$activeIndex === -1)) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // Select with enter\n if (evt.keyCode === 13 && scope.$matches.length) {\n $typeahead.select(scope.$activeIndex);\n // Navigate with keyboard\n } else if (evt.keyCode === 38 && scope.$activeIndex > 0) {\n scope.$activeIndex--;\n } else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) {\n scope.$activeIndex++;\n } else if (angular.isUndefined(scope.$activeIndex)) {\n scope.$activeIndex = 0;\n }\n scope.$digest();\n };\n\n // Overrides\n\n var show = $typeahead.show;\n $typeahead.show = function () {\n show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed immediately.\n $timeout(function () {\n if ($typeahead.$element) {\n $typeahead.$element.on('mousedown', $typeahead.$onMouseDown);\n if (options.keyboard) {\n if (element) element.on('keydown', $typeahead.$onKeyDown);\n }\n }\n }, 0, false);\n };\n\n var hide = $typeahead.hide;\n $typeahead.hide = function () {\n if ($typeahead.$element) $typeahead.$element.off('mousedown', $typeahead.$onMouseDown);\n if (options.keyboard) {\n if (element) element.off('keydown', $typeahead.$onKeyDown);\n }\n if (!options.autoSelect) {\n $typeahead.activate(-1);\n }\n hide();\n };\n\n return $typeahead;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n TypeaheadFactory.defaults = defaults;\n return TypeaheadFactory;\n\n };\n\n })\n\n .filter('bsAsyncFilter', function ($filter) {\n return function (array, expression, comparator) {\n if (array && angular.isFunction(array.then)) {\n return array.then(function (results) {\n return $filter('filter')(results, expression, comparator);\n });\n }\n return $filter('filter')(array, expression, comparator);\n };\n })\n\n .directive('bsTypeahead', function ($window, $parse, $q, $typeahead, $parseOptions) {\n\n var defaults = $typeahead.defaults;\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Fixes firefox bug when using objects in model with typeahead\n // Yes this breaks any other directive using a 'change' event on this input,\n // but if it is using the 'change' event why is it used with typeahead?\n element.off('change');\n\n // Directive options\n var options = {\n scope: scope\n };\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'filter', 'limit', 'minLength', 'watchOptions', 'selectMode', 'autoSelect', 'comparator', 'id', 'prefixEvent', 'prefixClass'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'trimValue', 'filter'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show, hide and select events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Disable browser autocompletion\n if (!element.attr('autocomplete')) element.attr('autocomplete', 'off');\n\n // Build proper bsOptions\n var filter = angular.isDefined(options.filter) ? options.filter : defaults.filter;\n var limit = options.limit || defaults.limit;\n var comparator = options.comparator || defaults.comparator;\n\n var bsOptions = attr.bsOptions;\n if (filter) {\n bsOptions += ' | ' + filter + ':$viewValue';\n if (comparator) bsOptions += ':' + comparator;\n }\n if (limit) bsOptions += ' | limitTo:' + limit;\n var parsedOptions = $parseOptions(bsOptions);\n\n // Initialize typeahead\n var typeahead = $typeahead(element, controller, options);\n\n // Watch options on demand\n if (options.watchOptions) {\n // Watch bsOptions values before filtering for changes, drop function calls\n var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').replace(/\\(.*\\)/g, '').trim();\n scope.$watchCollection(watchedOptions, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue);\n parsedOptions.valuesFn(scope, controller).then(function (values) {\n typeahead.update(values);\n controller.$render();\n });\n });\n }\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('$watch', element.attr('ng-model'), newValue);\n scope.$modelValue = newValue; // Publish modelValue on scope for custom templates\n parsedOptions.valuesFn(scope, controller)\n .then(function (values) {\n // Prevent input with no future prospect if selectMode is truthy\n // @TODO test selectMode\n if (options.selectMode && !values.length && newValue.length > 0) {\n controller.$setViewValue(controller.$viewValue.substring(0, controller.$viewValue.length - 1));\n return;\n }\n if (values.length > limit) values = values.slice(0, limit);\n typeahead.update(values);\n // Queue a new rendering that will leverage collection loading\n controller.$render();\n });\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var displayValue = parsedOptions.displayValue(modelValue);\n\n // If we can determine the displayValue, use that\n if (displayValue) {\n return displayValue;\n }\n\n // If there's no display value, attempt to use the modelValue.\n // If the model is an object not much we can do\n if (angular.isDefined(modelValue) && typeof modelValue !== 'object') {\n return modelValue;\n }\n return '';\n });\n\n // Model rendering in view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n if (controller.$isEmpty(controller.$viewValue)) {\n return element.val('');\n }\n var index = typeahead.$getIndex(controller.$modelValue);\n var selected = index !== -1 ? typeahead.$scope.$matches[index].label : controller.$viewValue;\n selected = angular.isObject(selected) ? parsedOptions.displayValue(selected) : selected;\n var value = selected ? selected.toString().replace(/<(?:.|\\n)*?>/gm, '') : '';\n var ss = element[0].selectionStart;\n var sd = element[0].selectionEnd;\n element.val(options.trimValue === false ? value : value.trim());\n element[0].setSelectionRange(ss, sd);\n };\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (typeahead) typeahead.destroy();\n options = null;\n typeahead = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\n// NOTICE: This file was forked from the angular-material project (github.com/angular/material)\n// MIT Licensed - Copyright (c) 2014-2015 Google, Inc. http://angularjs.org\n\nangular.module('mgcrea.ngStrap.core', [])\n .service('$bsCompiler', bsCompilerService);\n\nfunction bsCompilerService ($q, $http, $injector, $compile, $controller, $templateCache) {\n\n /*\n * @ngdoc service\n * @name $bsCompiler\n * @module material.core\n * @description\n * The $bsCompiler service is an abstraction of angular's compiler, that allows the developer\n * to easily compile an element with a templateUrl, controller, and locals.\n *\n * @usage\n * \n * $bsCompiler.compile({\n * templateUrl: 'modal.html',\n * controller: 'ModalCtrl',\n * locals: {\n * modal: myModalInstance;\n * }\n * }).then(function(compileData) {\n * compileData.element; // modal.html's template in an element\n * compileData.link(myScope); //attach controller & scope to element\n * });\n * \n */\n\n /*\n * @ngdoc method\n * @name $bsCompiler#compile\n * @description A helper to compile an HTML template/templateUrl with a given controller,\n * locals, and scope.\n * @param {object} options An options object, with the following properties:\n *\n * - `controller` - `{(string=|function()=}` Controller fn that should be associated with\n * newly created scope or the name of a registered controller if passed as a string.\n * - `controllerAs` - `{string=}` A controller alias name. If present the controller will be\n * published to scope under the `controllerAs` name.\n * - `template` - `{string=}` An html template as a string.\n * - `templateUrl` - `{string=}` A path to an html template.\n * - `transformTemplate` - `{function(template)=}` A function which transforms the template after\n * it is loaded. It will be given the template string as a parameter, and should\n * return a a new string representing the transformed template.\n * - `resolve` - `{Object.=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the compiler\n * will wait for them all to be resolved, or if one is rejected before the controller is\n * instantiated `compile()` will fail..\n * * `key` - `{string}`: a name of a dependency to be injected into the controller.\n * * `factory` - `{string|function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is injected and the return value is treated as the\n * dependency. If the result is a promise, it is resolved before its value is\n * injected into the controller.\n *\n * @returns {object=} promise A promise, which will be resolved with a `compileData` object.\n * `compileData` has the following properties:\n *\n * - `element` - `{element}`: an uncompiled element matching the provided template.\n * - `link` - `{function(scope)}`: A link function, which, when called, will compile\n * the element and instantiate the provided controller (if given).\n * - `locals` - `{object}`: The locals which will be passed into the controller once `link` is\n * called. If `bindToController` is true, they will be coppied to the ctrl instead\n * - `bindToController` - `bool`: bind the locals to the controller, instead of passing them in.\n */\n this.compile = function (options) {\n\n if (options.template && /\\.html$/.test(options.template)) {\n console.warn('Deprecated use of `template` option to pass a file. Please use the `templateUrl` option instead.');\n options.templateUrl = options.template;\n options.template = '';\n }\n\n var templateUrl = options.templateUrl;\n var template = options.template || '';\n var controller = options.controller;\n var controllerAs = options.controllerAs;\n var resolve = angular.copy(options.resolve || {});\n var locals = angular.copy(options.locals || {});\n var transformTemplate = options.transformTemplate || angular.identity;\n var bindToController = options.bindToController;\n\n // Take resolve values and invoke them.\n // Resolves can either be a string (value: 'MyRegisteredAngularConst'),\n // or an invokable 'factory' of sorts: (value: function ValueGetter($dependency) {})\n angular.forEach(resolve, function (value, key) {\n if (angular.isString(value)) {\n resolve[key] = $injector.get(value);\n } else {\n resolve[key] = $injector.invoke(value);\n }\n });\n // Add the locals, which are just straight values to inject\n // eg locals: { three: 3 }, will inject three into the controller\n angular.extend(resolve, locals);\n\n if (template) {\n resolve.$template = $q.when(template);\n } else if (templateUrl) {\n resolve.$template = fetchTemplate(templateUrl);\n } else {\n throw new Error('Missing `template` / `templateUrl` option.');\n }\n\n if (options.titleTemplate) {\n resolve.$template = $q.all([resolve.$template, fetchTemplate(options.titleTemplate)])\n .then(function (templates) {\n var templateEl = angular.element(templates[0]);\n findElement('[ng-bind=\"title\"]', templateEl[0])\n .removeAttr('ng-bind')\n .html(templates[1]);\n return templateEl[0].outerHTML;\n });\n }\n\n if (options.contentTemplate) {\n // TODO(mgcrea): deprecate?\n resolve.$template = $q.all([resolve.$template, fetchTemplate(options.contentTemplate)])\n .then(function (templates) {\n var templateEl = angular.element(templates[0]);\n var contentEl = findElement('[ng-bind=\"content\"]', templateEl[0])\n .removeAttr('ng-bind')\n .html(templates[1]);\n // Drop the default footer as you probably don't want it if you use a custom contentTemplate\n if (!options.templateUrl) contentEl.next().remove();\n return templateEl[0].outerHTML;\n });\n }\n\n // Wait for all the resolves to finish if they are promises\n return $q.all(resolve).then(function (locals) {\n\n var template = transformTemplate(locals.$template);\n if (options.html) {\n template = template.replace(/ng-bind=\"/ig, 'ng-bind-html=\"');\n }\n // var element = options.element || angular.element('
').html(template.trim()).contents();\n var element = angular.element('
').html(template.trim()).contents();\n var linkFn = $compile(element);\n\n // Return a linking function that can be used later when the element is ready\n return {\n locals: locals,\n element: element,\n link: function link (scope) {\n locals.$scope = scope;\n\n // Instantiate controller if it exists, because we have scope\n if (controller) {\n var invokeCtrl = $controller(controller, locals, true);\n if (bindToController) {\n angular.extend(invokeCtrl.instance, locals);\n }\n // Support angular@~1.2 invokeCtrl\n var ctrl = angular.isObject(invokeCtrl) ? invokeCtrl : invokeCtrl();\n // See angular-route source for this logic\n element.data('$ngControllerController', ctrl);\n element.children().data('$ngControllerController', ctrl);\n\n if (controllerAs) {\n scope[controllerAs] = ctrl;\n }\n }\n\n return linkFn.apply(null, arguments);\n }\n };\n });\n\n };\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n var fetchPromises = {};\n function fetchTemplate (template) {\n if (fetchPromises[template]) return fetchPromises[template];\n return (fetchPromises[template] = $http.get(template, {cache: $templateCache})\n .then(function (res) {\n return res.data;\n }));\n }\n\n}\n","'use strict';\n\nangular.module('mgcrea.ngStrap.datepicker', [\n 'mgcrea.ngStrap.helpers.dateParser',\n 'mgcrea.ngStrap.helpers.dateFormatter',\n 'mgcrea.ngStrap.tooltip'])\n\n .provider('$datepicker', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n // Uncommenting the following line will break backwards compatability\n // prefixEvent: 'datepicker',\n prefixClass: 'datepicker',\n placement: 'bottom-left',\n templateUrl: 'datepicker/datepicker.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n // lang: $locale.id,\n useNative: false,\n dateType: 'date',\n dateFormat: 'shortDate',\n timezone: null,\n modelDateFormat: null,\n dayFormat: 'dd',\n monthFormat: 'MMM',\n yearFormat: 'yyyy',\n monthTitleFormat: 'MMMM yyyy',\n yearTitleFormat: 'yyyy',\n strictFormat: false,\n autoclose: false,\n minDate: -Infinity,\n maxDate: +Infinity,\n startView: 0,\n minView: 0,\n startWeek: 0,\n daysOfWeekDisabled: '',\n hasToday: false,\n hasClear: false,\n iconLeft: 'glyphicon glyphicon-chevron-left',\n iconRight: 'glyphicon glyphicon-chevron-right'\n };\n\n this.$get = function ($window, $document, $rootScope, $sce, $dateFormatter, datepickerViews, $tooltip, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n if (!defaults.lang) defaults.lang = $dateFormatter.getDefaultLocale();\n\n function DatepickerFactory (element, controller, config) {\n\n var $datepicker = $tooltip(element, angular.extend({}, defaults, config));\n var parentScope = config.scope;\n var options = $datepicker.$options;\n var scope = $datepicker.$scope;\n if (options.startView) options.startView -= options.minView;\n\n // View vars\n\n var pickerViews = datepickerViews($datepicker);\n $datepicker.$views = pickerViews.views;\n var viewDate = pickerViews.viewDate;\n scope.$mode = options.startView;\n scope.$iconLeft = options.iconLeft;\n scope.$iconRight = options.iconRight;\n scope.$hasToday = options.hasToday;\n scope.$hasClear = options.hasClear;\n var $picker = $datepicker.$views[scope.$mode];\n\n // Scope methods\n\n scope.$select = function (date) {\n $datepicker.select(date);\n };\n scope.$selectPane = function (value) {\n $datepicker.$selectPane(value);\n };\n scope.$toggleMode = function () {\n $datepicker.setMode((scope.$mode + 1) % $datepicker.$views.length);\n };\n scope.$setToday = function () {\n if (options.autoclose) {\n $datepicker.setMode(0);\n $datepicker.select(new Date());\n } else {\n $datepicker.select(new Date(), true);\n }\n };\n scope.$clear = function () {\n if (options.autoclose) {\n $datepicker.setMode(0);\n $datepicker.select(null);\n } else {\n $datepicker.select(null, true);\n }\n };\n\n // Public methods\n\n $datepicker.update = function (date) {\n // console.warn('$datepicker.update() newValue=%o', date);\n if (angular.isDate(date) && !isNaN(date.getTime())) {\n $datepicker.$date = date;\n $picker.update.call($picker, date);\n }\n // Build only if pristine\n $datepicker.$build(true);\n };\n\n $datepicker.updateDisabledDates = function (dateRanges) {\n options.disabledDateRanges = dateRanges;\n for (var i = 0, l = scope.rows.length; i < l; i++) {\n angular.forEach(scope.rows[i], $datepicker.$setDisabledEl);\n }\n };\n\n $datepicker.select = function (date, keep) {\n // console.warn('$datepicker.select', date, scope.$mode);\n if (angular.isDate(date)) {\n if (!angular.isDate(controller.$dateValue) || isNaN(controller.$dateValue.getTime())) {\n controller.$dateValue = new Date(date);\n }\n } else {\n controller.$dateValue = null;\n }\n if (!scope.$mode || keep) {\n controller.$setViewValue(angular.copy(date));\n controller.$render();\n if (options.autoclose && !keep) {\n $timeout(function () { $datepicker.hide(true); });\n }\n } else {\n angular.extend(viewDate, {year: date.getFullYear(), month: date.getMonth(), date: date.getDate()});\n $datepicker.setMode(scope.$mode - 1);\n $datepicker.$build();\n }\n };\n\n $datepicker.setMode = function (mode) {\n // console.warn('$datepicker.setMode', mode);\n scope.$mode = mode;\n $picker = $datepicker.$views[scope.$mode];\n $datepicker.$build();\n };\n\n // Protected methods\n\n $datepicker.$build = function (pristine) {\n // console.warn('$datepicker.$build() viewDate=%o', viewDate);\n if (pristine === true && $picker.built) return;\n if (pristine === false && !$picker.built) return;\n $picker.build.call($picker);\n };\n\n $datepicker.$updateSelected = function () {\n for (var i = 0, l = scope.rows.length; i < l; i++) {\n angular.forEach(scope.rows[i], updateSelected);\n }\n };\n\n $datepicker.$isSelected = function (date) {\n return $picker.isSelected(date);\n };\n\n $datepicker.$setDisabledEl = function (el) {\n el.disabled = $picker.isDisabled(el.date);\n };\n\n $datepicker.$selectPane = function (value) {\n var steps = $picker.steps;\n // set targetDate to first day of month to avoid problems with\n // date values rollover. This assumes the viewDate does not\n // depend on the day of the month\n var targetDate = new Date(Date.UTC(viewDate.year + ((steps.year || 0) * value), viewDate.month + ((steps.month || 0) * value), 1));\n angular.extend(viewDate, {year: targetDate.getUTCFullYear(), month: targetDate.getUTCMonth(), date: targetDate.getUTCDate()});\n $datepicker.$build();\n };\n\n $datepicker.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n targetEl = targetEl.parent();\n }\n targetEl.triggerHandler('click');\n }\n };\n\n $datepicker.$onKeyDown = function (evt) {\n if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n if (evt.keyCode === 13) {\n if (!scope.$mode) {\n $datepicker.hide(true);\n } else {\n scope.$apply(function () { $datepicker.setMode(scope.$mode - 1); });\n }\n return;\n }\n\n // Navigate with keyboard\n $picker.onKeyDown(evt);\n parentScope.$digest();\n };\n\n // Private\n\n function updateSelected (el) {\n el.selected = $datepicker.$isSelected(el.date);\n }\n\n function focusElement () {\n element[0].focus();\n }\n\n // Overrides\n\n var _init = $datepicker.init;\n $datepicker.init = function () {\n if (isNative && options.useNative) {\n element.prop('type', 'date');\n element.css('-webkit-appearance', 'textfield');\n return;\n } else if (isTouch) {\n element.prop('type', 'text');\n element.attr('readonly', 'true');\n element.on('click', focusElement);\n }\n _init();\n };\n\n var _destroy = $datepicker.destroy;\n $datepicker.destroy = function () {\n if (isNative && options.useNative) {\n element.off('click', focusElement);\n }\n _destroy();\n };\n\n var _show = $datepicker.show;\n $datepicker.show = function () {\n if ((!isTouch && element.attr('readonly')) || element.attr('disabled')) return;\n _show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n // if $datepicker is no longer showing, don't setup events\n if (!$datepicker.$isShown) return;\n $datepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n if (options.keyboard) {\n element.on('keydown', $datepicker.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $datepicker.hide;\n $datepicker.hide = function (blur) {\n if (!$datepicker.$isShown) return;\n $datepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $datepicker.$onMouseDown);\n if (options.keyboard) {\n element.off('keydown', $datepicker.$onKeyDown);\n }\n _hide(blur);\n };\n\n return $datepicker;\n\n }\n\n DatepickerFactory.defaults = defaults;\n return DatepickerFactory;\n\n };\n\n })\n\n .directive('bsDatepicker', function ($window, $parse, $q, $dateFormatter, $dateParser, $datepicker) {\n\n // var defaults = $datepicker.defaults;\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'autoclose', 'dateType', 'dateFormat', 'timezone', 'modelDateFormat', 'dayFormat', 'strictFormat', 'startWeek', 'startDate', 'useNative', 'lang', 'startView', 'minView', 'iconLeft', 'iconRight', 'daysOfWeekDisabled', 'id', 'prefixClass', 'prefixEvent', 'hasToday', 'hasClear'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoclose', 'useNative', 'hasToday', 'hasClear'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Initialize datepicker\n var datepicker = $datepicker(element, controller, options);\n options = datepicker.$options;\n // Set expected iOS format\n if (isNative && options.useNative) options.dateFormat = 'yyyy-MM-dd';\n\n var lang = options.lang;\n\n var formatDate = function (date, format) {\n return $dateFormatter.formatDate(date, format, lang);\n };\n\n var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!datepicker || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(datepicker),?/i);\n if (newValue === true) {\n datepicker.show();\n } else {\n datepicker.hide();\n }\n });\n }\n\n // Observe attributes for changes\n angular.forEach(['minDate', 'maxDate'], function (key) {\n // console.warn('attr.$observe(%s)', key, attr[key]);\n if (angular.isDefined(attr[key])) {\n attr.$observe(key, function (newValue) {\n // console.warn('attr.$observe(%s)=%o', key, newValue);\n datepicker.$options[key] = dateParser.getDateForAttribute(key, newValue);\n // Build only if dirty\n if (!isNaN(datepicker.$options[key])) datepicker.$build(false);\n validateAgainstMinMaxDate(controller.$dateValue);\n });\n }\n });\n\n // Observe date format\n if (angular.isDefined(attr.dateFormat)) {\n attr.$observe('dateFormat', function (newValue) {\n datepicker.$options.dateFormat = newValue;\n });\n }\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n datepicker.update(controller.$dateValue);\n }, true);\n\n // Normalize undefined/null/empty array,\n // so that we don't treat changing from undefined->null as a change.\n function normalizeDateRanges (ranges) {\n if (!ranges || !ranges.length) return null;\n return ranges;\n }\n\n if (angular.isDefined(attr.disabledDates)) {\n scope.$watch(attr.disabledDates, function (disabledRanges, previousValue) {\n disabledRanges = normalizeDateRanges(disabledRanges);\n previousValue = normalizeDateRanges(previousValue);\n\n if (disabledRanges) {\n datepicker.updateDisabledDates(disabledRanges);\n }\n });\n }\n\n function validateAgainstMinMaxDate (parsedDate) {\n if (!angular.isDate(parsedDate)) return;\n var isMinValid = isNaN(datepicker.$options.minDate) || parsedDate.getTime() >= datepicker.$options.minDate;\n var isMaxValid = isNaN(datepicker.$options.maxDate) || parsedDate.getTime() <= datepicker.$options.maxDate;\n var isValid = isMinValid && isMaxValid;\n controller.$setValidity('date', isValid);\n controller.$setValidity('min', isMinValid);\n controller.$setValidity('max', isMaxValid);\n // Only update the model when we have a valid date\n if (isValid) controller.$dateValue = parsedDate;\n }\n\n // viewValue -> $parsers -> modelValue\n controller.$parsers.unshift(function (viewValue) {\n // console.warn('$parser(\"%s\"): viewValue=%o', element.attr('ng-model'), viewValue);\n var date;\n // Null values should correctly reset the model value & validity\n if (!viewValue) {\n controller.$setValidity('date', true);\n // BREAKING CHANGE:\n // return null (not undefined) when input value is empty, so angularjs 1.3\n // ngModelController can go ahead and run validators, like ngRequired\n return null;\n }\n var parsedDate = dateParser.parse(viewValue, controller.$dateValue);\n if (!parsedDate || isNaN(parsedDate.getTime())) {\n controller.$setValidity('date', false);\n // return undefined, causes ngModelController to\n // invalidate model value\n return;\n }\n validateAgainstMinMaxDate(parsedDate);\n\n if (options.dateType === 'string') {\n date = dateParser.timezoneOffsetAdjust(parsedDate, options.timezone, true);\n return formatDate(date, options.modelDateFormat || options.dateFormat);\n }\n date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n if (options.dateType === 'number') {\n return date.getTime();\n } else if (options.dateType === 'unix') {\n return date.getTime() / 1000;\n } else if (options.dateType === 'iso') {\n return date.toISOString();\n }\n return new Date(date);\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var date;\n if (angular.isUndefined(modelValue) || modelValue === null) {\n date = NaN;\n } else if (angular.isDate(modelValue)) {\n date = modelValue;\n } else if (options.dateType === 'string') {\n date = dateParser.parse(modelValue, null, options.modelDateFormat);\n } else if (options.dateType === 'unix') {\n date = new Date(modelValue * 1000);\n } else {\n date = new Date(modelValue);\n }\n // Setup default value?\n // if (isNaN(date.getTime())) {\n // var today = new Date();\n // date = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0);\n // }\n controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n return getDateFormattedString();\n });\n\n // viewValue -> element\n controller.$render = function () {\n // console.warn('$render(\"%s\"): viewValue=%o', element.attr('ng-model'), controller.$viewValue);\n element.val(getDateFormattedString());\n };\n\n function getDateFormattedString () {\n return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.dateFormat);\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (datepicker) datepicker.destroy();\n options = null;\n datepicker = null;\n });\n\n }\n };\n\n })\n\n .provider('datepickerViews', function () {\n\n // var defaults = this.defaults = {\n // dayFormat: 'dd',\n // daySplit: 7\n // };\n\n // Split array into smaller arrays\n function split (arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n }\n\n // Modulus operator\n function mod (n, m) {\n return ((n % m) + m) % m;\n }\n\n this.$get = function ($dateFormatter, $dateParser, $sce) {\n\n return function (picker) {\n\n var scope = picker.$scope;\n var options = picker.$options;\n\n var lang = options.lang;\n var formatDate = function (date, format) {\n return $dateFormatter.formatDate(date, format, lang);\n };\n var dateParser = $dateParser({format: options.dateFormat, lang: lang, strict: options.strictFormat});\n\n var weekDaysMin = $dateFormatter.weekdaysShort(lang);\n var weekDaysLabels = weekDaysMin.slice(options.startWeek).concat(weekDaysMin.slice(0, options.startWeek));\n var weekDaysLabelsHtml = $sce.trustAsHtml('' + weekDaysLabels.join('') + '');\n\n var startDate = picker.$date || (options.startDate ? dateParser.getDateForAttribute('startDate', options.startDate) : new Date());\n var viewDate = {year: startDate.getFullYear(), month: startDate.getMonth(), date: startDate.getDate()};\n\n var views = [{\n format: options.dayFormat,\n split: 7,\n steps: {month: 1},\n update: function (date, force) {\n if (!this.built || force || date.getFullYear() !== viewDate.year || date.getMonth() !== viewDate.month) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getDate() !== viewDate.date || date.getDate() === 1) {\n // chaging picker current month will cause viewDate.date to be set to first day of the month,\n // in $datepicker.$selectPane, so picker would not update selected day display if\n // user picks first day of the new month.\n // As a workaround, we are always forcing update when picked date is first day of month.\n viewDate.date = picker.$date.getDate();\n picker.$updateSelected();\n }\n },\n build: function () {\n var firstDayOfMonth = new Date(viewDate.year, viewDate.month, 1);\n var firstDayOfMonthOffset = firstDayOfMonth.getTimezoneOffset();\n var firstDate = new Date(+firstDayOfMonth - mod(firstDayOfMonth.getDay() - options.startWeek, 7) * 864e5);\n var firstDateOffset = firstDate.getTimezoneOffset();\n var today = dateParser.timezoneOffsetAdjust(new Date(), options.timezone).toDateString();\n // Handle daylight time switch\n if (firstDateOffset !== firstDayOfMonthOffset) firstDate = new Date(+firstDate + (firstDateOffset - firstDayOfMonthOffset) * 60e3);\n var days = [];\n var day;\n for (var i = 0; i < 42; i++) { // < 7 * 6\n day = dateParser.daylightSavingAdjust(new Date(firstDate.getFullYear(), firstDate.getMonth(), firstDate.getDate() + i));\n days.push({date: day, isToday: day.toDateString() === today, label: formatDate(day, this.format), selected: picker.$date && this.isSelected(day), muted: day.getMonth() !== viewDate.month, disabled: this.isDisabled(day)});\n }\n scope.title = formatDate(firstDayOfMonth, options.monthTitleFormat);\n scope.showLabels = true;\n scope.labels = weekDaysLabelsHtml;\n scope.rows = split(days, this.split);\n scope.isTodayDisabled = this.isDisabled(new Date());\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth() && date.getDate() === picker.$date.getDate();\n },\n isDisabled: function (date) {\n var time = date.getTime();\n\n // Disabled because of min/max date.\n if (time < options.minDate || time > options.maxDate) return true;\n\n // Disabled due to being a disabled day of the week\n if (options.daysOfWeekDisabled.indexOf(date.getDay()) !== -1) return true;\n\n // Disabled because of disabled date range.\n if (options.disabledDateRanges) {\n for (var i = 0; i < options.disabledDateRanges.length; i++) {\n if (time >= options.disabledDateRanges[i].start && time <= options.disabledDateRanges[i].end) {\n return true;\n }\n }\n }\n\n return false;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualTime = picker.$date.getTime();\n var newDate;\n\n if (evt.keyCode === 37) newDate = new Date(actualTime - 1 * 864e5);\n else if (evt.keyCode === 38) newDate = new Date(actualTime - 7 * 864e5);\n else if (evt.keyCode === 39) newDate = new Date(actualTime + 1 * 864e5);\n else if (evt.keyCode === 40) newDate = new Date(actualTime + 7 * 864e5);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }, {\n name: 'month',\n format: options.monthFormat,\n split: 4,\n steps: {year: 1},\n update: function (date, force) {\n if (!this.built || date.getFullYear() !== viewDate.year) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getMonth() !== viewDate.month) {\n angular.extend(viewDate, {month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$updateSelected();\n }\n },\n build: function () {\n // var firstMonth = new Date(viewDate.year, 0, 1);\n var months = [];\n var month;\n for (var i = 0; i < 12; i++) {\n month = new Date(viewDate.year, i, 1);\n months.push({date: month, label: formatDate(month, this.format), selected: picker.$isSelected(month), disabled: this.isDisabled(month)});\n }\n scope.title = formatDate(month, options.yearTitleFormat);\n scope.showLabels = false;\n scope.rows = split(months, this.split);\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear() && date.getMonth() === picker.$date.getMonth();\n },\n isDisabled: function (date) {\n var lastDate = +new Date(date.getFullYear(), date.getMonth() + 1, 0);\n return lastDate < options.minDate || date.getTime() > options.maxDate;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualMonth = picker.$date.getMonth();\n var newDate = new Date(picker.$date);\n\n if (evt.keyCode === 37) newDate.setMonth(actualMonth - 1);\n else if (evt.keyCode === 38) newDate.setMonth(actualMonth - 4);\n else if (evt.keyCode === 39) newDate.setMonth(actualMonth + 1);\n else if (evt.keyCode === 40) newDate.setMonth(actualMonth + 4);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }, {\n name: 'year',\n format: options.yearFormat,\n split: 4,\n steps: {year: 12},\n update: function (date, force) {\n if (!this.built || force || parseInt(date.getFullYear() / 20, 10) !== parseInt(viewDate.year / 20, 10)) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$build();\n } else if (date.getFullYear() !== viewDate.year) {\n angular.extend(viewDate, {year: picker.$date.getFullYear(), month: picker.$date.getMonth(), date: picker.$date.getDate()});\n picker.$updateSelected();\n }\n },\n build: function () {\n var firstYear = viewDate.year - viewDate.year % (this.split * 3);\n var years = [];\n var year;\n for (var i = 0; i < 12; i++) {\n year = new Date(firstYear + i, 0, 1);\n years.push({date: year, label: formatDate(year, this.format), selected: picker.$isSelected(year), disabled: this.isDisabled(year)});\n }\n scope.title = years[0].label + '-' + years[years.length - 1].label;\n scope.showLabels = false;\n scope.rows = split(years, this.split);\n this.built = true;\n },\n isSelected: function (date) {\n return picker.$date && date.getFullYear() === picker.$date.getFullYear();\n },\n isDisabled: function (date) {\n var lastDate = +new Date(date.getFullYear() + 1, 0, 0);\n return lastDate < options.minDate || date.getTime() > options.maxDate;\n },\n onKeyDown: function (evt) {\n if (!picker.$date) {\n return;\n }\n var actualYear = picker.$date.getFullYear();\n var newDate = new Date(picker.$date);\n\n if (evt.keyCode === 37) newDate.setYear(actualYear - 1);\n else if (evt.keyCode === 38) newDate.setYear(actualYear - 4);\n else if (evt.keyCode === 39) newDate.setYear(actualYear + 1);\n else if (evt.keyCode === 40) newDate.setYear(actualYear + 4);\n\n if (!this.isDisabled(newDate)) picker.select(newDate, true);\n }\n }];\n\n return {\n views: options.minView ? Array.prototype.slice.call(views, options.minView) : views,\n viewDate: viewDate\n };\n\n };\n\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.tooltip', ['mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$tooltip', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n customClass: '',\n prefixClass: 'tooltip',\n prefixEvent: 'tooltip',\n container: false,\n target: false,\n placement: 'top',\n templateUrl: 'tooltip/tooltip.tpl.html',\n template: '',\n titleTemplate: false,\n trigger: 'hover focus',\n keyboard: false,\n html: false,\n show: false,\n title: '',\n type: '',\n delay: 0,\n autoClose: false,\n bsEnabled: true,\n mouseDownPreventDefault: true,\n mouseDownStopPropagation: true,\n viewport: {\n selector: 'body',\n padding: 0\n }\n };\n\n this.$get = function ($window, $rootScope, $bsCompiler, $q, $templateCache, $http, $animate, $sce, dimensions, $$rAF, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n var $body = angular.element($window.document);\n\n function TooltipFactory (element, config) {\n\n var $tooltip = {};\n\n // Common vars\n var options = $tooltip.$options = angular.extend({}, defaults, config);\n var promise = $tooltip.$promise = $bsCompiler.compile(options);\n var scope = $tooltip.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n var nodeName = element[0].nodeName.toLowerCase();\n if (options.delay && angular.isString(options.delay)) {\n var split = options.delay.split(',').map(parseFloat);\n options.delay = split.length > 1 ? {show: split[0], hide: split[1]} : split[0];\n }\n\n // Store $id to identify the triggering element in events\n // give priority to options.id, otherwise, try to use\n // element id if defined\n $tooltip.$id = options.id || element.attr('id') || '';\n\n // Support scope as string options\n if (options.title) {\n scope.title = $sce.trustAsHtml(options.title);\n }\n\n // Provide scope helpers\n scope.$setEnabled = function (isEnabled) {\n scope.$$postDigest(function () {\n $tooltip.setEnabled(isEnabled);\n });\n };\n scope.$hide = function () {\n scope.$$postDigest(function () {\n $tooltip.hide();\n });\n };\n scope.$show = function () {\n scope.$$postDigest(function () {\n $tooltip.show();\n });\n };\n scope.$toggle = function () {\n scope.$$postDigest(function () {\n $tooltip.toggle();\n });\n };\n // Publish isShown as a protected var on scope\n $tooltip.$isShown = scope.$isShown = false;\n\n // Private vars\n var timeout;\n var hoverState;\n\n // Fetch, compile then initialize tooltip\n var compileData;\n var tipElement;\n var tipContainer;\n var tipScope;\n promise.then(function (data) {\n compileData = data;\n $tooltip.init();\n });\n\n $tooltip.init = function () {\n\n // Options: delay\n if (options.delay && angular.isNumber(options.delay)) {\n options.delay = {\n show: options.delay,\n hide: options.delay\n };\n }\n\n // Replace trigger on touch devices ?\n // if(isTouch && options.trigger === defaults.trigger) {\n // options.trigger.replace(/hover/g, 'click');\n // }\n\n // Options : container\n if (options.container === 'self') {\n tipContainer = element;\n } else if (angular.isElement(options.container)) {\n tipContainer = options.container;\n } else if (options.container) {\n tipContainer = findElement(options.container);\n }\n\n // Options: trigger\n bindTriggerEvents();\n\n // Options: target\n if (options.target) {\n options.target = angular.isElement(options.target) ? options.target : findElement(options.target);\n }\n\n // Options: show\n if (options.show) {\n scope.$$postDigest(function () {\n if (options.trigger === 'focus') {\n element[0].focus();\n } else {\n $tooltip.show();\n }\n });\n }\n\n };\n\n $tooltip.destroy = function () {\n\n // Unbind events\n unbindTriggerEvents();\n\n // Remove element\n destroyTipElement();\n\n // Destroy scope\n scope.$destroy();\n\n };\n\n $tooltip.enter = function () {\n\n clearTimeout(timeout);\n hoverState = 'in';\n if (!options.delay || !options.delay.show) {\n return $tooltip.show();\n }\n\n timeout = setTimeout(function () {\n if (hoverState === 'in') $tooltip.show();\n }, options.delay.show);\n\n };\n\n $tooltip.show = function () {\n if (!options.bsEnabled || $tooltip.$isShown) return;\n\n scope.$emit(options.prefixEvent + '.show.before', $tooltip);\n if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n options.onBeforeShow($tooltip);\n }\n var parent;\n var after;\n if (options.container) {\n parent = tipContainer;\n if (tipContainer[0].lastChild) {\n after = angular.element(tipContainer[0].lastChild);\n } else {\n after = null;\n }\n } else {\n parent = null;\n after = element;\n }\n\n\n // Hide any existing tipElement\n if (tipElement) destroyTipElement();\n // Fetch a cloned element linked from template\n tipScope = $tooltip.$scope.$new();\n tipElement = $tooltip.$element = compileData.link(tipScope, function (clonedElement, scope) {});\n\n // Set the initial positioning. Make the tooltip invisible\n // so IE doesn't try to focus on it off screen.\n tipElement.css({top: '-9999px', left: '-9999px', right: 'auto', display: 'block', visibility: 'hidden'});\n\n // Options: animation\n if (options.animation) tipElement.addClass(options.animation);\n // Options: type\n if (options.type) tipElement.addClass(options.prefixClass + '-' + options.type);\n // Options: custom classes\n if (options.customClass) tipElement.addClass(options.customClass);\n\n // Append the element, without any animations. If we append\n // using $animate.enter, some of the animations cause the placement\n // to be off due to the transforms.\n if (after) {\n after.after(tipElement);\n } else {\n parent.prepend(tipElement);\n }\n\n $tooltip.$isShown = scope.$isShown = true;\n safeDigest(scope);\n\n // Now, apply placement\n $tooltip.$applyPlacement();\n\n // Once placed, animate it.\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.enter(tipElement, parent, after, enterAnimateCallback);\n } else {\n $animate.enter(tipElement, parent, after).then(enterAnimateCallback);\n }\n safeDigest(scope);\n\n $$rAF(function () {\n // Once the tooltip is placed and the animation starts, make the tooltip visible\n if (tipElement) tipElement.css({visibility: 'visible'});\n\n // Bind events\n if (options.keyboard) {\n if (options.trigger !== 'focus') {\n $tooltip.focus();\n }\n bindKeyboardEvents();\n }\n });\n\n if (options.autoClose) {\n bindAutoCloseEvents();\n }\n\n };\n\n function enterAnimateCallback () {\n scope.$emit(options.prefixEvent + '.show', $tooltip);\n if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n options.onShow($tooltip);\n }\n }\n\n $tooltip.leave = function () {\n\n clearTimeout(timeout);\n hoverState = 'out';\n if (!options.delay || !options.delay.hide) {\n return $tooltip.hide();\n }\n timeout = setTimeout(function () {\n if (hoverState === 'out') {\n $tooltip.hide();\n }\n }, options.delay.hide);\n\n };\n\n var _blur;\n var _tipToHide;\n $tooltip.hide = function (blur) {\n\n if (!$tooltip.$isShown) return;\n scope.$emit(options.prefixEvent + '.hide.before', $tooltip);\n if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n options.onBeforeHide($tooltip);\n }\n\n // store blur value for leaveAnimateCallback to use\n _blur = blur;\n\n // store current tipElement reference to use\n // in leaveAnimateCallback\n _tipToHide = tipElement;\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.leave(tipElement, leaveAnimateCallback);\n } else {\n $animate.leave(tipElement).then(leaveAnimateCallback);\n }\n\n $tooltip.$isShown = scope.$isShown = false;\n safeDigest(scope);\n\n // Unbind events\n if (options.keyboard && tipElement !== null) {\n unbindKeyboardEvents();\n }\n\n if (options.autoClose && tipElement !== null) {\n unbindAutoCloseEvents();\n }\n };\n\n function leaveAnimateCallback () {\n scope.$emit(options.prefixEvent + '.hide', $tooltip);\n if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n options.onHide($tooltip);\n }\n\n // check if current tipElement still references\n // the same element when hide was called\n if (tipElement === _tipToHide) {\n // Allow to blur the input when hidden, like when pressing enter key\n if (_blur && options.trigger === 'focus') {\n return element[0].blur();\n }\n\n // clean up child scopes\n destroyTipElement();\n }\n }\n\n $tooltip.toggle = function (evt) {\n if (evt) { evt.preventDefault(); }\n if ($tooltip.$isShown) {\n $tooltip.leave();\n } else {\n $tooltip.enter();\n }\n };\n\n $tooltip.focus = function () {\n tipElement[0].focus();\n };\n\n $tooltip.setEnabled = function (isEnabled) {\n options.bsEnabled = isEnabled;\n };\n\n $tooltip.setViewport = function (viewport) {\n options.viewport = viewport;\n };\n\n // Protected methods\n\n $tooltip.$applyPlacement = function () {\n if (!tipElement) return;\n\n // Determine if we're doing an auto or normal placement\n var placement = options.placement;\n var autoToken = /\\s?auto?\\s?/i;\n var autoPlace = autoToken.test(placement);\n\n if (autoPlace) {\n placement = placement.replace(autoToken, '') || defaults.placement;\n }\n\n // Need to add the position class before we get\n // the offsets\n tipElement.addClass(options.placement);\n\n // Get the position of the target element\n // and the height and width of the tooltip so we can center it.\n var elementPosition = getPosition();\n var tipWidth = tipElement.prop('offsetWidth');\n var tipHeight = tipElement.prop('offsetHeight');\n\n // Refresh viewport position\n $tooltip.$viewport = options.viewport && findElement(options.viewport.selector || options.viewport);\n\n // If we're auto placing, we need to check the positioning\n if (autoPlace) {\n var originalPlacement = placement;\n var viewportPosition = getPosition($tooltip.$viewport);\n\n if (/bottom/.test(originalPlacement) && elementPosition.bottom + tipHeight > viewportPosition.bottom) {\n placement = originalPlacement.replace('bottom', 'top');\n } else if (/top/.test(originalPlacement) && elementPosition.top - tipHeight < viewportPosition.top) {\n placement = originalPlacement.replace('top', 'bottom');\n }\n\n if (/left/.test(originalPlacement) && elementPosition.left - tipWidth < viewportPosition.left) {\n placement = placement.replace('left', 'right');\n } else if (/right/.test(originalPlacement) && elementPosition.right + tipWidth > viewportPosition.width) {\n placement = placement.replace('right', 'left');\n }\n\n tipElement.removeClass(originalPlacement).addClass(placement);\n }\n\n // Get the tooltip's top and left coordinates to center it with this directive.\n var tipPosition = getCalculatedOffset(placement, elementPosition, tipWidth, tipHeight);\n applyPlacement(tipPosition, placement);\n };\n\n $tooltip.$onKeyUp = function (evt) {\n if (evt.which === 27 && $tooltip.$isShown) {\n $tooltip.hide();\n evt.stopPropagation();\n }\n };\n\n $tooltip.$onFocusKeyUp = function (evt) {\n if (evt.which === 27) {\n element[0].blur();\n evt.stopPropagation();\n }\n };\n\n $tooltip.$onFocusElementMouseDown = function (evt) {\n if (options.mouseDownPreventDefault) { evt.preventDefault(); }\n if (options.mouseDownStopPropagation) { evt.stopPropagation(); }\n // Some browsers do not auto-focus buttons (eg. Safari)\n if ($tooltip.$isShown) {\n element[0].blur();\n } else {\n element[0].focus();\n }\n };\n\n // bind/unbind events\n function bindTriggerEvents () {\n var triggers = options.trigger.split(' ');\n angular.forEach(triggers, function (trigger) {\n if (trigger === 'click' || trigger === 'contextmenu') {\n element.on(trigger, $tooltip.toggle);\n } else if (trigger !== 'manual') {\n element.on(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n element.on(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n if (nodeName === 'button' && trigger !== 'hover') {\n element.on(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n }\n }\n });\n }\n\n function unbindTriggerEvents () {\n var triggers = options.trigger.split(' ');\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i];\n if (trigger === 'click' || trigger === 'contextmenu') {\n element.off(trigger, $tooltip.toggle);\n } else if (trigger !== 'manual') {\n element.off(trigger === 'hover' ? 'mouseenter' : 'focus', $tooltip.enter);\n element.off(trigger === 'hover' ? 'mouseleave' : 'blur', $tooltip.leave);\n if (nodeName === 'button' && trigger !== 'hover') {\n element.off(isTouch ? 'touchstart' : 'mousedown', $tooltip.$onFocusElementMouseDown);\n }\n }\n }\n }\n\n function bindKeyboardEvents () {\n if (options.trigger !== 'focus') {\n tipElement.on('keyup', $tooltip.$onKeyUp);\n } else {\n element.on('keyup', $tooltip.$onFocusKeyUp);\n }\n }\n\n function unbindKeyboardEvents () {\n if (options.trigger !== 'focus') {\n tipElement.off('keyup', $tooltip.$onKeyUp);\n } else {\n element.off('keyup', $tooltip.$onFocusKeyUp);\n }\n }\n\n var _autoCloseEventsBinded = false;\n function bindAutoCloseEvents () {\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n // Stop propagation when clicking inside tooltip\n tipElement.on('click', stopEventPropagation);\n\n // Hide when clicking outside tooltip\n $body.on('click', $tooltip.hide);\n\n _autoCloseEventsBinded = true;\n }, 0, false);\n }\n\n function unbindAutoCloseEvents () {\n if (_autoCloseEventsBinded) {\n tipElement.off('click', stopEventPropagation);\n $body.off('click', $tooltip.hide);\n _autoCloseEventsBinded = false;\n }\n }\n\n function stopEventPropagation (event) {\n event.stopPropagation();\n }\n\n // Private methods\n\n function getPosition ($element) {\n $element = $element || (options.target || element);\n\n var el = $element[0];\n var isBody = el.tagName === 'BODY';\n\n var elRect = el.getBoundingClientRect();\n var rect = {};\n\n // IE8 has issues with angular.extend and using elRect directly.\n // By coping the values of elRect into a new object, we can continue to use extend\n /* eslint-disable guard-for-in */\n for (var p in elRect) { // eslint-disable-line\n // DO NOT use hasOwnProperty when inspecting the return of getBoundingClientRect.\n rect[p] = elRect[p];\n }\n /* eslint-enable guard-for-in */\n\n if (rect.width === null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n rect = angular.extend({}, rect, {width: elRect.right - elRect.left, height: elRect.bottom - elRect.top});\n }\n var elOffset = isBody ? {top: 0, left: 0} : dimensions.offset(el);\n var scroll = {scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.prop('scrollTop') || 0};\n var outerDims = isBody ? {width: document.documentElement.clientWidth, height: $window.innerHeight} : null;\n\n return angular.extend({}, rect, scroll, outerDims, elOffset);\n }\n\n function getCalculatedOffset (placement, position, actualWidth, actualHeight) {\n var offset;\n var split = placement.split('-');\n\n switch (split[0]) {\n case 'right':\n offset = {\n top: position.top + position.height / 2 - actualHeight / 2,\n left: position.left + position.width\n };\n break;\n case 'bottom':\n offset = {\n top: position.top + position.height,\n left: position.left + position.width / 2 - actualWidth / 2\n };\n break;\n case 'left':\n offset = {\n top: position.top + position.height / 2 - actualHeight / 2,\n left: position.left - actualWidth\n };\n break;\n default:\n offset = {\n top: position.top - actualHeight,\n left: position.left + position.width / 2 - actualWidth / 2\n };\n break;\n }\n\n if (!split[1]) {\n return offset;\n }\n\n // Add support for corners @todo css\n if (split[0] === 'top' || split[0] === 'bottom') {\n switch (split[1]) {\n case 'left':\n offset.left = position.left;\n break;\n case 'right':\n offset.left = position.left + position.width - actualWidth;\n break;\n default:\n break;\n }\n } else if (split[0] === 'left' || split[0] === 'right') {\n switch (split[1]) {\n case 'top':\n offset.top = position.top - actualHeight + position.height;\n break;\n case 'bottom':\n offset.top = position.top;\n break;\n default:\n break;\n }\n }\n\n return offset;\n }\n\n function applyPlacement (offset, placement) {\n var tip = tipElement[0];\n var width = tip.offsetWidth;\n var height = tip.offsetHeight;\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt(dimensions.css(tip, 'margin-top'), 10);\n var marginLeft = parseInt(dimensions.css(tip, 'margin-left'), 10);\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0;\n if (isNaN(marginLeft)) marginLeft = 0;\n\n offset.top = offset.top + marginTop;\n offset.left = offset.left + marginLeft;\n\n // dimensions setOffset doesn't round pixel values\n // so we use setOffset directly with our own function\n dimensions.setOffset(tip, angular.extend({\n using: function (props) {\n tipElement.css({\n top: Math.round(props.top) + 'px',\n left: Math.round(props.left) + 'px',\n right: ''\n });\n }\n }, offset), 0);\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = tip.offsetWidth;\n var actualHeight = tip.offsetHeight;\n\n if (placement === 'top' && actualHeight !== height) {\n offset.top = offset.top + height - actualHeight;\n }\n\n // If it's an exotic placement, exit now instead of\n // applying a delta and changing the arrow\n if (/top-left|top-right|bottom-left|bottom-right/.test(placement)) return;\n\n var delta = getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight);\n\n if (delta.left) {\n offset.left += delta.left;\n } else {\n offset.top += delta.top;\n }\n\n dimensions.setOffset(tip, offset);\n\n if (/top|right|bottom|left/.test(placement)) {\n var isVertical = /top|bottom/.test(placement);\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight;\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight';\n\n replaceArrow(arrowDelta, tip[arrowOffsetPosition], isVertical);\n }\n }\n\n // @source https://github.com/twbs/bootstrap/blob/v3.3.5/js/tooltip.js#L380\n function getViewportAdjustedDelta (placement, position, actualWidth, actualHeight) {\n var delta = {top: 0, left: 0};\n if (!$tooltip.$viewport) return delta;\n\n var viewportPadding = options.viewport && options.viewport.padding || 0;\n var viewportDimensions = getPosition($tooltip.$viewport);\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = position.top - viewportPadding - viewportDimensions.scroll;\n var bottomEdgeOffset = position.top + viewportPadding - viewportDimensions.scroll + actualHeight;\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset;\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset;\n }\n } else {\n var leftEdgeOffset = position.left - viewportPadding;\n var rightEdgeOffset = position.left + viewportPadding + actualWidth;\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset;\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset;\n }\n }\n\n return delta;\n }\n\n function replaceArrow (delta, dimension, isHorizontal) {\n var $arrow = findElement('.tooltip-arrow, .arrow', tipElement[0]);\n\n $arrow.css(isHorizontal ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isHorizontal ? 'top' : 'left', '');\n }\n\n function destroyTipElement () {\n // Cancel pending callbacks\n clearTimeout(timeout);\n\n if ($tooltip.$isShown && tipElement !== null) {\n if (options.autoClose) {\n unbindAutoCloseEvents();\n }\n\n if (options.keyboard) {\n unbindKeyboardEvents();\n }\n }\n\n if (tipScope) {\n tipScope.$destroy();\n tipScope = null;\n }\n\n if (tipElement) {\n tipElement.remove();\n tipElement = $tooltip.$element = null;\n }\n }\n\n return $tooltip;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n return TooltipFactory;\n\n };\n\n })\n\n .directive('bsTooltip', function ($window, $location, $sce, $parse, $tooltip, $$rAF) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n var tooltip;\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'titleTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'backdropAnimation', 'type', 'customClass', 'id'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // should not parse target attribute (anchor tag), only data-target #1454\n var dataTarget = element.attr('data-target');\n if (angular.isDefined(dataTarget)) {\n if (falseValueRegExp.test(dataTarget)) {\n options.target = false;\n } else {\n options.target = dataTarget;\n }\n }\n\n // overwrite inherited title value when no value specified\n // fix for angular 1.3.1 531a8de72c439d8ddd064874bf364c00cedabb11\n if (!scope.hasOwnProperty('title')) {\n scope.title = '';\n }\n\n // Observe scope attributes for change\n attr.$observe('title', function (newValue) {\n if (angular.isDefined(newValue) || !scope.hasOwnProperty('title')) {\n var oldValue = scope.title;\n scope.title = $sce.trustAsHtml(newValue);\n if (angular.isDefined(oldValue)) {\n $$rAF(function () {\n if (tooltip) tooltip.$applyPlacement();\n });\n }\n }\n });\n\n attr.$observe('disabled', function (newValue) {\n if (newValue && tooltip.$isShown) {\n tooltip.hide();\n }\n });\n\n // Support scope as an object\n if (attr.bsTooltip) {\n scope.$watch(attr.bsTooltip, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.title = newValue;\n }\n if (angular.isDefined(oldValue)) {\n $$rAF(function () {\n if (tooltip) tooltip.$applyPlacement();\n });\n }\n }, true);\n }\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!tooltip || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(tooltip),?/i);\n if (newValue === true) {\n tooltip.show();\n } else {\n tooltip.hide();\n }\n });\n }\n\n // Enabled binding support\n if (attr.bsEnabled) {\n scope.$watch(attr.bsEnabled, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.bsEnabled, newValue, oldValue);\n if (!tooltip || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(tooltip),?/i);\n if (newValue === false) {\n tooltip.setEnabled(false);\n } else {\n tooltip.setEnabled(true);\n }\n });\n }\n\n // Viewport support\n if (attr.viewport) {\n scope.$watch(attr.viewport, function (newValue) {\n if (!tooltip || !angular.isDefined(newValue)) return;\n tooltip.setViewport(newValue);\n });\n }\n\n // Initialize popover\n tooltip = $tooltip(element, options);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (tooltip) tooltip.destroy();\n options = null;\n tooltip = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.timepicker', ['mgcrea.ngStrap.helpers.dateParser', 'mgcrea.ngStrap.helpers.dateFormatter', 'mgcrea.ngStrap.tooltip'])\n\n .provider('$timepicker', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n defaultDate: 'auto',\n // uncommenting the following line will break backwards compatability\n // prefixEvent: 'timepicker',\n prefixClass: 'timepicker',\n placement: 'bottom-left',\n templateUrl: 'timepicker/timepicker.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n // lang: $locale.id,\n useNative: true,\n timeType: 'date',\n timeFormat: 'shortTime',\n timezone: null,\n modelTimeFormat: null,\n autoclose: false,\n minTime: -Infinity,\n maxTime: +Infinity,\n length: 5,\n hourStep: 1,\n minuteStep: 5,\n secondStep: 5,\n roundDisplay: false,\n iconUp: 'glyphicon glyphicon-chevron-up',\n iconDown: 'glyphicon glyphicon-chevron-down',\n arrowBehavior: 'pager'\n };\n\n this.$get = function ($window, $document, $rootScope, $sce, $dateFormatter, $tooltip, $timeout) {\n\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n if (!defaults.lang) {\n defaults.lang = $dateFormatter.getDefaultLocale();\n }\n\n function timepickerFactory (element, controller, config) {\n\n var $timepicker = $tooltip(element, angular.extend({}, defaults, config));\n var parentScope = config.scope;\n var options = $timepicker.$options;\n var scope = $timepicker.$scope;\n\n var lang = options.lang;\n var formatDate = function (date, format, timezone) {\n return $dateFormatter.formatDate(date, format, lang, timezone);\n };\n\n function floorMinutes (time) {\n // coeff used to floor current time to nearest minuteStep interval\n var coeff = 1000 * 60 * options.minuteStep;\n return new Date(Math.floor(time.getTime() / coeff) * coeff);\n }\n\n // View vars\n\n var selectedIndex = 0;\n var defaultDate = options.roundDisplay ? floorMinutes(new Date()) : new Date();\n var startDate = controller.$dateValue || defaultDate;\n var viewDate = {\n hour: startDate.getHours(),\n meridian: startDate.getHours() < 12,\n minute: startDate.getMinutes(),\n second: startDate.getSeconds(),\n millisecond: startDate.getMilliseconds()\n };\n\n var format = $dateFormatter.getDatetimeFormat(options.timeFormat, lang);\n\n var hoursFormat = $dateFormatter.hoursFormat(format);\n var timeSeparator = $dateFormatter.timeSeparator(format);\n var minutesFormat = $dateFormatter.minutesFormat(format);\n var secondsFormat = $dateFormatter.secondsFormat(format);\n var showSeconds = $dateFormatter.showSeconds(format);\n var showAM = $dateFormatter.showAM(format);\n\n scope.$iconUp = options.iconUp;\n scope.$iconDown = options.iconDown;\n\n // Scope methods\n\n scope.$select = function (date, index) {\n $timepicker.select(date, index);\n };\n scope.$moveIndex = function (value, index) {\n $timepicker.$moveIndex(value, index);\n };\n scope.$switchMeridian = function (date) {\n $timepicker.switchMeridian(date);\n };\n\n // Public methods\n\n $timepicker.update = function (date) {\n // console.warn('$timepicker.update() newValue=%o', date);\n if (angular.isDate(date) && !isNaN(date.getTime())) {\n $timepicker.$date = date;\n angular.extend(viewDate, {\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds(),\n millisecond: date.getMilliseconds()\n });\n $timepicker.$build();\n } else if (!$timepicker.$isBuilt) {\n $timepicker.$build();\n }\n };\n\n $timepicker.select = function (date, index, keep) {\n // console.warn('$timepicker.select', date, scope.$mode);\n if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n controller.$dateValue = options.defaultDate === 'today' ? new Date() : new Date(1970, 0, 1);\n }\n\n if (!angular.isDate(date)) date = new Date(date);\n if (index === 0) controller.$dateValue.setHours(date.getHours());\n else if (index === 1) controller.$dateValue.setMinutes(date.getMinutes());\n else if (index === 2) controller.$dateValue.setSeconds(date.getSeconds());\n controller.$setViewValue(angular.copy(controller.$dateValue));\n controller.$render();\n if (options.autoclose && !keep) {\n $timeout(function () {\n $timepicker.hide(true);\n });\n }\n };\n\n $timepicker.switchMeridian = function (date) {\n if (!controller.$dateValue || isNaN(controller.$dateValue.getTime())) {\n return;\n }\n var hours = (date || controller.$dateValue).getHours();\n controller.$dateValue.setHours(hours < 12 ? hours + 12 : hours - 12);\n controller.$setViewValue(angular.copy(controller.$dateValue));\n controller.$render();\n };\n\n // Protected methods\n\n $timepicker.$build = function () {\n // console.warn('$timepicker.$build() viewDate=%o', viewDate);\n var i;\n var midIndex = scope.midIndex = parseInt(options.length / 2, 10);\n var hours = [];\n var hour;\n for (i = 0; i < options.length; i++) {\n hour = new Date(1970, 0, 1, viewDate.hour - (midIndex - i) * options.hourStep);\n hours.push({\n date: hour,\n label: formatDate(hour, hoursFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(hour, 0),\n disabled: $timepicker.$isDisabled(hour, 0)\n });\n }\n var minutes = [];\n var minute;\n for (i = 0; i < options.length; i++) {\n minute = new Date(1970, 0, 1, 0, viewDate.minute - (midIndex - i) * options.minuteStep);\n minutes.push({\n date: minute,\n label: formatDate(minute, minutesFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(minute, 1),\n disabled: $timepicker.$isDisabled(minute, 1)\n });\n }\n var seconds = [];\n var second;\n for (i = 0; i < options.length; i++) {\n second = new Date(1970, 0, 1, 0, 0, viewDate.second - (midIndex - i) * options.secondStep);\n seconds.push({\n date: second,\n label: formatDate(second, secondsFormat),\n selected: $timepicker.$date && $timepicker.$isSelected(second, 2),\n disabled: $timepicker.$isDisabled(second, 2)\n });\n }\n\n var rows = [];\n for (i = 0; i < options.length; i++) {\n if (showSeconds) {\n rows.push([hours[i], minutes[i], seconds[i]]);\n } else {\n rows.push([hours[i], minutes[i]]);\n }\n }\n scope.rows = rows;\n scope.showSeconds = showSeconds;\n scope.showAM = showAM;\n scope.isAM = ($timepicker.$date || hours[midIndex].date).getHours() < 12;\n scope.timeSeparator = timeSeparator;\n $timepicker.$isBuilt = true;\n };\n\n $timepicker.$isSelected = function (date, index) {\n if (!$timepicker.$date) return false;\n else if (index === 0) {\n return date.getHours() === $timepicker.$date.getHours();\n } else if (index === 1) {\n return date.getMinutes() === $timepicker.$date.getMinutes();\n } else if (index === 2) {\n return date.getSeconds() === $timepicker.$date.getSeconds();\n }\n };\n\n $timepicker.$isDisabled = function (date, index) {\n var selectedTime;\n if (index === 0) {\n selectedTime = date.getTime() + viewDate.minute * 6e4 + viewDate.second * 1e3;\n } else if (index === 1) {\n selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.second * 1e3;\n } else if (index === 2) {\n selectedTime = date.getTime() + viewDate.hour * 36e5 + viewDate.minute * 6e4;\n }\n return selectedTime < options.minTime * 1 || selectedTime > options.maxTime * 1;\n };\n\n scope.$arrowAction = function (value, index) {\n if (options.arrowBehavior === 'picker') {\n $timepicker.$setTimeByStep(value, index);\n } else {\n $timepicker.$moveIndex(value, index);\n }\n };\n\n $timepicker.$setTimeByStep = function (value, index) {\n var newDate = new Date($timepicker.$date || startDate);\n var hours = newDate.getHours();\n var minutes = newDate.getMinutes();\n var seconds = newDate.getSeconds();\n if (index === 0) {\n newDate.setHours(hours - (parseInt(options.hourStep, 10) * value));\n } else if (index === 1) {\n newDate.setMinutes(minutes - (parseInt(options.minuteStep, 10) * value));\n } else if (index === 2) {\n newDate.setSeconds(seconds - (parseInt(options.secondStep, 10) * value));\n }\n $timepicker.select(newDate, index, true);\n };\n\n $timepicker.$moveIndex = function (value, index) {\n var targetDate;\n if (index === 0) {\n targetDate = new Date(1970, 0, 1, viewDate.hour + (value * options.length), viewDate.minute, viewDate.second);\n angular.extend(viewDate, {\n hour: targetDate.getHours()\n });\n } else if (index === 1) {\n targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute + (value * options.length * options.minuteStep), viewDate.second);\n angular.extend(viewDate, {\n minute: targetDate.getMinutes()\n });\n } else if (index === 2) {\n targetDate = new Date(1970, 0, 1, viewDate.hour, viewDate.minute, viewDate.second + (value * options.length * options.secondStep));\n angular.extend(viewDate, {\n second: targetDate.getSeconds()\n });\n }\n $timepicker.$build();\n };\n\n $timepicker.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n if (evt.target.nodeName.toLowerCase() !== 'input') evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n if (targetEl[0].nodeName.toLowerCase() !== 'button') {\n targetEl = targetEl.parent();\n }\n targetEl.triggerHandler('click');\n }\n };\n\n $timepicker.$onKeyDown = function (evt) {\n if (!/(38|37|39|40|13)/.test(evt.keyCode) || evt.shiftKey || evt.altKey) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n // Close on enter\n if (evt.keyCode === 13) {\n $timepicker.hide(true);\n return;\n }\n\n // Navigate with keyboard\n var newDate = new Date($timepicker.$date);\n var hours = newDate.getHours();\n var hoursLength = formatDate(newDate, hoursFormat).length;\n var minutes = newDate.getMinutes();\n var minutesLength = formatDate(newDate, minutesFormat).length;\n var seconds = newDate.getSeconds();\n var secondsLength = formatDate(newDate, secondsFormat).length;\n var sepLength = 1;\n var lateralMove = /(37|39)/.test(evt.keyCode);\n var count = 2 + showSeconds * 1 + showAM * 1;\n\n // Navigate indexes (left, right)\n if (lateralMove) {\n if (evt.keyCode === 37) selectedIndex = selectedIndex < 1 ? count - 1 : selectedIndex - 1;\n else if (evt.keyCode === 39) selectedIndex = selectedIndex < count - 1 ? selectedIndex + 1 : 0;\n }\n\n // Update values (up, down)\n var selectRange = [0, hoursLength];\n var incr = 0;\n if (evt.keyCode === 38) incr = -1;\n if (evt.keyCode === 40) incr = +1;\n var isSeconds = selectedIndex === 2 && showSeconds;\n var isMeridian = selectedIndex === 2 && !showSeconds || selectedIndex === 3 && showSeconds;\n if (selectedIndex === 0) {\n newDate.setHours(hours + incr * parseInt(options.hourStep, 10));\n // re-calculate hours length because we have changed hours value\n hoursLength = formatDate(newDate, hoursFormat).length;\n selectRange = [0, hoursLength];\n } else if (selectedIndex === 1) {\n newDate.setMinutes(minutes + incr * parseInt(options.minuteStep, 10));\n // re-calculate minutes length because we have changes minutes value\n minutesLength = formatDate(newDate, minutesFormat).length;\n selectRange = [hoursLength + sepLength, minutesLength];\n } else if (isSeconds) {\n newDate.setSeconds(seconds + incr * parseInt(options.secondStep, 10));\n // re-calculate seconds length because we have changes seconds value\n secondsLength = formatDate(newDate, secondsFormat).length;\n selectRange = [hoursLength + sepLength + minutesLength + sepLength, secondsLength];\n } else if (isMeridian) {\n if (!lateralMove) $timepicker.switchMeridian();\n selectRange = [hoursLength + sepLength + minutesLength + sepLength + (secondsLength + sepLength) * showSeconds, 2];\n }\n $timepicker.select(newDate, selectedIndex, true);\n createSelection(selectRange[0], selectRange[1]);\n parentScope.$digest();\n };\n\n // Private\n\n function createSelection (start, length) {\n var end = start + length;\n if (element[0].createTextRange) {\n var selRange = element[0].createTextRange();\n selRange.collapse(true);\n selRange.moveStart('character', start);\n selRange.moveEnd('character', end);\n selRange.select();\n } else if (element[0].setSelectionRange) {\n element[0].setSelectionRange(start, end);\n } else if (angular.isUndefined(element[0].selectionStart)) {\n element[0].selectionStart = start;\n element[0].selectionEnd = end;\n }\n }\n\n function focusElement () {\n element[0].focus();\n }\n\n // Overrides\n\n var _init = $timepicker.init;\n $timepicker.init = function () {\n if (isNative && options.useNative) {\n element.prop('type', 'time');\n element.css('-webkit-appearance', 'textfield');\n return;\n } else if (isTouch) {\n element.prop('type', 'text');\n element.attr('readonly', 'true');\n element.on('click', focusElement);\n }\n _init();\n };\n\n var _destroy = $timepicker.destroy;\n $timepicker.destroy = function () {\n if (isNative && options.useNative) {\n element.off('click', focusElement);\n }\n _destroy();\n };\n\n var _show = $timepicker.show;\n $timepicker.show = function () {\n if ((!isTouch && element.attr('readonly')) || element.attr('disabled')) return;\n _show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n if ($timepicker.$element) $timepicker.$element.on(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n if (options.keyboard) {\n if (element) element.on('keydown', $timepicker.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $timepicker.hide;\n $timepicker.hide = function (blur) {\n if (!$timepicker.$isShown) return;\n if ($timepicker.$element) $timepicker.$element.off(isTouch ? 'touchstart' : 'mousedown', $timepicker.$onMouseDown);\n if (options.keyboard) {\n if (element) element.off('keydown', $timepicker.$onKeyDown);\n }\n _hide(blur);\n };\n\n return $timepicker;\n\n }\n\n timepickerFactory.defaults = defaults;\n return timepickerFactory;\n\n };\n\n })\n\n\n .directive('bsTimepicker', function ($window, $parse, $q, $dateFormatter, $dateParser, $timepicker) {\n\n var defaults = $timepicker.defaults;\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {\n scope: scope\n };\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'autoclose', 'timeType', 'timeFormat', 'timezone', 'modelTimeFormat', 'useNative', 'hourStep', 'minuteStep', 'secondStep', 'length', 'arrowBehavior', 'iconUp', 'iconDown', 'roundDisplay', 'id', 'prefixClass', 'prefixEvent', 'defaultDate'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoclose', 'useNative', 'roundDisplay'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Initialize timepicker\n if (isNative && (options.useNative || defaults.useNative)) options.timeFormat = 'HH:mm';\n var timepicker = $timepicker(element, controller, options);\n options = timepicker.$options;\n\n var lang = options.lang;\n var formatDate = function (date, format, timezone) {\n return $dateFormatter.formatDate(date, format, lang, timezone);\n };\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!timepicker || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(timepicker),?/i);\n if (newValue === true) {\n timepicker.show();\n } else {\n timepicker.hide();\n }\n });\n }\n\n // Initialize parser\n var dateParser = $dateParser({\n format: options.timeFormat,\n lang: lang\n });\n\n // Observe attributes for changes\n angular.forEach(['minTime', 'maxTime'], function (key) {\n // console.warn('attr.$observe(%s)', key, attr[key]);\n if (angular.isDefined(attr[key])) {\n attr.$observe(key, function (newValue) {\n timepicker.$options[key] = dateParser.getTimeForAttribute(key, newValue);\n if (!isNaN(timepicker.$options[key])) timepicker.$build();\n validateAgainstMinMaxTime(controller.$dateValue);\n });\n }\n });\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue, controller.$dateValue);\n timepicker.update(controller.$dateValue);\n }, true);\n\n function validateAgainstMinMaxTime (parsedTime) {\n if (!angular.isDate(parsedTime)) return;\n var isMinValid = isNaN(options.minTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) >= options.minTime;\n var isMaxValid = isNaN(options.maxTime) || new Date(parsedTime.getTime()).setFullYear(1970, 0, 1) <= options.maxTime;\n var isValid = isMinValid && isMaxValid;\n controller.$setValidity('date', isValid);\n controller.$setValidity('min', isMinValid);\n controller.$setValidity('max', isMaxValid);\n // Only update the model when we have a valid date\n if (!isValid) {\n return;\n }\n controller.$dateValue = parsedTime;\n }\n\n // viewValue -> $parsers -> modelValue\n controller.$parsers.unshift(function (viewValue) {\n // console.warn('$parser(\"%s\"): viewValue=%o', element.attr('ng-model'), viewValue);\n var date;\n // Null values should correctly reset the model value & validity\n if (!viewValue) {\n // BREAKING CHANGE:\n // return null (not undefined) when input value is empty, so angularjs 1.3\n // ngModelController can go ahead and run validators, like ngRequired\n controller.$setValidity('date', true);\n return null;\n }\n var parsedTime = angular.isDate(viewValue) ? viewValue : dateParser.parse(viewValue, controller.$dateValue);\n if (!parsedTime || isNaN(parsedTime.getTime())) {\n controller.$setValidity('date', false);\n // Return undefined, causes ngModelController to\n // invalidate model value\n return undefined;\n }\n validateAgainstMinMaxTime(parsedTime);\n\n if (options.timeType === 'string') {\n date = dateParser.timezoneOffsetAdjust(parsedTime, options.timezone, true);\n return formatDate(date, options.modelTimeFormat || options.timeFormat);\n }\n date = dateParser.timezoneOffsetAdjust(controller.$dateValue, options.timezone, true);\n if (options.timeType === 'number') {\n return date.getTime();\n } else if (options.timeType === 'unix') {\n return date.getTime() / 1000;\n } else if (options.timeType === 'iso') {\n return date.toISOString();\n }\n return new Date(date);\n });\n\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n var date;\n if (angular.isUndefined(modelValue) || modelValue === null) {\n date = NaN;\n } else if (angular.isDate(modelValue)) {\n date = modelValue;\n } else if (options.timeType === 'string') {\n date = dateParser.parse(modelValue, null, options.modelTimeFormat);\n } else if (options.timeType === 'unix') {\n date = new Date(modelValue * 1000);\n } else {\n date = new Date(modelValue);\n }\n // Setup default value?\n // if(isNaN(date.getTime())) date = new Date(new Date().setMinutes(0) + 36e5);\n controller.$dateValue = dateParser.timezoneOffsetAdjust(date, options.timezone);\n return getTimeFormattedString();\n });\n\n // viewValue -> element\n controller.$render = function () {\n // console.warn('$render(\"%s\"): viewValue=%o', element.attr('ng-model'), controller.$viewValue);\n element.val(getTimeFormattedString());\n };\n\n function getTimeFormattedString () {\n return !controller.$dateValue || isNaN(controller.$dateValue.getTime()) ? '' : formatDate(controller.$dateValue, options.timeFormat);\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (timepicker) timepicker.destroy();\n options = null;\n timepicker = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.tab', [])\n\n .provider('$tab', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n template: 'tab/tab.tpl.html',\n navClass: 'nav-tabs',\n activeClass: 'active'\n };\n\n var controller = this.controller = function ($scope, $element, $attrs) {\n var self = this;\n\n // Attributes options\n self.$options = angular.copy(defaults);\n angular.forEach(['animation', 'navClass', 'activeClass'], function (key) {\n if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n });\n\n // Publish options on scope\n $scope.$navClass = self.$options.navClass;\n $scope.$activeClass = self.$options.activeClass;\n\n self.$panes = $scope.$panes = [];\n\n // Please use $activePaneChangeListeners if you use `bsActivePane`\n // Because we removed `ngModel` as default, we rename viewChangeListeners to\n // activePaneChangeListeners to make more sense.\n self.$activePaneChangeListeners = self.$viewChangeListeners = [];\n\n self.$push = function (pane) {\n if (angular.isUndefined(self.$panes.$active)) {\n $scope.$setActive(pane.name || 0);\n }\n self.$panes.push(pane);\n };\n\n self.$remove = function (pane) {\n var index = self.$panes.indexOf(pane);\n var active = self.$panes.$active;\n var activeIndex;\n if (angular.isString(active)) {\n activeIndex = self.$panes.map(function (pane) {\n return pane.name;\n }).indexOf(active);\n } else {\n activeIndex = self.$panes.$active;\n }\n\n // remove pane from $panes array\n self.$panes.splice(index, 1);\n\n if (index < activeIndex) {\n // we removed a pane before the active pane, so we need to\n // decrement the active pane index\n activeIndex--;\n } else if (index === activeIndex && activeIndex === self.$panes.length) {\n // we remove the active pane and it was the one at the end,\n // so select the previous one\n activeIndex--;\n }\n if (activeIndex >= 0 && activeIndex < self.$panes.length) {\n self.$setActive(self.$panes[activeIndex].name || activeIndex);\n } else {\n self.$setActive();\n }\n };\n\n self.$setActive = $scope.$setActive = function (value) {\n self.$panes.$active = value;\n self.$activePaneChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n self.$isActive = $scope.$isActive = function ($pane, $index) {\n return self.$panes.$active === $pane.name || self.$panes.$active === $index;\n };\n\n };\n\n this.$get = function () {\n var $tab = {};\n $tab.defaults = defaults;\n $tab.controller = controller;\n return $tab;\n };\n\n })\n\n .directive('bsTabs', function ($window, $animate, $tab, $parse) {\n\n var defaults = $tab.defaults;\n\n return {\n require: ['?ngModel', 'bsTabs'],\n transclude: true,\n scope: true,\n controller: ['$scope', '$element', '$attrs', $tab.controller],\n templateUrl: function (element, attr) {\n return attr.template || defaults.template;\n },\n link: function postLink (scope, element, attrs, controllers) {\n\n var ngModelCtrl = controllers[0];\n var bsTabsCtrl = controllers[1];\n\n // 'ngModel' does interfere with form validation\n // and status, use `bsActivePane` instead to avoid it\n if (ngModelCtrl) {\n\n // Update the modelValue following\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n ngModelCtrl.$setViewValue(bsTabsCtrl.$panes.$active);\n });\n\n // modelValue -> $formatters -> viewValue\n ngModelCtrl.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n bsTabsCtrl.$setActive(modelValue);\n return modelValue;\n });\n\n }\n\n if (attrs.bsActivePane) {\n // adapted from angularjs ngModelController bindings\n // https://github.com/angular/angular.js/blob/v1.3.1/src%2Fng%2Fdirective%2Finput.js#L1730\n var parsedBsActivePane = $parse(attrs.bsActivePane);\n\n // Update bsActivePane value with change\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n parsedBsActivePane.assign(scope, bsTabsCtrl.$panes.$active);\n });\n\n // watch bsActivePane for value changes\n scope.$watch(attrs.bsActivePane, function (newValue, oldValue) {\n bsTabsCtrl.$setActive(newValue);\n }, true);\n }\n }\n };\n\n })\n\n .directive('bsPane', function ($window, $animate, $sce) {\n\n return {\n require: ['^?ngModel', '^bsTabs'],\n scope: true,\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsTabsCtrl = controllers[1];\n\n // Add base class\n element.addClass('tab-pane');\n\n // Observe title attribute for change\n attrs.$observe('title', function (newValue, oldValue) {\n scope.title = $sce.trustAsHtml(newValue);\n });\n\n // Save tab name into scope\n scope.name = attrs.name;\n\n // Add animation class\n if (bsTabsCtrl.$options.animation) {\n element.addClass(bsTabsCtrl.$options.animation);\n }\n\n attrs.$observe('disabled', function (newValue, oldValue) {\n scope.disabled = scope.$eval(newValue);\n });\n\n // Push pane to parent bsTabs controller\n bsTabsCtrl.$push(scope);\n\n // remove pane from tab controller when pane is destroyed\n scope.$on('$destroy', function () {\n bsTabsCtrl.$remove(scope);\n });\n\n function render () {\n var index = bsTabsCtrl.$panes.indexOf(scope);\n $animate[bsTabsCtrl.$isActive(scope, index) ? 'addClass' : 'removeClass'](element, bsTabsCtrl.$options.activeClass);\n }\n\n bsTabsCtrl.$activePaneChangeListeners.push(function () {\n render();\n });\n render();\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.scrollspy', ['mgcrea.ngStrap.helpers.debounce', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$scrollspy', function () {\n\n // Pool of registered spies\n var spies = this.$$spies = {};\n\n var defaults = this.defaults = {\n debounce: 150,\n throttle: 100,\n offset: 100\n };\n\n this.$get = function ($window, $document, $rootScope, dimensions, debounce, throttle) {\n\n var windowEl = angular.element($window);\n var docEl = angular.element($document.prop('documentElement'));\n var bodyEl = angular.element($window.document.body);\n\n // Helper functions\n\n function nodeName (element, name) {\n return element[0].nodeName && element[0].nodeName.toLowerCase() === name.toLowerCase();\n }\n\n function ScrollSpyFactory (config) {\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n if (!options.element) options.element = bodyEl;\n var isWindowSpy = nodeName(options.element, 'body');\n var scrollEl = isWindowSpy ? windowEl : options.element;\n var scrollId = isWindowSpy ? 'window' : options.id;\n\n // Use existing spy\n if (spies[scrollId]) {\n spies[scrollId].$$count++;\n return spies[scrollId];\n }\n\n var $scrollspy = {};\n\n // Private vars\n var unbindViewContentLoaded;\n var unbindIncludeContentLoaded;\n var trackedElements = $scrollspy.$trackedElements = [];\n var sortedElements = [];\n var activeTarget;\n var debouncedCheckPosition;\n var throttledCheckPosition;\n var debouncedCheckOffsets;\n /* eslint-disable no-unused-vars */\n var viewportHeight;\n /* eslint-enable no-unused-vars */\n var scrollTop;\n\n $scrollspy.init = function () {\n\n // Setup internal ref counter\n this.$$count = 1;\n\n // Bind events\n debouncedCheckPosition = debounce(this.checkPosition, options.debounce);\n throttledCheckPosition = throttle(this.checkPosition, options.throttle);\n scrollEl.on('click', this.checkPositionWithEventLoop);\n windowEl.on('resize', debouncedCheckPosition);\n scrollEl.on('scroll', throttledCheckPosition);\n\n debouncedCheckOffsets = debounce(this.checkOffsets, options.debounce);\n unbindViewContentLoaded = $rootScope.$on('$viewContentLoaded', debouncedCheckOffsets);\n unbindIncludeContentLoaded = $rootScope.$on('$includeContentLoaded', debouncedCheckOffsets);\n debouncedCheckOffsets();\n\n // Register spy for reuse\n if (scrollId) {\n spies[scrollId] = $scrollspy;\n }\n\n };\n\n $scrollspy.destroy = function () {\n\n // Check internal ref counter\n this.$$count--;\n if (this.$$count > 0) {\n return;\n }\n\n // Unbind events\n scrollEl.off('click', this.checkPositionWithEventLoop);\n windowEl.off('resize', debouncedCheckPosition);\n scrollEl.off('scroll', throttledCheckPosition);\n unbindViewContentLoaded();\n unbindIncludeContentLoaded();\n if (scrollId) {\n delete spies[scrollId];\n }\n };\n\n $scrollspy.checkPosition = function () {\n\n // Not ready yet\n if (!sortedElements.length) return;\n\n // Calculate the scroll position\n scrollTop = (isWindowSpy ? $window.pageYOffset : scrollEl.prop('scrollTop')) || 0;\n\n // Calculate the viewport height for use by the components\n viewportHeight = Math.max($window.innerHeight, docEl.prop('clientHeight'));\n\n // Activate first element if scroll is smaller\n if (scrollTop < sortedElements[0].offsetTop && activeTarget !== sortedElements[0].target) {\n return $scrollspy.$activateElement(sortedElements[0]);\n }\n\n // Activate proper element\n for (var i = sortedElements.length; i--;) {\n if (angular.isUndefined(sortedElements[i].offsetTop) || sortedElements[i].offsetTop === null) continue;\n if (activeTarget === sortedElements[i].target) continue;\n if (scrollTop < sortedElements[i].offsetTop) continue;\n if (sortedElements[i + 1] && scrollTop > sortedElements[i + 1].offsetTop) continue;\n return $scrollspy.$activateElement(sortedElements[i]);\n }\n\n };\n\n $scrollspy.checkPositionWithEventLoop = function () {\n // IE 9 throws an error if we use 'this' instead of '$scrollspy'\n // in this setTimeout call\n setTimeout($scrollspy.checkPosition, 1);\n };\n\n // Protected methods\n\n $scrollspy.$activateElement = function (element) {\n if (activeTarget) {\n var activeElement = $scrollspy.$getTrackedElement(activeTarget);\n if (activeElement) {\n activeElement.source.removeClass('active');\n if (nodeName(activeElement.source, 'li') && nodeName(activeElement.source.parent().parent(), 'li')) {\n activeElement.source.parent().parent().removeClass('active');\n }\n }\n }\n activeTarget = element.target;\n element.source.addClass('active');\n if (nodeName(element.source, 'li') && nodeName(element.source.parent().parent(), 'li')) {\n element.source.parent().parent().addClass('active');\n }\n };\n\n $scrollspy.$getTrackedElement = function (target) {\n return trackedElements.filter(function (obj) {\n return obj.target === target;\n })[0];\n };\n\n // Track offsets behavior\n\n $scrollspy.checkOffsets = function () {\n\n angular.forEach(trackedElements, function (trackedElement) {\n var targetElement = document.querySelector(trackedElement.target);\n trackedElement.offsetTop = targetElement ? dimensions.offset(targetElement).top : null;\n if (options.offset && trackedElement.offsetTop !== null) trackedElement.offsetTop -= options.offset * 1;\n });\n\n sortedElements = trackedElements\n .filter(function (el) {\n return el.offsetTop !== null;\n })\n .sort(function (a, b) {\n return a.offsetTop - b.offsetTop;\n });\n\n debouncedCheckPosition();\n\n };\n\n $scrollspy.trackElement = function (target, source) {\n trackedElements.push({target: target, source: source});\n };\n\n $scrollspy.untrackElement = function (target, source) {\n var toDelete;\n for (var i = trackedElements.length; i--;) {\n if (trackedElements[i].target === target && trackedElements[i].source === source) {\n toDelete = i;\n break;\n }\n }\n trackedElements.splice(toDelete, 1);\n };\n\n $scrollspy.activate = function (i) {\n trackedElements[i].addClass('active');\n };\n\n // Initialize plugin\n\n $scrollspy.init();\n return $scrollspy;\n\n }\n\n return ScrollSpyFactory;\n\n };\n\n })\n\n .directive('bsScrollspy', function ($rootScope, debounce, dimensions, $scrollspy) {\n\n return {\n restrict: 'EAC',\n link: function postLink (scope, element, attr) {\n\n var options = {scope: scope};\n angular.forEach(['offset', 'target'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n var scrollspy = $scrollspy(options);\n scrollspy.trackElement(options.target, element);\n\n scope.$on('$destroy', function () {\n if (scrollspy) {\n scrollspy.untrackElement(options.target, element);\n scrollspy.destroy();\n }\n options = null;\n scrollspy = null;\n });\n\n }\n };\n\n })\n\n\n .directive('bsScrollspyList', function ($rootScope, debounce, dimensions, $scrollspy) {\n\n return {\n restrict: 'A',\n compile: function postLink (element, attr) {\n var children = element[0].querySelectorAll('li > a[href]');\n angular.forEach(children, function (child) {\n var childEl = angular.element(child);\n childEl.parent().attr('bs-scrollspy', '').attr('data-target', childEl.attr('href'));\n });\n }\n\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.select', ['mgcrea.ngStrap.tooltip', 'mgcrea.ngStrap.helpers.parseOptions'])\n\n .provider('$select', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'select',\n prefixEvent: '$select',\n placement: 'bottom-left',\n templateUrl: 'select/select.tpl.html',\n trigger: 'focus',\n container: false,\n keyboard: true,\n html: false,\n delay: 0,\n multiple: false,\n allNoneButtons: false,\n sort: true,\n caretHtml: ' ',\n placeholder: 'Choose among the following...',\n allText: 'All',\n noneText: 'None',\n maxLength: 3,\n maxLengthHtml: 'selected',\n iconCheckmark: 'glyphicon glyphicon-ok',\n toggle: false\n };\n\n this.$get = function ($window, $document, $rootScope, $tooltip, $timeout) {\n\n // var bodyEl = angular.element($window.document.body);\n var isNative = /(ip[ao]d|iphone|android)/ig.test($window.navigator.userAgent);\n var isTouch = ('createTouch' in $window.document) && isNative;\n\n function SelectFactory (element, controller, config) {\n\n var $select = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $select = $tooltip(element, options);\n var scope = $select.$scope;\n\n scope.$matches = [];\n if (options.multiple) {\n scope.$activeIndex = [];\n } else {\n scope.$activeIndex = -1;\n }\n scope.$isMultiple = options.multiple;\n scope.$showAllNoneButtons = options.allNoneButtons && options.multiple;\n scope.$iconCheckmark = options.iconCheckmark;\n scope.$allText = options.allText;\n scope.$noneText = options.noneText;\n\n scope.$activate = function (index) {\n scope.$$postDigest(function () {\n $select.activate(index);\n });\n };\n\n scope.$select = function (index, evt) {\n scope.$$postDigest(function () {\n $select.select(index);\n });\n };\n\n scope.$isVisible = function () {\n return $select.$isVisible();\n };\n\n scope.$isActive = function (index) {\n return $select.$isActive(index);\n };\n\n scope.$selectAll = function () {\n for (var i = 0; i < scope.$matches.length; i++) {\n if (!scope.$isActive(i)) {\n scope.$select(i);\n }\n }\n };\n\n scope.$selectNone = function () {\n for (var i = 0; i < scope.$matches.length; i++) {\n if (scope.$isActive(i)) {\n scope.$select(i);\n }\n }\n };\n\n // Public methods\n\n $select.update = function (matches) {\n scope.$matches = matches;\n $select.$updateActiveIndex();\n };\n\n $select.activate = function (index) {\n if (options.multiple) {\n if ($select.$isActive(index)) {\n scope.$activeIndex.splice(scope.$activeIndex.indexOf(index), 1);\n } else {\n scope.$activeIndex.push(index);\n }\n if (options.sort) scope.$activeIndex.sort(function (a, b) { return a - b; }); // use numeric sort instead of default sort\n } else {\n scope.$activeIndex = index;\n }\n return scope.$activeIndex;\n };\n\n $select.select = function (index) {\n if (angular.isUndefined(index) || index < 0 || index >= scope.$matches.length) { return; }\n var value = scope.$matches[index].value;\n scope.$apply(function () {\n $select.activate(index);\n if (options.multiple) {\n controller.$setViewValue(scope.$activeIndex.map(function (index) {\n if (angular.isUndefined(scope.$matches[index])) {\n return null;\n }\n return scope.$matches[index].value;\n }));\n } else {\n if (options.toggle) {\n controller.$setViewValue((value === controller.$modelValue) ? undefined : value);\n } else {\n controller.$setViewValue(value);\n }\n // Hide if single select\n $select.hide();\n }\n });\n // Emit event\n scope.$emit(options.prefixEvent + '.select', value, index, $select);\n if (angular.isDefined(options.onSelect) && angular.isFunction(options.onSelect)) {\n options.onSelect(value, index, $select);\n }\n };\n\n // Protected methods\n\n $select.$updateActiveIndex = function () {\n if (options.multiple) {\n if (angular.isArray(controller.$modelValue)) {\n scope.$activeIndex = controller.$modelValue.map(function (value) {\n return $select.$getIndex(value);\n });\n } else {\n scope.$activeIndex = [];\n }\n } else {\n if (angular.isDefined(controller.$modelValue) && scope.$matches.length) {\n scope.$activeIndex = $select.$getIndex(controller.$modelValue);\n } else {\n scope.$activeIndex = -1;\n }\n }\n };\n\n $select.$isVisible = function () {\n if (!options.minLength || !controller) {\n return scope.$matches.length;\n }\n // minLength support\n return scope.$matches.length && controller.$viewValue.length >= options.minLength;\n };\n\n $select.$isActive = function (index) {\n if (options.multiple) {\n return scope.$activeIndex.indexOf(index) !== -1;\n }\n return scope.$activeIndex === index;\n };\n\n $select.$getIndex = function (value) {\n var index;\n for (index = scope.$matches.length; index--;) {\n if (angular.equals(scope.$matches[index].value, value)) break;\n }\n return index;\n };\n\n $select.$onMouseDown = function (evt) {\n // Prevent blur on mousedown on .dropdown-menu\n evt.preventDefault();\n evt.stopPropagation();\n // Emulate click for mobile devices\n if (isTouch) {\n var targetEl = angular.element(evt.target);\n var anchor;\n\n if (evt.target.nodeName !== 'A') {\n var anchorCandidate = targetEl.parent();\n while (!anchor && anchorCandidate.length > 0) {\n if (anchorCandidate[0].nodeName === 'A') {\n anchor = anchorCandidate;\n }\n anchorCandidate = anchorCandidate.parent();\n }\n }\n\n if (anchor) {\n angular.element(anchor).triggerHandler('click');\n } else {\n targetEl.triggerHandler('click');\n }\n }\n };\n\n $select.$onKeyDown = function (evt) {\n if (!/(9|13|38|40)/.test(evt.keyCode)) return;\n // Let tab propagate\n if (evt.keyCode !== 9) {\n evt.preventDefault();\n evt.stopPropagation();\n }\n\n // release focus on tab\n if (options.multiple && evt.keyCode === 9) {\n return $select.hide();\n }\n\n // Select with enter\n if (!options.multiple && (evt.keyCode === 13 || evt.keyCode === 9)) {\n return $select.select(scope.$activeIndex);\n }\n\n if (!options.multiple) {\n // Navigate with keyboard\n if (evt.keyCode === 38 && scope.$activeIndex > 0) scope.$activeIndex--;\n else if (evt.keyCode === 38 && scope.$activeIndex < 0) scope.$activeIndex = scope.$matches.length - 1;\n else if (evt.keyCode === 40 && scope.$activeIndex < scope.$matches.length - 1) scope.$activeIndex++;\n else if (angular.isUndefined(scope.$activeIndex)) scope.$activeIndex = 0;\n scope.$digest();\n }\n };\n\n $select.$isIE = function () {\n var ua = $window.navigator.userAgent;\n return ua.indexOf('MSIE ') > 0 || ua.indexOf('Trident/') > 0 || ua.indexOf('Edge/') > 0;\n };\n\n $select.$selectScrollFix = function (e) {\n if ($document[0].activeElement.tagName === 'UL') {\n e.preventDefault();\n e.stopImmediatePropagation();\n e.target.focus();\n }\n };\n\n // Overrides\n\n var _show = $select.show;\n $select.show = function () {\n _show();\n if (options.multiple) {\n $select.$element.addClass('select-multiple');\n }\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n $select.$element.on(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n if (options.keyboard) {\n element.on('keydown', $select.$onKeyDown);\n }\n }, 0, false);\n };\n\n var _hide = $select.hide;\n $select.hide = function () {\n if (!options.multiple && angular.isUndefined(controller.$modelValue)) {\n scope.$activeIndex = -1;\n }\n $select.$element.off(isTouch ? 'touchstart' : 'mousedown', $select.$onMouseDown);\n if (options.keyboard) {\n element.off('keydown', $select.$onKeyDown);\n }\n _hide(true);\n };\n\n return $select;\n\n }\n\n SelectFactory.defaults = defaults;\n return SelectFactory;\n\n };\n\n })\n\n .directive('bsSelect', function ($window, $parse, $q, $select, $parseOptions) {\n\n var defaults = $select.defaults;\n\n return {\n restrict: 'EAC',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = {scope: scope, placeholder: defaults.placeholder};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'placeholder', 'allNoneButtons', 'maxLength', 'maxLengthHtml', 'allText', 'noneText', 'iconCheckmark', 'autoClose', 'id', 'sort', 'caretHtml', 'prefixClass', 'prefixEvent', 'toggle'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'allNoneButtons', 'sort'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) {\n options[key] = false;\n }\n });\n\n // bind functions from the attrs to the show, hide and select events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide', 'onSelect'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Only parse data-multiple. Angular sets existence attributes to true (multiple/required/etc), they apply this\n // to data-multiple as well for some reason, so we'll parse this ourselves and disregard multiple\n var dataMultiple = element.attr('data-multiple');\n if (angular.isDefined(dataMultiple)) {\n if (falseValueRegExp.test(dataMultiple)) {\n options.multiple = false;\n } else {\n options.multiple = dataMultiple;\n }\n }\n\n // Add support for select markup\n if (element[0].nodeName.toLowerCase() === 'select') {\n var inputEl = element;\n inputEl.css('display', 'none');\n element = angular.element('');\n inputEl.after(element);\n }\n\n // Build proper bsOptions\n var parsedOptions = $parseOptions(attr.bsOptions);\n\n // Initialize select\n var select = $select(element, controller, options);\n\n if (select.$isIE()) {\n element[0].addEventListener('blur', select.$selectScrollFix);\n }\n\n // Watch bsOptions values before filtering for changes\n var watchedOptions = parsedOptions.$match[7].replace(/\\|.+/, '').trim();\n scope.$watch(watchedOptions, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', watchedOptions, newValue, oldValue);\n parsedOptions.valuesFn(scope, controller)\n .then(function (values) {\n select.update(values);\n controller.$render();\n });\n }, true);\n\n // Watch model for changes\n scope.$watch(attr.ngModel, function (newValue, oldValue) {\n // console.warn('scope.$watch(%s)', attr.ngModel, newValue, oldValue);\n select.$updateActiveIndex();\n controller.$render();\n }, true);\n\n // Model rendering in view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var selected;\n var index;\n if (options.multiple && angular.isArray(controller.$modelValue)) {\n selected = controller.$modelValue.map(function (value) {\n index = select.$getIndex(value);\n return index !== -1 ? select.$scope.$matches[index].label : false;\n }).filter(angular.isDefined);\n if (selected.length > (options.maxLength || defaults.maxLength)) {\n selected = selected.length + ' ' + (options.maxLengthHtml || defaults.maxLengthHtml);\n } else {\n selected = selected.join(', ');\n }\n } else {\n index = select.$getIndex(controller.$modelValue);\n selected = index !== -1 ? select.$scope.$matches[index].label : false;\n }\n element.html((selected || options.placeholder) + (options.caretHtml || defaults.caretHtml));\n };\n\n if (options.multiple) {\n controller.$isEmpty = function (value) {\n return !value || value.length === 0;\n };\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (select) select.destroy();\n options = null;\n select = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.popover', ['mgcrea.ngStrap.tooltip'])\n\n .provider('$popover', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n customClass: '',\n // uncommenting the next two lines will break backwards compatability\n // prefixClass: 'popover',\n // prefixEvent: 'popover',\n container: false,\n target: false,\n placement: 'right',\n templateUrl: 'popover/popover.tpl.html',\n contentTemplate: false,\n trigger: 'click',\n keyboard: true,\n html: false,\n title: '',\n content: '',\n delay: 0,\n autoClose: false\n };\n\n this.$get = function ($tooltip) {\n\n function PopoverFactory (element, config) {\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n var $popover = $tooltip(element, options);\n\n // Support scope as string options [/*title, */content]\n if (options.content) {\n $popover.$scope.content = options.content;\n }\n\n return $popover;\n\n }\n\n return PopoverFactory;\n\n };\n\n })\n\n .directive('bsPopover', function ($window, $sce, $popover) {\n\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr) {\n\n var popover;\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'container', 'delay', 'trigger', 'html', 'animation', 'customClass', 'autoClose', 'id', 'prefixClass', 'prefixEvent', 'bsEnabled'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container', 'autoClose'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // should not parse target attribute (anchor tag), only data-target #1454\n var dataTarget = element.attr('data-target');\n if (angular.isDefined(dataTarget)) {\n if (falseValueRegExp.test(dataTarget)) {\n options.target = false;\n } else {\n options.target = dataTarget;\n }\n }\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n if (angular.isDefined(oldValue)) {\n requestAnimationFrame(function () {\n if (popover) popover.$applyPlacement();\n });\n }\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsPopover) {\n scope.$watch(attr.bsPopover, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n if (angular.isDefined(oldValue)) {\n requestAnimationFrame(function () {\n if (popover) popover.$applyPlacement();\n });\n }\n }, true);\n }\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(popover),?/i);\n if (newValue === true) {\n popover.show();\n } else {\n popover.hide();\n }\n });\n }\n\n // Enabled binding support\n if (attr.bsEnabled) {\n scope.$watch(attr.bsEnabled, function (newValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|1|,?(popover),?/i);\n if (newValue === false) {\n popover.setEnabled(false);\n } else {\n popover.setEnabled(true);\n }\n });\n }\n\n // Viewport support\n if (attr.viewport) {\n scope.$watch(attr.viewport, function (newValue) {\n if (!popover || !angular.isDefined(newValue)) return;\n popover.setViewport(newValue);\n });\n }\n\n // Initialize popover\n popover = $popover(element, options);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (popover) popover.destroy();\n options = null;\n popover = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.navbar', [])\n\n .provider('$navbar', function () {\n\n var defaults = this.defaults = {\n activeClass: 'active',\n routeAttr: 'data-match-route',\n strict: false\n };\n\n this.$get = function () {\n return {defaults: defaults};\n };\n\n })\n\n .directive('bsNavbar', function ($window, $location, $navbar) {\n\n var defaults = $navbar.defaults;\n\n return {\n restrict: 'A',\n link: function postLink (scope, element, attr, controller) {\n\n // Directive options\n var options = angular.copy(defaults);\n angular.forEach(Object.keys(defaults), function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Watch for the $location\n scope.$watch(function () {\n\n return $location.path();\n\n }, function (newValue, oldValue) {\n\n var liElements = element[0].querySelectorAll('li[' + options.routeAttr + ']');\n\n angular.forEach(liElements, function (li) {\n\n var liElement = angular.element(li);\n var pattern = liElement.attr(options.routeAttr).replace('/', '\\\\/');\n if (options.strict) {\n pattern = '^' + pattern + '$';\n }\n var regexp = new RegExp(pattern, 'i');\n\n if (regexp.test(newValue)) {\n liElement.addClass(options.activeClass);\n } else {\n liElement.removeClass(options.activeClass);\n }\n\n });\n\n });\n\n }\n\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.dropdown', ['mgcrea.ngStrap.tooltip'])\n\n .provider('$dropdown', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'dropdown',\n prefixEvent: 'dropdown',\n placement: 'bottom-left',\n templateUrl: 'dropdown/dropdown.tpl.html',\n trigger: 'click',\n container: false,\n keyboard: true,\n html: false,\n delay: 0\n };\n\n this.$get = function ($window, $rootScope, $tooltip, $timeout) {\n\n var bodyEl = angular.element($window.document.body);\n var matchesSelector = Element.prototype.matchesSelector || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector;\n\n function DropdownFactory (element, config) {\n\n var $dropdown = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n /* var scope = */$dropdown.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n $dropdown = $tooltip(element, options);\n var parentEl = element.parent();\n\n // Protected methods\n\n $dropdown.$onKeyDown = function (evt) {\n if (!/(38|40)/.test(evt.keyCode)) return;\n evt.preventDefault();\n evt.stopPropagation();\n\n // Retrieve focused index\n var items = angular.element($dropdown.$element[0].querySelectorAll('li:not(.divider) a'));\n if (!items.length) return;\n var index;\n angular.forEach(items, function (el, i) {\n if (matchesSelector && matchesSelector.call(el, ':focus')) index = i;\n });\n\n // Navigate with keyboard\n if (evt.keyCode === 38 && index > 0) index--;\n else if (evt.keyCode === 40 && index < items.length - 1) index++;\n else if (angular.isUndefined(index)) index = 0;\n items.eq(index)[0].focus();\n\n };\n\n // Overrides\n\n var show = $dropdown.show;\n $dropdown.show = function () {\n show();\n // use timeout to hookup the events to prevent\n // event bubbling from being processed imediately.\n $timeout(function () {\n if (options.keyboard && $dropdown.$element) $dropdown.$element.on('keydown', $dropdown.$onKeyDown);\n bodyEl.on('click', onBodyClick);\n }, 0, false);\n if (parentEl.hasClass('dropdown')) parentEl.addClass('open');\n };\n\n var hide = $dropdown.hide;\n $dropdown.hide = function () {\n if (!$dropdown.$isShown) return;\n if (options.keyboard && $dropdown.$element) $dropdown.$element.off('keydown', $dropdown.$onKeyDown);\n bodyEl.off('click', onBodyClick);\n if (parentEl.hasClass('dropdown')) parentEl.removeClass('open');\n hide();\n };\n\n var destroy = $dropdown.destroy;\n $dropdown.destroy = function () {\n bodyEl.off('click', onBodyClick);\n destroy();\n };\n\n // Private functions\n\n function onBodyClick (evt) {\n if (evt.target === element[0]) return;\n return evt.target !== element[0] && $dropdown.hide();\n }\n\n return $dropdown;\n\n }\n\n return DropdownFactory;\n\n };\n\n })\n\n .directive('bsDropdown', function ($window, $sce, $dropdown) {\n\n return {\n restrict: 'EAC',\n scope: true,\n compile: function (tElement, tAttrs) {\n\n // Support for inlined template (next sibling)\n // It must be fetched before compilation\n if (!tAttrs.bsDropdown) {\n var nextSibling = tElement[0].nextSibling;\n while (nextSibling && nextSibling.nodeType !== 1) {\n nextSibling = nextSibling.nextSibling;\n }\n if (nextSibling && nextSibling.className.split(' ').indexOf('dropdown-menu') >= 0) {\n tAttrs.template = nextSibling.outerHTML;\n tAttrs.templateUrl = undefined;\n nextSibling.parentNode.removeChild(nextSibling);\n }\n }\n\n return function postLink (scope, element, attr) {\n\n // Directive options\n var options = {scope: scope};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'container', 'delay', 'trigger', 'keyboard', 'html', 'animation', 'id', 'autoClose'], function (key) {\n if (angular.isDefined(tAttrs[key])) options[key] = tAttrs[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as an object\n if (attr.bsDropdown) {\n scope.$watch(attr.bsDropdown, function (newValue, oldValue) {\n scope.content = newValue;\n }, true);\n }\n\n // Initialize dropdown\n var dropdown = $dropdown(element, options);\n\n // Visibility binding support\n if (attr.bsShow) {\n scope.$watch(attr.bsShow, function (newValue, oldValue) {\n if (!dropdown || !angular.isDefined(newValue)) return;\n if (angular.isString(newValue)) newValue = !!newValue.match(/true|,?(dropdown),?/i);\n if (newValue === true) {\n dropdown.show();\n } else {\n dropdown.hide();\n }\n });\n }\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (dropdown) dropdown.destroy();\n options = null;\n dropdown = null;\n });\n\n };\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.modal', ['mgcrea.ngStrap.core', 'mgcrea.ngStrap.helpers.dimensions'])\n\n .provider('$modal', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n backdropAnimation: 'am-fade',\n customClass: '',\n prefixClass: 'modal',\n prefixEvent: 'modal',\n placement: 'top',\n templateUrl: 'modal/modal.tpl.html',\n template: '',\n contentTemplate: false,\n container: false,\n element: null,\n backdrop: true,\n keyboard: true,\n html: false,\n show: true,\n size: null,\n zIndex: null\n };\n\n this.$get = function ($window, $rootScope, $bsCompiler, $animate, $timeout, $sce, dimensions) {\n\n var forEach = angular.forEach;\n var requestAnimationFrame = $window.requestAnimationFrame || $window.setTimeout;\n var bodyElement = angular.element($window.document.body);\n\n var backdropCount = 0;\n var dialogBaseZindex = 1050;\n var backdropBaseZindex = 1040;\n\n var validSizes = {\n lg: 'modal-lg',\n sm: 'modal-sm'\n };\n\n function ModalFactory (config) {\n\n var $modal = {};\n\n // Common vars\n var options = $modal.$options = angular.extend({}, defaults, config);\n var promise = $modal.$promise = $bsCompiler.compile(options);\n var scope = $modal.$scope = options.scope && options.scope.$new() || $rootScope.$new();\n\n if (!options.element && !options.container) {\n options.container = 'body';\n }\n\n if (options.zIndex) {\n dialogBaseZindex = parseInt(options.zIndex, 10);\n backdropBaseZindex = dialogBaseZindex - 10;\n }\n\n // Store $id to identify the triggering element in events\n // give priority to options.id, otherwise, try to use\n // element id if defined\n $modal.$id = options.id || options.element && options.element.attr('id') || '';\n\n // Support scope as string options\n forEach(['title', 'content'], function (key) {\n if (options[key]) scope[key] = $sce.trustAsHtml(options[key]);\n });\n\n // Provide scope helpers\n scope.$hide = function () {\n scope.$$postDigest(function () {\n $modal.hide();\n });\n };\n scope.$show = function () {\n scope.$$postDigest(function () {\n $modal.show();\n });\n };\n scope.$toggle = function () {\n scope.$$postDigest(function () {\n $modal.toggle();\n });\n };\n // Publish isShown as a protected var on scope\n $modal.$isShown = scope.$isShown = false;\n\n // Fetch, compile then initialize modal\n var compileData;\n var modalElement;\n var modalScope;\n var backdropElement = angular.element('
');\n backdropElement.css({position: 'fixed', top: '0px', left: '0px', bottom: '0px', right: '0px'});\n promise.then(function (data) {\n compileData = data;\n $modal.init();\n });\n\n $modal.init = function () {\n\n // Options: show\n if (options.show) {\n scope.$$postDigest(function () {\n $modal.show();\n });\n }\n\n };\n\n $modal.destroy = function () {\n\n // Remove element\n destroyModalElement();\n\n // remove backdrop element\n if (backdropElement) {\n backdropElement.remove();\n backdropElement = null;\n }\n\n // Destroy scope\n scope.$destroy();\n };\n\n $modal.show = function () {\n if ($modal.$isShown) return;\n\n var parent;\n var after;\n if (angular.isElement(options.container)) {\n parent = options.container;\n after = options.container[0].lastChild ? angular.element(options.container[0].lastChild) : null;\n } else {\n if (options.container) {\n parent = findElement(options.container);\n after = parent[0] && parent[0].lastChild ? angular.element(parent[0].lastChild) : null;\n } else {\n parent = null;\n after = options.element;\n }\n }\n\n // destroy any existing modal elements\n if (modalElement) destroyModalElement();\n\n // create a new scope, so we can destroy it and all child scopes\n // when destroying the modal element\n modalScope = $modal.$scope.$new();\n // Fetch a cloned element linked from template (noop callback is required)\n modalElement = $modal.$element = compileData.link(modalScope, function (clonedElement, scope) {});\n\n if (options.backdrop) {\n // set z-index\n modalElement.css({'z-index': dialogBaseZindex + (backdropCount * 20)});\n backdropElement.css({'z-index': backdropBaseZindex + (backdropCount * 20)});\n\n // increment number of backdrops\n backdropCount++;\n }\n\n if (scope.$emit(options.prefixEvent + '.show.before', $modal).defaultPrevented) {\n return;\n }\n if (angular.isDefined(options.onBeforeShow) && angular.isFunction(options.onBeforeShow)) {\n options.onBeforeShow($modal);\n }\n\n // Set the initial positioning.\n modalElement.css({display: 'block'}).addClass(options.placement);\n\n // Options: customClass\n if (options.customClass) {\n modalElement.addClass(options.customClass);\n }\n\n // Options: size\n if (options.size && validSizes[options.size]) {\n angular.element(findElement('.modal-dialog', modalElement[0])).addClass(validSizes[options.size]);\n }\n\n // Options: animation\n if (options.animation) {\n if (options.backdrop) {\n backdropElement.addClass(options.backdropAnimation);\n }\n modalElement.addClass(options.animation);\n }\n\n if (options.backdrop) {\n $animate.enter(backdropElement, bodyElement, null);\n }\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.enter(modalElement, parent, after, enterAnimateCallback);\n } else {\n $animate.enter(modalElement, parent, after).then(enterAnimateCallback);\n }\n\n $modal.$isShown = scope.$isShown = true;\n safeDigest(scope);\n // Focus once the enter-animation has started\n // Weird PhantomJS bug hack\n var el = modalElement[0];\n requestAnimationFrame(function () {\n el.focus();\n });\n\n bodyElement.addClass(options.prefixClass + '-open');\n if (options.animation) {\n bodyElement.addClass(options.prefixClass + '-with-' + options.animation);\n }\n\n // Bind events\n bindBackdropEvents();\n bindKeyboardEvents();\n };\n\n function enterAnimateCallback () {\n scope.$emit(options.prefixEvent + '.show', $modal);\n if (angular.isDefined(options.onShow) && angular.isFunction(options.onShow)) {\n options.onShow($modal);\n }\n }\n\n $modal.hide = function () {\n if (!$modal.$isShown) return;\n\n if (scope.$emit(options.prefixEvent + '.hide.before', $modal).defaultPrevented) {\n return;\n }\n if (angular.isDefined(options.onBeforeHide) && angular.isFunction(options.onBeforeHide)) {\n options.onBeforeHide($modal);\n }\n\n // Support v1.2+ $animate\n // https://github.com/angular/angular.js/issues/11713\n if (angular.version.minor <= 2) {\n $animate.leave(modalElement, leaveAnimateCallback);\n } else {\n $animate.leave(modalElement).then(leaveAnimateCallback);\n }\n\n if (options.backdrop) {\n // decrement number of backdrops\n backdropCount--;\n $animate.leave(backdropElement);\n }\n $modal.$isShown = scope.$isShown = false;\n safeDigest(scope);\n\n // Unbind events\n unbindBackdropEvents();\n unbindKeyboardEvents();\n };\n\n function leaveAnimateCallback () {\n scope.$emit(options.prefixEvent + '.hide', $modal);\n if (angular.isDefined(options.onHide) && angular.isFunction(options.onHide)) {\n options.onHide($modal);\n }\n if (findElement('.modal').length <= 0) {\n bodyElement.removeClass(options.prefixClass + '-open');\n }\n if (options.animation) {\n bodyElement.removeClass(options.prefixClass + '-with-' + options.animation);\n }\n }\n\n $modal.toggle = function () {\n if ($modal.$isShown) {\n $modal.hide();\n } else {\n $modal.show();\n }\n };\n\n $modal.focus = function () {\n modalElement[0].focus();\n };\n\n // Protected methods\n\n $modal.$onKeyUp = function (evt) {\n\n if (evt.which === 27 && $modal.$isShown) {\n $modal.hide();\n evt.stopPropagation();\n }\n\n };\n\n function bindBackdropEvents () {\n if (options.backdrop) {\n modalElement.on('click', hideOnBackdropClick);\n backdropElement.on('click', hideOnBackdropClick);\n backdropElement.on('wheel', preventEventDefault);\n }\n }\n\n function unbindBackdropEvents () {\n if (options.backdrop) {\n modalElement.off('click', hideOnBackdropClick);\n backdropElement.off('click', hideOnBackdropClick);\n backdropElement.off('wheel', preventEventDefault);\n }\n }\n\n function bindKeyboardEvents () {\n if (options.keyboard) {\n modalElement.on('keyup', $modal.$onKeyUp);\n }\n }\n\n function unbindKeyboardEvents () {\n if (options.keyboard) {\n modalElement.off('keyup', $modal.$onKeyUp);\n }\n }\n\n // Private helpers\n\n function hideOnBackdropClick (evt) {\n if (evt.target !== evt.currentTarget) return;\n if (options.backdrop === 'static') {\n $modal.focus();\n } else {\n $modal.hide();\n }\n }\n\n function preventEventDefault (evt) {\n evt.preventDefault();\n }\n\n function destroyModalElement () {\n if ($modal.$isShown && modalElement !== null) {\n // un-bind events\n unbindBackdropEvents();\n unbindKeyboardEvents();\n }\n\n if (modalScope) {\n modalScope.$destroy();\n modalScope = null;\n }\n\n if (modalElement) {\n modalElement.remove();\n modalElement = $modal.$element = null;\n }\n }\n\n return $modal;\n\n }\n\n // Helper functions\n\n function safeDigest (scope) {\n /* eslint-disable no-unused-expressions */\n scope.$$phase || (scope.$root && scope.$root.$$phase) || scope.$digest();\n /* eslint-enable no-unused-expressions */\n }\n\n function findElement (query, element) {\n return angular.element((element || document).querySelectorAll(query));\n }\n\n return ModalFactory;\n\n };\n\n })\n\n .directive('bsModal', function ($window, $sce, $parse, $modal) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation', 'backdropAnimation', 'id', 'prefixEvent', 'prefixClass', 'customClass', 'modalClass', 'size', 'zIndex'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // Options: alias modalClass to customClass\n if (options.modalClass) {\n options.customClass = options.modalClass;\n }\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsModal) {\n scope.$watch(attr.bsModal, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize modal\n var modal = $modal(options);\n\n // Trigger\n element.on(attr.trigger || 'click', modal.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (modal) modal.destroy();\n options = null;\n modal = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nif (angular.version.minor < 3 && angular.version.dot < 14) {\n angular.module('ng')\n\n .factory('$$rAF', function ($window, $timeout) {\n\n var requestAnimationFrame = $window.requestAnimationFrame ||\n $window.webkitRequestAnimationFrame ||\n $window.mozRequestAnimationFrame;\n\n var cancelAnimationFrame = $window.cancelAnimationFrame ||\n $window.webkitCancelAnimationFrame ||\n $window.mozCancelAnimationFrame ||\n $window.webkitCancelRequestAnimationFrame;\n\n var rafSupported = !!requestAnimationFrame;\n var raf = rafSupported ?\n function (fn) {\n var id = requestAnimationFrame(fn);\n return function () {\n cancelAnimationFrame(id);\n };\n } :\n function (fn) {\n var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666\n return function () {\n $timeout.cancel(timer);\n };\n };\n\n raf.supported = rafSupported;\n\n return raf;\n\n });\n}\n","'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.parseOptions', [])\n\n .provider('$parseOptions', function () {\n\n var defaults = this.defaults = {\n regexp: /^\\s*(.*?)(?:\\s+as\\s+(.*?))?(?:\\s+group\\s+by\\s+(.*))?\\s+for\\s+(?:([\\$\\w][\\$\\w]*)|(?:\\(\\s*([\\$\\w][\\$\\w]*)\\s*,\\s*([\\$\\w][\\$\\w]*)\\s*\\)))\\s+in\\s+(.*?)(?:\\s+track\\s+by\\s+(.*?))?$/\n };\n\n this.$get = function ($parse, $q) {\n\n function ParseOptionsFactory (attr, config) {\n\n var $parseOptions = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n $parseOptions.$values = [];\n\n // Private vars\n var match;\n var displayFn;\n var valueName;\n /* eslint-disable no-unused-vars */\n var keyName;\n var groupByFn;\n /* eslint-enable no-unused-vars */\n var valueFn;\n var valuesFn;\n\n $parseOptions.init = function () {\n $parseOptions.$match = match = attr.match(options.regexp);\n displayFn = $parse(match[2] || match[1]);\n valueName = match[4] || match[6];\n keyName = match[5];\n groupByFn = $parse(match[3] || '');\n valueFn = $parse(match[2] ? match[1] : valueName);\n valuesFn = $parse(match[7]);\n };\n\n $parseOptions.valuesFn = function (scope, controller) {\n return $q.when(valuesFn(scope, controller))\n .then(function (values) {\n if (!angular.isArray(values)) {\n values = [];\n }\n $parseOptions.$values = values.length ? parseValues(values, scope) : [];\n return $parseOptions.$values;\n });\n };\n\n $parseOptions.displayValue = function (modelValue) {\n var scope = {};\n scope[valueName] = modelValue;\n return displayFn(scope);\n };\n\n // Private functions\n\n function parseValues (values, scope) {\n return values.map(function (match, index) {\n var locals = {};\n var label;\n var value;\n locals[valueName] = match;\n label = displayFn(scope, locals);\n value = valueFn(scope, locals);\n return {label: label, value: value, index: index};\n });\n }\n\n $parseOptions.init();\n return $parseOptions;\n\n }\n\n return ParseOptionsFactory;\n\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.dimensions', [])\n\n .factory('dimensions', function () {\n\n var fn = {};\n\n /**\n * Test the element nodeName\n * @param element\n * @param name\n */\n var nodeName = fn.nodeName = function (element, name) {\n return element.nodeName && element.nodeName.toLowerCase() === name.toLowerCase();\n };\n\n /**\n * Returns the element computed style\n * @param element\n * @param prop\n * @param extra\n */\n fn.css = function (element, prop, extra) {\n var value;\n if (element.currentStyle) { // IE\n value = element.currentStyle[prop];\n } else if (window.getComputedStyle) {\n value = window.getComputedStyle(element)[prop];\n } else {\n value = element.style[prop];\n }\n return extra === true ? parseFloat(value) || 0 : value;\n };\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * @required-by bootstrap-tooltip, bootstrap-affix\n * @url http://api.jquery.com/offset/\n * @param element\n */\n fn.offset = function (element) {\n var boxRect = element.getBoundingClientRect();\n var docElement = element.ownerDocument;\n return {\n width: boxRect.width || element.offsetWidth,\n height: boxRect.height || element.offsetHeight,\n top: boxRect.top + (window.pageYOffset || docElement.documentElement.scrollTop) - (docElement.documentElement.clientTop || 0),\n left: boxRect.left + (window.pageXOffset || docElement.documentElement.scrollLeft) - (docElement.documentElement.clientLeft || 0)\n };\n };\n\n /**\n * Provides set equivalent of jQuery's offset function:\n * @required-by bootstrap-tooltip\n * @url http://api.jquery.com/offset/\n * @param element\n * @param options\n * @param i\n */\n fn.setOffset = function (element, options, i) {\n var curPosition;\n var curLeft;\n var curCSSTop;\n var curTop;\n var curOffset;\n var curCSSLeft;\n var calculatePosition;\n var position = fn.css(element, 'position');\n var curElem = angular.element(element);\n var props = {};\n\n // Set position first, in-case top/left are set even on static elem\n if (position === 'static') {\n element.style.position = 'relative';\n }\n\n curOffset = fn.offset(element);\n curCSSTop = fn.css(element, 'top');\n curCSSLeft = fn.css(element, 'left');\n calculatePosition = (position === 'absolute' || position === 'fixed') &&\n (curCSSTop + curCSSLeft).indexOf('auto') > -1;\n\n // Need to be able to calculate position if either\n // top or left is auto and position is either absolute or fixed\n if (calculatePosition) {\n curPosition = fn.position(element);\n curTop = curPosition.top;\n curLeft = curPosition.left;\n } else {\n curTop = parseFloat(curCSSTop) || 0;\n curLeft = parseFloat(curCSSLeft) || 0;\n }\n\n if (angular.isFunction(options)) {\n options = options.call(element, i, curOffset);\n }\n\n if (options.top !== null) {\n props.top = (options.top - curOffset.top) + curTop;\n }\n if (options.left !== null) {\n props.left = (options.left - curOffset.left) + curLeft;\n }\n\n if ('using' in options) {\n options.using.call(curElem, props);\n } else {\n curElem.css({\n top: props.top + 'px',\n left: props.left + 'px'\n });\n }\n };\n\n /**\n * Provides read-only equivalent of jQuery's position function\n * @required-by bootstrap-tooltip, bootstrap-affix\n * @url http://api.jquery.com/offset/\n * @param element\n */\n fn.position = function (element) {\n\n var offsetParentRect = {top: 0, left: 0};\n var offsetParentEl;\n var offset;\n\n // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n if (fn.css(element, 'position') === 'fixed') {\n\n // We assume that getBoundingClientRect is available when computed position is fixed\n offset = element.getBoundingClientRect();\n\n } else {\n\n // Get *real* offsetParentEl\n offsetParentEl = offsetParentElement(element);\n\n // Get correct offsets\n offset = fn.offset(element);\n if (!nodeName(offsetParentEl, 'html')) {\n offsetParentRect = fn.offset(offsetParentEl);\n }\n\n // Add offsetParent borders\n offsetParentRect.top += fn.css(offsetParentEl, 'borderTopWidth', true);\n offsetParentRect.left += fn.css(offsetParentEl, 'borderLeftWidth', true);\n }\n\n // Subtract parent offsets and element margins\n return {\n width: element.offsetWidth,\n height: element.offsetHeight,\n top: offset.top - offsetParentRect.top - fn.css(element, 'marginTop', true),\n left: offset.left - offsetParentRect.left - fn.css(element, 'marginLeft', true)\n };\n\n };\n\n /**\n * Returns the closest, non-statically positioned offsetParent of a given element\n * @required-by fn.position\n * @param element\n */\n function offsetParentElement (element) {\n var docElement = element.ownerDocument;\n var offsetParent = element.offsetParent || docElement;\n if (nodeName(offsetParent, '#document')) return docElement.documentElement;\n while (offsetParent && !nodeName(offsetParent, 'html') && fn.css(offsetParent, 'position') === 'static') {\n offsetParent = offsetParent.offsetParent;\n }\n return offsetParent || docElement.documentElement;\n }\n\n /**\n * Provides equivalent of jQuery's height function\n * @required-by bootstrap-affix\n * @url http://api.jquery.com/height/\n * @param element\n * @param outer\n */\n fn.height = function (element, outer) {\n var value = element.offsetHeight;\n if (outer) {\n value += fn.css(element, 'marginTop', true) + fn.css(element, 'marginBottom', true);\n } else {\n value -= fn.css(element, 'paddingTop', true) + fn.css(element, 'paddingBottom', true) + fn.css(element, 'borderTopWidth', true) + fn.css(element, 'borderBottomWidth', true);\n }\n return value;\n };\n\n /**\n * Provides equivalent of jQuery's width function\n * @required-by bootstrap-affix\n * @url http://api.jquery.com/width/\n * @param element\n * @param outer\n */\n fn.width = function (element, outer) {\n var value = element.offsetWidth;\n if (outer) {\n value += fn.css(element, 'marginLeft', true) + fn.css(element, 'marginRight', true);\n } else {\n value -= fn.css(element, 'paddingLeft', true) + fn.css(element, 'paddingRight', true) + fn.css(element, 'borderLeftWidth', true) + fn.css(element, 'borderRightWidth', true);\n }\n return value;\n };\n\n return fn;\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.debounce', [])\n\n// @source jashkenas/underscore\n// @url https://github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L693\n.factory('debounce', function ($timeout) {\n return function (func, wait, immediate) {\n var timeout = null;\n return function () {\n var context = this;\n var args = arguments;\n var callNow = immediate && !timeout;\n if (timeout) {\n $timeout.cancel(timeout);\n }\n timeout = $timeout(function later () {\n timeout = null;\n if (!immediate) {\n func.apply(context, args);\n }\n }, wait, false);\n if (callNow) {\n func.apply(context, args);\n }\n return timeout;\n };\n };\n})\n\n\n// @source jashkenas/underscore\n// @url https://github.com/jashkenas/underscore/blob/1.5.2/underscore.js#L661\n.factory('throttle', function ($timeout) {\n return function (func, wait, options) {\n var timeout = null;\n if (!options) options = {};\n return function () {\n var context = this;\n var args = arguments;\n if (!timeout) {\n if (options.leading !== false) {\n func.apply(context, args);\n }\n timeout = $timeout(function later () {\n timeout = null;\n if (options.trailing !== false) {\n func.apply(context, args);\n }\n }, wait, false);\n }\n };\n };\n});\n","'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.dateParser', [])\n\n.provider('$dateParser', function ($localeProvider) {\n\n // define a custom ParseDate object to use instead of native Date\n // to avoid date values wrapping when setting date component values\n function ParseDate () {\n this.year = 1970;\n this.month = 0;\n this.day = 1;\n this.hours = 0;\n this.minutes = 0;\n this.seconds = 0;\n this.milliseconds = 0;\n }\n\n ParseDate.prototype.setMilliseconds = function (value) { this.milliseconds = value; };\n ParseDate.prototype.setSeconds = function (value) { this.seconds = value; };\n ParseDate.prototype.setMinutes = function (value) { this.minutes = value; };\n ParseDate.prototype.setHours = function (value) { this.hours = value; };\n ParseDate.prototype.getHours = function () { return this.hours; };\n ParseDate.prototype.setDate = function (value) { this.day = value; };\n ParseDate.prototype.setMonth = function (value) { this.month = value; };\n ParseDate.prototype.setFullYear = function (value) { this.year = value; };\n ParseDate.prototype.fromDate = function (value) {\n this.year = value.getFullYear();\n this.month = value.getMonth();\n this.day = value.getDate();\n this.hours = value.getHours();\n this.minutes = value.getMinutes();\n this.seconds = value.getSeconds();\n this.milliseconds = value.getMilliseconds();\n return this;\n };\n\n ParseDate.prototype.toDate = function () {\n return new Date(this.year, this.month, this.day, this.hours, this.minutes, this.seconds, this.milliseconds);\n };\n\n var proto = ParseDate.prototype;\n\n function noop () {\n }\n\n function isNumeric (n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function indexOfCaseInsensitive (array, value) {\n var len = array.length;\n var str = value.toString().toLowerCase();\n for (var i = 0; i < len; i++) {\n if (array[i].toLowerCase() === str) { return i; }\n }\n return -1; // Return -1 per the \"Array.indexOf()\" method.\n }\n\n var defaults = this.defaults = {\n format: 'shortDate',\n strict: false\n };\n\n this.$get = function ($locale, dateFilter) {\n\n var DateParserFactory = function (config) {\n\n var options = angular.extend({}, defaults, config);\n\n var $dateParser = {};\n\n /* eslint-disable key-spacing, quote-props */\n var regExpMap = {\n 'sss' : '[0-9]{3}',\n 'ss' : '[0-5][0-9]',\n 's' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'mm' : '[0-5][0-9]',\n 'm' : options.strict ? '[1-5]?[0-9]' : '[0-9]|[0-5][0-9]',\n 'HH' : '[01][0-9]|2[0-3]',\n 'H' : options.strict ? '1?[0-9]|2[0-3]' : '[01]?[0-9]|2[0-3]',\n 'hh' : '[0][1-9]|[1][012]',\n 'h' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'a' : 'AM|PM',\n 'EEEE' : $locale.DATETIME_FORMATS.DAY.join('|'),\n 'EEE' : $locale.DATETIME_FORMATS.SHORTDAY.join('|'),\n 'dd' : '0[1-9]|[12][0-9]|3[01]',\n 'd' : options.strict ? '[1-9]|[1-2][0-9]|3[01]' : '0?[1-9]|[1-2][0-9]|3[01]',\n 'MMMM' : $locale.DATETIME_FORMATS.MONTH.join('|'),\n 'MMM' : $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n 'MM' : '0[1-9]|1[012]',\n 'M' : options.strict ? '[1-9]|1[012]' : '0?[1-9]|1[012]',\n 'yyyy' : '[1]{1}[0-9]{3}|[2]{1}[0-9]{3}',\n 'yy' : '[0-9]{2}',\n 'y' : options.strict ? '-?(0|[1-9][0-9]{0,3})' : '-?0*[0-9]{1,4}'\n };\n\n var setFnMap = {\n 'sss' : proto.setMilliseconds,\n 'ss' : proto.setSeconds,\n 's' : proto.setSeconds,\n 'mm' : proto.setMinutes,\n 'm' : proto.setMinutes,\n 'HH' : proto.setHours,\n 'H' : proto.setHours,\n 'hh' : proto.setHours,\n 'h' : proto.setHours,\n 'EEEE' : noop,\n 'EEE' : noop,\n 'dd' : proto.setDate,\n 'd' : proto.setDate,\n 'a' : function (value) { var hours = this.getHours() % 12; return this.setHours(value.match(/pm/i) ? hours + 12 : hours); },\n 'MMMM' : function (value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.MONTH, value)); },\n 'MMM' : function (value) { return this.setMonth(indexOfCaseInsensitive($locale.DATETIME_FORMATS.SHORTMONTH, value)); },\n 'MM' : function (value) { return this.setMonth(1 * value - 1); },\n 'M' : function (value) { return this.setMonth(1 * value - 1); },\n 'yyyy' : proto.setFullYear,\n 'yy' : function (value) { return this.setFullYear(2000 + 1 * value); },\n 'y' : function (value) { return (1 * value <= 50 && value.length === 2) ? this.setFullYear(2000 + 1 * value) : this.setFullYear(1 * value); }\n };\n /* eslint-enable key-spacing, quote-props */\n\n var regex;\n var setMap;\n\n $dateParser.init = function () {\n $dateParser.$format = $locale.DATETIME_FORMATS[options.format] || options.format;\n regex = regExpForFormat($dateParser.$format);\n setMap = setMapForFormat($dateParser.$format);\n };\n\n $dateParser.isValid = function (date) {\n if (angular.isDate(date)) return !isNaN(date.getTime());\n return regex.test(date);\n };\n\n $dateParser.parse = function (value, baseDate, format, timezone) {\n // check for date format special names\n if (format) format = $locale.DATETIME_FORMATS[format] || format;\n if (angular.isDate(value)) value = dateFilter(value, format || $dateParser.$format, timezone);\n var formatRegex = format ? regExpForFormat(format) : regex;\n var formatSetMap = format ? setMapForFormat(format) : setMap;\n var matches = formatRegex.exec(value);\n if (!matches) return false;\n // use custom ParseDate object to set parsed values\n var date = baseDate && !isNaN(baseDate.getTime()) ? new ParseDate().fromDate(baseDate) : new ParseDate().fromDate(new Date(1970, 0, 1, 0));\n for (var i = 0; i < matches.length - 1; i++) {\n if (formatSetMap[i]) formatSetMap[i].call(date, matches[i + 1]);\n }\n // convert back to native Date object\n var newDate = date.toDate();\n\n // check new native Date object for day values overflow\n if (parseInt(date.day, 10) !== newDate.getDate()) {\n return false;\n }\n\n return newDate;\n };\n\n $dateParser.getDateForAttribute = function (key, value) {\n var date;\n\n if (value === 'today') {\n var today = new Date();\n date = new Date(today.getFullYear(), today.getMonth(), today.getDate() + (key === 'maxDate' ? 1 : 0), 0, 0, 0, (key === 'minDate' ? 0 : -1));\n } else if (angular.isString(value) && value.match(/^\".+\"$/)) { // Support {{ dateObj }}\n date = new Date(value.substr(1, value.length - 2));\n } else if (isNumeric(value)) {\n date = new Date(parseInt(value, 10));\n } else if (angular.isString(value) && value.length === 0) { // Reset date\n date = key === 'minDate' ? -Infinity : +Infinity;\n } else {\n date = new Date(value);\n }\n\n return date;\n };\n\n $dateParser.getTimeForAttribute = function (key, value) {\n var time;\n\n if (value === 'now') {\n time = new Date().setFullYear(1970, 0, 1);\n } else if (angular.isString(value) && value.match(/^\".+\"$/)) {\n time = new Date(value.substr(1, value.length - 2)).setFullYear(1970, 0, 1);\n } else if (isNumeric(value)) {\n time = new Date(parseInt(value, 10)).setFullYear(1970, 0, 1);\n } else if (angular.isString(value) && value.length === 0) { // Reset time\n time = key === 'minTime' ? -Infinity : +Infinity;\n } else {\n time = $dateParser.parse(value, new Date(1970, 0, 1, 0));\n }\n\n return time;\n };\n\n /* Handle switch to/from daylight saving.\n * Hours may be non-zero on daylight saving cut-over:\n * > 12 when midnight changeover, but then cannot generate\n * midnight datetime, so jump to 1AM, otherwise reset.\n * @param date (Date) the date to check\n * @return (Date) the corrected date\n *\n * __ copied from jquery ui datepicker __\n */\n $dateParser.daylightSavingAdjust = function (date) {\n if (!date) {\n return null;\n }\n date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n return date;\n };\n\n /* Correct the date for timezone offset.\n * @param date (Date) the date to adjust\n * @param timezone (string) the timezone to adjust for\n * @param undo (boolean) to add or subtract timezone offset\n * @return (Date) the corrected date\n */\n $dateParser.timezoneOffsetAdjust = function (date, timezone, undo) {\n if (!date) {\n return null;\n }\n // Right now, only 'UTC' is supported.\n if (timezone && timezone === 'UTC') {\n date = new Date(date.getTime());\n date.setMinutes(date.getMinutes() + (undo ? -1 : 1) * date.getTimezoneOffset());\n }\n return date;\n };\n\n // Private functions\n\n function regExpForFormat (format) {\n // `format` string can contain literal values.\n // These need to be escaped by surrounding with\n // single quotes (e.g. `\"h 'in the morning'\"`).\n // In order to output a single quote, escape it - i.e.,\n // two single quotes in a sequence (e.g. `\"h 'o''clock'\"`).\n\n var re = buildDateAbstractRegex(format);\n return buildDateParseRegex(re);\n }\n\n function buildDateAbstractRegex (format) {\n var escapedFormat = escapeReservedSymbols(format);\n var escapedLiteralFormat = escapedFormat.replace(/''/g, '\\\\\\'');\n var literalRegex = /('(?:\\\\'|.)*?')/;\n var formatParts = escapedLiteralFormat.split(literalRegex);\n var dateElements = Object.keys(regExpMap);\n var dateRegexParts = [];\n\n angular.forEach(formatParts, function (part) {\n if (isFormatStringLiteral(part)) {\n part = trimLiteralEscapeChars(part);\n } else {\n // Abstract replaces to avoid collisions\n for (var i = 0; i < dateElements.length; i++) {\n part = part.split(dateElements[i]).join('${' + i + '}');\n }\n }\n dateRegexParts.push(part);\n });\n\n return dateRegexParts.join('');\n }\n\n function escapeReservedSymbols (text) {\n return text.replace(/\\\\/g, '[\\\\\\\\]')\n .replace(/-/g, '[-]')\n .replace(/\\./g, '[.]')\n .replace(/\\*/g, '[*]')\n .replace(/\\+/g, '[+]')\n .replace(/\\?/g, '[?]')\n .replace(/\\$/g, '[$]')\n .replace(/\\^/g, '[^]')\n .replace(/\\//g, '[/]')\n .replace(/\\\\s/g, '[\\\\s]');\n }\n\n function isFormatStringLiteral (text) {\n return /^'.*'$/.test(text);\n }\n\n function trimLiteralEscapeChars (text) {\n return text.replace(/^'(.*)'$/, '$1');\n }\n\n function buildDateParseRegex (abstractRegex) {\n var dateElements = Object.keys(regExpMap);\n var re = abstractRegex;\n\n // Replace abstracted values\n for (var i = 0; i < dateElements.length; i++) {\n re = re.split('${' + i + '}').join('(' + regExpMap[dateElements[i]] + ')');\n }\n\n return new RegExp('^' + re + '$', ['i']);\n }\n\n function setMapForFormat (format) {\n var re = buildDateAbstractRegex(format);\n return buildDateParseValuesMap(re);\n }\n\n function buildDateParseValuesMap (abstractRegex) {\n var dateElements = Object.keys(regExpMap);\n var valuesRegex = new RegExp('\\\\${(\\\\d+)}', 'g');\n var valuesMatch;\n var keyIndex;\n var valueKey;\n var valueFunction;\n var valuesFunctionMap = [];\n\n /* eslint-disable no-cond-assign */\n while ((valuesMatch = valuesRegex.exec(abstractRegex)) !== null) {\n keyIndex = valuesMatch[1];\n valueKey = dateElements[keyIndex];\n valueFunction = setFnMap[valueKey];\n\n valuesFunctionMap.push(valueFunction);\n }\n\n return valuesFunctionMap;\n }\n\n $dateParser.init();\n return $dateParser;\n\n };\n\n return DateParserFactory;\n\n };\n\n});\n","'use strict';\n\nangular.module('mgcrea.ngStrap.helpers.dateFormatter', [])\n\n .service('$dateFormatter', function ($locale, dateFilter) {\n\n // The unused `lang` arguments are on purpose. The default implementation does not\n // use them and it always uses the locale loaded into the `$locale` service.\n // Custom implementations might use it, thus allowing different directives to\n // have different languages.\n\n this.getDefaultLocale = function () {\n return $locale.id;\n };\n\n // Format is either a data format name, e.g. \"shortTime\" or \"fullDate\", or a date format\n // Return either the corresponding date format or the given date format.\n this.getDatetimeFormat = function (format, lang) {\n return $locale.DATETIME_FORMATS[format] || format;\n };\n\n this.weekdaysShort = function (lang) {\n return $locale.DATETIME_FORMATS.SHORTDAY;\n };\n\n function splitTimeFormat (format) {\n return /(h+)([:\\.])?(m+)([:\\.])?(s*)[ ]?(a?)/i.exec(format).slice(1);\n }\n\n // h:mm a => h\n this.hoursFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[0];\n };\n\n // h:mm a => mm\n this.minutesFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[2];\n };\n\n // h:mm:ss a => ss\n this.secondsFormat = function (timeFormat) {\n return splitTimeFormat(timeFormat)[4];\n };\n\n // h:mm a => :\n this.timeSeparator = function (timeFormat) {\n return splitTimeFormat(timeFormat)[1];\n };\n\n // h:mm:ss a => true, h:mm a => false\n this.showSeconds = function (timeFormat) {\n return !!splitTimeFormat(timeFormat)[4];\n };\n\n // h:mm a => true, H.mm => false\n this.showAM = function (timeFormat) {\n return !!splitTimeFormat(timeFormat)[5];\n };\n\n this.formatDate = function (date, format, lang, timezone) {\n return dateFilter(date, format, timezone);\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.button', [])\n\n .provider('$button', function () {\n\n var defaults = this.defaults = {\n activeClass: 'active',\n toggleEvent: 'click'\n };\n\n this.$get = function () {\n return {defaults: defaults};\n };\n\n })\n\n .directive('bsCheckboxGroup', function () {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink (element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"checkbox\"]');\n angular.forEach(children, function (child) {\n var childEl = angular.element(child);\n childEl.attr('bs-checkbox', '');\n childEl.attr('ng-model', attr.ngModel + '.' + childEl.attr('value'));\n });\n }\n\n };\n\n })\n\n .directive('bsCheckbox', function ($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support label > input[type=\"checkbox\"]\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var trueValue = angular.isDefined(attr.trueValue) ? attr.trueValue : true;\n if (constantValueRegExp.test(attr.trueValue)) {\n trueValue = scope.$eval(attr.trueValue);\n }\n var falseValue = angular.isDefined(attr.falseValue) ? attr.falseValue : false;\n if (constantValueRegExp.test(attr.falseValue)) {\n falseValue = scope.$eval(attr.falseValue);\n }\n\n // Parse exotic values\n var hasExoticValues = typeof trueValue !== 'boolean' || typeof falseValue !== 'boolean';\n if (hasExoticValues) {\n controller.$parsers.push(function (viewValue) {\n // console.warn('$parser', element.attr('ng-model'), 'viewValue', viewValue);\n return viewValue ? trueValue : falseValue;\n });\n // modelValue -> $formatters -> viewValue\n controller.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n return angular.equals(modelValue, trueValue);\n });\n }\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('ng-model'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = !!controller.$viewValue;\n $$rAF(function () {\n if (isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function () {\n scope.$apply(function () {\n // console.warn('!click', element.attr('ng-model'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n if (!isInput) {\n controller.$setViewValue(!activeElement.hasClass('active'));\n }\n controller.$render();\n });\n });\n\n }\n\n };\n\n })\n\n .directive('bsRadioGroup', function () {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n compile: function postLink (element, attr) {\n element.attr('data-toggle', 'buttons');\n element.removeAttr('ng-model');\n var children = element[0].querySelectorAll('input[type=\"radio\"]');\n angular.forEach(children, function (child) {\n angular.element(child).attr('bs-radio', '');\n angular.element(child).attr('ng-model', attr.ngModel);\n });\n }\n\n };\n\n })\n\n .directive('bsRadio', function ($button, $$rAF) {\n\n var defaults = $button.defaults;\n var constantValueRegExp = /^(true|false|\\d+)$/;\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function postLink (scope, element, attr, controller) {\n\n var options = defaults;\n\n // Support `label > input[type=\"radio\"]` markup\n var isInput = element[0].nodeName === 'INPUT';\n var activeElement = isInput ? element.parent() : element;\n\n var value;\n attr.$observe('value', function (v) {\n if (typeof v !== 'boolean' && constantValueRegExp.test(v)) {\n value = scope.$eval(v);\n } else {\n value = v;\n }\n controller.$render();\n });\n\n // model -> view\n controller.$render = function () {\n // console.warn('$render', element.attr('value'), 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue, 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue);\n var isActive = angular.equals(controller.$viewValue, value);\n $$rAF(function () {\n if (isInput) element[0].checked = isActive;\n activeElement.toggleClass(options.activeClass, isActive);\n });\n };\n\n // view -> model\n element.bind(options.toggleEvent, function () {\n scope.$apply(function () {\n // console.warn('!click', element.attr('value'), 'controller.$viewValue', typeof controller.$viewValue, controller.$viewValue, 'controller.$modelValue', typeof controller.$modelValue, controller.$modelValue);\n controller.$setViewValue(value);\n controller.$render();\n });\n });\n\n }\n\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.collapse', [])\n\n .provider('$collapse', function () {\n\n var defaults = this.defaults = {\n animation: 'am-collapse',\n disallowToggle: false,\n activeClass: 'in',\n startCollapsed: false,\n allowMultiple: false\n };\n\n var controller = this.controller = function ($scope, $element, $attrs) {\n var self = this;\n\n // Attributes options\n self.$options = angular.copy(defaults);\n angular.forEach(['animation', 'disallowToggle', 'activeClass', 'startCollapsed', 'allowMultiple'], function (key) {\n if (angular.isDefined($attrs[key])) self.$options[key] = $attrs[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['disallowToggle', 'startCollapsed', 'allowMultiple'], function (key) {\n if (angular.isDefined($attrs[key]) && falseValueRegExp.test($attrs[key])) {\n self.$options[key] = false;\n }\n });\n\n self.$toggles = [];\n self.$targets = [];\n\n self.$viewChangeListeners = [];\n\n self.$registerToggle = function (element) {\n self.$toggles.push(element);\n };\n self.$registerTarget = function (element) {\n self.$targets.push(element);\n };\n\n self.$unregisterToggle = function (element) {\n var index = self.$toggles.indexOf(element);\n // remove toggle from $toggles array\n self.$toggles.splice(index, 1);\n };\n self.$unregisterTarget = function (element) {\n var index = self.$targets.indexOf(element);\n\n // remove element from $targets array\n self.$targets.splice(index, 1);\n\n if (self.$options.allowMultiple) {\n // remove target index from $active array values\n deactivateItem(element);\n }\n\n // fix active item indexes\n fixActiveItemIndexes(index);\n\n self.$viewChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n // use array to store all the currently open panels\n self.$targets.$active = !self.$options.startCollapsed ? [0] : [];\n self.$setActive = $scope.$setActive = function (value) {\n if (angular.isArray(value)) {\n self.$targets.$active = value;\n } else if (!self.$options.disallowToggle && isActive(value)) {\n deactivateItem(value);\n } else {\n activateItem(value);\n }\n\n self.$viewChangeListeners.forEach(function (fn) {\n fn();\n });\n };\n\n self.$activeIndexes = function () {\n if (self.$options.allowMultiple) {\n return self.$targets.$active;\n }\n return self.$targets.$active.length === 1 ? self.$targets.$active[0] : -1;\n };\n\n function fixActiveItemIndexes (index) {\n // item with index was removed, so we\n // need to adjust other items index values\n var activeIndexes = self.$targets.$active;\n for (var i = 0; i < activeIndexes.length; i++) {\n if (index < activeIndexes[i]) {\n activeIndexes[i] = activeIndexes[i] - 1;\n }\n\n // the last item is active, so we need to\n // adjust its index\n if (activeIndexes[i] === self.$targets.length) {\n activeIndexes[i] = self.$targets.length - 1;\n }\n }\n }\n\n function isActive (value) {\n var activeItems = self.$targets.$active;\n return activeItems.indexOf(value) !== -1;\n }\n\n function deactivateItem (value) {\n var index = self.$targets.$active.indexOf(value);\n if (index !== -1) {\n self.$targets.$active.splice(index, 1);\n }\n }\n\n function activateItem (value) {\n if (!self.$options.allowMultiple) {\n // remove current selected item\n self.$targets.$active.splice(0, 1);\n }\n\n if (self.$targets.$active.indexOf(value) === -1) {\n self.$targets.$active.push(value);\n }\n }\n\n };\n\n this.$get = function () {\n var $collapse = {};\n $collapse.defaults = defaults;\n $collapse.controller = controller;\n return $collapse;\n };\n\n })\n\n .directive('bsCollapse', function ($window, $animate, $collapse) {\n\n return {\n require: ['?ngModel', 'bsCollapse'],\n controller: ['$scope', '$element', '$attrs', $collapse.controller],\n link: function postLink (scope, element, attrs, controllers) {\n\n var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n if (ngModelCtrl) {\n\n // Update the modelValue following\n bsCollapseCtrl.$viewChangeListeners.push(function () {\n ngModelCtrl.$setViewValue(bsCollapseCtrl.$activeIndexes());\n });\n\n // modelValue -> $formatters -> viewValue\n ngModelCtrl.$formatters.push(function (modelValue) {\n // console.warn('$formatter(\"%s\"): modelValue=%o (%o)', element.attr('ng-model'), modelValue, typeof modelValue);\n if (angular.isArray(modelValue)) {\n // model value is an array, so just replace\n // the active items directly\n bsCollapseCtrl.$setActive(modelValue);\n } else {\n var activeIndexes = bsCollapseCtrl.$activeIndexes();\n\n if (angular.isArray(activeIndexes)) {\n // we have an array of selected indexes\n if (activeIndexes.indexOf(modelValue * 1) === -1) {\n // item with modelValue index is not active\n bsCollapseCtrl.$setActive(modelValue * 1);\n }\n } else if (activeIndexes !== modelValue * 1) {\n bsCollapseCtrl.$setActive(modelValue * 1);\n }\n }\n return modelValue;\n });\n\n }\n\n }\n };\n\n })\n\n .directive('bsCollapseToggle', function () {\n\n return {\n require: ['^?ngModel', '^bsCollapse'],\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n // Add base attr\n element.attr('data-toggle', 'collapse');\n\n // Push pane to parent bsCollapse controller\n bsCollapseCtrl.$registerToggle(element);\n\n // remove toggle from collapse controller when toggle is destroyed\n scope.$on('$destroy', function () {\n bsCollapseCtrl.$unregisterToggle(element);\n });\n\n element.on('click', function () {\n if (!attrs.disabled) {\n var index = attrs.bsCollapseToggle && attrs.bsCollapseToggle !== 'bs-collapse-toggle' ? attrs.bsCollapseToggle : bsCollapseCtrl.$toggles.indexOf(element);\n bsCollapseCtrl.$setActive(index * 1);\n scope.$apply();\n }\n });\n\n }\n };\n\n })\n\n .directive('bsCollapseTarget', function ($animate) {\n\n return {\n require: ['^?ngModel', '^bsCollapse'],\n // scope: true,\n link: function postLink (scope, element, attrs, controllers) {\n\n // var ngModelCtrl = controllers[0];\n var bsCollapseCtrl = controllers[1];\n\n // Add base class\n element.addClass('collapse');\n\n // Add animation class\n if (bsCollapseCtrl.$options.animation) {\n element.addClass(bsCollapseCtrl.$options.animation);\n }\n\n // Push pane to parent bsCollapse controller\n bsCollapseCtrl.$registerTarget(element);\n\n // remove pane target from collapse controller when target is destroyed\n scope.$on('$destroy', function () {\n bsCollapseCtrl.$unregisterTarget(element);\n });\n\n function render () {\n var index = bsCollapseCtrl.$targets.indexOf(element);\n var active = bsCollapseCtrl.$activeIndexes();\n var action = 'removeClass';\n if (angular.isArray(active)) {\n if (active.indexOf(index) !== -1) {\n action = 'addClass';\n }\n } else if (index === active) {\n action = 'addClass';\n }\n\n $animate[action](element, bsCollapseCtrl.$options.activeClass);\n }\n\n bsCollapseCtrl.$viewChangeListeners.push(function () {\n render();\n });\n render();\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.aside', ['mgcrea.ngStrap.modal'])\n\n .provider('$aside', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade-and-slide-right',\n prefixClass: 'aside',\n prefixEvent: 'aside',\n placement: 'right',\n templateUrl: 'aside/aside.tpl.html',\n contentTemplate: false,\n container: false,\n element: null,\n backdrop: true,\n keyboard: true,\n html: false,\n show: true\n };\n\n this.$get = function ($modal) {\n\n function AsideFactory (config) {\n\n var $aside = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $aside = $modal(options);\n\n return $aside;\n\n }\n\n return AsideFactory;\n\n };\n\n })\n\n .directive('bsAside', function ($window, $sce, $aside) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'contentTemplate', 'placement', 'backdrop', 'keyboard', 'html', 'container', 'animation'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['backdrop', 'keyboard', 'html', 'container'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsAside) {\n scope.$watch(attr.bsAside, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize aside\n var aside = $aside(options);\n\n // Trigger\n element.on(attr.trigger || 'click', aside.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (aside) aside.destroy();\n options = null;\n aside = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\n// @BUG: following snippet won't compile correctly\n\nangular.module('mgcrea.ngStrap.alert', ['mgcrea.ngStrap.modal'])\n\n .provider('$alert', function () {\n\n var defaults = this.defaults = {\n animation: 'am-fade',\n prefixClass: 'alert',\n prefixEvent: 'alert',\n placement: null,\n templateUrl: 'alert/alert.tpl.html',\n container: false,\n element: null,\n backdrop: false,\n keyboard: true,\n show: true,\n // Specific options\n duration: false,\n type: false,\n dismissable: true\n };\n\n this.$get = function ($modal, $timeout) {\n\n function AlertFactory (config) {\n\n var $alert = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n\n $alert = $modal(options);\n\n // Support scope as string options [/*title, content, */ type, dismissable]\n $alert.$scope.dismissable = !!options.dismissable;\n if (options.type) {\n $alert.$scope.type = options.type;\n }\n\n // Support auto-close duration\n var show = $alert.show;\n if (options.duration) {\n $alert.show = function () {\n show();\n $timeout(function () {\n $alert.hide();\n }, options.duration * 1000);\n };\n }\n\n return $alert;\n\n }\n\n return AlertFactory;\n\n };\n\n })\n\n .directive('bsAlert', function ($window, $sce, $alert) {\n\n return {\n restrict: 'EAC',\n scope: true,\n link: function postLink (scope, element, attr, transclusion) {\n\n // Directive options\n var options = {scope: scope, element: element, show: false};\n angular.forEach(['template', 'templateUrl', 'controller', 'controllerAs', 'placement', 'keyboard', 'html', 'container', 'animation', 'duration', 'dismissable'], function (key) {\n if (angular.isDefined(attr[key])) options[key] = attr[key];\n });\n\n // use string regex match boolean attr falsy values, leave truthy values be\n var falseValueRegExp = /^(false|0|)$/i;\n angular.forEach(['keyboard', 'html', 'container', 'dismissable'], function (key) {\n if (angular.isDefined(attr[key]) && falseValueRegExp.test(attr[key])) options[key] = false;\n });\n\n // bind functions from the attrs to the show and hide events\n angular.forEach(['onBeforeShow', 'onShow', 'onBeforeHide', 'onHide'], function (key) {\n var bsKey = 'bs' + key.charAt(0).toUpperCase() + key.slice(1);\n if (angular.isDefined(attr[bsKey])) {\n options[key] = scope.$eval(attr[bsKey]);\n }\n });\n\n // overwrite inherited title value when no value specified\n // fix for angular 1.3.1 531a8de72c439d8ddd064874bf364c00cedabb11\n if (!scope.hasOwnProperty('title')) {\n scope.title = '';\n }\n\n // Support scope as data-attrs\n angular.forEach(['title', 'content', 'type'], function (key) {\n if (attr[key]) {\n attr.$observe(key, function (newValue, oldValue) {\n scope[key] = $sce.trustAsHtml(newValue);\n });\n }\n });\n\n // Support scope as an object\n if (attr.bsAlert) {\n scope.$watch(attr.bsAlert, function (newValue, oldValue) {\n if (angular.isObject(newValue)) {\n angular.extend(scope, newValue);\n } else {\n scope.content = newValue;\n }\n }, true);\n }\n\n // Initialize alert\n var alert = $alert(options);\n\n // Trigger\n element.on(attr.trigger || 'click', alert.toggle);\n\n // Garbage collection\n scope.$on('$destroy', function () {\n if (alert) alert.destroy();\n options = null;\n alert = null;\n });\n\n }\n };\n\n });\n","'use strict';\n\nangular.module('mgcrea.ngStrap.affix', ['mgcrea.ngStrap.helpers.dimensions', 'mgcrea.ngStrap.helpers.debounce'])\n\n .provider('$affix', function () {\n\n var defaults = this.defaults = {\n offsetTop: 'auto',\n inlineStyles: true,\n setWidth: true\n };\n\n this.$get = function ($window, debounce, dimensions) {\n\n var bodyEl = angular.element($window.document.body);\n var windowEl = angular.element($window);\n\n function AffixFactory (element, config) {\n\n var $affix = {};\n\n // Common vars\n var options = angular.extend({}, defaults, config);\n var targetEl = options.target;\n\n // Initial private vars\n var reset = 'affix affix-top affix-bottom';\n var setWidth = false;\n var initialAffixTop = 0;\n var initialOffsetTop = 0;\n var offsetTop = 0;\n var offsetBottom = 0;\n var affixed = null;\n var unpin = null;\n\n var parent = element.parent();\n // Options: custom parent\n if (options.offsetParent) {\n if (options.offsetParent.match(/^\\d+$/)) {\n for (var i = 0; i < (options.offsetParent * 1) - 1; i++) {\n parent = parent.parent();\n }\n } else {\n parent = angular.element(options.offsetParent);\n }\n }\n\n $affix.init = function () {\n\n this.$parseOffsets();\n initialOffsetTop = dimensions.offset(element[0]).top + initialAffixTop;\n setWidth = options.setWidth && !element[0].style.width;\n\n // Bind events\n targetEl.on('scroll', this.checkPosition);\n targetEl.on('click', this.checkPositionWithEventLoop);\n windowEl.on('resize', this.$debouncedOnResize);\n\n // Both of these checkPosition() calls are necessary for the case where\n // the user hits refresh after scrolling to the bottom of the page.\n this.checkPosition();\n this.checkPositionWithEventLoop();\n\n };\n\n $affix.destroy = function () {\n\n // Unbind events\n targetEl.off('scroll', this.checkPosition);\n targetEl.off('click', this.checkPositionWithEventLoop);\n windowEl.off('resize', this.$debouncedOnResize);\n\n };\n\n $affix.checkPositionWithEventLoop = function () {\n\n // IE 9 throws an error if we use 'this' instead of '$affix'\n // in this setTimeout call\n setTimeout($affix.checkPosition, 1);\n\n };\n\n $affix.checkPosition = function () {\n // if (!this.$element.is(':visible')) return\n\n var scrollTop = getScrollTop();\n var position = dimensions.offset(element[0]);\n var elementHeight = dimensions.height(element[0]);\n\n // Get required affix class according to position\n var affix = getRequiredAffixClass(unpin, position, elementHeight);\n\n // Did affix status changed this last check?\n if (affixed === affix) return;\n affixed = affix;\n\n if (affix === 'top') {\n unpin = null;\n if (setWidth) {\n element.css('width', '');\n }\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', '');\n }\n } else if (affix === 'bottom') {\n if (options.offsetUnpin) {\n unpin = -(options.offsetUnpin * 1);\n } else {\n // Calculate unpin threshold when affixed to bottom.\n // Hopefully the browser scrolls pixel by pixel.\n unpin = position.top - scrollTop;\n }\n if (setWidth) {\n element.css('width', '');\n }\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', (options.offsetParent) ? '' : ((bodyEl[0].offsetHeight - offsetBottom - elementHeight - initialOffsetTop) + 'px'));\n }\n } else { // affix === 'middle'\n unpin = null;\n if (setWidth) {\n element.css('width', element[0].offsetWidth + 'px');\n }\n if (options.inlineStyles) {\n element.css('position', 'fixed');\n element.css('top', initialAffixTop + 'px');\n }\n }\n\n // Add proper affix class\n element.removeClass(reset).addClass('affix' + ((affix !== 'middle') ? '-' + affix : ''));\n\n };\n\n $affix.$onResize = function () {\n $affix.$parseOffsets();\n $affix.checkPosition();\n };\n $affix.$debouncedOnResize = debounce($affix.$onResize, 50);\n\n $affix.$parseOffsets = function () {\n var initialPosition = element[0].style.position;\n var initialTop = element[0].style.top;\n // Reset position to calculate correct offsetTop\n if (options.inlineStyles) {\n element.css('position', (options.offsetParent) ? '' : 'relative');\n element.css('top', '');\n }\n\n if (options.offsetTop) {\n if (options.offsetTop === 'auto') {\n options.offsetTop = '+0';\n }\n if (options.offsetTop.match(/^[-+]\\d+$/)) {\n initialAffixTop = - options.offsetTop * 1;\n if (options.offsetParent) {\n offsetTop = dimensions.offset(parent[0]).top + (options.offsetTop * 1);\n } else {\n offsetTop = dimensions.offset(element[0]).top - dimensions.css(element[0], 'marginTop', true) + (options.offsetTop * 1);\n }\n } else {\n offsetTop = options.offsetTop * 1;\n }\n }\n\n if (options.offsetBottom) {\n if (options.offsetParent && options.offsetBottom.match(/^[-+]\\d+$/)) {\n // add 1 pixel due to rounding problems...\n offsetBottom = getScrollHeight() - (dimensions.offset(parent[0]).top + dimensions.height(parent[0])) + (options.offsetBottom * 1) + 1;\n } else {\n offsetBottom = options.offsetBottom * 1;\n }\n }\n\n // Bring back the element's position after calculations\n if (options.inlineStyles) {\n element.css('position', initialPosition);\n element.css('top', initialTop);\n }\n };\n\n // Private methods\n\n function getRequiredAffixClass (_unpin, position, elementHeight) {\n var scrollTop = getScrollTop();\n var scrollHeight = getScrollHeight();\n\n if (scrollTop <= offsetTop) {\n return 'top';\n } else if (_unpin !== null) {\n return scrollTop + _unpin <= position.top ? 'middle' : 'bottom';\n } else if (offsetBottom !== null && (position.top + elementHeight + initialAffixTop >= scrollHeight - offsetBottom)) {\n return 'bottom';\n }\n return 'middle';\n }\n\n function getScrollTop () {\n return targetEl[0] === $window ? $window.pageYOffset : targetEl[0].scrollTop;\n }\n\n function getScrollHeight () {\n return targetEl[0] === $window ? $window.document.body.scrollHeight : targetEl[0].scrollHeight;\n }\n\n $affix.init();\n return $affix;\n\n }\n\n return AffixFactory;\n\n };\n\n })\n\n .directive('bsAffix', function ($affix, $window, $timeout) {\n\n return {\n restrict: 'EAC',\n require: '^?bsAffixTarget',\n link: function postLink (scope, element, attr, affixTarget) {\n\n var options = {scope: scope, target: affixTarget ? affixTarget.$element : angular.element($window)};\n angular.forEach(['offsetTop', 'offsetBottom', 'offsetParent', 'offsetUnpin', 'inlineStyles', 'setWidth'], function (key) {\n if (angular.isDefined(attr[key])) {\n var option = attr[key];\n if (/true/i.test(option)) option = true;\n if (/false/i.test(option)) option = false;\n options[key] = option;\n }\n });\n\n var affix;\n $timeout(function () { affix = $affix(element, options); });\n scope.$on('$destroy', function () {\n if (affix) affix.destroy();\n options = null;\n affix = null;\n });\n\n }\n };\n\n })\n\n .directive('bsAffixTarget', function () {\n return {\n controller: function ($element) {\n this.$element = $element;\n }\n };\n });\n","\nangular.module('mgcrea.ngStrap', [\n 'mgcrea.ngStrap.modal',\n 'mgcrea.ngStrap.aside',\n 'mgcrea.ngStrap.alert',\n 'mgcrea.ngStrap.button',\n 'mgcrea.ngStrap.select',\n 'mgcrea.ngStrap.datepicker',\n 'mgcrea.ngStrap.timepicker',\n 'mgcrea.ngStrap.navbar',\n 'mgcrea.ngStrap.tooltip',\n 'mgcrea.ngStrap.popover',\n 'mgcrea.ngStrap.dropdown',\n 'mgcrea.ngStrap.typeahead',\n 'mgcrea.ngStrap.scrollspy',\n 'mgcrea.ngStrap.affix',\n 'mgcrea.ngStrap.tab',\n 'mgcrea.ngStrap.collapse'\n]);\n"]} \ No newline at end of file diff --git a/static/js/angular-strap.tpl.min.js b/static/js/angular-strap.tpl.min.js new file mode 100644 index 0000000..ff8e042 --- /dev/null +++ b/static/js/angular-strap.tpl.min.js @@ -0,0 +1,8 @@ +/** + * angular-strap + * @version v2.3.10 - 2016-10-17 + * @link http://mgcrea.github.io/angular-strap + * @author Olivier Louvignes (https://github.com/mgcrea) + * @license MIT License, http://www.opensource.org/licenses/MIT + */ +!function(t,e,n){'use strict';angular.module('mgcrea.ngStrap.alert').run(['$templateCache',function(t){t.put('alert/alert.tpl.html','
 
')}]),angular.module('mgcrea.ngStrap.aside').run(['$templateCache',function(t){t.put('aside/aside.tpl.html','')}]),angular.module('mgcrea.ngStrap.datepicker').run(['$templateCache',function(t){t.put('datepicker/datepicker.tpl.html','')}]),angular.module('mgcrea.ngStrap.modal').run(['$templateCache',function(t){t.put('modal/modal.tpl.html','')}]),angular.module('mgcrea.ngStrap.dropdown').run(['$templateCache',function(t){t.put('dropdown/dropdown.tpl.html','')}]),angular.module('mgcrea.ngStrap.popover').run(['$templateCache',function(t){t.put('popover/popover.tpl.html','

')}]),angular.module('mgcrea.ngStrap.select').run(['$templateCache',function(t){t.put('select/select.tpl.html','')}]),angular.module('mgcrea.ngStrap.tab').run(['$templateCache',function(t){t.put('tab/tab.tpl.html','
')}]),angular.module('mgcrea.ngStrap.timepicker').run(['$templateCache',function(t){t.put('timepicker/timepicker.tpl.html','')}]),angular.module('mgcrea.ngStrap.tooltip').run(['$templateCache',function(t){t.put('tooltip/tooltip.tpl.html','
')}]),angular.module('mgcrea.ngStrap.typeahead').run(['$templateCache',function(t){t.put('typeahead/typeahead.tpl.html','')}])}(window,document); \ No newline at end of file diff --git a/static/js/api-check.js b/static/js/api-check.js new file mode 100644 index 0000000..c00281d --- /dev/null +++ b/static/js/api-check.js @@ -0,0 +1,1332 @@ +//! api-check version 7.5.5 built with ♥ by Kent C. Dodds (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò) + +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define(factory); + else if(typeof exports === 'object') + exports["apiCheck"] = factory(); + else + root["apiCheck"] = factory(); +})(this, function() { +return /******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + Object.defineProperty(exports, '__esModule', { + value: true + }); + + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } + + var _apiCheck = __webpack_require__(1); + + var _apiCheck2 = _interopRequireDefault(_apiCheck); + + exports['default'] = _apiCheck2['default']; + module.exports = exports['default']; + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var stringify = __webpack_require__(2); + var apiCheckUtil = __webpack_require__(3); + var each = apiCheckUtil.each; + var isError = apiCheckUtil.isError; + var t = apiCheckUtil.t; + var arrayify = apiCheckUtil.arrayify; + var getCheckerDisplay = apiCheckUtil.getCheckerDisplay; + var typeOf = apiCheckUtil.typeOf; + var getError = apiCheckUtil.getError; + + var checkers = __webpack_require__(4); + var apiCheckApis = getApiCheckApis(); + + module.exports = getApiCheckInstance; + module.exports.VERSION = ("7.5.5"); + module.exports.utils = apiCheckUtil; + module.exports.globalConfig = { + verbose: false, + disabled: false + }; + + var apiCheckApiCheck = getApiCheckInstance({ + output: { prefix: 'apiCheck' } + }); + module.exports.internalChecker = apiCheckApiCheck; + + each(checkers, function (checker, name) { + return module.exports[name] = checker; + }); + + function getApiCheckInstance() { + var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var extraCheckers = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + /* eslint complexity:[2, 6] */ + if (apiCheckApiCheck && arguments.length) { + apiCheckApiCheck['throw'](apiCheckApis.getApiCheckInstanceCheckers, arguments, { + prefix: 'creating an apiCheck instance' + }); + } + + var additionalProperties = { + 'throw': getApiCheck(true), + warn: getApiCheck(false), + getErrorMessage: getErrorMessage, + handleErrorMessage: handleErrorMessage, + config: { + output: config.output || { + prefix: '', + suffix: '', + docsBaseUrl: '' + }, + verbose: config.verbose || false, + disabled: config.disabled || false + }, + utils: apiCheckUtil + }; + + each(additionalProperties, function (wrapper, name) { + return apiCheck[name] = wrapper; + }); + + var disabled = apiCheck.disabled || module.exports.globalConfig.disabled; + each(checkers.getCheckers(disabled), function (checker, name) { + return apiCheck[name] = checker; + }); + each(extraCheckers, function (checker, name) { + return apiCheck[name] = checker; + }); + + return apiCheck; + + /** + * This is the instance function. Other things are attached to this see additional properties above. + * @param {Array} api - the checkers to check with + * @param {Array} args - the args to check + * @param {Object} output - output options + * @returns {Object} - if this has a failed = true property, then it failed + */ + function apiCheck(api, args, output) { + /* eslint complexity:[2, 8] */ + if (apiCheck.config.disabled || module.exports.globalConfig.disabled) { + return { + apiTypes: {}, argTypes: {}, + passed: true, message: '', + failed: false + }; // empty version of what is normally returned + } + checkApiCheckApi(arguments); + if (!Array.isArray(api)) { + api = [api]; + args = [args]; + } else { + // turn arguments into an array + args = Array.prototype.slice.call(args); + } + var messages = checkEnoughArgs(api, args); + if (!messages.length) { + // this is where we actually go perform the checks. + messages = checkApiWithArgs(api, args); + } + + var returnObject = getTypes(api, args); + returnObject.args = args; + if (messages.length) { + returnObject.message = apiCheck.getErrorMessage(api, args, messages, output); + returnObject.failed = true; + returnObject.passed = false; + } else { + returnObject.message = ''; + returnObject.failed = false; + returnObject.passed = true; + } + return returnObject; + } + + /** + * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-) + * @param {Array} checkApiArgs - args provided to apiCheck function + */ + function checkApiCheckApi(checkApiArgs) { + var api = checkApiArgs[0]; + var args = checkApiArgs[1]; + var isArrayOrArgs = Array.isArray(args) || args && typeof args === 'object' && typeof args.length === 'number'; + + if (Array.isArray(api) && !isArrayOrArgs) { + throw new Error(getErrorMessage(api, [args], ['If an array is provided for the api, an array must be provided for the args as well.'], { prefix: 'apiCheck' })); + } + // dog fooding here + var errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs); + if (errors.length) { + var message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, { + prefix: 'apiCheck' + }); + apiCheck.handleErrorMessage(message, true); + } + } + + function getApiCheck(shouldThrow) { + return function apiCheckWrapper(api, args, output) { + var result = apiCheck(api, args, output); + apiCheck.handleErrorMessage(result.message, shouldThrow); + return result; // wont get here if an error is thrown + }; + } + + function handleErrorMessage(message, shouldThrow) { + if (shouldThrow && message) { + throw new Error(message); + } else if (message) { + /* eslint no-console:0 */ + console.warn(message); + } + } + + function getErrorMessage(api, args) { + var messages = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2]; + var output = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; + + var gOut = apiCheck.config.output || {}; + var prefix = getPrefix(); + var suffix = getSuffix(); + var url = getUrl(); + var message = 'apiCheck failed! ' + messages.join(', '); + var passedAndShouldHavePassed = '\n\n' + buildMessageFromApiAndArgs(api, args); + return (prefix + ' ' + message + ' ' + suffix + ' ' + (url || '') + passedAndShouldHavePassed).trim(); + + function getPrefix() { + var p = output.onlyPrefix; + if (!p) { + p = ((gOut.prefix || '') + ' ' + (output.prefix || '')).trim(); + } + return p; + } + + function getSuffix() { + var s = output.onlySuffix; + if (!s) { + s = ((output.suffix || '') + ' ' + (gOut.suffix || '')).trim(); + } + return s; + } + + function getUrl() { + var u = output.url; + if (!u) { + u = gOut.docsBaseUrl && output.urlSuffix && ('' + gOut.docsBaseUrl + output.urlSuffix).trim(); + } + return u; + } + } + + function buildMessageFromApiAndArgs(api, args) { + var _getTypes = getTypes(api, args); + + var apiTypes = _getTypes.apiTypes; + var argTypes = _getTypes.argTypes; + + var copy = Array.prototype.slice.call(args || []); + var replacedItems = []; + replaceFunctionWithName(copy); + var passedArgs = getObjectString(copy); + argTypes = getObjectString(argTypes); + apiTypes = getObjectString(apiTypes); + + return generateMessage(); + + // functions + + function replaceFunctionWithName(obj) { + each(obj, function (val, name) { + /* eslint complexity:[2, 6] */ + if (replacedItems.indexOf(val) === -1) { + // avoid recursive problems + replacedItems.push(val); + if (typeof val === 'object') { + replaceFunctionWithName(obj); + } else if (typeof val === 'function') { + obj[name] = val.displayName || val.name || 'anonymous function'; + } + } + }); + } + + function getObjectString(types) { + if (!types || !types.length) { + return 'nothing'; + } else if (types && types.length === 1) { + types = types[0]; + } + return stringify(types, null, 2); + } + + function generateMessage() { + var n = '\n'; + var useS = true; + if (args && args.length === 1) { + if (typeof args[0] === 'object' && args[0] !== null) { + useS = !!Object.keys(args[0]).length; + } else { + useS = false; + } + } + var types = 'type' + (useS ? 's' : ''); + var newLine = n + n; + return 'You passed:' + n + passedArgs + newLine + ('With the ' + types + ':' + n + argTypes + newLine) + ('The API calls for:' + n + apiTypes); + } + } + + function getTypes(api, args) { + api = arrayify(api); + args = arrayify(args); + var apiTypes = api.map(function (checker, index) { + var specified = module.exports.globalConfig.hasOwnProperty('verbose'); + return getCheckerDisplay(checker, { + terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose, + obj: args[index], + addHelpers: true + }); + }); + var argTypes = args.map(function (arg) { + return getArgDisplay(arg, []); + }); + return { argTypes: argTypes, apiTypes: apiTypes }; + } + } + + // STATELESS FUNCTIONS + + /** + * This is where the magic happens for actually checking the arguments with the api. + * @param {Array} api - checkers + * @param {Array} args - and arguments object + * @returns {Array} - the error messages + */ + function checkApiWithArgs(api, args) { + /* eslint complexity:[2, 7] */ + var messages = []; + var failed = false; + var checkerIndex = 0; + var argIndex = 0; + var arg = undefined, + checker = undefined, + res = undefined, + lastChecker = undefined, + argName = undefined, + argFailed = undefined, + skipPreviousChecker = undefined; + /* jshint -W084 */ + while ((checker = api[checkerIndex++]) && argIndex < args.length) { + arg = args[argIndex++]; + argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : ''); + res = checker(arg, 'value', argName); + argFailed = isError(res); + lastChecker = checkerIndex >= api.length; + skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional; + if (argFailed && lastChecker || argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker) { + failed = true; + messages.push(getCheckerErrorMessage(res, checker, arg)); + } else if (argFailed && checker.isOptional) { + argIndex--; + } else { + messages.push(t(argName) + ' passed'); + } + } + return failed ? messages : []; + } + + checkerTypeType.type = 'function with __apiCheckData property and `${function.type}` property'; + function checkerTypeType(checkerType, name, location) { + var apiCheckDataChecker = checkers.shape({ + type: checkers.string, + optional: checkers.bool + }); + var asFunc = checkers.func.withProperties({ __apiCheckData: apiCheckDataChecker }); + var asShape = checkers.shape({ __apiCheckData: apiCheckDataChecker }); + var wrongShape = checkers.oneOfType([asFunc, asShape])(checkerType, name, location); + if (isError(wrongShape)) { + return wrongShape; + } + if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) { + return getError(name, location, checkerTypeType.type); + } + } + + function getCheckerErrorMessage(res, checker, val) { + var checkerHelp = getCheckerHelp(checker, val); + checkerHelp = checkerHelp ? ' - ' + checkerHelp : ''; + return res.message + checkerHelp; + } + + function getCheckerHelp(_ref, val) { + var help = _ref.help; + + if (!help) { + return ''; + } + if (typeof help === 'function') { + help = help(val); + } + return help; + } + + function checkEnoughArgs(api, args) { + var requiredArgs = api.filter(function (a) { + return !a.isOptional; + }); + if (args.length < requiredArgs.length) { + return ['Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`']; + } else { + return []; + } + } + + function getArgDisplay(arg, gottenArgs) { + /* eslint complexity:[2, 7] */ + var cName = arg && arg.constructor && arg.constructor.name; + var type = typeOf(arg); + if (type === 'function') { + if (hasKeys()) { + var properties = stringify(getDisplayIfNotGotten()); + return cName + ' (with properties: ' + properties + ')'; + } + return cName; + } + + if (arg === null) { + return 'null'; + } + + if (type !== 'array' && type !== 'object') { + return type; + } + + if (hasKeys()) { + return getDisplayIfNotGotten(); + } + + return cName; + + // utility functions + function hasKeys() { + return arg && Object.keys(arg).length; + } + + function getDisplayIfNotGotten() { + if (gottenArgs.indexOf(arg) !== -1) { + return '[Circular]'; + } + gottenArgs.push(arg); + return getDisplay(arg, gottenArgs); + } + } + + function getDisplay(obj, gottenArgs) { + var argDisplay = {}; + each(obj, function (v, k) { + return argDisplay[k] = getArgDisplay(v, gottenArgs); + }); + return argDisplay; + } + + function getApiCheckApis() { + var os = checkers.string.optional; + + var checkerFnChecker = checkers.func.withProperties({ + type: checkers.oneOfType([checkers.string, checkerTypeType]).optional, + displayName: checkers.string.optional, + shortType: checkers.string.optional, + notOptional: checkers.bool.optional, + notRequired: checkers.bool.optional + }); + + var getApiCheckInstanceCheckers = [checkers.shape({ + output: checkers.shape({ + prefix: checkers.string.optional, + suffix: checkers.string.optional, + docsBaseUrl: checkers.string.optional + }).strict.optional, + verbose: checkers.bool.optional, + disabled: checkers.bool.optional + }).strict.optional, checkers.objectOf(checkerFnChecker).optional]; + + var checkApiCheckApi = [checkers.typeOrArrayOf(checkerFnChecker), checkers.any.optional, checkers.shape({ + prefix: os, suffix: os, urlSuffix: os, // appended case + onlyPrefix: os, onlySuffix: os, url: os // override case + }).strict.optional]; + + return { + checkerFnChecker: checkerFnChecker, + getApiCheckInstanceCheckers: getApiCheckInstanceCheckers, + checkApiCheckApi: checkApiCheckApi + }; + } + +/***/ }, +/* 2 */ +/***/ function(module, exports) { + + module.exports = stringify; + + function getSerialize (fn, decycle) { + var seen = [], keys = []; + decycle = decycle || function(key, value) { + return '[Circular ' + getPath(value, seen, keys) + ']' + }; + return function(key, value) { + var ret = value; + if (typeof value === 'object' && value) { + if (seen.indexOf(value) !== -1) + ret = decycle(key, value); + else { + seen.push(value); + keys.push(key); + } + } + if (fn) ret = fn(key, ret); + return ret; + } + } + + function getPath (value, seen, keys) { + var index = seen.indexOf(value); + var path = [ keys[index] ]; + for (index--; index >= 0; index--) { + if (seen[index][ path[0] ] === value) { + value = seen[index]; + path.unshift(keys[index]); + } + } + return '~' + path.join('.'); + } + + function stringify(obj, fn, spaces, decycle) { + return JSON.stringify(obj, getSerialize(fn, decycle), spaces); + } + + stringify.getSerialize = getSerialize; + + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + + var stringify = __webpack_require__(2); + var checkerHelpers = { + addOptional: addOptional, getRequiredVersion: getRequiredVersion, setupChecker: setupChecker, addNullable: addNullable + }; + + module.exports = { + each: each, copy: copy, typeOf: typeOf, arrayify: arrayify, getCheckerDisplay: getCheckerDisplay, + isError: isError, list: list, getError: getError, nAtL: nAtL, t: t, undef: undef, checkerHelpers: checkerHelpers, + noop: noop + }; + + function copy(obj) { + var type = typeOf(obj); + var daCopy = undefined; + if (type === 'array') { + daCopy = []; + } else if (type === 'object') { + daCopy = {}; + } else { + return obj; + } + each(obj, function (val, key) { + daCopy[key] = val; // cannot single-line this because we don't want to abort the each + }); + return daCopy; + } + + function typeOf(obj) { + if (Array.isArray(obj)) { + return 'array'; + } else if (obj instanceof RegExp) { + return 'object'; + } else { + return typeof obj; + } + } + + function getCheckerDisplay(checker, options) { + /* eslint complexity:[2, 7] */ + var display = undefined; + var short = options && options.short; + if (short && checker.shortType) { + display = checker.shortType; + } else if (!short && typeof checker.type === 'object' || checker.type === 'function') { + display = getCheckerType(checker, options); + } else { + display = getCheckerType(checker, options) || checker.displayName || checker.name; + } + return display; + } + + function getCheckerType(_ref, options) { + var type = _ref.type; + + if (typeof type === 'function') { + var __apiCheckData = type.__apiCheckData; + var typeTypes = type(options); + type = _defineProperty({ + __apiCheckData: __apiCheckData + }, __apiCheckData.type, typeTypes); + } + return type; + } + + function arrayify(obj) { + if (!obj) { + return []; + } else if (Array.isArray(obj)) { + return obj; + } else { + return [obj]; + } + } + + function each(obj, iterator, context) { + if (Array.isArray(obj)) { + return eachArry(obj, iterator, context); + } else { + return eachObj(obj, iterator, context); + } + } + + function eachObj(obj, iterator, context) { + var ret = undefined; + var hasOwn = Object.prototype.hasOwnProperty; + /* eslint prefer-const:0 */ // some weird eslint bug? + for (var key in obj) { + if (hasOwn.call(obj, key)) { + ret = iterator.call(context, obj[key], key, obj); + if (ret === false) { + return ret; + } + } + } + return true; + } + + function eachArry(obj, iterator, context) { + var ret = undefined; + var length = obj.length; + for (var i = 0; i < length; i++) { + ret = iterator.call(context, obj[i], i, obj); + if (ret === false) { + return ret; + } + } + return true; + } + + function isError(obj) { + return obj instanceof Error; + } + + function list(arry, join, finalJoin) { + arry = arrayify(arry); + var copy = arry.slice(); + var last = copy.pop(); + if (copy.length === 1) { + join = ' '; + } + return copy.join(join) + ('' + (copy.length ? join + finalJoin : '') + last); + } + + function getError(name, location, checkerType) { + if (typeof checkerType === 'function') { + checkerType = checkerType({ short: true }); + } + var stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType); + return new Error(nAtL(name, location) + ' must be ' + t(stringType)); + } + + function nAtL(name, location) { + var tName = t(name || 'value'); + var tLocation = !location ? '' : ' at ' + t(location); + return '' + tName + tLocation; + } + + function t(thing) { + return '`' + thing + '`'; + } + + function undef(thing) { + return typeof thing === 'undefined'; + } + + /** + * This will set up the checker with all of the defaults that most checkers want like required by default and an + * optional version + * + * @param {Function} checker - the checker to setup with properties + * @param {Object} properties - properties to add to the checker + * @param {boolean} disabled - when set to true, this will set the checker to a no-op function + * @returns {Function} checker - the setup checker + */ + function setupChecker(checker, properties, disabled) { + /* eslint complexity:[2, 9] */ + if (disabled) { + // swap out the checker for its own copy of noop + checker = getNoop(); + checker.isNoop = true; + } + + if (typeof checker.type === 'string') { + checker.shortType = checker.type; + } + + // assign all properties given + each(properties, function (prop, name) { + return checker[name] = prop; + }); + + if (!checker.displayName) { + checker.displayName = 'apiCheck ' + t(checker.shortType || checker.type || checker.name) + ' type checker'; + } + + if (!checker.notRequired) { + checker = getRequiredVersion(checker, disabled); + } + + if (!checker.notNullable) { + addNullable(checker, disabled); + } + + if (!checker.notOptional) { + addOptional(checker, disabled); + } + + return checker; + } + + function getRequiredVersion(checker, disabled) { + var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) { + if (undef(val) && !checker.isOptional) { + var tLocation = location ? ' in ' + t(location) : ''; + var type = getCheckerDisplay(checker, { short: true }); + var stringType = typeof type !== 'object' ? type : stringify(type); + return new Error('Required ' + t(name) + ' not specified' + tLocation + '. Must be ' + t(stringType)); + } else { + return checker(val, name, location, obj); + } + }; + copyProps(checker, requiredChecker); + requiredChecker.originalChecker = checker; + return requiredChecker; + } + + function addOptional(checker, disabled) { + var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) { + if (!undef(val)) { + return checker(val, name, location, obj); + } + }; + // inherit all properties on the original checker + copyProps(checker, optionalCheck); + + optionalCheck.isOptional = true; + optionalCheck.displayName = checker.displayName + ' (optional)'; + optionalCheck.originalChecker = checker; + + // the magic line that allows you to add .optional to the end of the checkers + checker.optional = optionalCheck; + + fixType(checker, checker.optional); + } + + function addNullable(checker, disabled) { + var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) { + if (val !== null) { + return checker(val, name, location, obj); + } + }; + // inherit all properties on the original checker + copyProps(checker, nullableCheck); + + nullableCheck.isNullable = true; + nullableCheck.displayName = checker.displayName + ' (nullable)'; + nullableCheck.originalChecker = checker; + + // the magic line that allows you to add .nullable to the end of the checkers + checker.nullable = nullableCheck; + + fixType(checker, checker.nullable); + if (!checker.notOptional) { + addOptional(checker.nullable, disabled); + } + } + + function fixType(checker, checkerCopy) { + // fix type, because it's not a straight copy... + // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option. + // we also want to add "(optional)" to the types with a string + if (typeof checkerCopy.type === 'object') { + checkerCopy.type = copy(checkerCopy.type); // make our own copy of this + } else if (typeof checkerCopy.type === 'function') { + checkerCopy.type = function () { + return checker.type.apply(checker, arguments); + }; + } else { + checkerCopy.type += ' (optional)'; + return; + } + checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this + checkerCopy.type.__apiCheckData.optional = true; + } + + // UTILS + + function copyProps(src, dest) { + each(Object.keys(src), function (key) { + return dest[key] = src[key]; + }); + } + + function noop() {} + + function getNoop() { + /* eslint no-shadow:0 */ + /* istanbul ignore next */ + return function noop() {}; + } + +/***/ }, +/* 4 */ +/***/ function(module, exports, __webpack_require__) { + + 'use strict'; + + var stringify = __webpack_require__(2); + + var _require = __webpack_require__(3); + + var typeOf = _require.typeOf; + var each = _require.each; + var copy = _require.copy; + var getCheckerDisplay = _require.getCheckerDisplay; + var isError = _require.isError; + var arrayify = _require.arrayify; + var list = _require.list; + var getError = _require.getError; + var nAtL = _require.nAtL; + var t = _require.t; + var checkerHelpers = _require.checkerHelpers; + var undef = _require.undef; + var setupChecker = checkerHelpers.setupChecker; + + var checkers = module.exports = getCheckers(); + module.exports.getCheckers = getCheckers; + + function getCheckers(disabled) { + return { + array: typeOfCheckGetter('Array'), + bool: typeOfCheckGetter('Boolean'), + number: typeOfCheckGetter('Number'), + string: typeOfCheckGetter('String'), + func: funcCheckGetter(), + object: objectCheckGetter(), + + emptyObject: emptyObjectCheckGetter(), + + instanceOf: instanceCheckGetter, + oneOf: oneOfCheckGetter, + oneOfType: oneOfTypeCheckGetter, + + arrayOf: arrayOfCheckGetter, + objectOf: objectOfCheckGetter, + typeOrArrayOf: typeOrArrayOfCheckGetter, + + range: rangeCheckGetter, + lessThan: lessThanCheckGetter, + greaterThan: greaterThanCheckGetter, + + shape: getShapeCheckGetter(), + args: argumentsCheckerGetter(), + + any: anyCheckGetter(), + 'null': nullCheckGetter() + + }; + + function typeOfCheckGetter(type) { + var lType = type.toLowerCase(); + return setupChecker(function typeOfCheckerDefinition(val, name, location) { + if (typeOf(val) !== lType) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function funcCheckGetter() { + var type = 'Function'; + var functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) { + if (typeOf(val) !== 'function') { + return getError(name, location, type); + } + }, { type: type }, disabled); + + functionChecker.withProperties = function getWithPropertiesChecker(properties) { + var apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties'); + if (isError(apiError)) { + throw apiError; + } + var shapeChecker = checkers.shape(properties, true); + shapeChecker.type.__apiCheckData.type = 'func.withProperties'; + + return setupChecker(function functionWithPropertiesChecker(val, name, location) { + var notFunction = checkers.func(val, name, location); + if (isError(notFunction)) { + return notFunction; + } + return shapeChecker(val, name, location); + }, { type: shapeChecker.type, shortType: 'func.withProperties' }, disabled); + }; + return functionChecker; + } + + function objectCheckGetter() { + var type = 'Object'; + var nullType = 'Object (null ok)'; + var objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) { + if (typeOf(val) !== 'object') { + return getError(name, location, nullType); + } + }, { type: nullType }, disabled); + + var objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) { + if (val === null || isError(objectNullOkChecker(val, name, location))) { + return getError(name, location, objectChecker.type); + } + }, { type: type, nullOk: objectNullOkChecker }, disabled); + + return objectChecker; + } + + function instanceCheckGetter(classToCheck) { + return setupChecker(function instanceCheckerDefinition(val, name, location) { + if (!(val instanceof classToCheck)) { + return getError(name, location, classToCheck.name); + } + }, { type: classToCheck.name }, disabled); + } + + function oneOfCheckGetter(enums) { + var type = { + __apiCheckData: { optional: false, type: 'enum' }, + 'enum': enums + }; + var shortType = 'oneOf[' + enums.map(function (enm) { + return stringify(enm); + }).join(', ') + ']'; + return setupChecker(function oneOfCheckerDefinition(val, name, location) { + if (!enums.some(function (enm) { + return enm === val; + })) { + return getError(name, location, shortType); + } + }, { type: type, shortType: shortType }, disabled); + } + + function oneOfTypeCheckGetter(typeCheckers) { + var checkersDisplay = typeCheckers.map(function (checker) { + return getCheckerDisplay(checker, { short: true }); + }); + var shortType = 'oneOfType[' + checkersDisplay.join(', ') + ']'; + function type(options) { + if (options && options.short) { + return shortType; + } + return typeCheckers.map(function (checker) { + return getCheckerDisplay(checker, options); + }); + } + type.__apiCheckData = { optional: false, type: 'oneOfType' }; + return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) { + if (!typeCheckers.some(function (checker) { + return !isError(checker(val, name, location)); + })) { + return getError(name, location, shortType); + } + }, { type: type, shortType: shortType }, disabled); + } + + function arrayOfCheckGetter(checker) { + var shortCheckerDisplay = getCheckerDisplay(checker, { short: true }); + var shortType = 'arrayOf[' + shortCheckerDisplay + ']'; + + function type(options) { + if (options && options.short) { + return shortType; + } + return getCheckerDisplay(checker, options); + } + type.__apiCheckData = { optional: false, type: 'arrayOf' }; + + return setupChecker(function arrayOfCheckerDefinition(val, name, location) { + if (isError(checkers.array(val)) || !val.every(function (item) { + return !isError(checker(item)); + })) { + return getError(name, location, shortType); + } + }, { type: type, shortType: shortType }, disabled); + } + + function objectOfCheckGetter(checker) { + var checkerDisplay = getCheckerDisplay(checker, { short: true }); + var shortType = 'objectOf[' + checkerDisplay + ']'; + + function type(options) { + if (options && options.short) { + return shortType; + } + return getCheckerDisplay(checker, options); + } + type.__apiCheckData = { optional: false, type: 'objectOf' }; + + return setupChecker(function objectOfCheckerDefinition(val, name, location) { + var notObject = checkers.object(val, name, location); + if (isError(notObject)) { + return notObject; + } + var allTypesSuccess = each(val, function (item, key) { + if (isError(checker(item, key, name))) { + return false; + } + }); + if (!allTypesSuccess) { + return getError(name, location, shortType); + } + }, { type: type, shortType: shortType }, disabled); + } + + function typeOrArrayOfCheckGetter(checker) { + var checkerDisplay = getCheckerDisplay(checker, { short: true }); + var shortType = 'typeOrArrayOf[' + checkerDisplay + ']'; + + function type(options) { + if (options && options.short) { + return shortType; + } + return getCheckerDisplay(checker, options); + } + + type.__apiCheckData = { optional: false, type: 'typeOrArrayOf' }; + return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) { + if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) { + return getError(name, location, shortType); + } + }, { type: type, shortType: shortType }, disabled); + } + + function getShapeCheckGetter() { + function shapeCheckGetter(shape, nonObject) { + var shapeTypes = {}; + each(shape, function (checker, prop) { + shapeTypes[prop] = getCheckerDisplay(checker); + }); + function type() { + var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + + var ret = {}; + var terse = options.terse; + var obj = options.obj; + var addHelpers = options.addHelpers; + + var parentRequired = options.required; + each(shape, function (checker, prop) { + /* eslint complexity:[2, 6] */ + var specified = obj && obj.hasOwnProperty(prop); + var required = undef(parentRequired) ? !checker.isOptional : parentRequired; + if (!terse || (specified || !checker.isOptional)) { + ret[prop] = getCheckerDisplay(checker, { terse: terse, obj: obj && obj[prop], required: required, addHelpers: addHelpers }); + } + if (addHelpers) { + modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required); + } + }); + return ret; + + function modifyTypeDisplayToHelpOut(theRet, prop, specified, checker, required) { + if (!specified && required && !checker.isOptional) { + var item = 'ITEM'; + if (checker.type && checker.type.__apiCheckData) { + item = checker.type.__apiCheckData.type.toUpperCase(); + } + addHelper('missing', 'MISSING THIS ' + item, ' <-- YOU ARE MISSING THIS'); + } else if (specified) { + var error = checker(obj[prop], prop, null, obj); + if (isError(error)) { + addHelper('error', 'THIS IS THE PROBLEM: ' + error.message, ' <-- THIS IS THE PROBLEM: ' + error.message); + } + } + + function addHelper(property, objectMessage, stringMessage) { + if (typeof theRet[prop] === 'string') { + theRet[prop] += stringMessage; + } else { + theRet[prop].__apiCheckData[property] = objectMessage; + } + } + } + } + + type.__apiCheckData = { strict: false, optional: false, type: 'shape' }; + var shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) { + /* eslint complexity:[2, 6] */ + var isObject = !nonObject && checkers.object(val, name, location); + if (isError(isObject)) { + return isObject; + } + var shapePropError = undefined; + location = location ? location + (name ? '/' : '') : ''; + name = name || ''; + each(shape, function (checker, prop) { + if (val.hasOwnProperty(prop) || !checker.isOptional) { + shapePropError = checker(val[prop], prop, '' + location + name, val); + return !isError(shapePropError); + } + }); + if (isError(shapePropError)) { + return shapePropError; + } + }, { type: type, shortType: 'shape' }, disabled); + + function strictType() { + return type.apply(undefined, arguments); + } + + strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData); + strictType.__apiCheckData.strict = true; + shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) { + var shapeError = shapeChecker(val, name, location); + if (isError(shapeError)) { + return shapeError; + } + var allowedProperties = Object.keys(shape); + var extraProps = Object.keys(val).filter(function (prop) { + return allowedProperties.indexOf(prop) === -1; + }); + if (extraProps.length) { + return new Error(nAtL(name, location) + ' cannot have extra properties: ' + t(extraProps.join('`, `')) + '.' + ('It is limited to ' + t(allowedProperties.join('`, `')))); + } + }, { type: strictType, shortType: 'strict shape' }, disabled); + + return shapeChecker; + } + + shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) { + if (!Array.isArray(otherProps)) { + otherProps = [otherProps]; + } + var description = undefined; + if (otherProps.length === 1) { + description = 'specified only if ' + otherProps[0] + ' is not specified'; + } else { + description = 'specified only if none of the following are specified: [' + list(otherProps, ', ', 'and ') + ']'; + } + var shortType = 'ifNot[' + otherProps.join(', ') + ']'; + var type = getTypeForShapeChild(propChecker, description, shortType); + return setupChecker(function ifNotChecker(prop, propName, location, obj) { + var propExists = obj && obj.hasOwnProperty(propName); + var otherPropsExist = otherProps.some(function (otherProp) { + return obj && obj.hasOwnProperty(otherProp); + }); + if (propExists === otherPropsExist) { + return getError(propName, location, type); + } else if (propExists) { + return propChecker(prop, propName, location, obj); + } + }, { notRequired: true, type: type, shortType: shortType }, disabled); + }; + + shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) { + otherProps = arrayify(otherProps); + var description = undefined; + if (otherProps.length === 1) { + description = 'specified only if ' + otherProps[0] + ' is also specified'; + } else { + description = 'specified only if all of the following are specified: [' + list(otherProps, ', ', 'and ') + ']'; + } + var shortType = 'onlyIf[' + otherProps.join(', ') + ']'; + var type = getTypeForShapeChild(propChecker, description, shortType); + return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) { + var othersPresent = otherProps.every(function (property) { + return obj.hasOwnProperty(property); + }); + if (!othersPresent) { + return getError(propName, location, type); + } else { + return propChecker(prop, propName, location, obj); + } + }, { type: type, shortType: shortType }, disabled); + }; + + shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) { + if (!Array.isArray(otherProps)) { + otherProps = [otherProps]; + } + return getRequiredIfNotChecker(false, otherProps, propChecker); + }; + + shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) { + if (!Array.isArray(otherProps)) { + throw new Error('requiredIfNot.all must be passed an array'); + } + return getRequiredIfNotChecker(true, otherProps, propChecker); + }; + + function getRequiredIfNotChecker(all, otherProps, propChecker) { + var props = t(otherProps.join(', ')); + var ifProps = 'if ' + (all ? 'all of' : 'at least one of'); + var description = 'specified ' + ifProps + ' these are not specified: ' + props + ' (otherwise it\'s optional)'; + var shortType = 'requiredIfNot' + (all ? '.all' : '') + '[' + otherProps.join(', ') + '}]'; + var type = getTypeForShapeChild(propChecker, description, shortType); + return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) { + var propExists = obj && obj.hasOwnProperty(propName); + var iteration = all ? 'every' : 'some'; + var otherPropsExist = otherProps[iteration](function (otherProp) { + return obj && obj.hasOwnProperty(otherProp); + }); + if (!otherPropsExist && !propExists) { + return getError(propName, location, type); + } else if (propExists) { + return propChecker(prop, propName, location, obj); + } + }, { type: type, notRequired: true }, disabled); + } + + return shapeCheckGetter; + + function getTypeForShapeChild(propChecker, description, shortType) { + function type(options) { + if (options && options.short) { + return shortType; + } + return getCheckerDisplay(propChecker); + } + type.__apiCheckData = { optional: false, type: 'ifNot', description: description }; + return type; + } + } + + function argumentsCheckerGetter() { + var type = 'function arguments'; + return setupChecker(function argsCheckerDefinition(val, name, location) { + if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function anyCheckGetter() { + return setupChecker(function anyCheckerDefinition() { + // don't do anything + }, { type: 'any' }, disabled); + } + + function nullCheckGetter() { + var type = 'null'; + return setupChecker(function nullChecker(val, name, location) { + if (val !== null) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function rangeCheckGetter(min, max) { + var type = 'Range (' + min + ' - ' + max + ')'; + return setupChecker(function rangeChecker(val, name, location) { + if (typeof val !== 'number' || val < min || val > max) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function lessThanCheckGetter(min) { + var type = 'lessThan[' + min + ']'; + return setupChecker(function lessThanChecker(val, name, location) { + if (typeof val !== 'number' || val > min) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function greaterThanCheckGetter(max) { + var type = 'greaterThan[' + max + ']'; + return setupChecker(function greaterThanChecker(val, name, location) { + if (typeof val !== 'number' || val < max) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + + function emptyObjectCheckGetter() { + var type = 'empty object'; + return setupChecker(function emptyObjectChecker(val, name, location) { + if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) { + return getError(name, location, type); + } + }, { type: type }, disabled); + } + } + +/***/ } +/******/ ]) +}); +; \ No newline at end of file diff --git a/static/js/api-check.min.js b/static/js/api-check.min.js index 61ed10a..b6c9bb1 100644 --- a/static/js/api-check.min.js +++ b/static/js/api-check.min.js @@ -1,4 +1,3 @@ -// apiCheck.js v7.2.4 built with ♥ by Kent C. Dodds (ó ì_í)=óò=(ì_í ò) - -!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):"object"==typeof exports?exports.apiCheck=r():e.apiCheck=r()}(this,function(){return function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}var t={};return r.m=e,r.c=t,r.p="",r(0)}([function(e,r,t){"use strict";e.exports=t(3)},function(e){function r(e,r){var n=[],o=[];return r=r||function(e,r){return"[Circular "+t(r,n,o)+"]"},function(t,i){var a=i;return"object"==typeof i&&i&&(-1!==n.indexOf(i)?a=r(t,i):(n.push(i),o.push(t))),e&&(a=e(t,a)),a}}function t(e,r,t){var n=r.indexOf(e),o=[t[n]];for(n--;n>=0;n--)r[n][o[0]]===e&&(e=r[n],o.unshift(t[n]));return"~"+o.join(".")}function n(e,t,n,o){return JSON.stringify(e,r(t,o),n)}e.exports=n,n.getSerialize=r},function(e,r,t){"use strict";function n(e){var r=o(e),t=void 0;if("array"===r)t=[];else{if("object"!==r)return e;t={}}return p(e,function(e,r){t[r]=e}),t}function o(e){return Array.isArray(e)?"array":e instanceof RegExp?"object":typeof e}function i(e,r){var t=void 0,n=r&&r["short"];return t=n&&e.shortType?e.shortType:!n&&"object"==typeof e.type||"function"===e.type?a(e,r):a(e,r)||e.displayName||e.name}function a(e,r){var t=e.type;if("function"==typeof t){var n=t.__apiCheckData,o=t(r);t=_({__apiCheckData:n},n.type,o)}return t}function u(e){return e?Array.isArray(e)?e:[e]:[]}function p(e){return Array.isArray(e)?c.apply(void 0,arguments):f.apply(void 0,arguments)}function f(e,r,t){var n,o=Object.prototype.hasOwnProperty;for(var i in e)if(o.call(e,i)&&(n=r.call(t,e[i],i,e),n===!1))return n;return!0}function c(e,r,t){for(var n,o=e.length,i=0;o>i;i++)if(n=r.call(t,e[i],i,e),n===!1)return n;return!0}function s(e){return e instanceof Error}function l(e,r,t){e=u(e);var n=e.slice(),o=n.pop();return 1===n.length&&(r=" "),n.join(r)+(""+(n.length?r+t:"")+o)}function y(e,r,t){"function"==typeof t&&(t=t({"short":!0}));var n="object"!=typeof t?t:A(t);return new Error(""+h(e,r)+" must be "+d(n))}function h(e,r){var t=d(e||"value"),n=r?" at "+d(r):"";return""+t+n}function d(e){return"`"+e+"`"}function v(e){return"undefined"==typeof e}function g(e,r,t){return t&&(e=x(),e.isNoop=!0),"string"==typeof e.type&&(e.shortType=e.type),p(r,function(r,t){return e[t]=r}),e.displayName||(e.displayName="apiCheck "+d(e.shortType||e.type||e.name)+" type checker"),e.notRequired||(e=b(e,t)),e.notNullable||O(e,t),e.notOptional||m(e,t),e}function b(e,r){var t=r?x():function(r,t,n,o){if(v(r)&&!e.isOptional){var a=n?" in "+d(n):"",u=i(e,{"short":!0}),p="object"!=typeof u?u:A(u);return new Error("Required "+d(t)+" not specified"+a+". Must be "+d(p))}return e(r,t,n,o)};return C(e,t),t.originalChecker=e,t}function m(e,r){var t=r?x():function(r,t,n,o){return v(r)?void 0:e(r,t,n,o)};C(e,t),t.isOptional=!0,t.displayName=e.displayName+" (optional)",t.originalChecker=e,e.optional=t,k(e,e.optional)}function O(e,r){var t=r?x():function(r,t,n,o){return null!==r?e(r,t,n,o):void 0};C(e,t),t.isNullable=!0,t.displayName=e.displayName+" (nullable)",t.originalChecker=e,e.nullable=t,k(e,e.nullable),e.notOptional||m(e.nullable,r)}function k(e,r){if("object"==typeof r.type)r.type=n(r.type);else{if("function"!=typeof r.type)return void(r.type+=" (optional)");r.type=function(){return e.type.apply(e,arguments)}}r.type.__apiCheckData=n(e.type.__apiCheckData)||{},r.type.__apiCheckData.optional=!0}function C(e,r){p(Object.keys(e),function(t){return r[t]=e[t]})}function j(){}function x(){return function(){}}var _=function(e,r,t){return Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0})},A=t(1),w={addOptional:m,getRequiredVersion:b,setupChecker:g,addNullable:O};e.exports={each:p,copy:n,typeOf:o,arrayify:u,getCheckerDisplay:i,isError:s,list:l,getError:y,nAtL:h,t:d,undef:v,checkerHelpers:w,noop:j}},function(e,r,t){"use strict";function n(){function r(n,i,a){if(r.config.disabled||e.exports.globalConfig.disabled)return{apiTypes:{},argTypes:{},passed:!0,message:"",failed:!1};t(arguments),Array.isArray(n)?i=Array.prototype.slice.call(i):(n=[n],i=[i]);var u=p(n,i);u.length||(u=o(n,i));var f=c(n,i);return u.length?(f.message=r.getErrorMessage(n,i,u,a),f.failed=!0,f.passed=!1):(f.message="",f.failed=!1,f.passed=!0),f}function t(e){var t=e[0],n=e[1],i=Array.isArray(n)||n&&"object"==typeof n&&"number"==typeof n.length;if(Array.isArray(t)&&!i)throw new Error(a(t,[n],["If an array is provided for the api, an array must be provided for the args as well."],{prefix:"apiCheck"}));var u=o(C.checkApiCheckApi,e);if(u.length){var p=r.getErrorMessage(C.checkApiCheckApi,e,u,{prefix:"apiCheck"});r.handleErrorMessage(p,!0)}}function n(e){return function(t,n,o){var i=r(t,n,o);return r.handleErrorMessage(i.message,e),i}}function i(e,r){if(r&&e)throw new Error(e);e&&console.warn(e)}function a(e,t){function n(){var e=p.onlyPrefix;return e||(e=(""+(f.prefix||"")+" "+(p.prefix||"")).trim()),e}function o(){var e=p.onlySuffix;return e||(e=(""+(p.suffix||"")+" "+(f.suffix||"")).trim()),e}function i(){var e=p.url;return e||(e=f.docsBaseUrl&&p.urlSuffix&&(""+f.docsBaseUrl+p.urlSuffix).trim()),e}var a=void 0===arguments[2]?[]:arguments[2],p=void 0===arguments[3]?{}:arguments[3],f=r.config.output||{},c=n(),s=o(),l=i(),y="apiCheck failed! "+a.join(", "),h="\n\n"+u(e,t);return(""+c+" "+y+" "+s+" "+(l||"")+h).trim()}function u(e,r){function t(e){h(e,function(r,n){-1===f.indexOf(r)&&(f.push(r),"object"==typeof r?t(e):"function"==typeof r&&(e[n]=r.displayName||r.name||"anonymous function"))})}function n(e){return e&&e.length?(e&&1===e.length&&(e=e[0]),l(e,null,2)):"nothing"}function o(){var e="\n",t=!0;r&&1===r.length&&(t="object"==typeof r[0]?!!Object.keys(r[0]).length:!1);var n="type"+(t?"s":""),o=e+e;return"You passed:"+e+s+o+("With the "+n+":"+e+u+o)+("The API calls for:"+e+a)}var i=c(e,r),a=i.apiTypes,u=i.argTypes,p=Array.prototype.slice.call(r||[]),f=[];t(p);var s=n(p);return u=n(u),a=n(a),o()}function c(t,n){t=g(t),n=g(n);var o=t.map(function(t,o){var i=e.exports.globalConfig.hasOwnProperty("verbose");return b(t,{terse:i?!e.exports.globalConfig.verbose:!r.config.verbose,obj:n[o],addHelpers:!0})}),i=n.map(function(e){return f(e,[])});return{argTypes:i,apiTypes:o}}var s=void 0===arguments[0]?{}:arguments[0],d=void 0===arguments[1]?{}:arguments[1];j&&arguments.length&&j["throw"](C.getApiCheckInstanceCheckers,arguments,{prefix:"creating an apiCheck instance"});var v={"throw":n(!0),warn:n(!1),getErrorMessage:a,handleErrorMessage:i,config:{output:s.output||{prefix:"",suffix:"",docsBaseUrl:""},verbose:s.verbose||!1,disabled:s.disabled||!1},utils:y};h(v,function(e,t){return r[t]=e});var m=r.disabled||e.exports.globalConfig.disabled;return h(k.getCheckers(m),function(e,t){return r[t]=e}),h(d,function(e,t){return r[t]=e}),r}function o(e,r){for(var t=[],n=!1,o=0,i=0,u=void 0,p=void 0,f=void 0,c=void 0,s=void 0,l=void 0,y=void 0;(p=e[o++])&&i=e.length,y=o>1&&e[o-1].isOptional,l&&c||l&&!c&&!p.isOptional&&!y?(n=!0,t.push(a(f,p,u))):l&&p.isOptional?i--:t.push(""+v(s)+" passed");return n?t:[]}function i(e,r,t){var n=k.shape({type:k.string,optional:k.bool}),o=k.func.withProperties({__apiCheckData:n}),a=k.shape({__apiCheckData:n}),u=k.oneOfType([o,a])(e,r,t);return d(u)?u:"function"==typeof e||e.hasOwnProperty(e.__apiCheckData.type)?void 0:O(r,t,i.type)}function a(e,r,t){var n=u(r,t);return n=n?" - "+n:"",e.message+n}function u(e,r){var t=e.help;return t?("function"==typeof t&&(t=t(r)),t):""}function p(e,r){var t=e.filter(function(e){return!e.isOptional});return r.lengthe||e>t?y(o,i,n):void 0},{type:n},e)}function D(){var r="empty object";return b(function(e,t,n){return"object"!==a(e)||null===e||Object.keys(e).length?y(t,n,r):void 0},{type:r},e)}return{array:r("Array"),bool:r("Boolean"),number:r("Number"),string:r("String"),func:t(),object:n(),emptyObject:D(),instanceOf:i,oneOf:v,oneOfType:O,arrayOf:k,objectOf:C,typeOrArrayOf:j,range:T,shape:x(),args:_(),any:A(),"null":w()}}var o=t(1),i=t(2),a=i.typeOf,u=i.each,p=i.copy,f=i.getCheckerDisplay,c=i.isError,s=i.arrayify,l=i.list,y=i.getError,h=i.nAtL,d=i.t,v=i.checkerHelpers,g=i.undef,b=v.setupChecker,m=e.exports=n();e.exports.getCheckers=n}])}); +//! api-check version 7.5.5 built with ♥ by Kent C. Dodds (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò) +!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define(r):"object"==typeof exports?exports.apiCheck=r():e.apiCheck=r()}(this,function(){return function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={exports:{},id:n,loaded:!1};return e[n].call(o.exports,o,o.exports,r),o.loaded=!0,o.exports}var t={};return r.m=e,r.c=t,r.p="",r(0)}([function(e,r,t){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(r,"__esModule",{value:!0});var o=t(3),i=n(o);r["default"]=i["default"],e.exports=r["default"]},function(e,r){function t(e,r){var t=[],o=[];return r=r||function(e,r){return"[Circular "+n(r,t,o)+"]"},function(n,i){var a=i;return"object"==typeof i&&i&&(-1!==t.indexOf(i)?a=r(n,i):(t.push(i),o.push(n))),e&&(a=e(n,a)),a}}function n(e,r,t){var n=r.indexOf(e),o=[t[n]];for(n--;n>=0;n--)r[n][o[0]]===e&&(e=r[n],o.unshift(t[n]));return"~"+o.join(".")}function o(e,r,n,o){return JSON.stringify(e,t(r,o),n)}e.exports=o,o.getSerialize=t},function(e,r,t){"use strict";function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e){var r=i(e),t=void 0;if("array"===r)t=[];else{if("object"!==r)return e;t={}}return f(e,function(e,r){t[r]=e}),t}function i(e){return Array.isArray(e)?"array":e instanceof RegExp?"object":typeof e}function a(e,r){var t=void 0,n=r&&r["short"];return t=n&&e.shortType?e.shortType:!n&&"object"==typeof e.type||"function"===e.type?u(e,r):u(e,r)||e.displayName||e.name}function u(e,r){var t=e.type;if("function"==typeof t){var o=t.__apiCheckData,i=t(r);t=n({__apiCheckData:o},o.type,i)}return t}function p(e){return e?Array.isArray(e)?e:[e]:[]}function f(e,r,t){return Array.isArray(e)?s(e,r,t):c(e,r,t)}function c(e,r,t){var n=void 0,o=Object.prototype.hasOwnProperty;for(var i in e)if(o.call(e,i)&&(n=r.call(t,e[i],i,e),n===!1))return n;return!0}function s(e,r,t){for(var n=void 0,o=e.length,i=0;o>i;i++)if(n=r.call(t,e[i],i,e),n===!1)return n;return!0}function l(e){return e instanceof Error}function y(e,r,t){e=p(e);var n=e.slice(),o=n.pop();return 1===n.length&&(r=" "),n.join(r)+(""+(n.length?r+t:"")+o)}function h(e,r,t){"function"==typeof t&&(t=t({"short":!0}));var n="object"!=typeof t?t:A(t);return new Error(d(e,r)+" must be "+v(n))}function d(e,r){var t=v(e||"value"),n=r?" at "+v(r):"";return""+t+n}function v(e){return"`"+e+"`"}function g(e){return"undefined"==typeof e}function b(e,r,t){return t&&(e=_(),e.isNoop=!0),"string"==typeof e.type&&(e.shortType=e.type),f(r,function(r,t){return e[t]=r}),e.displayName||(e.displayName="apiCheck "+v(e.shortType||e.type||e.name)+" type checker"),e.notRequired||(e=m(e,t)),e.notNullable||k(e,t),e.notOptional||O(e,t),e}function m(e,r){var t=r?_():function(r,t,n,o){if(g(r)&&!e.isOptional){var i=n?" in "+v(n):"",u=a(e,{"short":!0}),p="object"!=typeof u?u:A(u);return new Error("Required "+v(t)+" not specified"+i+". Must be "+v(p))}return e(r,t,n,o)};return j(e,t),t.originalChecker=e,t}function O(e,r){var t=r?_():function(r,t,n,o){return g(r)?void 0:e(r,t,n,o)};j(e,t),t.isOptional=!0,t.displayName=e.displayName+" (optional)",t.originalChecker=e,e.optional=t,C(e,e.optional)}function k(e,r){var t=r?_():function(r,t,n,o){return null!==r?e(r,t,n,o):void 0};j(e,t),t.isNullable=!0,t.displayName=e.displayName+" (nullable)",t.originalChecker=e,e.nullable=t,C(e,e.nullable),e.notOptional||O(e.nullable,r)}function C(e,r){if("object"==typeof r.type)r.type=o(r.type);else{if("function"!=typeof r.type)return void(r.type+=" (optional)");r.type=function(){return e.type.apply(e,arguments)}}r.type.__apiCheckData=o(e.type.__apiCheckData)||{},r.type.__apiCheckData.optional=!0}function j(e,r){f(Object.keys(e),function(t){return r[t]=e[t]})}function x(){}function _(){return function(){}}var A=t(1),T={addOptional:O,getRequiredVersion:m,setupChecker:b,addNullable:k};e.exports={each:f,copy:o,typeOf:i,arrayify:p,getCheckerDisplay:a,isError:l,list:y,getError:h,nAtL:d,t:v,undef:g,checkerHelpers:T,noop:x}},function(e,r,t){"use strict";function n(){function r(n,i,a){if(r.config.disabled||e.exports.globalConfig.disabled)return{apiTypes:{},argTypes:{},passed:!0,message:"",failed:!1};t(arguments),Array.isArray(n)?i=Array.prototype.slice.call(i):(n=[n],i=[i]);var u=p(n,i);u.length||(u=o(n,i));var f=c(n,i);return f.args=i,u.length?(f.message=r.getErrorMessage(n,i,u,a),f.failed=!0,f.passed=!1):(f.message="",f.failed=!1,f.passed=!0),f}function t(e){var t=e[0],n=e[1],i=Array.isArray(n)||n&&"object"==typeof n&&"number"==typeof n.length;if(Array.isArray(t)&&!i)throw new Error(a(t,[n],["If an array is provided for the api, an array must be provided for the args as well."],{prefix:"apiCheck"}));var u=o(C.checkApiCheckApi,e);if(u.length){var p=r.getErrorMessage(C.checkApiCheckApi,e,u,{prefix:"apiCheck"});r.handleErrorMessage(p,!0)}}function n(e){return function(t,n,o){var i=r(t,n,o);return r.handleErrorMessage(i.message,e),i}}function i(e,r){if(r&&e)throw new Error(e);e&&console.warn(e)}function a(e,t){function n(){var e=p.onlyPrefix;return e||(e=((f.prefix||"")+" "+(p.prefix||"")).trim()),e}function o(){var e=p.onlySuffix;return e||(e=((p.suffix||"")+" "+(f.suffix||"")).trim()),e}function i(){var e=p.url;return e||(e=f.docsBaseUrl&&p.urlSuffix&&(""+f.docsBaseUrl+p.urlSuffix).trim()),e}var a=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],p=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],f=r.config.output||{},c=n(),s=o(),l=i(),y="apiCheck failed! "+a.join(", "),h="\n\n"+u(e,t);return(c+" "+y+" "+s+" "+(l||"")+h).trim()}function u(e,r){function t(e){h(e,function(r,n){-1===f.indexOf(r)&&(f.push(r),"object"==typeof r?t(e):"function"==typeof r&&(e[n]=r.displayName||r.name||"anonymous function"))})}function n(e){return e&&e.length?(e&&1===e.length&&(e=e[0]),l(e,null,2)):"nothing"}function o(){var e="\n",t=!0;r&&1===r.length&&(t="object"==typeof r[0]&&null!==r[0]?!!Object.keys(r[0]).length:!1);var n="type"+(t?"s":""),o=e+e;return"You passed:"+e+s+o+("With the "+n+":"+e+u+o)+("The API calls for:"+e+a)}var i=c(e,r),a=i.apiTypes,u=i.argTypes,p=Array.prototype.slice.call(r||[]),f=[];t(p);var s=n(p);return u=n(u),a=n(a),o()}function c(t,n){t=g(t),n=g(n);var o=t.map(function(t,o){var i=e.exports.globalConfig.hasOwnProperty("verbose");return b(t,{terse:i?!e.exports.globalConfig.verbose:!r.config.verbose,obj:n[o],addHelpers:!0})}),i=n.map(function(e){return f(e,[])});return{argTypes:i,apiTypes:o}}var s=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],d=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];j&&arguments.length&&j["throw"](C.getApiCheckInstanceCheckers,arguments,{prefix:"creating an apiCheck instance"});var v={"throw":n(!0),warn:n(!1),getErrorMessage:a,handleErrorMessage:i,config:{output:s.output||{prefix:"",suffix:"",docsBaseUrl:""},verbose:s.verbose||!1,disabled:s.disabled||!1},utils:y};h(v,function(e,t){return r[t]=e});var m=r.disabled||e.exports.globalConfig.disabled;return h(k.getCheckers(m),function(e,t){return r[t]=e}),h(d,function(e,t){return r[t]=e}),r}function o(e,r){for(var t=[],n=!1,o=0,i=0,u=void 0,p=void 0,f=void 0,c=void 0,s=void 0,l=void 0,y=void 0;(p=e[o++])&&i=e.length,y=o>1&&e[o-1].isOptional,l&&c||l&&!c&&!p.isOptional&&!y?(n=!0,t.push(a(f,p,u))):l&&p.isOptional?i--:t.push(v(s)+" passed");return n?t:[]}function i(e,r,t){var n=k.shape({type:k.string,optional:k.bool}),o=k.func.withProperties({__apiCheckData:n}),a=k.shape({__apiCheckData:n}),u=k.oneOfType([o,a])(e,r,t);return d(u)?u:"function"==typeof e||e.hasOwnProperty(e.__apiCheckData.type)?void 0:O(r,t,i.type)}function a(e,r,t){var n=u(r,t);return n=n?" - "+n:"",e.message+n}function u(e,r){var t=e.help;return t?("function"==typeof t&&(t=t(r)),t):""}function p(e,r){var t=e.filter(function(e){return!e.isOptional});return r.lengthe||e>t?y(o,i,n):void 0},{type:n},e)}function E(r){var t="lessThan["+r+"]";return b(function(e,n,o){return"number"!=typeof e||e>r?y(n,o,t):void 0},{type:t},e)}function D(r){var t="greaterThan["+r+"]";return b(function(e,n,o){return"number"!=typeof e||r>e?y(n,o,t):void 0},{type:t},e)}function N(){var r="empty object";return b(function(e,t,n){return"object"!==a(e)||null===e||Object.keys(e).length?y(t,n,r):void 0},{type:r},e)}return{array:r("Array"),bool:r("Boolean"),number:r("Number"),string:r("String"),func:t(),object:n(),emptyObject:N(),instanceOf:i,oneOf:v,oneOfType:O,arrayOf:k,objectOf:C,typeOrArrayOf:j,range:w,lessThan:E,greaterThan:D,shape:x(),args:_(),any:A(),"null":T()}}var o=t(1),i=t(2),a=i.typeOf,u=i.each,p=i.copy,f=i.getCheckerDisplay,c=i.isError,s=i.arrayify,l=i.list,y=i.getError,h=i.nAtL,d=i.t,v=i.checkerHelpers,g=i.undef,b=v.setupChecker,m=e.exports=n();e.exports.getCheckers=n}])}); //# sourceMappingURL=api-check.min.js.map \ No newline at end of file diff --git a/static/js/api-check.min.js.map b/static/js/api-check.min.js.map index e2cd834..11acc90 100644 --- a/static/js/api-check.min.js.map +++ b/static/js/api-check.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///api-check.min.js","webpack:///webpack/bootstrap 494eb46361cc8c5a6356","webpack:///./index.js","webpack:///../~/json-stringify-safe/stringify.js","webpack:///./apiCheckUtil.js","webpack:///./apiCheck.js","webpack:///./checkers.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","getSerialize","fn","decycle","seen","keys","key","value","getPath","ret","indexOf","push","index","path","unshift","join","stringify","obj","spaces","JSON","copy","type","typeOf","daCopy","undefined","each","val","Array","isArray","RegExp","getCheckerDisplay","checker","options","display","short","shortType","getCheckerType","displayName","name","_ref","__apiCheckData","typeTypes","_defineProperty","arrayify","eachArry","apply","arguments","eachObj","iterator","context","hasOwn","Object","prototype","hasOwnProperty","length","i","isError","Error","list","arry","finalJoin","slice","last","pop","getError","location","checkerType","stringType","nAtL","t","tName","tLocation","thing","undef","setupChecker","properties","disabled","getNoop","isNoop","prop","notRequired","getRequiredVersion","notNullable","addNullable","notOptional","addOptional","requiredChecker","isOptional","copyProps","originalChecker","optionalCheck","optional","fixType","nullableCheck","isNullable","nullable","checkerCopy","src","dest","noop","defineProperty","enumerable","configurable","writable","checkerHelpers","getApiCheckInstance","apiCheck","api","args","output","config","globalConfig","apiTypes","argTypes","passed","message","failed","checkApiCheckApi","messages","checkEnoughArgs","checkApiWithArgs","returnObject","getTypes","getErrorMessage","checkApiArgs","isArrayOrArgs","prefix","errors","apiCheckApis","handleErrorMessage","getApiCheck","shouldThrow","result","console","warn","getPrefix","onlyPrefix","gOut","trim","getSuffix","suffix","onlySuffix","getUrl","url","docsBaseUrl","urlSuffix","passedAndShouldHavePassed","buildMessageFromApiAndArgs","replaceFunctionWithName","replacedItems","getObjectString","types","generateMessage","n","useS","newLine","passedArgs","_getTypes","map","specified","terse","verbose","addHelpers","arg","getArgDisplay","extraCheckers","apiCheckApiCheck","getApiCheckInstanceCheckers","additionalProperties","throw","utils","apiCheckUtil","wrapper","checkers","getCheckers","checkerIndex","argIndex","res","lastChecker","argName","argFailed","skipPreviousChecker","getCheckerErrorMessage","checkerTypeType","apiCheckDataChecker","shape","string","bool","asFunc","func","withProperties","asShape","wrongShape","oneOfType","checkerHelp","getCheckerHelp","help","requiredArgs","filter","a","gottenArgs","hasKeys","getDisplayIfNotGotten","getDisplay","cName","constructor","argDisplay","v","k","getApiCheckApis","os","checkerFnChecker","strict","objectOf","typeOrArrayOf","any","internalChecker","typeOfCheckGetter","lType","toLowerCase","funcCheckGetter","functionChecker","apiError","shapeChecker","notFunction","objectCheckGetter","nullType","objectNullOkChecker","objectChecker","nullOk","instanceCheckGetter","classToCheck","oneOfCheckGetter","enums","enum","enm","some","oneOfTypeCheckGetter","checkersDisplay","arrayOfCheckGetter","shortCheckerDisplay","array","every","item","objectOfCheckGetter","checkerDisplay","notObject","object","allTypesSuccess","typeOrArrayOfCheckGetter","arrayOf","getShapeCheckGetter","shapeCheckGetter","nonObject","modifyTypeDisplayToHelpOut","required","addHelper","property","objectMessage","stringMessage","error","toUpperCase","parentRequired","strictType","shapeTypes","isObject","shapePropError","shapeError","allowedProperties","extraProps","getRequiredIfNotChecker","all","otherProps","propChecker","props","ifProps","description","getTypeForShapeChild","propName","propExists","iteration","otherPropsExist","otherProp","ifNot","onlyIf","othersPresent","requiredIfNot","argumentsCheckerGetter","number","anyCheckGetter","nullCheckGetter","rangeCheckGetter","min","max","emptyObjectCheckGetter","emptyObject","instanceOf","oneOf","range","null","_require"],"mappings":"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","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tmodule.exports = __webpack_require__(3);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = stringify;\n\t\n\tfunction getSerialize (fn, decycle) {\n\t var seen = [], keys = [];\n\t decycle = decycle || function(key, value) {\n\t return '[Circular ' + getPath(value, seen, keys) + ']'\n\t };\n\t return function(key, value) {\n\t var ret = value;\n\t if (typeof value === 'object' && value) {\n\t if (seen.indexOf(value) !== -1)\n\t ret = decycle(key, value);\n\t else {\n\t seen.push(value);\n\t keys.push(key);\n\t }\n\t }\n\t if (fn) ret = fn(key, ret);\n\t return ret;\n\t }\n\t}\n\t\n\tfunction getPath (value, seen, keys) {\n\t var index = seen.indexOf(value);\n\t var path = [ keys[index] ];\n\t for (index--; index >= 0; index--) {\n\t if (seen[index][ path[0] ] === value) {\n\t value = seen[index];\n\t path.unshift(keys[index]);\n\t }\n\t }\n\t return '~' + path.join('.');\n\t}\n\t\n\tfunction stringify(obj, fn, spaces, decycle) {\n\t return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n\t}\n\t\n\tstringify.getSerialize = getSerialize;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar _defineProperty = function (obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); };\n\t\n\tvar stringify = __webpack_require__(1);\n\tvar checkerHelpers = {\n\t addOptional: addOptional, getRequiredVersion: getRequiredVersion, setupChecker: setupChecker, addNullable: addNullable\n\t};\n\t\n\tmodule.exports = {\n\t each: each, copy: copy, typeOf: typeOf, arrayify: arrayify, getCheckerDisplay: getCheckerDisplay,\n\t isError: isError, list: list, getError: getError, nAtL: nAtL, t: t, undef: undef, checkerHelpers: checkerHelpers,\n\t noop: noop\n\t};\n\t\n\tfunction copy(obj) {\n\t var type = typeOf(obj);\n\t var daCopy = undefined;\n\t if (type === \"array\") {\n\t daCopy = [];\n\t } else if (type === \"object\") {\n\t daCopy = {};\n\t } else {\n\t return obj;\n\t }\n\t each(obj, function (val, key) {\n\t daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n\t });\n\t return daCopy;\n\t}\n\t\n\tfunction typeOf(obj) {\n\t if (Array.isArray(obj)) {\n\t return \"array\";\n\t } else if (obj instanceof RegExp) {\n\t return \"object\";\n\t } else {\n\t return typeof obj;\n\t }\n\t}\n\t\n\tfunction getCheckerDisplay(checker, options) {\n\t /* jshint maxcomplexity:7 */\n\t var display = undefined;\n\t var short = options && options.short;\n\t if (short && checker.shortType) {\n\t display = checker.shortType;\n\t } else if (!short && typeof checker.type === \"object\" || checker.type === \"function\") {\n\t display = getCheckerType(checker, options);\n\t } else {\n\t display = getCheckerType(checker, options) || checker.displayName || checker.name;\n\t }\n\t return display;\n\t}\n\t\n\tfunction getCheckerType(_ref, options) {\n\t var type = _ref.type;\n\t\n\t if (typeof type === \"function\") {\n\t var __apiCheckData = type.__apiCheckData;\n\t var typeTypes = type(options);\n\t type = _defineProperty({\n\t __apiCheckData: __apiCheckData }, __apiCheckData.type, typeTypes);\n\t }\n\t return type;\n\t}\n\t\n\tfunction arrayify(obj) {\n\t if (!obj) {\n\t return [];\n\t } else if (Array.isArray(obj)) {\n\t return obj;\n\t } else {\n\t return [obj];\n\t }\n\t}\n\t\n\tfunction each(obj, iterator, context) {\n\t if (Array.isArray(obj)) {\n\t return eachArry.apply(undefined, arguments);\n\t } else {\n\t return eachObj.apply(undefined, arguments);\n\t }\n\t}\n\t\n\tfunction eachObj(obj, iterator, context) {\n\t var ret;\n\t var hasOwn = Object.prototype.hasOwnProperty;\n\t for (var key in obj) {\n\t if (hasOwn.call(obj, key)) {\n\t ret = iterator.call(context, obj[key], key, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t }\n\t return true;\n\t}\n\t\n\tfunction eachArry(obj, iterator, context) {\n\t var ret;\n\t var length = obj.length;\n\t for (var i = 0; i < length; i++) {\n\t ret = iterator.call(context, obj[i], i, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t return true;\n\t}\n\t\n\tfunction isError(obj) {\n\t return obj instanceof Error;\n\t}\n\t\n\tfunction list(arry, join, finalJoin) {\n\t arry = arrayify(arry);\n\t var copy = arry.slice();\n\t var last = copy.pop();\n\t if (copy.length === 1) {\n\t join = \" \";\n\t }\n\t return copy.join(join) + (\"\" + (copy.length ? join + finalJoin : \"\") + \"\" + last);\n\t}\n\t\n\tfunction getError(name, location, checkerType) {\n\t if (typeof checkerType === \"function\") {\n\t checkerType = checkerType({ short: true });\n\t }\n\t var stringType = typeof checkerType !== \"object\" ? checkerType : stringify(checkerType);\n\t return new Error(\"\" + nAtL(name, location) + \" must be \" + t(stringType));\n\t}\n\t\n\tfunction nAtL(name, location) {\n\t var tName = t(name || \"value\");\n\t var tLocation = !location ? \"\" : \" at \" + t(location);\n\t return \"\" + tName + \"\" + tLocation;\n\t}\n\t\n\tfunction t(thing) {\n\t return \"`\" + thing + \"`\";\n\t}\n\t\n\tfunction undef(thing) {\n\t return typeof thing === \"undefined\";\n\t}\n\t\n\t/**\n\t * This will set up the checker with all of the defaults that most checkers want like required by default and an\n\t * optional version\n\t * @param checker\n\t * @param properties properties to add to the checker\n\t * @param disabled - when set to true, this will set the checker to a no-op function\n\t */\n\tfunction setupChecker(checker, properties, disabled) {\n\t /* jshint maxcomplexity:9 */\n\t if (disabled) {\n\t // swap out the checker for its own copy of noop\n\t checker = getNoop();\n\t checker.isNoop = true;\n\t }\n\t\n\t if (typeof checker.type === \"string\") {\n\t checker.shortType = checker.type;\n\t }\n\t\n\t // assign all properties given\n\t each(properties, function (prop, name) {\n\t return checker[name] = prop;\n\t });\n\t\n\t if (!checker.displayName) {\n\t checker.displayName = \"apiCheck \" + t(checker.shortType || checker.type || checker.name) + \" type checker\";\n\t }\n\t\n\t if (!checker.notRequired) {\n\t checker = getRequiredVersion(checker, disabled);\n\t }\n\t\n\t if (!checker.notNullable) {\n\t addNullable(checker, disabled);\n\t }\n\t\n\t if (!checker.notOptional) {\n\t addOptional(checker, disabled);\n\t }\n\t\n\t return checker;\n\t}\n\t\n\tfunction getRequiredVersion(checker, disabled) {\n\t var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n\t if (undef(val) && !checker.isOptional) {\n\t var tLocation = location ? \" in \" + t(location) : \"\";\n\t var type = getCheckerDisplay(checker, { short: true });\n\t var stringType = typeof type !== \"object\" ? type : stringify(type);\n\t return new Error(\"Required \" + t(name) + \" not specified\" + tLocation + \". Must be \" + t(stringType));\n\t } else {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t copyProps(checker, requiredChecker);\n\t requiredChecker.originalChecker = checker;\n\t return requiredChecker;\n\t}\n\t\n\tfunction addOptional(checker, disabled) {\n\t var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n\t if (!undef(val)) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, optionalCheck);\n\t\n\t optionalCheck.isOptional = true;\n\t optionalCheck.displayName = checker.displayName + \" (optional)\";\n\t optionalCheck.originalChecker = checker;\n\t\n\t // the magic line that allows you to add .optional to the end of the checkers\n\t checker.optional = optionalCheck;\n\t\n\t fixType(checker, checker.optional);\n\t}\n\t\n\tfunction addNullable(checker, disabled) {\n\t var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n\t if (val !== null) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, nullableCheck);\n\t\n\t nullableCheck.isNullable = true;\n\t nullableCheck.displayName = checker.displayName + \" (nullable)\";\n\t nullableCheck.originalChecker = checker;\n\t\n\t // the magic line that allows you to add .nullable to the end of the checkers\n\t checker.nullable = nullableCheck;\n\t\n\t fixType(checker, checker.nullable);\n\t if (!checker.notOptional) {\n\t addOptional(checker.nullable, disabled);\n\t }\n\t}\n\t\n\tfunction fixType(checker, checkerCopy) {\n\t // fix type, because it's not a straight copy...\n\t // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n\t // we also want to add \"(optional)\" to the types with a string\n\t if (typeof checkerCopy.type === \"object\") {\n\t checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n\t } else if (typeof checkerCopy.type === \"function\") {\n\t checkerCopy.type = function () {\n\t return checker.type.apply(checker, arguments);\n\t };\n\t } else {\n\t checkerCopy.type += \" (optional)\";\n\t return;\n\t }\n\t checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n\t checkerCopy.type.__apiCheckData.optional = true;\n\t}\n\t\n\t// UTILS\n\t\n\tfunction copyProps(src, dest) {\n\t each(Object.keys(src), function (key) {\n\t return dest[key] = src[key];\n\t });\n\t}\n\t\n\tfunction noop() {}\n\t\n\tfunction getNoop() {\n\t /* istanbul ignore next */\n\t return function noop() {};\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar stringify = __webpack_require__(1);\n\tvar apiCheckUtil = __webpack_require__(2);\n\tvar each = apiCheckUtil.each;\n\tvar isError = apiCheckUtil.isError;\n\tvar t = apiCheckUtil.t;\n\tvar arrayify = apiCheckUtil.arrayify;\n\tvar getCheckerDisplay = apiCheckUtil.getCheckerDisplay;\n\tvar typeOf = apiCheckUtil.typeOf;\n\tvar getError = apiCheckUtil.getError;\n\t\n\tvar checkers = __webpack_require__(4);\n\tvar apiCheckApis = getApiCheckApis();\n\t\n\tmodule.exports = getApiCheckInstance;\n\tmodule.exports.utils = apiCheckUtil;\n\tmodule.exports.globalConfig = {\n\t verbose: false,\n\t disabled: false\n\t};\n\t\n\tvar apiCheckApiCheck = getApiCheckInstance({\n\t output: { prefix: \"apiCheck\" }\n\t});\n\tmodule.exports.internalChecker = apiCheckApiCheck;\n\t\n\teach(checkers, function (checker, name) {\n\t return module.exports[name] = checker;\n\t});\n\t\n\tfunction getApiCheckInstance() {\n\t var config = arguments[0] === undefined ? {} : arguments[0];\n\t var extraCheckers = arguments[1] === undefined ? {} : arguments[1];\n\t\n\t /* jshint maxcomplexity:6 */\n\t if (apiCheckApiCheck && arguments.length) {\n\t apiCheckApiCheck[\"throw\"](apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n\t prefix: \"creating an apiCheck instance\"\n\t });\n\t }\n\t\n\t var additionalProperties = {\n\t \"throw\": getApiCheck(true),\n\t warn: getApiCheck(false),\n\t getErrorMessage: getErrorMessage,\n\t handleErrorMessage: handleErrorMessage,\n\t config: {\n\t output: config.output || {\n\t prefix: \"\",\n\t suffix: \"\",\n\t docsBaseUrl: \"\"\n\t },\n\t verbose: config.verbose || false,\n\t disabled: config.disabled || false\n\t },\n\t utils: apiCheckUtil\n\t };\n\t\n\t each(additionalProperties, function (wrapper, name) {\n\t return apiCheck[name] = wrapper;\n\t });\n\t\n\t var disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n\t each(checkers.getCheckers(disabled), function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t each(extraCheckers, function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t\n\t return apiCheck;\n\t\n\t /**\n\t * This is the instance function. Other things are attached to this see additional properties above.\n\t * @param api {Array}\n\t * @param args {arguments}\n\t * @param output {Object}\n\t * @returns {Object} - if this has a failed = true property, then it failed\n\t */\n\t function apiCheck(api, args, output) {\n\t /* jshint maxcomplexity:8 */\n\t if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n\t return {\n\t apiTypes: {}, argTypes: {},\n\t passed: true, message: \"\",\n\t failed: false\n\t }; // empty version of what is normally returned\n\t }\n\t checkApiCheckApi(arguments);\n\t if (!Array.isArray(api)) {\n\t api = [api];\n\t args = [args];\n\t } else {\n\t // turn arguments into an array\n\t args = Array.prototype.slice.call(args);\n\t }\n\t var messages = checkEnoughArgs(api, args);\n\t if (!messages.length) {\n\t // this is where we actually go perform the checks.\n\t messages = checkApiWithArgs(api, args);\n\t }\n\t\n\t var returnObject = getTypes(api, args);\n\t if (messages.length) {\n\t returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n\t returnObject.failed = true;\n\t returnObject.passed = false;\n\t } else {\n\t returnObject.message = \"\";\n\t returnObject.failed = false;\n\t returnObject.passed = true;\n\t }\n\t return returnObject;\n\t }\n\t\n\t /**\n\t * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n\t * @param checkApiArgs\n\t */\n\t function checkApiCheckApi(checkApiArgs) {\n\t var api = checkApiArgs[0];\n\t var args = checkApiArgs[1];\n\t var isArrayOrArgs = Array.isArray(args) || args && typeof args === \"object\" && typeof args.length === \"number\";\n\t\n\t if (Array.isArray(api) && !isArrayOrArgs) {\n\t throw new Error(getErrorMessage(api, [args], [\"If an array is provided for the api, an array must be provided for the args as well.\"], { prefix: \"apiCheck\" }));\n\t }\n\t // dog fooding here\n\t var errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n\t if (errors.length) {\n\t var message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n\t prefix: \"apiCheck\"\n\t });\n\t apiCheck.handleErrorMessage(message, true);\n\t }\n\t }\n\t\n\t function getApiCheck(shouldThrow) {\n\t return function apiCheckWrapper(api, args, output) {\n\t var result = apiCheck(api, args, output);\n\t apiCheck.handleErrorMessage(result.message, shouldThrow);\n\t return result; // wont get here if an error is thrown\n\t };\n\t }\n\t\n\t function handleErrorMessage(message, shouldThrow) {\n\t if (shouldThrow && message) {\n\t throw new Error(message);\n\t } else if (message) {\n\t console.warn(message);\n\t }\n\t }\n\t\n\t function getErrorMessage(api, args) {\n\t var messages = arguments[2] === undefined ? [] : arguments[2];\n\t var output = arguments[3] === undefined ? {} : arguments[3];\n\t\n\t var gOut = apiCheck.config.output || {};\n\t var prefix = getPrefix();\n\t var suffix = getSuffix();\n\t var url = getUrl();\n\t var message = \"apiCheck failed! \" + messages.join(\", \");\n\t var passedAndShouldHavePassed = \"\\n\\n\" + buildMessageFromApiAndArgs(api, args);\n\t return (\"\" + prefix + \" \" + message + \" \" + suffix + \" \" + (url || \"\") + \"\" + passedAndShouldHavePassed).trim();\n\t\n\t function getPrefix() {\n\t var prefix = output.onlyPrefix;\n\t if (!prefix) {\n\t prefix = (\"\" + (gOut.prefix || \"\") + \" \" + (output.prefix || \"\")).trim();\n\t }\n\t return prefix;\n\t }\n\t\n\t function getSuffix() {\n\t var suffix = output.onlySuffix;\n\t if (!suffix) {\n\t suffix = (\"\" + (output.suffix || \"\") + \" \" + (gOut.suffix || \"\")).trim();\n\t }\n\t return suffix;\n\t }\n\t\n\t function getUrl() {\n\t var url = output.url;\n\t if (!url) {\n\t url = gOut.docsBaseUrl && output.urlSuffix && (\"\" + gOut.docsBaseUrl + \"\" + output.urlSuffix).trim();\n\t }\n\t return url;\n\t }\n\t }\n\t\n\t function buildMessageFromApiAndArgs(api, args) {\n\t var _getTypes = getTypes(api, args);\n\t\n\t var apiTypes = _getTypes.apiTypes;\n\t var argTypes = _getTypes.argTypes;\n\t\n\t var copy = Array.prototype.slice.call(args || []);\n\t var replacedItems = [];\n\t replaceFunctionWithName(copy);\n\t var passedArgs = getObjectString(copy);\n\t argTypes = getObjectString(argTypes);\n\t apiTypes = getObjectString(apiTypes);\n\t\n\t return generateMessage();\n\t\n\t // functions\n\t\n\t function replaceFunctionWithName(obj) {\n\t each(obj, function (val, name) {\n\t /* jshint maxcomplexity:6 */\n\t if (replacedItems.indexOf(val) === -1) {\n\t // avoid recursive problems\n\t replacedItems.push(val);\n\t if (typeof val === \"object\") {\n\t replaceFunctionWithName(obj);\n\t } else if (typeof val === \"function\") {\n\t obj[name] = val.displayName || val.name || \"anonymous function\";\n\t }\n\t }\n\t });\n\t }\n\t\n\t function getObjectString(types) {\n\t if (!types || !types.length) {\n\t return \"nothing\";\n\t } else if (types && types.length === 1) {\n\t types = types[0];\n\t }\n\t return stringify(types, null, 2);\n\t }\n\t\n\t function generateMessage() {\n\t var n = \"\\n\";\n\t var useS = true;\n\t if (args && args.length === 1) {\n\t if (typeof args[0] === \"object\") {\n\t useS = !!Object.keys(args[0]).length;\n\t } else {\n\t useS = false;\n\t }\n\t }\n\t var types = \"type\" + (useS ? \"s\" : \"\");\n\t var newLine = n + n;\n\t return \"You passed:\" + n + \"\" + passedArgs + \"\" + newLine + (\"With the \" + types + \":\" + n + \"\" + argTypes + \"\" + newLine) + (\"The API calls for:\" + n + \"\" + apiTypes);\n\t }\n\t }\n\t\n\t function getTypes(api, args) {\n\t api = arrayify(api);\n\t args = arrayify(args);\n\t var apiTypes = api.map(function (checker, index) {\n\t var specified = module.exports.globalConfig.hasOwnProperty(\"verbose\");\n\t return getCheckerDisplay(checker, {\n\t terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n\t obj: args[index],\n\t addHelpers: true\n\t });\n\t });\n\t var argTypes = args.map(function (arg) {\n\t return getArgDisplay(arg, []);\n\t });\n\t return { argTypes: argTypes, apiTypes: apiTypes };\n\t }\n\t}\n\t\n\t// STATELESS FUNCTIONS\n\t\n\t/**\n\t * This is where the magic happens for actually checking the arguments with the api.\n\t * @param api {Array} - checkers\n\t * @param args {Array} - and arguments object\n\t * @returns {Array}\n\t */\n\tfunction checkApiWithArgs(api, args) {\n\t /* jshint maxcomplexity:7 */\n\t var messages = [];\n\t var failed = false;\n\t var checkerIndex = 0;\n\t var argIndex = 0;\n\t var arg = undefined,\n\t checker = undefined,\n\t res = undefined,\n\t lastChecker = undefined,\n\t argName = undefined,\n\t argFailed = undefined,\n\t skipPreviousChecker = undefined;\n\t /* jshint -W084 */\n\t while ((checker = api[checkerIndex++]) && argIndex < args.length) {\n\t arg = args[argIndex++];\n\t argName = \"Argument \" + argIndex + (checker.isOptional ? \" (optional)\" : \"\");\n\t res = checker(arg, \"value\", argName);\n\t argFailed = isError(res);\n\t lastChecker = checkerIndex >= api.length;\n\t skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n\t if (argFailed && lastChecker || argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker) {\n\t failed = true;\n\t messages.push(getCheckerErrorMessage(res, checker, arg));\n\t } else if (argFailed && checker.isOptional) {\n\t argIndex--;\n\t } else {\n\t messages.push(\"\" + t(argName) + \" passed\");\n\t }\n\t }\n\t return failed ? messages : [];\n\t}\n\t\n\tcheckerTypeType.type = \"function with __apiCheckData property and `${function.type}` property\";\n\tfunction checkerTypeType(checkerType, name, location) {\n\t var apiCheckDataChecker = checkers.shape({\n\t type: checkers.string,\n\t optional: checkers.bool\n\t });\n\t var asFunc = checkers.func.withProperties({ __apiCheckData: apiCheckDataChecker });\n\t var asShape = checkers.shape({ __apiCheckData: apiCheckDataChecker });\n\t var wrongShape = checkers.oneOfType([asFunc, asShape])(checkerType, name, location);\n\t if (isError(wrongShape)) {\n\t return wrongShape;\n\t }\n\t if (typeof checkerType !== \"function\" && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n\t return getError(name, location, checkerTypeType.type);\n\t }\n\t}\n\t\n\tfunction getCheckerErrorMessage(res, checker, val) {\n\t var checkerHelp = getCheckerHelp(checker, val);\n\t checkerHelp = checkerHelp ? \" - \" + checkerHelp : \"\";\n\t return res.message + checkerHelp;\n\t}\n\t\n\tfunction getCheckerHelp(_ref, val) {\n\t var help = _ref.help;\n\t\n\t if (!help) {\n\t return \"\";\n\t }\n\t if (typeof help === \"function\") {\n\t help = help(val);\n\t }\n\t return help;\n\t}\n\t\n\tfunction checkEnoughArgs(api, args) {\n\t var requiredArgs = api.filter(function (a) {\n\t return !a.isOptional;\n\t });\n\t if (args.length < requiredArgs.length) {\n\t return [\"Not enough arguments specified. Requires `\" + requiredArgs.length + \"`, you passed `\" + args.length + \"`\"];\n\t } else {\n\t return [];\n\t }\n\t}\n\t\n\tfunction getArgDisplay(arg, gottenArgs) {\n\t /* jshint maxcomplexity:7 */\n\t var cName = arg && arg.constructor && arg.constructor.name;\n\t var type = typeOf(arg);\n\t if (type === \"function\") {\n\t if (hasKeys()) {\n\t var properties = stringify(getDisplayIfNotGotten());\n\t return cName + \" (with properties: \" + properties + \")\";\n\t }\n\t return cName;\n\t }\n\t\n\t if (arg === null) {\n\t return \"null\";\n\t }\n\t\n\t if (type !== \"array\" && type !== \"object\") {\n\t return type;\n\t }\n\t\n\t if (hasKeys()) {\n\t return getDisplayIfNotGotten();\n\t }\n\t\n\t return cName;\n\t\n\t // utility functions\n\t function hasKeys() {\n\t return arg && Object.keys(arg).length;\n\t }\n\t\n\t function getDisplayIfNotGotten() {\n\t if (gottenArgs.indexOf(arg) !== -1) {\n\t return \"[Circular]\";\n\t }\n\t gottenArgs.push(arg);\n\t return getDisplay(arg, gottenArgs);\n\t }\n\t}\n\t\n\tfunction getDisplay(obj, gottenArgs) {\n\t var argDisplay = {};\n\t each(obj, function (v, k) {\n\t return argDisplay[k] = getArgDisplay(v, gottenArgs);\n\t });\n\t return argDisplay;\n\t}\n\t\n\tfunction getApiCheckApis() {\n\t var os = checkers.string.optional;\n\t\n\t var checkerFnChecker = checkers.func.withProperties({\n\t type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n\t displayName: checkers.string.optional,\n\t shortType: checkers.string.optional,\n\t notOptional: checkers.bool.optional,\n\t notRequired: checkers.bool.optional\n\t });\n\t\n\t var getApiCheckInstanceCheckers = [checkers.shape({\n\t output: checkers.shape({\n\t prefix: checkers.string.optional,\n\t suffix: checkers.string.optional,\n\t docsBaseUrl: checkers.string.optional\n\t }).strict.optional,\n\t verbose: checkers.bool.optional,\n\t disabled: checkers.bool.optional\n\t }).strict.optional, checkers.objectOf(checkerFnChecker).optional];\n\t\n\t var checkApiCheckApi = [checkers.typeOrArrayOf(checkerFnChecker), checkers.any.optional, checkers.shape({\n\t prefix: os, suffix: os, urlSuffix: os, // appended case\n\t onlyPrefix: os, onlySuffix: os, url: os // override case\n\t }).strict.optional];\n\t\n\t return {\n\t checkerFnChecker: checkerFnChecker,\n\t getApiCheckInstanceCheckers: getApiCheckInstanceCheckers,\n\t checkApiCheckApi: checkApiCheckApi\n\t };\n\t}\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tvar stringify = __webpack_require__(1);\n\t\n\tvar _require = __webpack_require__(2);\n\t\n\tvar typeOf = _require.typeOf;\n\tvar each = _require.each;\n\tvar copy = _require.copy;\n\tvar getCheckerDisplay = _require.getCheckerDisplay;\n\tvar isError = _require.isError;\n\tvar arrayify = _require.arrayify;\n\tvar list = _require.list;\n\tvar getError = _require.getError;\n\tvar nAtL = _require.nAtL;\n\tvar t = _require.t;\n\tvar checkerHelpers = _require.checkerHelpers;\n\tvar undef = _require.undef;\n\tvar setupChecker = checkerHelpers.setupChecker;\n\t\n\tvar checkers = module.exports = getCheckers();\n\tmodule.exports.getCheckers = getCheckers;\n\t\n\tfunction getCheckers(disabled) {\n\t return {\n\t array: typeOfCheckGetter(\"Array\"),\n\t bool: typeOfCheckGetter(\"Boolean\"),\n\t number: typeOfCheckGetter(\"Number\"),\n\t string: typeOfCheckGetter(\"String\"),\n\t func: funcCheckGetter(),\n\t object: objectCheckGetter(),\n\t\n\t emptyObject: emptyObjectCheckGetter(),\n\t\n\t instanceOf: instanceCheckGetter,\n\t oneOf: oneOfCheckGetter,\n\t oneOfType: oneOfTypeCheckGetter,\n\t\n\t arrayOf: arrayOfCheckGetter,\n\t objectOf: objectOfCheckGetter,\n\t typeOrArrayOf: typeOrArrayOfCheckGetter,\n\t\n\t range: rangeCheckGetter,\n\t\n\t shape: getShapeCheckGetter(),\n\t args: argumentsCheckerGetter(),\n\t\n\t any: anyCheckGetter(),\n\t \"null\": nullCheckGetter()\n\t\n\t };\n\t\n\t function typeOfCheckGetter(type) {\n\t var lType = type.toLowerCase();\n\t return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== lType) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function funcCheckGetter() {\n\t var type = \"Function\";\n\t var functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== \"function\") {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t\n\t functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n\t var apiError = checkers.objectOf(checkers.func)(properties, \"properties\", \"apiCheck.func.withProperties\");\n\t if (isError(apiError)) {\n\t throw apiError;\n\t }\n\t var shapeChecker = checkers.shape(properties, true);\n\t shapeChecker.type.__apiCheckData.type = \"func.withProperties\";\n\t\n\t return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n\t var notFunction = checkers.func(val, name, location);\n\t if (isError(notFunction)) {\n\t return notFunction;\n\t }\n\t return shapeChecker(val, name, location);\n\t }, { type: shapeChecker.type, shortType: \"func.withProperties\" }, disabled);\n\t };\n\t return functionChecker;\n\t }\n\t\n\t function objectCheckGetter() {\n\t var type = \"Object\";\n\t var nullType = \"Object (null ok)\";\n\t var objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== \"object\") {\n\t return getError(name, location, nullType);\n\t }\n\t }, { type: nullType }, disabled);\n\t\n\t var objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n\t if (val === null || isError(objectNullOkChecker(val, name, location))) {\n\t return getError(name, location, objectChecker.type);\n\t }\n\t }, { type: type, nullOk: objectNullOkChecker }, disabled);\n\t\n\t return objectChecker;\n\t }\n\t\n\t function instanceCheckGetter(classToCheck) {\n\t return setupChecker(function instanceCheckerDefinition(val, name, location) {\n\t if (!(val instanceof classToCheck)) {\n\t return getError(name, location, classToCheck.name);\n\t }\n\t }, { type: classToCheck.name }, disabled);\n\t }\n\t\n\t function oneOfCheckGetter(enums) {\n\t var type = {\n\t __apiCheckData: { optional: false, type: \"enum\" },\n\t \"enum\": enums\n\t };\n\t var shortType = \"oneOf[\" + enums.map(function (enm) {\n\t return stringify(enm);\n\t }).join(\", \") + \"]\";\n\t return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n\t if (!enums.some(function (enm) {\n\t return enm === val;\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function oneOfTypeCheckGetter(checkers) {\n\t var checkersDisplay = checkers.map(function (checker) {\n\t return getCheckerDisplay(checker, { short: true });\n\t });\n\t var shortType = \"oneOfType[\" + checkersDisplay.join(\", \") + \"]\";\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return checkers.map(function (checker) {\n\t return getCheckerDisplay(checker, options);\n\t });\n\t }\n\t type.__apiCheckData = { optional: false, type: \"oneOfType\" };\n\t return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n\t if (!checkers.some(function (checker) {\n\t return !isError(checker(val, name, location));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function arrayOfCheckGetter(checker) {\n\t var shortCheckerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = \"arrayOf[\" + shortCheckerDisplay + \"]\";\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: \"arrayOf\" };\n\t\n\t return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n\t if (isError(checkers.array(val)) || !val.every(function (item) {\n\t return !isError(checker(item));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function objectOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = \"objectOf[\" + checkerDisplay + \"]\";\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: \"objectOf\" };\n\t\n\t return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n\t var notObject = checkers.object(val, name, location);\n\t if (isError(notObject)) {\n\t return notObject;\n\t }\n\t var allTypesSuccess = each(val, function (item, key) {\n\t if (isError(checker(item, key, name))) {\n\t return false;\n\t }\n\t });\n\t if (!allTypesSuccess) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function typeOrArrayOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = \"typeOrArrayOf[\" + checkerDisplay + \"]\";\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t\n\t type.__apiCheckData = { optional: false, type: \"typeOrArrayOf\" };\n\t return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n\t if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function getShapeCheckGetter() {\n\t function shapeCheckGetter(shape, nonObject) {\n\t var shapeTypes = {};\n\t each(shape, function (checker, prop) {\n\t shapeTypes[prop] = getCheckerDisplay(checker);\n\t });\n\t function type() {\n\t var options = arguments[0] === undefined ? {} : arguments[0];\n\t\n\t var ret = {};\n\t var terse = options.terse;\n\t var obj = options.obj;\n\t var addHelpers = options.addHelpers;\n\t\n\t var parentRequired = options.required;\n\t each(shape, function (checker, prop) {\n\t /* jshint maxcomplexity:6 */\n\t var specified = obj && obj.hasOwnProperty(prop);\n\t var required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n\t if (!terse || (specified || !checker.isOptional)) {\n\t ret[prop] = getCheckerDisplay(checker, { terse: terse, obj: obj && obj[prop], required: required, addHelpers: addHelpers });\n\t }\n\t if (addHelpers) {\n\t modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n\t }\n\t });\n\t return ret;\n\t\n\t function modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required) {\n\t if (!specified && required && !checker.isOptional) {\n\t var item = \"ITEM\";\n\t if (checker.type && checker.type.__apiCheckData) {\n\t item = checker.type.__apiCheckData.type.toUpperCase();\n\t }\n\t addHelper(\"missing\", \"MISSING THIS \" + item, \" <-- YOU ARE MISSING THIS\");\n\t } else if (specified) {\n\t var error = checker(obj[prop], prop, null, obj);\n\t if (isError(error)) {\n\t addHelper(\"error\", \"THIS IS THE PROBLEM: \" + error.message, \" <-- THIS IS THE PROBLEM: \" + error.message);\n\t }\n\t }\n\t\n\t function addHelper(property, objectMessage, stringMessage) {\n\t if (typeof ret[prop] === \"string\") {\n\t ret[prop] += stringMessage;\n\t } else {\n\t ret[prop].__apiCheckData[property] = objectMessage;\n\t }\n\t }\n\t }\n\t }\n\t\n\t type.__apiCheckData = { strict: false, optional: false, type: \"shape\" };\n\t var shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n\t /* jshint maxcomplexity:6 */\n\t var isObject = !nonObject && checkers.object(val, name, location);\n\t if (isError(isObject)) {\n\t return isObject;\n\t }\n\t var shapePropError = undefined;\n\t location = location ? location + (name ? \"/\" : \"\") : \"\";\n\t name = name || \"\";\n\t each(shape, function (checker, prop) {\n\t if (val.hasOwnProperty(prop) || !checker.isOptional) {\n\t shapePropError = checker(val[prop], prop, \"\" + location + \"\" + name, val);\n\t return !isError(shapePropError);\n\t }\n\t });\n\t if (isError(shapePropError)) {\n\t return shapePropError;\n\t }\n\t }, { type: type, shortType: \"shape\" }, disabled);\n\t\n\t function strictType() {\n\t return type.apply(undefined, arguments);\n\t }\n\t\n\t strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n\t strictType.__apiCheckData.strict = true;\n\t shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n\t var shapeError = shapeChecker(val, name, location);\n\t if (isError(shapeError)) {\n\t return shapeError;\n\t }\n\t var allowedProperties = Object.keys(shape);\n\t var extraProps = Object.keys(val).filter(function (prop) {\n\t return allowedProperties.indexOf(prop) === -1;\n\t });\n\t if (extraProps.length) {\n\t return new Error(\"\" + nAtL(name, location) + \" cannot have extra properties: \" + t(extraProps.join(\"`, `\")) + \".\" + (\"It is limited to \" + t(allowedProperties.join(\"`, `\"))));\n\t }\n\t }, { type: strictType, shortType: \"strict shape\" }, disabled);\n\t\n\t return shapeChecker;\n\t }\n\t\n\t shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = \"specified only if \" + otherProps[0] + \" is not specified\";\n\t } else {\n\t description = \"specified only if none of the following are specified: [\" + list(otherProps, \", \", \"and \") + \"]\";\n\t }\n\t var shortType = \"ifNot[\" + otherProps.join(\", \") + \"]\";\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (propExists === otherPropsExist) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { notRequired: true, type: type, shortType: shortType }, disabled);\n\t };\n\t\n\t shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n\t otherProps = arrayify(otherProps);\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = \"specified only if \" + otherProps[0] + \" is also specified\";\n\t } else {\n\t description = \"specified only if all of the following are specified: [\" + list(otherProps, \", \", \"and \") + \"]\";\n\t }\n\t var shortType = \"onlyIf[\" + otherProps.join(\", \") + \"]\";\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n\t var othersPresent = otherProps.every(function (prop) {\n\t return obj.hasOwnProperty(prop);\n\t });\n\t if (!othersPresent) {\n\t return getError(propName, location, type);\n\t } else {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t };\n\t\n\t shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t return getRequiredIfNotChecker(false, otherProps, propChecker);\n\t };\n\t\n\t shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t throw new Error(\"requiredIfNot.all must be passed an array\");\n\t }\n\t return getRequiredIfNotChecker(true, otherProps, propChecker);\n\t };\n\t\n\t function getRequiredIfNotChecker(all, otherProps, propChecker) {\n\t var props = t(otherProps.join(\", \"));\n\t var ifProps = \"if \" + (all ? \"all of\" : \"at least one of\");\n\t var description = \"specified \" + ifProps + \" these are not specified: \" + props + \" (otherwise it's optional)\";\n\t var shortType = \"requiredIfNot\" + (all ? \".all\" : \"\") + \"[\" + otherProps.join(\", \") + \"}]\";\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var iteration = all ? \"every\" : \"some\";\n\t var otherPropsExist = otherProps[iteration](function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, notRequired: true }, disabled);\n\t }\n\t\n\t return shapeCheckGetter;\n\t\n\t function getTypeForShapeChild(propChecker, description, shortType) {\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(propChecker);\n\t }\n\t type.__apiCheckData = { optional: false, type: \"ifNot\", description: description };\n\t return type;\n\t }\n\t }\n\t\n\t function argumentsCheckerGetter() {\n\t var type = \"function arguments\";\n\t return setupChecker(function argsCheckerDefinition(val, name, location) {\n\t if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function anyCheckGetter() {\n\t return setupChecker(function anyCheckerDefinition() {}, { type: \"any\" }, disabled);\n\t }\n\t\n\t function nullCheckGetter() {\n\t var type = \"null\";\n\t return setupChecker(function nullChecker(val, name, location) {\n\t if (val !== null) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function rangeCheckGetter(min, max) {\n\t var type = \"Range (\" + min + \" - \" + max + \")\";\n\t return setupChecker(function rangeChecker(val, name, location) {\n\t if (typeof val !== \"number\" || val < min || val > max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function emptyObjectCheckGetter() {\n\t var type = \"empty object\";\n\t return setupChecker(function emptyObjectChecker(val, name, location) {\n\t if (typeOf(val) !== \"object\" || val === null || Object.keys(val).length) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t}\n\t\n\t// don't do anything\n\n/***/ }\n/******/ ])\n});\n\n\n\n/** WEBPACK FOOTER **\n ** api-check.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 494eb46361cc8c5a6356\n **/","module.exports = require('./apiCheck');\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./index.js\n **/","module.exports = stringify;\n\nfunction getSerialize (fn, decycle) {\n var seen = [], keys = [];\n decycle = decycle || function(key, value) {\n return '[Circular ' + getPath(value, seen, keys) + ']'\n };\n return function(key, value) {\n var ret = value;\n if (typeof value === 'object' && value) {\n if (seen.indexOf(value) !== -1)\n ret = decycle(key, value);\n else {\n seen.push(value);\n keys.push(key);\n }\n }\n if (fn) ret = fn(key, ret);\n return ret;\n }\n}\n\nfunction getPath (value, seen, keys) {\n var index = seen.indexOf(value);\n var path = [ keys[index] ];\n for (index--; index >= 0; index--) {\n if (seen[index][ path[0] ] === value) {\n value = seen[index];\n path.unshift(keys[index]);\n }\n }\n return '~' + path.join('.');\n}\n\nfunction stringify(obj, fn, spaces, decycle) {\n return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n}\n\nstringify.getSerialize = getSerialize;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/json-stringify-safe/stringify.js\n ** module id = 1\n ** module chunks = 0\n **/","const stringify = require('json-stringify-safe');\nconst checkerHelpers = {\n addOptional, getRequiredVersion, setupChecker, addNullable\n};\n\nmodule.exports = {\n each, copy, typeOf, arrayify, getCheckerDisplay,\n isError, list, getError, nAtL, t, undef, checkerHelpers,\n noop\n};\n\nfunction copy(obj) {\n let type = typeOf(obj);\n let daCopy;\n if (type === 'array') {\n daCopy = [];\n } else if (type === 'object') {\n daCopy = {};\n } else {\n return obj;\n }\n each(obj, (val, key) => {\n daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n });\n return daCopy;\n}\n\n\nfunction typeOf(obj) {\n if (Array.isArray(obj)) {\n return 'array';\n } else if (obj instanceof RegExp) {\n return 'object';\n } else {\n return typeof obj;\n }\n}\n\nfunction getCheckerDisplay(checker, options) {\n /* jshint maxcomplexity:7 */\n let display;\n let short = options && options.short;\n if (short && checker.shortType) {\n display = checker.shortType;\n } else if (!short && typeof checker.type === 'object' || checker.type === 'function') {\n display = getCheckerType(checker, options);\n } else {\n display = getCheckerType(checker, options) || checker.displayName || checker.name;\n }\n return display;\n}\n\nfunction getCheckerType({type}, options) {\n if (typeof type === 'function') {\n let __apiCheckData = type.__apiCheckData;\n let typeTypes = type(options);\n type = {\n __apiCheckData,\n [__apiCheckData.type]: typeTypes\n };\n }\n return type;\n}\n\nfunction arrayify(obj) {\n if (!obj) {\n return [];\n } else if (Array.isArray(obj)) {\n return obj;\n } else {\n return [obj];\n }\n}\n\n\nfunction each(obj, iterator, context) {\n if (Array.isArray(obj)) {\n return eachArry(...arguments);\n } else {\n return eachObj(...arguments);\n }\n}\n\nfunction eachObj(obj, iterator, context) {\n var ret;\n var hasOwn = Object.prototype.hasOwnProperty;\n for (var key in obj) {\n if (hasOwn.call(obj, key)) {\n ret = iterator.call(context, obj[key], key, obj);\n if (ret === false) {\n return ret;\n }\n }\n }\n return true;\n}\n\nfunction eachArry(obj, iterator, context) {\n var ret;\n var length = obj.length;\n for (var i = 0; i < length; i++) {\n ret = iterator.call(context, obj[i], i, obj);\n if (ret === false) {\n return ret;\n }\n }\n return true;\n}\n\nfunction isError(obj) {\n return obj instanceof Error;\n}\n\nfunction list(arry, join, finalJoin) {\n arry = arrayify(arry);\n let copy = arry.slice();\n let last = copy.pop();\n if (copy.length === 1) {\n join = ' ';\n }\n return copy.join(join) + `${copy.length ? join + finalJoin : ''}${last}`;\n}\n\n\nfunction getError(name, location, checkerType) {\n if (typeof checkerType === 'function') {\n checkerType = checkerType({short: true});\n }\n const stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType);\n return new Error(`${nAtL(name, location)} must be ${t(stringType)}`);\n}\n\nfunction nAtL(name, location) {\n const tName = t(name || 'value');\n let tLocation = !location ? '' : ' at ' + t(location);\n return `${tName}${tLocation}`;\n}\n\nfunction t(thing) {\n return '`' + thing + '`';\n}\n\nfunction undef(thing) {\n return typeof thing === 'undefined';\n}\n\n\n/**\n * This will set up the checker with all of the defaults that most checkers want like required by default and an\n * optional version\n * @param checker\n * @param properties properties to add to the checker\n * @param disabled - when set to true, this will set the checker to a no-op function\n */\nfunction setupChecker(checker, properties, disabled) {\n /* jshint maxcomplexity:9 */\n if (disabled) { // swap out the checker for its own copy of noop\n checker = getNoop();\n checker.isNoop = true;\n }\n\n if (typeof checker.type === 'string') {\n checker.shortType = checker.type;\n }\n\n // assign all properties given\n each(properties, (prop, name) => checker[name] = prop);\n\n if (!checker.displayName) {\n checker.displayName = `apiCheck ${t(checker.shortType || checker.type || checker.name)} type checker`;\n }\n\n\n if (!checker.notRequired) {\n checker = getRequiredVersion(checker, disabled);\n }\n\n if (!checker.notNullable) {\n addNullable(checker, disabled);\n }\n\n if (!checker.notOptional) {\n addOptional(checker, disabled);\n }\n\n return checker;\n}\n\nfunction getRequiredVersion(checker, disabled) {\n var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n if (undef(val) && !checker.isOptional) {\n let tLocation = location ? ` in ${t(location)}` : '';\n const type = getCheckerDisplay(checker, {short: true});\n const stringType = typeof type !== 'object' ? type : stringify(type);\n return new Error(`Required ${t(name)} not specified${tLocation}. Must be ${t(stringType)}`);\n } else {\n return checker(val, name, location, obj);\n }\n };\n copyProps(checker, requiredChecker);\n requiredChecker.originalChecker = checker;\n return requiredChecker;\n}\n\nfunction addOptional(checker, disabled) {\n var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n if (!undef(val)) {\n return checker(val, name, location, obj);\n }\n };\n // inherit all properties on the original checker\n copyProps(checker, optionalCheck);\n\n optionalCheck.isOptional = true;\n optionalCheck.displayName = checker.displayName + ' (optional)';\n optionalCheck.originalChecker = checker;\n\n\n // the magic line that allows you to add .optional to the end of the checkers\n checker.optional = optionalCheck;\n\n fixType(checker, checker.optional);\n}\n\nfunction addNullable(checker, disabled) {\n var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n if (val !== null) {\n return checker(val, name, location, obj);\n }\n };\n // inherit all properties on the original checker\n copyProps(checker, nullableCheck);\n\n nullableCheck.isNullable = true;\n nullableCheck.displayName = checker.displayName + ' (nullable)';\n nullableCheck.originalChecker = checker;\n\n // the magic line that allows you to add .nullable to the end of the checkers\n checker.nullable = nullableCheck;\n\n fixType(checker, checker.nullable);\n if (!checker.notOptional) {\n addOptional(checker.nullable, disabled);\n }\n}\n\nfunction fixType(checker, checkerCopy) {\n // fix type, because it's not a straight copy...\n // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n // we also want to add \"(optional)\" to the types with a string\n if (typeof checkerCopy.type === 'object') {\n checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n } else if (typeof checkerCopy.type === 'function') {\n checkerCopy.type = function() {\n return checker.type(...arguments);\n };\n } else {\n checkerCopy.type += ' (optional)';\n return;\n }\n checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n checkerCopy.type.__apiCheckData.optional = true;\n}\n\n\n// UTILS\n\nfunction copyProps(src, dest) {\n each(Object.keys(src), key => dest[key] = src[key]);\n}\n\nfunction noop() {\n}\n\nfunction getNoop() {\n /* istanbul ignore next */\n return function noop() {\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./apiCheckUtil.js\n **/","const stringify = require('json-stringify-safe');\nconst apiCheckUtil = require('./apiCheckUtil');\nconst {each, isError, t, arrayify, getCheckerDisplay, typeOf, getError} = apiCheckUtil;\nconst checkers = require('./checkers');\nconst apiCheckApis = getApiCheckApis();\n\nmodule.exports = getApiCheckInstance;\nmodule.exports.utils = apiCheckUtil;\nmodule.exports.globalConfig = {\n verbose: false,\n disabled: false\n};\n\nconst apiCheckApiCheck = getApiCheckInstance({\n output: {prefix: 'apiCheck'}\n});\nmodule.exports.internalChecker = apiCheckApiCheck;\n\n\neach(checkers, (checker, name) => module.exports[name] = checker);\n\nfunction getApiCheckInstance(config = {}, extraCheckers = {}) {\n /* jshint maxcomplexity:6 */\n if (apiCheckApiCheck && arguments.length) {\n apiCheckApiCheck.throw(apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n prefix: 'creating an apiCheck instance'\n });\n }\n\n let additionalProperties = {\n throw: getApiCheck(true),\n warn: getApiCheck(false),\n getErrorMessage,\n handleErrorMessage,\n config: {\n output: config.output || {\n prefix: '',\n suffix: '',\n docsBaseUrl: ''\n },\n verbose: config.verbose || false,\n disabled: config.disabled || false\n },\n utils: apiCheckUtil\n };\n\n each(additionalProperties, (wrapper, name) => apiCheck[name] = wrapper);\n\n const disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n each(checkers.getCheckers(disabled), (checker, name) => apiCheck[name] = checker);\n each(extraCheckers, (checker, name) => apiCheck[name] = checker);\n\n return apiCheck;\n\n\n /**\n * This is the instance function. Other things are attached to this see additional properties above.\n * @param api {Array}\n * @param args {arguments}\n * @param output {Object}\n * @returns {Object} - if this has a failed = true property, then it failed\n */\n function apiCheck(api, args, output) {\n /* jshint maxcomplexity:8 */\n if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n return {\n apiTypes: {}, argTypes: {},\n passed: true, message: '',\n failed: false\n }; // empty version of what is normally returned\n }\n checkApiCheckApi(arguments);\n if (!Array.isArray(api)) {\n api = [api];\n args = [args];\n } else {\n // turn arguments into an array\n args = Array.prototype.slice.call(args);\n }\n let messages = checkEnoughArgs(api, args);\n if (!messages.length) {\n // this is where we actually go perform the checks.\n messages = checkApiWithArgs(api, args);\n }\n\n let returnObject = getTypes(api, args);\n if (messages.length) {\n returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n returnObject.failed = true;\n returnObject.passed = false;\n } else {\n returnObject.message = '';\n returnObject.failed = false;\n returnObject.passed = true;\n }\n return returnObject;\n }\n\n /**\n * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n * @param checkApiArgs\n */\n function checkApiCheckApi(checkApiArgs) {\n const api = checkApiArgs[0];\n const args = checkApiArgs[1];\n var isArrayOrArgs = Array.isArray(args) || (args && typeof args === 'object' && typeof args.length === 'number');\n\n if (Array.isArray(api) && !isArrayOrArgs) {\n throw new Error(getErrorMessage(api, [args],\n ['If an array is provided for the api, an array must be provided for the args as well.'],\n {prefix: 'apiCheck'}\n ));\n }\n // dog fooding here\n const errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n if (errors.length) {\n const message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n prefix: 'apiCheck'\n });\n apiCheck.handleErrorMessage(message, true);\n }\n }\n\n\n function getApiCheck(shouldThrow) {\n return function apiCheckWrapper(api, args, output) {\n let result = apiCheck(api, args, output);\n apiCheck.handleErrorMessage(result.message, shouldThrow);\n return result; // wont get here if an error is thrown\n };\n }\n\n function handleErrorMessage(message, shouldThrow) {\n if (shouldThrow && message) {\n throw new Error(message);\n } else if (message) {\n console.warn(message);\n }\n }\n\n function getErrorMessage(api, args, messages = [], output = {}) {\n let gOut = apiCheck.config.output || {};\n let prefix = getPrefix();\n let suffix = getSuffix();\n let url = getUrl();\n let message = `apiCheck failed! ${messages.join(', ')}`;\n var passedAndShouldHavePassed = '\\n\\n' + buildMessageFromApiAndArgs(api, args);\n return `${prefix} ${message} ${suffix} ${url || ''}${passedAndShouldHavePassed}`.trim();\n\n function getPrefix() {\n let prefix = output.onlyPrefix;\n if (!prefix) {\n prefix = `${gOut.prefix || ''} ${output.prefix || ''}`.trim();\n }\n return prefix;\n }\n\n function getSuffix() {\n let suffix = output.onlySuffix;\n if (!suffix) {\n suffix = `${output.suffix || ''} ${gOut.suffix || ''}`.trim();\n }\n return suffix;\n }\n\n function getUrl() {\n let url = output.url;\n if (!url) {\n url = gOut.docsBaseUrl && output.urlSuffix && `${gOut.docsBaseUrl}${output.urlSuffix}`.trim();\n }\n return url;\n }\n }\n\n function buildMessageFromApiAndArgs(api, args) {\n let {apiTypes, argTypes} = getTypes(api, args);\n let copy = Array.prototype.slice.call(args || []);\n let replacedItems = [];\n replaceFunctionWithName(copy);\n const passedArgs = getObjectString(copy);\n argTypes = getObjectString(argTypes);\n apiTypes = getObjectString(apiTypes);\n\n return generateMessage();\n\n\n // functions\n\n function replaceFunctionWithName(obj) {\n each(obj, (val, name) => {\n /* jshint maxcomplexity:6 */\n if (replacedItems.indexOf(val) === -1) { // avoid recursive problems\n replacedItems.push(val);\n if (typeof val === 'object') {\n replaceFunctionWithName(obj);\n } else if (typeof val === 'function') {\n obj[name] = val.displayName || val.name || 'anonymous function';\n }\n }\n });\n }\n\n function getObjectString(types) {\n if (!types || !types.length) {\n return 'nothing';\n } else if (types && types.length === 1) {\n types = types[0];\n }\n return stringify(types, null, 2);\n }\n\n function generateMessage() {\n const n = '\\n';\n let useS = true;\n if (args && args.length === 1) {\n if (typeof args[0] === 'object') {\n useS = !!Object.keys(args[0]).length;\n } else {\n useS = false;\n }\n }\n const types = `type${useS ? 's' : ''}`;\n const newLine = n + n;\n return `You passed:${n}${passedArgs}${newLine}` +\n `With the ${types}:${n}${argTypes}${newLine}` +\n `The API calls for:${n}${apiTypes}`;\n }\n }\n\n function getTypes(api, args) {\n api = arrayify(api);\n args = arrayify(args);\n let apiTypes = api.map((checker, index) => {\n const specified = module.exports.globalConfig.hasOwnProperty('verbose');\n return getCheckerDisplay(checker, {\n terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n obj: args[index],\n addHelpers: true\n });\n });\n let argTypes = args.map((arg) => getArgDisplay(arg, []));\n return {argTypes: argTypes, apiTypes};\n }\n\n}\n\n\n// STATELESS FUNCTIONS\n\n/**\n * This is where the magic happens for actually checking the arguments with the api.\n * @param api {Array} - checkers\n * @param args {Array} - and arguments object\n * @returns {Array}\n */\nfunction checkApiWithArgs(api, args) {\n /* jshint maxcomplexity:7 */\n let messages = [];\n let failed = false;\n let checkerIndex = 0;\n let argIndex = 0;\n let arg, checker, res, lastChecker, argName, argFailed, skipPreviousChecker;\n /* jshint -W084 */\n while ((checker = api[checkerIndex++]) && (argIndex < args.length)) {\n arg = args[argIndex++];\n argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : '');\n res = checker(arg, 'value', argName);\n argFailed = isError(res);\n lastChecker = checkerIndex >= api.length;\n skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n if ((argFailed && lastChecker) || (argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker)) {\n failed = true;\n messages.push(getCheckerErrorMessage(res, checker, arg));\n } else if (argFailed && checker.isOptional) {\n argIndex--;\n } else {\n messages.push(`${t(argName)} passed`);\n }\n }\n return failed ? messages : [];\n}\n\n\ncheckerTypeType.type = 'function with __apiCheckData property and `${function.type}` property';\nfunction checkerTypeType(checkerType, name, location) {\n const apiCheckDataChecker = checkers.shape({\n type: checkers.string,\n optional: checkers.bool\n });\n const asFunc = checkers.func.withProperties({__apiCheckData: apiCheckDataChecker});\n const asShape = checkers.shape({__apiCheckData: apiCheckDataChecker});\n const wrongShape = checkers.oneOfType([\n asFunc, asShape\n ])(checkerType, name, location);\n if (isError(wrongShape)) {\n return wrongShape;\n }\n if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n return getError(name, location, checkerTypeType.type);\n }\n}\n\nfunction getCheckerErrorMessage(res, checker, val) {\n let checkerHelp = getCheckerHelp(checker, val);\n checkerHelp = checkerHelp ? ' - ' + checkerHelp : '';\n return res.message + checkerHelp;\n}\n\nfunction getCheckerHelp({help}, val) {\n if (!help) {\n return '';\n }\n if (typeof help === 'function') {\n help = help(val);\n }\n return help;\n}\n\n\nfunction checkEnoughArgs(api, args) {\n let requiredArgs = api.filter(a => !a.isOptional);\n if (args.length < requiredArgs.length) {\n return [\n 'Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`'\n ];\n } else {\n return [];\n }\n}\n\nfunction getArgDisplay(arg, gottenArgs) {\n /* jshint maxcomplexity:7 */\n const cName = arg && arg.constructor && arg.constructor.name;\n const type = typeOf(arg);\n if (type === 'function') {\n if (hasKeys()) {\n let properties = stringify(getDisplayIfNotGotten());\n return cName + ' (with properties: ' + properties + ')';\n }\n return cName;\n }\n\n if (arg === null) {\n return 'null';\n }\n\n if (type !== 'array' && type !== 'object') {\n return type;\n }\n\n if (hasKeys()) {\n return getDisplayIfNotGotten();\n }\n\n return cName;\n\n // utility functions\n function hasKeys() {\n return arg && Object.keys(arg).length;\n }\n\n function getDisplayIfNotGotten() {\n if (gottenArgs.indexOf(arg) !== -1) {\n return '[Circular]';\n }\n gottenArgs.push(arg);\n return getDisplay(arg, gottenArgs);\n }\n}\n\nfunction getDisplay(obj, gottenArgs) {\n var argDisplay = {};\n each(obj, (v, k) => argDisplay[k] = getArgDisplay(v, gottenArgs));\n return argDisplay;\n}\n\nfunction getApiCheckApis() {\n const os = checkers.string.optional;\n\n const checkerFnChecker = checkers.func.withProperties({\n type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n displayName: checkers.string.optional,\n shortType: checkers.string.optional,\n notOptional: checkers.bool.optional,\n notRequired: checkers.bool.optional\n });\n\n const getApiCheckInstanceCheckers = [\n checkers.shape({\n output: checkers.shape({\n prefix: checkers.string.optional,\n suffix: checkers.string.optional,\n docsBaseUrl: checkers.string.optional\n }).strict.optional,\n verbose: checkers.bool.optional,\n disabled: checkers.bool.optional\n }).strict.optional,\n checkers.objectOf(checkerFnChecker).optional\n ];\n\n const checkApiCheckApi = [\n checkers.typeOrArrayOf(checkerFnChecker),\n checkers.any.optional,\n checkers.shape({\n prefix: os, suffix: os, urlSuffix: os, // appended case\n onlyPrefix: os, onlySuffix: os, url: os // override case\n }).strict.optional\n ];\n\n return {\n checkerFnChecker,\n getApiCheckInstanceCheckers,\n checkApiCheckApi\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./apiCheck.js\n **/","const stringify = require('json-stringify-safe');\nconst {\n typeOf, each, copy, getCheckerDisplay, isError,\n arrayify, list, getError, nAtL, t, checkerHelpers,\n undef\n } = require('./apiCheckUtil');\nconst {setupChecker} = checkerHelpers;\n\nlet checkers = module.exports = getCheckers();\nmodule.exports.getCheckers = getCheckers;\n\nfunction getCheckers(disabled) {\n return {\n array: typeOfCheckGetter('Array'),\n bool: typeOfCheckGetter('Boolean'),\n number: typeOfCheckGetter('Number'),\n string: typeOfCheckGetter('String'),\n func: funcCheckGetter(),\n object: objectCheckGetter(),\n\n emptyObject: emptyObjectCheckGetter(),\n\n instanceOf: instanceCheckGetter,\n oneOf: oneOfCheckGetter,\n oneOfType: oneOfTypeCheckGetter,\n\n arrayOf: arrayOfCheckGetter,\n objectOf: objectOfCheckGetter,\n typeOrArrayOf: typeOrArrayOfCheckGetter,\n\n range: rangeCheckGetter,\n\n shape: getShapeCheckGetter(),\n args: argumentsCheckerGetter(),\n\n any: anyCheckGetter(),\n null: nullCheckGetter()\n\n };\n\n function typeOfCheckGetter(type) {\n const lType = type.toLowerCase();\n return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n if (typeOf(val) !== lType) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function funcCheckGetter() {\n const type = 'Function';\n let functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n if (typeOf(val) !== 'function') {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n\n functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n const apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties');\n if (isError(apiError)) {\n throw apiError;\n }\n let shapeChecker = checkers.shape(properties, true);\n shapeChecker.type.__apiCheckData.type = 'func.withProperties';\n\n return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n const notFunction = checkers.func(val, name, location);\n if (isError(notFunction)) {\n return notFunction;\n }\n return shapeChecker(val, name, location);\n }, {type: shapeChecker.type, shortType: 'func.withProperties'}, disabled);\n };\n return functionChecker;\n }\n\n function objectCheckGetter() {\n const type = 'Object';\n const nullType = 'Object (null ok)';\n let objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n if (typeOf(val) !== 'object') {\n return getError(name, location, nullType);\n }\n }, {type: nullType}, disabled);\n\n let objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n if (val === null || isError(objectNullOkChecker(val, name, location))) {\n return getError(name, location, objectChecker.type);\n }\n }, {type, nullOk: objectNullOkChecker}, disabled);\n\n return objectChecker;\n }\n\n\n function instanceCheckGetter(classToCheck) {\n return setupChecker(function instanceCheckerDefinition(val, name, location) {\n if (!(val instanceof classToCheck)) {\n return getError(name, location, classToCheck.name);\n }\n }, {type: classToCheck.name}, disabled);\n }\n\n function oneOfCheckGetter(enums) {\n const type = {\n __apiCheckData: {optional: false, type: 'enum'},\n enum: enums\n };\n const shortType = `oneOf[${enums.map(enm => stringify(enm)).join(', ')}]`;\n return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n if (!enums.some(enm => enm === val)) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function oneOfTypeCheckGetter(checkers) {\n const checkersDisplay = checkers.map((checker) => getCheckerDisplay(checker, {short: true}));\n const shortType = `oneOfType[${checkersDisplay.join(', ')}]`;\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return checkers.map((checker) => getCheckerDisplay(checker, options));\n }\n type.__apiCheckData = {optional: false, type: 'oneOfType'};\n return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n if (!checkers.some(checker => !isError(checker(val, name, location)))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function arrayOfCheckGetter(checker) {\n const shortCheckerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `arrayOf[${shortCheckerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n type.__apiCheckData = {optional: false, type: 'arrayOf'};\n\n return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n if (isError(checkers.array(val)) || !val.every((item) => !isError(checker(item)))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function objectOfCheckGetter(checker) {\n const checkerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `objectOf[${checkerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n type.__apiCheckData = {optional: false, type: 'objectOf'};\n\n return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n const notObject = checkers.object(val, name, location);\n if (isError(notObject)) {\n return notObject;\n }\n const allTypesSuccess = each(val, (item, key) => {\n if (isError(checker(item, key, name))) {\n return false;\n }\n });\n if (!allTypesSuccess) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function typeOrArrayOfCheckGetter(checker) {\n const checkerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `typeOrArrayOf[${checkerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n\n type.__apiCheckData = {optional: false, type: 'typeOrArrayOf'};\n return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function getShapeCheckGetter() {\n function shapeCheckGetter(shape, nonObject) {\n let shapeTypes = {};\n each(shape, (checker, prop) => {\n shapeTypes[prop] = getCheckerDisplay(checker);\n });\n function type(options = {}) {\n let ret = {};\n const {terse, obj, addHelpers} = options;\n const parentRequired = options.required;\n each(shape, (checker, prop) => {\n /* jshint maxcomplexity:6 */\n const specified = obj && obj.hasOwnProperty(prop);\n const required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n if (!terse || (specified || !checker.isOptional)) {\n ret[prop] = getCheckerDisplay(checker, {terse, obj: obj && obj[prop], required, addHelpers});\n }\n if (addHelpers) {\n modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n }\n });\n return ret;\n\n function modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required) {\n if (!specified && required && !checker.isOptional) {\n let item = 'ITEM';\n if (checker.type && checker.type.__apiCheckData) {\n item = checker.type.__apiCheckData.type.toUpperCase();\n }\n addHelper('missing', `MISSING THIS ${item}`, ' <-- YOU ARE MISSING THIS');\n } else if (specified) {\n let error = checker(obj[prop], prop, null, obj);\n if (isError(error)) {\n addHelper('error', `THIS IS THE PROBLEM: ${error.message}`, ` <-- THIS IS THE PROBLEM: ${error.message}`);\n }\n }\n\n function addHelper(property, objectMessage, stringMessage) {\n if (typeof ret[prop] === 'string') {\n ret[prop] += stringMessage;\n } else {\n ret[prop].__apiCheckData[property] = objectMessage;\n }\n }\n }\n }\n\n type.__apiCheckData = {strict: false, optional: false, type: 'shape'};\n let shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n /* jshint maxcomplexity:6 */\n let isObject = !nonObject && checkers.object(val, name, location);\n if (isError(isObject)) {\n return isObject;\n }\n let shapePropError;\n location = location ? location + (name ? '/' : '') : '';\n name = name || '';\n each(shape, (checker, prop) => {\n if (val.hasOwnProperty(prop) || !checker.isOptional) {\n shapePropError = checker(val[prop], prop, `${location}${name}`, val);\n return !isError(shapePropError);\n }\n });\n if (isError(shapePropError)) {\n return shapePropError;\n }\n }, {type, shortType: 'shape'}, disabled);\n\n function strictType() {\n return type(...arguments);\n }\n\n strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n strictType.__apiCheckData.strict = true;\n shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n const shapeError = shapeChecker(val, name, location);\n if (isError(shapeError)) {\n return shapeError;\n }\n const allowedProperties = Object.keys(shape);\n const extraProps = Object.keys(val).filter(prop => allowedProperties.indexOf(prop) === -1);\n if (extraProps.length) {\n return new Error(\n `${nAtL(name, location)} cannot have extra properties: ${t(extraProps.join('`, `'))}.` +\n `It is limited to ${t(allowedProperties.join('`, `'))}`\n );\n }\n }, {type: strictType, shortType: 'strict shape'}, disabled);\n\n return shapeChecker;\n }\n\n shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n otherProps = [otherProps];\n }\n let description;\n if (otherProps.length === 1) {\n description = `specified only if ${otherProps[0]} is not specified`;\n } else {\n description = `specified only if none of the following are specified: [${list(otherProps, ', ', 'and ')}]`;\n }\n const shortType = `ifNot[${otherProps.join(', ')}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n let propExists = obj && obj.hasOwnProperty(propName);\n let otherPropsExist = otherProps.some(otherProp => obj && obj.hasOwnProperty(otherProp));\n if (propExists === otherPropsExist) {\n return getError(propName, location, type);\n } else if (propExists) {\n return propChecker(prop, propName, location, obj);\n }\n }, {notRequired: true, type, shortType}, disabled);\n };\n\n shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n otherProps = arrayify(otherProps);\n let description;\n if (otherProps.length === 1) {\n description = `specified only if ${otherProps[0]} is also specified`;\n } else {\n description = `specified only if all of the following are specified: [${list(otherProps, ', ', 'and ')}]`;\n }\n const shortType = `onlyIf[${otherProps.join(', ')}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n const othersPresent = otherProps.every(prop => obj.hasOwnProperty(prop));\n if (!othersPresent) {\n return getError(propName, location, type);\n } else {\n return propChecker(prop, propName, location, obj);\n }\n }, {type, shortType}, disabled);\n };\n\n shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n otherProps = [otherProps];\n }\n return getRequiredIfNotChecker(false, otherProps, propChecker);\n };\n\n shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n throw new Error('requiredIfNot.all must be passed an array');\n }\n return getRequiredIfNotChecker(true, otherProps, propChecker);\n };\n\n function getRequiredIfNotChecker(all, otherProps, propChecker) {\n const props = t(otherProps.join(', '));\n const ifProps = `if ${all ? 'all of' : 'at least one of'}`;\n const description = `specified ${ifProps} these are not specified: ${props} (otherwise it's optional)`;\n const shortType = `requiredIfNot${all ? '.all' : ''}[${otherProps.join(', ')}}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n const propExists = obj && obj.hasOwnProperty(propName);\n const iteration = all ? 'every' : 'some';\n const otherPropsExist = otherProps[iteration](function (otherProp) {\n return obj && obj.hasOwnProperty(otherProp);\n });\n if (!otherPropsExist && !propExists) {\n return getError(propName, location, type);\n } else if (propExists) {\n return propChecker(prop, propName, location, obj);\n }\n }, {type, notRequired: true}, disabled);\n }\n\n return shapeCheckGetter;\n\n function getTypeForShapeChild(propChecker, description, shortType) {\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(propChecker);\n }\n type.__apiCheckData = {optional: false, type: 'ifNot', description};\n return type;\n }\n }\n\n function argumentsCheckerGetter() {\n const type = 'function arguments';\n return setupChecker(function argsCheckerDefinition(val, name, location) {\n if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function anyCheckGetter() {\n return setupChecker(function anyCheckerDefinition() {\n // don't do anything\n }, {type: 'any'}, disabled);\n }\n\n function nullCheckGetter() {\n const type = 'null';\n return setupChecker(function nullChecker(val, name, location) {\n if (val !== null) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function rangeCheckGetter(min, max) {\n const type = `Range (${min} - ${max})`;\n return setupChecker(function rangeChecker(val, name, location) {\n if (typeof val !== 'number' || val < min || val > max) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function emptyObjectCheckGetter() {\n const type = 'empty object';\n return setupChecker(function emptyObjectChecker(val, name, location) {\n if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/jshint-loader!./checkers.js\n **/"],"sourceRoot":"","file":"api-check.min.js"} \ No newline at end of file +{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///dist/api-check.min.js","webpack:///webpack/bootstrap 0063d8845a3f72305aa5","webpack:///./index.js","webpack:///../~/json-stringify-safe/stringify.js","webpack:///./api-check-util.js","webpack:///./api-check.js","webpack:///./checkers.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_interopRequireDefault","obj","__esModule","default","Object","defineProperty","value","_apiCheck","_apiCheck2","getSerialize","fn","decycle","seen","keys","key","getPath","ret","indexOf","push","index","path","unshift","join","stringify","spaces","JSON","_defineProperty","enumerable","configurable","writable","copy","type","typeOf","daCopy","undefined","each","val","Array","isArray","RegExp","getCheckerDisplay","checker","options","display","short","shortType","getCheckerType","displayName","name","_ref","__apiCheckData","typeTypes","arrayify","iterator","context","eachArry","eachObj","hasOwn","prototype","hasOwnProperty","length","i","isError","Error","list","arry","finalJoin","slice","last","pop","getError","location","checkerType","stringType","nAtL","t","tName","tLocation","thing","undef","setupChecker","properties","disabled","getNoop","isNoop","prop","notRequired","getRequiredVersion","notNullable","addNullable","notOptional","addOptional","requiredChecker","isOptional","copyProps","originalChecker","optionalCheck","optional","fixType","nullableCheck","isNullable","nullable","checkerCopy","apply","arguments","src","dest","noop","checkerHelpers","getApiCheckInstance","apiCheck","api","args","output","config","globalConfig","apiTypes","argTypes","passed","message","failed","checkApiCheckApi","messages","checkEnoughArgs","checkApiWithArgs","returnObject","getTypes","getErrorMessage","checkApiArgs","isArrayOrArgs","prefix","errors","apiCheckApis","handleErrorMessage","getApiCheck","shouldThrow","result","console","warn","getPrefix","onlyPrefix","gOut","trim","getSuffix","s","onlySuffix","suffix","getUrl","u","url","docsBaseUrl","urlSuffix","passedAndShouldHavePassed","buildMessageFromApiAndArgs","replaceFunctionWithName","replacedItems","getObjectString","types","generateMessage","n","useS","newLine","passedArgs","_getTypes","map","specified","terse","verbose","addHelpers","arg","getArgDisplay","extraCheckers","apiCheckApiCheck","getApiCheckInstanceCheckers","additionalProperties","throw","utils","apiCheckUtil","wrapper","checkers","getCheckers","checkerIndex","argIndex","res","lastChecker","argName","argFailed","skipPreviousChecker","getCheckerErrorMessage","checkerTypeType","apiCheckDataChecker","shape","string","bool","asFunc","func","withProperties","asShape","wrongShape","oneOfType","checkerHelp","getCheckerHelp","help","requiredArgs","filter","a","gottenArgs","hasKeys","getDisplayIfNotGotten","getDisplay","cName","constructor","argDisplay","v","k","getApiCheckApis","os","checkerFnChecker","strict","objectOf","typeOrArrayOf","any","VERSION","internalChecker","typeOfCheckGetter","lType","toLowerCase","funcCheckGetter","functionChecker","apiError","shapeChecker","notFunction","objectCheckGetter","nullType","objectNullOkChecker","objectChecker","nullOk","instanceCheckGetter","classToCheck","oneOfCheckGetter","enums","enum","enm","some","oneOfTypeCheckGetter","typeCheckers","checkersDisplay","arrayOfCheckGetter","shortCheckerDisplay","array","every","item","objectOfCheckGetter","checkerDisplay","notObject","object","allTypesSuccess","typeOrArrayOfCheckGetter","arrayOf","getShapeCheckGetter","shapeCheckGetter","nonObject","modifyTypeDisplayToHelpOut","theRet","required","addHelper","property","objectMessage","stringMessage","error","toUpperCase","parentRequired","strictType","shapeTypes","isObject","shapePropError","shapeError","allowedProperties","extraProps","getRequiredIfNotChecker","all","otherProps","propChecker","props","ifProps","description","getTypeForShapeChild","propName","propExists","iteration","otherPropsExist","otherProp","ifNot","onlyIf","othersPresent","requiredIfNot","argumentsCheckerGetter","number","anyCheckGetter","nullCheckGetter","rangeCheckGetter","min","max","lessThanCheckGetter","greaterThanCheckGetter","emptyObjectCheckGetter","emptyObject","instanceOf","oneOf","range","lessThan","greaterThan","null","_require"],"mappings":"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","file":"dist/api-check.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn \n\n\n/** WEBPACK FOOTER **\n ** webpack/universalModuleDefinition\n **/","//! api-check version 7.5.5 built with ♥ by Kent C. Dodds (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _apiCheck = __webpack_require__(3);\n\t\n\tvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\n\texports['default'] = _apiCheck2['default'];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tmodule.exports = stringify;\n\t\n\tfunction getSerialize (fn, decycle) {\n\t var seen = [], keys = [];\n\t decycle = decycle || function(key, value) {\n\t return '[Circular ' + getPath(value, seen, keys) + ']'\n\t };\n\t return function(key, value) {\n\t var ret = value;\n\t if (typeof value === 'object' && value) {\n\t if (seen.indexOf(value) !== -1)\n\t ret = decycle(key, value);\n\t else {\n\t seen.push(value);\n\t keys.push(key);\n\t }\n\t }\n\t if (fn) ret = fn(key, ret);\n\t return ret;\n\t }\n\t}\n\t\n\tfunction getPath (value, seen, keys) {\n\t var index = seen.indexOf(value);\n\t var path = [ keys[index] ];\n\t for (index--; index >= 0; index--) {\n\t if (seen[index][ path[0] ] === value) {\n\t value = seen[index];\n\t path.unshift(keys[index]);\n\t }\n\t }\n\t return '~' + path.join('.');\n\t}\n\t\n\tfunction stringify(obj, fn, spaces, decycle) {\n\t return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n\t}\n\t\n\tstringify.getSerialize = getSerialize;\n\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\t\n\tvar stringify = __webpack_require__(1);\n\tvar checkerHelpers = {\n\t addOptional: addOptional, getRequiredVersion: getRequiredVersion, setupChecker: setupChecker, addNullable: addNullable\n\t};\n\t\n\tmodule.exports = {\n\t each: each, copy: copy, typeOf: typeOf, arrayify: arrayify, getCheckerDisplay: getCheckerDisplay,\n\t isError: isError, list: list, getError: getError, nAtL: nAtL, t: t, undef: undef, checkerHelpers: checkerHelpers,\n\t noop: noop\n\t};\n\t\n\tfunction copy(obj) {\n\t var type = typeOf(obj);\n\t var daCopy = undefined;\n\t if (type === 'array') {\n\t daCopy = [];\n\t } else if (type === 'object') {\n\t daCopy = {};\n\t } else {\n\t return obj;\n\t }\n\t each(obj, function (val, key) {\n\t daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n\t });\n\t return daCopy;\n\t}\n\t\n\tfunction typeOf(obj) {\n\t if (Array.isArray(obj)) {\n\t return 'array';\n\t } else if (obj instanceof RegExp) {\n\t return 'object';\n\t } else {\n\t return typeof obj;\n\t }\n\t}\n\t\n\tfunction getCheckerDisplay(checker, options) {\n\t /* eslint complexity:[2, 7] */\n\t var display = undefined;\n\t var short = options && options.short;\n\t if (short && checker.shortType) {\n\t display = checker.shortType;\n\t } else if (!short && typeof checker.type === 'object' || checker.type === 'function') {\n\t display = getCheckerType(checker, options);\n\t } else {\n\t display = getCheckerType(checker, options) || checker.displayName || checker.name;\n\t }\n\t return display;\n\t}\n\t\n\tfunction getCheckerType(_ref, options) {\n\t var type = _ref.type;\n\t\n\t if (typeof type === 'function') {\n\t var __apiCheckData = type.__apiCheckData;\n\t var typeTypes = type(options);\n\t type = _defineProperty({\n\t __apiCheckData: __apiCheckData\n\t }, __apiCheckData.type, typeTypes);\n\t }\n\t return type;\n\t}\n\t\n\tfunction arrayify(obj) {\n\t if (!obj) {\n\t return [];\n\t } else if (Array.isArray(obj)) {\n\t return obj;\n\t } else {\n\t return [obj];\n\t }\n\t}\n\t\n\tfunction each(obj, iterator, context) {\n\t if (Array.isArray(obj)) {\n\t return eachArry(obj, iterator, context);\n\t } else {\n\t return eachObj(obj, iterator, context);\n\t }\n\t}\n\t\n\tfunction eachObj(obj, iterator, context) {\n\t var ret = undefined;\n\t var hasOwn = Object.prototype.hasOwnProperty;\n\t /* eslint prefer-const:0 */ // some weird eslint bug?\n\t for (var key in obj) {\n\t if (hasOwn.call(obj, key)) {\n\t ret = iterator.call(context, obj[key], key, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t }\n\t return true;\n\t}\n\t\n\tfunction eachArry(obj, iterator, context) {\n\t var ret = undefined;\n\t var length = obj.length;\n\t for (var i = 0; i < length; i++) {\n\t ret = iterator.call(context, obj[i], i, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t return true;\n\t}\n\t\n\tfunction isError(obj) {\n\t return obj instanceof Error;\n\t}\n\t\n\tfunction list(arry, join, finalJoin) {\n\t arry = arrayify(arry);\n\t var copy = arry.slice();\n\t var last = copy.pop();\n\t if (copy.length === 1) {\n\t join = ' ';\n\t }\n\t return copy.join(join) + ('' + (copy.length ? join + finalJoin : '') + last);\n\t}\n\t\n\tfunction getError(name, location, checkerType) {\n\t if (typeof checkerType === 'function') {\n\t checkerType = checkerType({ short: true });\n\t }\n\t var stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType);\n\t return new Error(nAtL(name, location) + ' must be ' + t(stringType));\n\t}\n\t\n\tfunction nAtL(name, location) {\n\t var tName = t(name || 'value');\n\t var tLocation = !location ? '' : ' at ' + t(location);\n\t return '' + tName + tLocation;\n\t}\n\t\n\tfunction t(thing) {\n\t return '`' + thing + '`';\n\t}\n\t\n\tfunction undef(thing) {\n\t return typeof thing === 'undefined';\n\t}\n\t\n\t/**\n\t * This will set up the checker with all of the defaults that most checkers want like required by default and an\n\t * optional version\n\t *\n\t * @param {Function} checker - the checker to setup with properties\n\t * @param {Object} properties - properties to add to the checker\n\t * @param {boolean} disabled - when set to true, this will set the checker to a no-op function\n\t * @returns {Function} checker - the setup checker\n\t */\n\tfunction setupChecker(checker, properties, disabled) {\n\t /* eslint complexity:[2, 9] */\n\t if (disabled) {\n\t // swap out the checker for its own copy of noop\n\t checker = getNoop();\n\t checker.isNoop = true;\n\t }\n\t\n\t if (typeof checker.type === 'string') {\n\t checker.shortType = checker.type;\n\t }\n\t\n\t // assign all properties given\n\t each(properties, function (prop, name) {\n\t return checker[name] = prop;\n\t });\n\t\n\t if (!checker.displayName) {\n\t checker.displayName = 'apiCheck ' + t(checker.shortType || checker.type || checker.name) + ' type checker';\n\t }\n\t\n\t if (!checker.notRequired) {\n\t checker = getRequiredVersion(checker, disabled);\n\t }\n\t\n\t if (!checker.notNullable) {\n\t addNullable(checker, disabled);\n\t }\n\t\n\t if (!checker.notOptional) {\n\t addOptional(checker, disabled);\n\t }\n\t\n\t return checker;\n\t}\n\t\n\tfunction getRequiredVersion(checker, disabled) {\n\t var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n\t if (undef(val) && !checker.isOptional) {\n\t var tLocation = location ? ' in ' + t(location) : '';\n\t var type = getCheckerDisplay(checker, { short: true });\n\t var stringType = typeof type !== 'object' ? type : stringify(type);\n\t return new Error('Required ' + t(name) + ' not specified' + tLocation + '. Must be ' + t(stringType));\n\t } else {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t copyProps(checker, requiredChecker);\n\t requiredChecker.originalChecker = checker;\n\t return requiredChecker;\n\t}\n\t\n\tfunction addOptional(checker, disabled) {\n\t var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n\t if (!undef(val)) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, optionalCheck);\n\t\n\t optionalCheck.isOptional = true;\n\t optionalCheck.displayName = checker.displayName + ' (optional)';\n\t optionalCheck.originalChecker = checker;\n\t\n\t // the magic line that allows you to add .optional to the end of the checkers\n\t checker.optional = optionalCheck;\n\t\n\t fixType(checker, checker.optional);\n\t}\n\t\n\tfunction addNullable(checker, disabled) {\n\t var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n\t if (val !== null) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, nullableCheck);\n\t\n\t nullableCheck.isNullable = true;\n\t nullableCheck.displayName = checker.displayName + ' (nullable)';\n\t nullableCheck.originalChecker = checker;\n\t\n\t // the magic line that allows you to add .nullable to the end of the checkers\n\t checker.nullable = nullableCheck;\n\t\n\t fixType(checker, checker.nullable);\n\t if (!checker.notOptional) {\n\t addOptional(checker.nullable, disabled);\n\t }\n\t}\n\t\n\tfunction fixType(checker, checkerCopy) {\n\t // fix type, because it's not a straight copy...\n\t // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n\t // we also want to add \"(optional)\" to the types with a string\n\t if (typeof checkerCopy.type === 'object') {\n\t checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n\t } else if (typeof checkerCopy.type === 'function') {\n\t checkerCopy.type = function () {\n\t return checker.type.apply(checker, arguments);\n\t };\n\t } else {\n\t checkerCopy.type += ' (optional)';\n\t return;\n\t }\n\t checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n\t checkerCopy.type.__apiCheckData.optional = true;\n\t}\n\t\n\t// UTILS\n\t\n\tfunction copyProps(src, dest) {\n\t each(Object.keys(src), function (key) {\n\t return dest[key] = src[key];\n\t });\n\t}\n\t\n\tfunction noop() {}\n\t\n\tfunction getNoop() {\n\t /* eslint no-shadow:0 */\n\t /* istanbul ignore next */\n\t return function noop() {};\n\t}\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar stringify = __webpack_require__(1);\n\tvar apiCheckUtil = __webpack_require__(2);\n\tvar each = apiCheckUtil.each;\n\tvar isError = apiCheckUtil.isError;\n\tvar t = apiCheckUtil.t;\n\tvar arrayify = apiCheckUtil.arrayify;\n\tvar getCheckerDisplay = apiCheckUtil.getCheckerDisplay;\n\tvar typeOf = apiCheckUtil.typeOf;\n\tvar getError = apiCheckUtil.getError;\n\t\n\tvar checkers = __webpack_require__(4);\n\tvar apiCheckApis = getApiCheckApis();\n\t\n\tmodule.exports = getApiCheckInstance;\n\tmodule.exports.VERSION = (\"7.5.5\");\n\tmodule.exports.utils = apiCheckUtil;\n\tmodule.exports.globalConfig = {\n\t verbose: false,\n\t disabled: false\n\t};\n\t\n\tvar apiCheckApiCheck = getApiCheckInstance({\n\t output: { prefix: 'apiCheck' }\n\t});\n\tmodule.exports.internalChecker = apiCheckApiCheck;\n\t\n\teach(checkers, function (checker, name) {\n\t return module.exports[name] = checker;\n\t});\n\t\n\tfunction getApiCheckInstance() {\n\t var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t var extraCheckers = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\t\n\t /* eslint complexity:[2, 6] */\n\t if (apiCheckApiCheck && arguments.length) {\n\t apiCheckApiCheck['throw'](apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n\t prefix: 'creating an apiCheck instance'\n\t });\n\t }\n\t\n\t var additionalProperties = {\n\t 'throw': getApiCheck(true),\n\t warn: getApiCheck(false),\n\t getErrorMessage: getErrorMessage,\n\t handleErrorMessage: handleErrorMessage,\n\t config: {\n\t output: config.output || {\n\t prefix: '',\n\t suffix: '',\n\t docsBaseUrl: ''\n\t },\n\t verbose: config.verbose || false,\n\t disabled: config.disabled || false\n\t },\n\t utils: apiCheckUtil\n\t };\n\t\n\t each(additionalProperties, function (wrapper, name) {\n\t return apiCheck[name] = wrapper;\n\t });\n\t\n\t var disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n\t each(checkers.getCheckers(disabled), function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t each(extraCheckers, function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t\n\t return apiCheck;\n\t\n\t /**\n\t * This is the instance function. Other things are attached to this see additional properties above.\n\t * @param {Array} api - the checkers to check with\n\t * @param {Array} args - the args to check\n\t * @param {Object} output - output options\n\t * @returns {Object} - if this has a failed = true property, then it failed\n\t */\n\t function apiCheck(api, args, output) {\n\t /* eslint complexity:[2, 8] */\n\t if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n\t return {\n\t apiTypes: {}, argTypes: {},\n\t passed: true, message: '',\n\t failed: false\n\t }; // empty version of what is normally returned\n\t }\n\t checkApiCheckApi(arguments);\n\t if (!Array.isArray(api)) {\n\t api = [api];\n\t args = [args];\n\t } else {\n\t // turn arguments into an array\n\t args = Array.prototype.slice.call(args);\n\t }\n\t var messages = checkEnoughArgs(api, args);\n\t if (!messages.length) {\n\t // this is where we actually go perform the checks.\n\t messages = checkApiWithArgs(api, args);\n\t }\n\t\n\t var returnObject = getTypes(api, args);\n\t returnObject.args = args;\n\t if (messages.length) {\n\t returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n\t returnObject.failed = true;\n\t returnObject.passed = false;\n\t } else {\n\t returnObject.message = '';\n\t returnObject.failed = false;\n\t returnObject.passed = true;\n\t }\n\t return returnObject;\n\t }\n\t\n\t /**\n\t * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n\t * @param {Array} checkApiArgs - args provided to apiCheck function\n\t */\n\t function checkApiCheckApi(checkApiArgs) {\n\t var api = checkApiArgs[0];\n\t var args = checkApiArgs[1];\n\t var isArrayOrArgs = Array.isArray(args) || args && typeof args === 'object' && typeof args.length === 'number';\n\t\n\t if (Array.isArray(api) && !isArrayOrArgs) {\n\t throw new Error(getErrorMessage(api, [args], ['If an array is provided for the api, an array must be provided for the args as well.'], { prefix: 'apiCheck' }));\n\t }\n\t // dog fooding here\n\t var errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n\t if (errors.length) {\n\t var message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n\t prefix: 'apiCheck'\n\t });\n\t apiCheck.handleErrorMessage(message, true);\n\t }\n\t }\n\t\n\t function getApiCheck(shouldThrow) {\n\t return function apiCheckWrapper(api, args, output) {\n\t var result = apiCheck(api, args, output);\n\t apiCheck.handleErrorMessage(result.message, shouldThrow);\n\t return result; // wont get here if an error is thrown\n\t };\n\t }\n\t\n\t function handleErrorMessage(message, shouldThrow) {\n\t if (shouldThrow && message) {\n\t throw new Error(message);\n\t } else if (message) {\n\t /* eslint no-console:0 */\n\t console.warn(message);\n\t }\n\t }\n\t\n\t function getErrorMessage(api, args) {\n\t var messages = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\t var output = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\t\n\t var gOut = apiCheck.config.output || {};\n\t var prefix = getPrefix();\n\t var suffix = getSuffix();\n\t var url = getUrl();\n\t var message = 'apiCheck failed! ' + messages.join(', ');\n\t var passedAndShouldHavePassed = '\\n\\n' + buildMessageFromApiAndArgs(api, args);\n\t return (prefix + ' ' + message + ' ' + suffix + ' ' + (url || '') + passedAndShouldHavePassed).trim();\n\t\n\t function getPrefix() {\n\t var p = output.onlyPrefix;\n\t if (!p) {\n\t p = ((gOut.prefix || '') + ' ' + (output.prefix || '')).trim();\n\t }\n\t return p;\n\t }\n\t\n\t function getSuffix() {\n\t var s = output.onlySuffix;\n\t if (!s) {\n\t s = ((output.suffix || '') + ' ' + (gOut.suffix || '')).trim();\n\t }\n\t return s;\n\t }\n\t\n\t function getUrl() {\n\t var u = output.url;\n\t if (!u) {\n\t u = gOut.docsBaseUrl && output.urlSuffix && ('' + gOut.docsBaseUrl + output.urlSuffix).trim();\n\t }\n\t return u;\n\t }\n\t }\n\t\n\t function buildMessageFromApiAndArgs(api, args) {\n\t var _getTypes = getTypes(api, args);\n\t\n\t var apiTypes = _getTypes.apiTypes;\n\t var argTypes = _getTypes.argTypes;\n\t\n\t var copy = Array.prototype.slice.call(args || []);\n\t var replacedItems = [];\n\t replaceFunctionWithName(copy);\n\t var passedArgs = getObjectString(copy);\n\t argTypes = getObjectString(argTypes);\n\t apiTypes = getObjectString(apiTypes);\n\t\n\t return generateMessage();\n\t\n\t // functions\n\t\n\t function replaceFunctionWithName(obj) {\n\t each(obj, function (val, name) {\n\t /* eslint complexity:[2, 6] */\n\t if (replacedItems.indexOf(val) === -1) {\n\t // avoid recursive problems\n\t replacedItems.push(val);\n\t if (typeof val === 'object') {\n\t replaceFunctionWithName(obj);\n\t } else if (typeof val === 'function') {\n\t obj[name] = val.displayName || val.name || 'anonymous function';\n\t }\n\t }\n\t });\n\t }\n\t\n\t function getObjectString(types) {\n\t if (!types || !types.length) {\n\t return 'nothing';\n\t } else if (types && types.length === 1) {\n\t types = types[0];\n\t }\n\t return stringify(types, null, 2);\n\t }\n\t\n\t function generateMessage() {\n\t var n = '\\n';\n\t var useS = true;\n\t if (args && args.length === 1) {\n\t if (typeof args[0] === 'object' && args[0] !== null) {\n\t useS = !!Object.keys(args[0]).length;\n\t } else {\n\t useS = false;\n\t }\n\t }\n\t var types = 'type' + (useS ? 's' : '');\n\t var newLine = n + n;\n\t return 'You passed:' + n + passedArgs + newLine + ('With the ' + types + ':' + n + argTypes + newLine) + ('The API calls for:' + n + apiTypes);\n\t }\n\t }\n\t\n\t function getTypes(api, args) {\n\t api = arrayify(api);\n\t args = arrayify(args);\n\t var apiTypes = api.map(function (checker, index) {\n\t var specified = module.exports.globalConfig.hasOwnProperty('verbose');\n\t return getCheckerDisplay(checker, {\n\t terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n\t obj: args[index],\n\t addHelpers: true\n\t });\n\t });\n\t var argTypes = args.map(function (arg) {\n\t return getArgDisplay(arg, []);\n\t });\n\t return { argTypes: argTypes, apiTypes: apiTypes };\n\t }\n\t}\n\t\n\t// STATELESS FUNCTIONS\n\t\n\t/**\n\t * This is where the magic happens for actually checking the arguments with the api.\n\t * @param {Array} api - checkers\n\t * @param {Array} args - and arguments object\n\t * @returns {Array} - the error messages\n\t */\n\tfunction checkApiWithArgs(api, args) {\n\t /* eslint complexity:[2, 7] */\n\t var messages = [];\n\t var failed = false;\n\t var checkerIndex = 0;\n\t var argIndex = 0;\n\t var arg = undefined,\n\t checker = undefined,\n\t res = undefined,\n\t lastChecker = undefined,\n\t argName = undefined,\n\t argFailed = undefined,\n\t skipPreviousChecker = undefined;\n\t /* jshint -W084 */\n\t while ((checker = api[checkerIndex++]) && argIndex < args.length) {\n\t arg = args[argIndex++];\n\t argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : '');\n\t res = checker(arg, 'value', argName);\n\t argFailed = isError(res);\n\t lastChecker = checkerIndex >= api.length;\n\t skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n\t if (argFailed && lastChecker || argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker) {\n\t failed = true;\n\t messages.push(getCheckerErrorMessage(res, checker, arg));\n\t } else if (argFailed && checker.isOptional) {\n\t argIndex--;\n\t } else {\n\t messages.push(t(argName) + ' passed');\n\t }\n\t }\n\t return failed ? messages : [];\n\t}\n\t\n\tcheckerTypeType.type = 'function with __apiCheckData property and `${function.type}` property';\n\tfunction checkerTypeType(checkerType, name, location) {\n\t var apiCheckDataChecker = checkers.shape({\n\t type: checkers.string,\n\t optional: checkers.bool\n\t });\n\t var asFunc = checkers.func.withProperties({ __apiCheckData: apiCheckDataChecker });\n\t var asShape = checkers.shape({ __apiCheckData: apiCheckDataChecker });\n\t var wrongShape = checkers.oneOfType([asFunc, asShape])(checkerType, name, location);\n\t if (isError(wrongShape)) {\n\t return wrongShape;\n\t }\n\t if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n\t return getError(name, location, checkerTypeType.type);\n\t }\n\t}\n\t\n\tfunction getCheckerErrorMessage(res, checker, val) {\n\t var checkerHelp = getCheckerHelp(checker, val);\n\t checkerHelp = checkerHelp ? ' - ' + checkerHelp : '';\n\t return res.message + checkerHelp;\n\t}\n\t\n\tfunction getCheckerHelp(_ref, val) {\n\t var help = _ref.help;\n\t\n\t if (!help) {\n\t return '';\n\t }\n\t if (typeof help === 'function') {\n\t help = help(val);\n\t }\n\t return help;\n\t}\n\t\n\tfunction checkEnoughArgs(api, args) {\n\t var requiredArgs = api.filter(function (a) {\n\t return !a.isOptional;\n\t });\n\t if (args.length < requiredArgs.length) {\n\t return ['Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`'];\n\t } else {\n\t return [];\n\t }\n\t}\n\t\n\tfunction getArgDisplay(arg, gottenArgs) {\n\t /* eslint complexity:[2, 7] */\n\t var cName = arg && arg.constructor && arg.constructor.name;\n\t var type = typeOf(arg);\n\t if (type === 'function') {\n\t if (hasKeys()) {\n\t var properties = stringify(getDisplayIfNotGotten());\n\t return cName + ' (with properties: ' + properties + ')';\n\t }\n\t return cName;\n\t }\n\t\n\t if (arg === null) {\n\t return 'null';\n\t }\n\t\n\t if (type !== 'array' && type !== 'object') {\n\t return type;\n\t }\n\t\n\t if (hasKeys()) {\n\t return getDisplayIfNotGotten();\n\t }\n\t\n\t return cName;\n\t\n\t // utility functions\n\t function hasKeys() {\n\t return arg && Object.keys(arg).length;\n\t }\n\t\n\t function getDisplayIfNotGotten() {\n\t if (gottenArgs.indexOf(arg) !== -1) {\n\t return '[Circular]';\n\t }\n\t gottenArgs.push(arg);\n\t return getDisplay(arg, gottenArgs);\n\t }\n\t}\n\t\n\tfunction getDisplay(obj, gottenArgs) {\n\t var argDisplay = {};\n\t each(obj, function (v, k) {\n\t return argDisplay[k] = getArgDisplay(v, gottenArgs);\n\t });\n\t return argDisplay;\n\t}\n\t\n\tfunction getApiCheckApis() {\n\t var os = checkers.string.optional;\n\t\n\t var checkerFnChecker = checkers.func.withProperties({\n\t type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n\t displayName: checkers.string.optional,\n\t shortType: checkers.string.optional,\n\t notOptional: checkers.bool.optional,\n\t notRequired: checkers.bool.optional\n\t });\n\t\n\t var getApiCheckInstanceCheckers = [checkers.shape({\n\t output: checkers.shape({\n\t prefix: checkers.string.optional,\n\t suffix: checkers.string.optional,\n\t docsBaseUrl: checkers.string.optional\n\t }).strict.optional,\n\t verbose: checkers.bool.optional,\n\t disabled: checkers.bool.optional\n\t }).strict.optional, checkers.objectOf(checkerFnChecker).optional];\n\t\n\t var checkApiCheckApi = [checkers.typeOrArrayOf(checkerFnChecker), checkers.any.optional, checkers.shape({\n\t prefix: os, suffix: os, urlSuffix: os, // appended case\n\t onlyPrefix: os, onlySuffix: os, url: os // override case\n\t }).strict.optional];\n\t\n\t return {\n\t checkerFnChecker: checkerFnChecker,\n\t getApiCheckInstanceCheckers: getApiCheckInstanceCheckers,\n\t checkApiCheckApi: checkApiCheckApi\n\t };\n\t}\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar stringify = __webpack_require__(1);\n\t\n\tvar _require = __webpack_require__(2);\n\t\n\tvar typeOf = _require.typeOf;\n\tvar each = _require.each;\n\tvar copy = _require.copy;\n\tvar getCheckerDisplay = _require.getCheckerDisplay;\n\tvar isError = _require.isError;\n\tvar arrayify = _require.arrayify;\n\tvar list = _require.list;\n\tvar getError = _require.getError;\n\tvar nAtL = _require.nAtL;\n\tvar t = _require.t;\n\tvar checkerHelpers = _require.checkerHelpers;\n\tvar undef = _require.undef;\n\tvar setupChecker = checkerHelpers.setupChecker;\n\t\n\tvar checkers = module.exports = getCheckers();\n\tmodule.exports.getCheckers = getCheckers;\n\t\n\tfunction getCheckers(disabled) {\n\t return {\n\t array: typeOfCheckGetter('Array'),\n\t bool: typeOfCheckGetter('Boolean'),\n\t number: typeOfCheckGetter('Number'),\n\t string: typeOfCheckGetter('String'),\n\t func: funcCheckGetter(),\n\t object: objectCheckGetter(),\n\t\n\t emptyObject: emptyObjectCheckGetter(),\n\t\n\t instanceOf: instanceCheckGetter,\n\t oneOf: oneOfCheckGetter,\n\t oneOfType: oneOfTypeCheckGetter,\n\t\n\t arrayOf: arrayOfCheckGetter,\n\t objectOf: objectOfCheckGetter,\n\t typeOrArrayOf: typeOrArrayOfCheckGetter,\n\t\n\t range: rangeCheckGetter,\n\t lessThan: lessThanCheckGetter,\n\t greaterThan: greaterThanCheckGetter,\n\t\n\t shape: getShapeCheckGetter(),\n\t args: argumentsCheckerGetter(),\n\t\n\t any: anyCheckGetter(),\n\t 'null': nullCheckGetter()\n\t\n\t };\n\t\n\t function typeOfCheckGetter(type) {\n\t var lType = type.toLowerCase();\n\t return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== lType) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function funcCheckGetter() {\n\t var type = 'Function';\n\t var functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'function') {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t\n\t functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n\t var apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties');\n\t if (isError(apiError)) {\n\t throw apiError;\n\t }\n\t var shapeChecker = checkers.shape(properties, true);\n\t shapeChecker.type.__apiCheckData.type = 'func.withProperties';\n\t\n\t return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n\t var notFunction = checkers.func(val, name, location);\n\t if (isError(notFunction)) {\n\t return notFunction;\n\t }\n\t return shapeChecker(val, name, location);\n\t }, { type: shapeChecker.type, shortType: 'func.withProperties' }, disabled);\n\t };\n\t return functionChecker;\n\t }\n\t\n\t function objectCheckGetter() {\n\t var type = 'Object';\n\t var nullType = 'Object (null ok)';\n\t var objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'object') {\n\t return getError(name, location, nullType);\n\t }\n\t }, { type: nullType }, disabled);\n\t\n\t var objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n\t if (val === null || isError(objectNullOkChecker(val, name, location))) {\n\t return getError(name, location, objectChecker.type);\n\t }\n\t }, { type: type, nullOk: objectNullOkChecker }, disabled);\n\t\n\t return objectChecker;\n\t }\n\t\n\t function instanceCheckGetter(classToCheck) {\n\t return setupChecker(function instanceCheckerDefinition(val, name, location) {\n\t if (!(val instanceof classToCheck)) {\n\t return getError(name, location, classToCheck.name);\n\t }\n\t }, { type: classToCheck.name }, disabled);\n\t }\n\t\n\t function oneOfCheckGetter(enums) {\n\t var type = {\n\t __apiCheckData: { optional: false, type: 'enum' },\n\t 'enum': enums\n\t };\n\t var shortType = 'oneOf[' + enums.map(function (enm) {\n\t return stringify(enm);\n\t }).join(', ') + ']';\n\t return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n\t if (!enums.some(function (enm) {\n\t return enm === val;\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function oneOfTypeCheckGetter(typeCheckers) {\n\t var checkersDisplay = typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, { short: true });\n\t });\n\t var shortType = 'oneOfType[' + checkersDisplay.join(', ') + ']';\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, options);\n\t });\n\t }\n\t type.__apiCheckData = { optional: false, type: 'oneOfType' };\n\t return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n\t if (!typeCheckers.some(function (checker) {\n\t return !isError(checker(val, name, location));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function arrayOfCheckGetter(checker) {\n\t var shortCheckerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'arrayOf[' + shortCheckerDisplay + ']';\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'arrayOf' };\n\t\n\t return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n\t if (isError(checkers.array(val)) || !val.every(function (item) {\n\t return !isError(checker(item));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function objectOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'objectOf[' + checkerDisplay + ']';\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'objectOf' };\n\t\n\t return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n\t var notObject = checkers.object(val, name, location);\n\t if (isError(notObject)) {\n\t return notObject;\n\t }\n\t var allTypesSuccess = each(val, function (item, key) {\n\t if (isError(checker(item, key, name))) {\n\t return false;\n\t }\n\t });\n\t if (!allTypesSuccess) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function typeOrArrayOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'typeOrArrayOf[' + checkerDisplay + ']';\n\t\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t\n\t type.__apiCheckData = { optional: false, type: 'typeOrArrayOf' };\n\t return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n\t if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\t\n\t function getShapeCheckGetter() {\n\t function shapeCheckGetter(shape, nonObject) {\n\t var shapeTypes = {};\n\t each(shape, function (checker, prop) {\n\t shapeTypes[prop] = getCheckerDisplay(checker);\n\t });\n\t function type() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t\n\t var ret = {};\n\t var terse = options.terse;\n\t var obj = options.obj;\n\t var addHelpers = options.addHelpers;\n\t\n\t var parentRequired = options.required;\n\t each(shape, function (checker, prop) {\n\t /* eslint complexity:[2, 6] */\n\t var specified = obj && obj.hasOwnProperty(prop);\n\t var required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n\t if (!terse || (specified || !checker.isOptional)) {\n\t ret[prop] = getCheckerDisplay(checker, { terse: terse, obj: obj && obj[prop], required: required, addHelpers: addHelpers });\n\t }\n\t if (addHelpers) {\n\t modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n\t }\n\t });\n\t return ret;\n\t\n\t function modifyTypeDisplayToHelpOut(theRet, prop, specified, checker, required) {\n\t if (!specified && required && !checker.isOptional) {\n\t var item = 'ITEM';\n\t if (checker.type && checker.type.__apiCheckData) {\n\t item = checker.type.__apiCheckData.type.toUpperCase();\n\t }\n\t addHelper('missing', 'MISSING THIS ' + item, ' <-- YOU ARE MISSING THIS');\n\t } else if (specified) {\n\t var error = checker(obj[prop], prop, null, obj);\n\t if (isError(error)) {\n\t addHelper('error', 'THIS IS THE PROBLEM: ' + error.message, ' <-- THIS IS THE PROBLEM: ' + error.message);\n\t }\n\t }\n\t\n\t function addHelper(property, objectMessage, stringMessage) {\n\t if (typeof theRet[prop] === 'string') {\n\t theRet[prop] += stringMessage;\n\t } else {\n\t theRet[prop].__apiCheckData[property] = objectMessage;\n\t }\n\t }\n\t }\n\t }\n\t\n\t type.__apiCheckData = { strict: false, optional: false, type: 'shape' };\n\t var shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n\t /* eslint complexity:[2, 6] */\n\t var isObject = !nonObject && checkers.object(val, name, location);\n\t if (isError(isObject)) {\n\t return isObject;\n\t }\n\t var shapePropError = undefined;\n\t location = location ? location + (name ? '/' : '') : '';\n\t name = name || '';\n\t each(shape, function (checker, prop) {\n\t if (val.hasOwnProperty(prop) || !checker.isOptional) {\n\t shapePropError = checker(val[prop], prop, '' + location + name, val);\n\t return !isError(shapePropError);\n\t }\n\t });\n\t if (isError(shapePropError)) {\n\t return shapePropError;\n\t }\n\t }, { type: type, shortType: 'shape' }, disabled);\n\t\n\t function strictType() {\n\t return type.apply(undefined, arguments);\n\t }\n\t\n\t strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n\t strictType.__apiCheckData.strict = true;\n\t shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n\t var shapeError = shapeChecker(val, name, location);\n\t if (isError(shapeError)) {\n\t return shapeError;\n\t }\n\t var allowedProperties = Object.keys(shape);\n\t var extraProps = Object.keys(val).filter(function (prop) {\n\t return allowedProperties.indexOf(prop) === -1;\n\t });\n\t if (extraProps.length) {\n\t return new Error(nAtL(name, location) + ' cannot have extra properties: ' + t(extraProps.join('`, `')) + '.' + ('It is limited to ' + t(allowedProperties.join('`, `'))));\n\t }\n\t }, { type: strictType, shortType: 'strict shape' }, disabled);\n\t\n\t return shapeChecker;\n\t }\n\t\n\t shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is not specified';\n\t } else {\n\t description = 'specified only if none of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'ifNot[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (propExists === otherPropsExist) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { notRequired: true, type: type, shortType: shortType }, disabled);\n\t };\n\t\n\t shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n\t otherProps = arrayify(otherProps);\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is also specified';\n\t } else {\n\t description = 'specified only if all of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'onlyIf[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n\t var othersPresent = otherProps.every(function (property) {\n\t return obj.hasOwnProperty(property);\n\t });\n\t if (!othersPresent) {\n\t return getError(propName, location, type);\n\t } else {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t };\n\t\n\t shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t return getRequiredIfNotChecker(false, otherProps, propChecker);\n\t };\n\t\n\t shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t throw new Error('requiredIfNot.all must be passed an array');\n\t }\n\t return getRequiredIfNotChecker(true, otherProps, propChecker);\n\t };\n\t\n\t function getRequiredIfNotChecker(all, otherProps, propChecker) {\n\t var props = t(otherProps.join(', '));\n\t var ifProps = 'if ' + (all ? 'all of' : 'at least one of');\n\t var description = 'specified ' + ifProps + ' these are not specified: ' + props + ' (otherwise it\\'s optional)';\n\t var shortType = 'requiredIfNot' + (all ? '.all' : '') + '[' + otherProps.join(', ') + '}]';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var iteration = all ? 'every' : 'some';\n\t var otherPropsExist = otherProps[iteration](function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, notRequired: true }, disabled);\n\t }\n\t\n\t return shapeCheckGetter;\n\t\n\t function getTypeForShapeChild(propChecker, description, shortType) {\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(propChecker);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'ifNot', description: description };\n\t return type;\n\t }\n\t }\n\t\n\t function argumentsCheckerGetter() {\n\t var type = 'function arguments';\n\t return setupChecker(function argsCheckerDefinition(val, name, location) {\n\t if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function anyCheckGetter() {\n\t return setupChecker(function anyCheckerDefinition() {\n\t // don't do anything\n\t }, { type: 'any' }, disabled);\n\t }\n\t\n\t function nullCheckGetter() {\n\t var type = 'null';\n\t return setupChecker(function nullChecker(val, name, location) {\n\t if (val !== null) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function rangeCheckGetter(min, max) {\n\t var type = 'Range (' + min + ' - ' + max + ')';\n\t return setupChecker(function rangeChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < min || val > max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function lessThanCheckGetter(min) {\n\t var type = 'lessThan[' + min + ']';\n\t return setupChecker(function lessThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val > min) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function greaterThanCheckGetter(max) {\n\t var type = 'greaterThan[' + max + ']';\n\t return setupChecker(function greaterThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t\n\t function emptyObjectCheckGetter() {\n\t var type = 'empty object';\n\t return setupChecker(function emptyObjectChecker(val, name, location) {\n\t if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t}\n\n/***/ }\n/******/ ])\n});\n;\n\n\n/** WEBPACK FOOTER **\n ** dist/api-check.min.js\n **/"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 0063d8845a3f72305aa5\n **/","import apiCheckFactory from './api-check';\n\nexport default apiCheckFactory;\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./index.js\n **/","module.exports = stringify;\n\nfunction getSerialize (fn, decycle) {\n var seen = [], keys = [];\n decycle = decycle || function(key, value) {\n return '[Circular ' + getPath(value, seen, keys) + ']'\n };\n return function(key, value) {\n var ret = value;\n if (typeof value === 'object' && value) {\n if (seen.indexOf(value) !== -1)\n ret = decycle(key, value);\n else {\n seen.push(value);\n keys.push(key);\n }\n }\n if (fn) ret = fn(key, ret);\n return ret;\n }\n}\n\nfunction getPath (value, seen, keys) {\n var index = seen.indexOf(value);\n var path = [ keys[index] ];\n for (index--; index >= 0; index--) {\n if (seen[index][ path[0] ] === value) {\n value = seen[index];\n path.unshift(keys[index]);\n }\n }\n return '~' + path.join('.');\n}\n\nfunction stringify(obj, fn, spaces, decycle) {\n return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n}\n\nstringify.getSerialize = getSerialize;\n\n\n\n/*****************\n ** WEBPACK FOOTER\n ** ../~/json-stringify-safe/stringify.js\n ** module id = 1\n ** module chunks = 0\n **/","const stringify = require('json-stringify-safe');\nconst checkerHelpers = {\n addOptional, getRequiredVersion, setupChecker, addNullable\n};\n\nmodule.exports = {\n each, copy, typeOf, arrayify, getCheckerDisplay,\n isError, list, getError, nAtL, t, undef, checkerHelpers,\n noop\n};\n\nfunction copy(obj) {\n const type = typeOf(obj);\n let daCopy;\n if (type === 'array') {\n daCopy = [];\n } else if (type === 'object') {\n daCopy = {};\n } else {\n return obj;\n }\n each(obj, (val, key) => {\n daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n });\n return daCopy;\n}\n\n\nfunction typeOf(obj) {\n if (Array.isArray(obj)) {\n return 'array';\n } else if (obj instanceof RegExp) {\n return 'object';\n } else {\n return typeof obj;\n }\n}\n\nfunction getCheckerDisplay(checker, options) {\n /* eslint complexity:[2, 7] */\n let display;\n const short = options && options.short;\n if (short && checker.shortType) {\n display = checker.shortType;\n } else if (!short && typeof checker.type === 'object' || checker.type === 'function') {\n display = getCheckerType(checker, options);\n } else {\n display = getCheckerType(checker, options) || checker.displayName || checker.name;\n }\n return display;\n}\n\nfunction getCheckerType({type}, options) {\n if (typeof type === 'function') {\n const __apiCheckData = type.__apiCheckData;\n const typeTypes = type(options);\n type = {\n __apiCheckData,\n [__apiCheckData.type]: typeTypes\n };\n }\n return type;\n}\n\nfunction arrayify(obj) {\n if (!obj) {\n return [];\n } else if (Array.isArray(obj)) {\n return obj;\n } else {\n return [obj];\n }\n}\n\n\nfunction each(obj, iterator, context) {\n if (Array.isArray(obj)) {\n return eachArry(obj, iterator, context);\n } else {\n return eachObj(obj, iterator, context);\n }\n}\n\nfunction eachObj(obj, iterator, context) {\n let ret;\n const hasOwn = Object.prototype.hasOwnProperty;\n /* eslint prefer-const:0 */ // some weird eslint bug?\n for (let key in obj) {\n if (hasOwn.call(obj, key)) {\n ret = iterator.call(context, obj[key], key, obj);\n if (ret === false) {\n return ret;\n }\n }\n }\n return true;\n}\n\nfunction eachArry(obj, iterator, context) {\n let ret;\n const length = obj.length;\n for (let i = 0; i < length; i++) {\n ret = iterator.call(context, obj[i], i, obj);\n if (ret === false) {\n return ret;\n }\n }\n return true;\n}\n\nfunction isError(obj) {\n return obj instanceof Error;\n}\n\nfunction list(arry, join, finalJoin) {\n arry = arrayify(arry);\n const copy = arry.slice();\n const last = copy.pop();\n if (copy.length === 1) {\n join = ' ';\n }\n return copy.join(join) + `${copy.length ? join + finalJoin : ''}${last}`;\n}\n\n\nfunction getError(name, location, checkerType) {\n if (typeof checkerType === 'function') {\n checkerType = checkerType({short: true});\n }\n const stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType);\n return new Error(`${nAtL(name, location)} must be ${t(stringType)}`);\n}\n\nfunction nAtL(name, location) {\n const tName = t(name || 'value');\n let tLocation = !location ? '' : ' at ' + t(location);\n return `${tName}${tLocation}`;\n}\n\nfunction t(thing) {\n return '`' + thing + '`';\n}\n\nfunction undef(thing) {\n return typeof thing === 'undefined';\n}\n\n\n/**\n * This will set up the checker with all of the defaults that most checkers want like required by default and an\n * optional version\n *\n * @param {Function} checker - the checker to setup with properties\n * @param {Object} properties - properties to add to the checker\n * @param {boolean} disabled - when set to true, this will set the checker to a no-op function\n * @returns {Function} checker - the setup checker\n */\nfunction setupChecker(checker, properties, disabled) {\n /* eslint complexity:[2, 9] */\n if (disabled) { // swap out the checker for its own copy of noop\n checker = getNoop();\n checker.isNoop = true;\n }\n\n if (typeof checker.type === 'string') {\n checker.shortType = checker.type;\n }\n\n // assign all properties given\n each(properties, (prop, name) => checker[name] = prop);\n\n if (!checker.displayName) {\n checker.displayName = `apiCheck ${t(checker.shortType || checker.type || checker.name)} type checker`;\n }\n\n\n if (!checker.notRequired) {\n checker = getRequiredVersion(checker, disabled);\n }\n\n if (!checker.notNullable) {\n addNullable(checker, disabled);\n }\n\n if (!checker.notOptional) {\n addOptional(checker, disabled);\n }\n\n return checker;\n}\n\nfunction getRequiredVersion(checker, disabled) {\n const requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n if (undef(val) && !checker.isOptional) {\n let tLocation = location ? ` in ${t(location)}` : '';\n const type = getCheckerDisplay(checker, {short: true});\n const stringType = typeof type !== 'object' ? type : stringify(type);\n return new Error(`Required ${t(name)} not specified${tLocation}. Must be ${t(stringType)}`);\n } else {\n return checker(val, name, location, obj);\n }\n };\n copyProps(checker, requiredChecker);\n requiredChecker.originalChecker = checker;\n return requiredChecker;\n}\n\nfunction addOptional(checker, disabled) {\n const optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n if (!undef(val)) {\n return checker(val, name, location, obj);\n }\n };\n // inherit all properties on the original checker\n copyProps(checker, optionalCheck);\n\n optionalCheck.isOptional = true;\n optionalCheck.displayName = checker.displayName + ' (optional)';\n optionalCheck.originalChecker = checker;\n\n\n // the magic line that allows you to add .optional to the end of the checkers\n checker.optional = optionalCheck;\n\n fixType(checker, checker.optional);\n}\n\nfunction addNullable(checker, disabled) {\n const nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n if (val !== null) {\n return checker(val, name, location, obj);\n }\n };\n // inherit all properties on the original checker\n copyProps(checker, nullableCheck);\n\n nullableCheck.isNullable = true;\n nullableCheck.displayName = checker.displayName + ' (nullable)';\n nullableCheck.originalChecker = checker;\n\n // the magic line that allows you to add .nullable to the end of the checkers\n checker.nullable = nullableCheck;\n\n fixType(checker, checker.nullable);\n if (!checker.notOptional) {\n addOptional(checker.nullable, disabled);\n }\n}\n\nfunction fixType(checker, checkerCopy) {\n // fix type, because it's not a straight copy...\n // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n // we also want to add \"(optional)\" to the types with a string\n if (typeof checkerCopy.type === 'object') {\n checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n } else if (typeof checkerCopy.type === 'function') {\n checkerCopy.type = function() {\n return checker.type(...arguments);\n };\n } else {\n checkerCopy.type += ' (optional)';\n return;\n }\n checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n checkerCopy.type.__apiCheckData.optional = true;\n}\n\n\n// UTILS\n\nfunction copyProps(src, dest) {\n each(Object.keys(src), key => dest[key] = src[key]);\n}\n\nfunction noop() {\n}\n\nfunction getNoop() {\n /* eslint no-shadow:0 */\n /* istanbul ignore next */\n return function noop() {\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./api-check-util.js\n **/","const stringify = require('json-stringify-safe');\nconst apiCheckUtil = require('./api-check-util');\nconst {each, isError, t, arrayify, getCheckerDisplay, typeOf, getError} = apiCheckUtil;\nconst checkers = require('./checkers');\nconst apiCheckApis = getApiCheckApis();\n\nmodule.exports = getApiCheckInstance;\nmodule.exports.VERSION = VERSION;\nmodule.exports.utils = apiCheckUtil;\nmodule.exports.globalConfig = {\n verbose: false,\n disabled: false\n};\n\nconst apiCheckApiCheck = getApiCheckInstance({\n output: {prefix: 'apiCheck'}\n});\nmodule.exports.internalChecker = apiCheckApiCheck;\n\n\neach(checkers, (checker, name) => module.exports[name] = checker);\n\nfunction getApiCheckInstance(config = {}, extraCheckers = {}) {\n /* eslint complexity:[2, 6] */\n if (apiCheckApiCheck && arguments.length) {\n apiCheckApiCheck.throw(apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n prefix: 'creating an apiCheck instance'\n });\n }\n\n const additionalProperties = {\n throw: getApiCheck(true),\n warn: getApiCheck(false),\n getErrorMessage,\n handleErrorMessage,\n config: {\n output: config.output || {\n prefix: '',\n suffix: '',\n docsBaseUrl: ''\n },\n verbose: config.verbose || false,\n disabled: config.disabled || false\n },\n utils: apiCheckUtil\n };\n\n each(additionalProperties, (wrapper, name) => apiCheck[name] = wrapper);\n\n const disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n each(checkers.getCheckers(disabled), (checker, name) => apiCheck[name] = checker);\n each(extraCheckers, (checker, name) => apiCheck[name] = checker);\n\n return apiCheck;\n\n\n /**\n * This is the instance function. Other things are attached to this see additional properties above.\n * @param {Array} api - the checkers to check with\n * @param {Array} args - the args to check\n * @param {Object} output - output options\n * @returns {Object} - if this has a failed = true property, then it failed\n */\n function apiCheck(api, args, output) {\n /* eslint complexity:[2, 8] */\n if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n return {\n apiTypes: {}, argTypes: {},\n passed: true, message: '',\n failed: false\n }; // empty version of what is normally returned\n }\n checkApiCheckApi(arguments);\n if (!Array.isArray(api)) {\n api = [api];\n args = [args];\n } else {\n // turn arguments into an array\n args = Array.prototype.slice.call(args);\n }\n let messages = checkEnoughArgs(api, args);\n if (!messages.length) {\n // this is where we actually go perform the checks.\n messages = checkApiWithArgs(api, args);\n }\n\n const returnObject = getTypes(api, args);\n returnObject.args = args;\n if (messages.length) {\n returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n returnObject.failed = true;\n returnObject.passed = false;\n } else {\n returnObject.message = '';\n returnObject.failed = false;\n returnObject.passed = true;\n }\n return returnObject;\n }\n\n /**\n * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n * @param {Array} checkApiArgs - args provided to apiCheck function\n */\n function checkApiCheckApi(checkApiArgs) {\n const api = checkApiArgs[0];\n const args = checkApiArgs[1];\n const isArrayOrArgs = Array.isArray(args) || (args && typeof args === 'object' && typeof args.length === 'number');\n\n if (Array.isArray(api) && !isArrayOrArgs) {\n throw new Error(getErrorMessage(api, [args],\n ['If an array is provided for the api, an array must be provided for the args as well.'],\n {prefix: 'apiCheck'}\n ));\n }\n // dog fooding here\n const errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n if (errors.length) {\n const message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n prefix: 'apiCheck'\n });\n apiCheck.handleErrorMessage(message, true);\n }\n }\n\n\n function getApiCheck(shouldThrow) {\n return function apiCheckWrapper(api, args, output) {\n const result = apiCheck(api, args, output);\n apiCheck.handleErrorMessage(result.message, shouldThrow);\n return result; // wont get here if an error is thrown\n };\n }\n\n function handleErrorMessage(message, shouldThrow) {\n if (shouldThrow && message) {\n throw new Error(message);\n } else if (message) {\n /* eslint no-console:0 */\n console.warn(message);\n }\n }\n\n function getErrorMessage(api, args, messages = [], output = {}) {\n const gOut = apiCheck.config.output || {};\n const prefix = getPrefix();\n const suffix = getSuffix();\n const url = getUrl();\n const message = `apiCheck failed! ${messages.join(', ')}`;\n const passedAndShouldHavePassed = '\\n\\n' + buildMessageFromApiAndArgs(api, args);\n return `${prefix} ${message} ${suffix} ${url || ''}${passedAndShouldHavePassed}`.trim();\n\n function getPrefix() {\n let p = output.onlyPrefix;\n if (!p) {\n p = `${gOut.prefix || ''} ${output.prefix || ''}`.trim();\n }\n return p;\n }\n\n function getSuffix() {\n let s = output.onlySuffix;\n if (!s) {\n s = `${output.suffix || ''} ${gOut.suffix || ''}`.trim();\n }\n return s;\n }\n\n function getUrl() {\n let u = output.url;\n if (!u) {\n u = gOut.docsBaseUrl && output.urlSuffix && `${gOut.docsBaseUrl}${output.urlSuffix}`.trim();\n }\n return u;\n }\n }\n\n function buildMessageFromApiAndArgs(api, args) {\n let {apiTypes, argTypes} = getTypes(api, args);\n const copy = Array.prototype.slice.call(args || []);\n const replacedItems = [];\n replaceFunctionWithName(copy);\n const passedArgs = getObjectString(copy);\n argTypes = getObjectString(argTypes);\n apiTypes = getObjectString(apiTypes);\n\n return generateMessage();\n\n\n // functions\n\n function replaceFunctionWithName(obj) {\n each(obj, (val, name) => {\n /* eslint complexity:[2, 6] */\n if (replacedItems.indexOf(val) === -1) { // avoid recursive problems\n replacedItems.push(val);\n if (typeof val === 'object') {\n replaceFunctionWithName(obj);\n } else if (typeof val === 'function') {\n obj[name] = val.displayName || val.name || 'anonymous function';\n }\n }\n });\n }\n\n function getObjectString(types) {\n if (!types || !types.length) {\n return 'nothing';\n } else if (types && types.length === 1) {\n types = types[0];\n }\n return stringify(types, null, 2);\n }\n\n function generateMessage() {\n const n = '\\n';\n let useS = true;\n if (args && args.length === 1) {\n if (typeof args[0] === 'object' && args[0] !== null) {\n useS = !!Object.keys(args[0]).length;\n } else {\n useS = false;\n }\n }\n const types = `type${useS ? 's' : ''}`;\n const newLine = n + n;\n return `You passed:${n}${passedArgs}${newLine}` +\n `With the ${types}:${n}${argTypes}${newLine}` +\n `The API calls for:${n}${apiTypes}`;\n }\n }\n\n function getTypes(api, args) {\n api = arrayify(api);\n args = arrayify(args);\n const apiTypes = api.map((checker, index) => {\n const specified = module.exports.globalConfig.hasOwnProperty('verbose');\n return getCheckerDisplay(checker, {\n terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n obj: args[index],\n addHelpers: true\n });\n });\n const argTypes = args.map((arg) => getArgDisplay(arg, []));\n return {argTypes, apiTypes};\n }\n\n}\n\n\n// STATELESS FUNCTIONS\n\n/**\n * This is where the magic happens for actually checking the arguments with the api.\n * @param {Array} api - checkers\n * @param {Array} args - and arguments object\n * @returns {Array} - the error messages\n */\nfunction checkApiWithArgs(api, args) {\n /* eslint complexity:[2, 7] */\n const messages = [];\n let failed = false;\n let checkerIndex = 0;\n let argIndex = 0;\n let arg, checker, res, lastChecker, argName, argFailed, skipPreviousChecker;\n /* jshint -W084 */\n while ((checker = api[checkerIndex++]) && (argIndex < args.length)) {\n arg = args[argIndex++];\n argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : '');\n res = checker(arg, 'value', argName);\n argFailed = isError(res);\n lastChecker = checkerIndex >= api.length;\n skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n if ((argFailed && lastChecker) || (argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker)) {\n failed = true;\n messages.push(getCheckerErrorMessage(res, checker, arg));\n } else if (argFailed && checker.isOptional) {\n argIndex--;\n } else {\n messages.push(`${t(argName)} passed`);\n }\n }\n return failed ? messages : [];\n}\n\n\ncheckerTypeType.type = 'function with __apiCheckData property and `${function.type}` property';\nfunction checkerTypeType(checkerType, name, location) {\n const apiCheckDataChecker = checkers.shape({\n type: checkers.string,\n optional: checkers.bool\n });\n const asFunc = checkers.func.withProperties({__apiCheckData: apiCheckDataChecker});\n const asShape = checkers.shape({__apiCheckData: apiCheckDataChecker});\n const wrongShape = checkers.oneOfType([\n asFunc, asShape\n ])(checkerType, name, location);\n if (isError(wrongShape)) {\n return wrongShape;\n }\n if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n return getError(name, location, checkerTypeType.type);\n }\n}\n\nfunction getCheckerErrorMessage(res, checker, val) {\n let checkerHelp = getCheckerHelp(checker, val);\n checkerHelp = checkerHelp ? ' - ' + checkerHelp : '';\n return res.message + checkerHelp;\n}\n\nfunction getCheckerHelp({help}, val) {\n if (!help) {\n return '';\n }\n if (typeof help === 'function') {\n help = help(val);\n }\n return help;\n}\n\n\nfunction checkEnoughArgs(api, args) {\n const requiredArgs = api.filter(a => !a.isOptional);\n if (args.length < requiredArgs.length) {\n return [\n 'Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`'\n ];\n } else {\n return [];\n }\n}\n\nfunction getArgDisplay(arg, gottenArgs) {\n /* eslint complexity:[2, 7] */\n const cName = arg && arg.constructor && arg.constructor.name;\n const type = typeOf(arg);\n if (type === 'function') {\n if (hasKeys()) {\n const properties = stringify(getDisplayIfNotGotten());\n return cName + ' (with properties: ' + properties + ')';\n }\n return cName;\n }\n\n if (arg === null) {\n return 'null';\n }\n\n if (type !== 'array' && type !== 'object') {\n return type;\n }\n\n if (hasKeys()) {\n return getDisplayIfNotGotten();\n }\n\n return cName;\n\n // utility functions\n function hasKeys() {\n return arg && Object.keys(arg).length;\n }\n\n function getDisplayIfNotGotten() {\n if (gottenArgs.indexOf(arg) !== -1) {\n return '[Circular]';\n }\n gottenArgs.push(arg);\n return getDisplay(arg, gottenArgs);\n }\n}\n\nfunction getDisplay(obj, gottenArgs) {\n const argDisplay = {};\n each(obj, (v, k) => argDisplay[k] = getArgDisplay(v, gottenArgs));\n return argDisplay;\n}\n\nfunction getApiCheckApis() {\n const os = checkers.string.optional;\n\n const checkerFnChecker = checkers.func.withProperties({\n type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n displayName: checkers.string.optional,\n shortType: checkers.string.optional,\n notOptional: checkers.bool.optional,\n notRequired: checkers.bool.optional\n });\n\n const getApiCheckInstanceCheckers = [\n checkers.shape({\n output: checkers.shape({\n prefix: checkers.string.optional,\n suffix: checkers.string.optional,\n docsBaseUrl: checkers.string.optional\n }).strict.optional,\n verbose: checkers.bool.optional,\n disabled: checkers.bool.optional\n }).strict.optional,\n checkers.objectOf(checkerFnChecker).optional\n ];\n\n const checkApiCheckApi = [\n checkers.typeOrArrayOf(checkerFnChecker),\n checkers.any.optional,\n checkers.shape({\n prefix: os, suffix: os, urlSuffix: os, // appended case\n onlyPrefix: os, onlySuffix: os, url: os // override case\n }).strict.optional\n ];\n\n return {\n checkerFnChecker,\n getApiCheckInstanceCheckers,\n checkApiCheckApi\n };\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./api-check.js\n **/","const stringify = require('json-stringify-safe');\nconst {\n typeOf, each, copy, getCheckerDisplay, isError,\n arrayify, list, getError, nAtL, t, checkerHelpers,\n undef\n } = require('./api-check-util');\nconst {setupChecker} = checkerHelpers;\n\nconst checkers = module.exports = getCheckers();\nmodule.exports.getCheckers = getCheckers;\n\nfunction getCheckers(disabled) {\n return {\n array: typeOfCheckGetter('Array'),\n bool: typeOfCheckGetter('Boolean'),\n number: typeOfCheckGetter('Number'),\n string: typeOfCheckGetter('String'),\n func: funcCheckGetter(),\n object: objectCheckGetter(),\n\n emptyObject: emptyObjectCheckGetter(),\n\n instanceOf: instanceCheckGetter,\n oneOf: oneOfCheckGetter,\n oneOfType: oneOfTypeCheckGetter,\n\n arrayOf: arrayOfCheckGetter,\n objectOf: objectOfCheckGetter,\n typeOrArrayOf: typeOrArrayOfCheckGetter,\n\n range: rangeCheckGetter,\n lessThan: lessThanCheckGetter,\n greaterThan: greaterThanCheckGetter,\n\n shape: getShapeCheckGetter(),\n args: argumentsCheckerGetter(),\n\n any: anyCheckGetter(),\n null: nullCheckGetter()\n\n };\n\n function typeOfCheckGetter(type) {\n const lType = type.toLowerCase();\n return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n if (typeOf(val) !== lType) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function funcCheckGetter() {\n const type = 'Function';\n const functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n if (typeOf(val) !== 'function') {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n\n functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n const apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties');\n if (isError(apiError)) {\n throw apiError;\n }\n const shapeChecker = checkers.shape(properties, true);\n shapeChecker.type.__apiCheckData.type = 'func.withProperties';\n\n return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n const notFunction = checkers.func(val, name, location);\n if (isError(notFunction)) {\n return notFunction;\n }\n return shapeChecker(val, name, location);\n }, {type: shapeChecker.type, shortType: 'func.withProperties'}, disabled);\n };\n return functionChecker;\n }\n\n function objectCheckGetter() {\n const type = 'Object';\n const nullType = 'Object (null ok)';\n const objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n if (typeOf(val) !== 'object') {\n return getError(name, location, nullType);\n }\n }, {type: nullType}, disabled);\n\n const objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n if (val === null || isError(objectNullOkChecker(val, name, location))) {\n return getError(name, location, objectChecker.type);\n }\n }, {type, nullOk: objectNullOkChecker}, disabled);\n\n return objectChecker;\n }\n\n\n function instanceCheckGetter(classToCheck) {\n return setupChecker(function instanceCheckerDefinition(val, name, location) {\n if (!(val instanceof classToCheck)) {\n return getError(name, location, classToCheck.name);\n }\n }, {type: classToCheck.name}, disabled);\n }\n\n function oneOfCheckGetter(enums) {\n const type = {\n __apiCheckData: {optional: false, type: 'enum'},\n enum: enums\n };\n const shortType = `oneOf[${enums.map(enm => stringify(enm)).join(', ')}]`;\n return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n if (!enums.some(enm => enm === val)) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function oneOfTypeCheckGetter(typeCheckers) {\n const checkersDisplay = typeCheckers.map((checker) => getCheckerDisplay(checker, {short: true}));\n const shortType = `oneOfType[${checkersDisplay.join(', ')}]`;\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return typeCheckers.map((checker) => getCheckerDisplay(checker, options));\n }\n type.__apiCheckData = {optional: false, type: 'oneOfType'};\n return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n if (!typeCheckers.some(checker => !isError(checker(val, name, location)))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function arrayOfCheckGetter(checker) {\n const shortCheckerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `arrayOf[${shortCheckerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n type.__apiCheckData = {optional: false, type: 'arrayOf'};\n\n return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n if (isError(checkers.array(val)) || !val.every((item) => !isError(checker(item)))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function objectOfCheckGetter(checker) {\n const checkerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `objectOf[${checkerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n type.__apiCheckData = {optional: false, type: 'objectOf'};\n\n return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n const notObject = checkers.object(val, name, location);\n if (isError(notObject)) {\n return notObject;\n }\n const allTypesSuccess = each(val, (item, key) => {\n if (isError(checker(item, key, name))) {\n return false;\n }\n });\n if (!allTypesSuccess) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function typeOrArrayOfCheckGetter(checker) {\n const checkerDisplay = getCheckerDisplay(checker, {short: true});\n const shortType = `typeOrArrayOf[${checkerDisplay}]`;\n\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(checker, options);\n }\n\n type.__apiCheckData = {optional: false, type: 'typeOrArrayOf'};\n return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n return getError(name, location, shortType);\n }\n }, {type, shortType}, disabled);\n }\n\n function getShapeCheckGetter() {\n function shapeCheckGetter(shape, nonObject) {\n const shapeTypes = {};\n each(shape, (checker, prop) => {\n shapeTypes[prop] = getCheckerDisplay(checker);\n });\n function type(options = {}) {\n const ret = {};\n const {terse, obj, addHelpers} = options;\n const parentRequired = options.required;\n each(shape, (checker, prop) => {\n /* eslint complexity:[2, 6] */\n const specified = obj && obj.hasOwnProperty(prop);\n const required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n if (!terse || (specified || !checker.isOptional)) {\n ret[prop] = getCheckerDisplay(checker, {terse, obj: obj && obj[prop], required, addHelpers});\n }\n if (addHelpers) {\n modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n }\n });\n return ret;\n\n function modifyTypeDisplayToHelpOut(theRet, prop, specified, checker, required) {\n if (!specified && required && !checker.isOptional) {\n let item = 'ITEM';\n if (checker.type && checker.type.__apiCheckData) {\n item = checker.type.__apiCheckData.type.toUpperCase();\n }\n addHelper('missing', `MISSING THIS ${item}`, ' <-- YOU ARE MISSING THIS');\n } else if (specified) {\n const error = checker(obj[prop], prop, null, obj);\n if (isError(error)) {\n addHelper('error', `THIS IS THE PROBLEM: ${error.message}`, ` <-- THIS IS THE PROBLEM: ${error.message}`);\n }\n }\n\n function addHelper(property, objectMessage, stringMessage) {\n if (typeof theRet[prop] === 'string') {\n theRet[prop] += stringMessage;\n } else {\n theRet[prop].__apiCheckData[property] = objectMessage;\n }\n }\n }\n }\n\n type.__apiCheckData = {strict: false, optional: false, type: 'shape'};\n const shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n /* eslint complexity:[2, 6] */\n const isObject = !nonObject && checkers.object(val, name, location);\n if (isError(isObject)) {\n return isObject;\n }\n let shapePropError;\n location = location ? location + (name ? '/' : '') : '';\n name = name || '';\n each(shape, (checker, prop) => {\n if (val.hasOwnProperty(prop) || !checker.isOptional) {\n shapePropError = checker(val[prop], prop, `${location}${name}`, val);\n return !isError(shapePropError);\n }\n });\n if (isError(shapePropError)) {\n return shapePropError;\n }\n }, {type, shortType: 'shape'}, disabled);\n\n function strictType() {\n return type(...arguments);\n }\n\n strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n strictType.__apiCheckData.strict = true;\n shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n const shapeError = shapeChecker(val, name, location);\n if (isError(shapeError)) {\n return shapeError;\n }\n const allowedProperties = Object.keys(shape);\n const extraProps = Object.keys(val).filter(prop => allowedProperties.indexOf(prop) === -1);\n if (extraProps.length) {\n return new Error(\n `${nAtL(name, location)} cannot have extra properties: ${t(extraProps.join('`, `'))}.` +\n `It is limited to ${t(allowedProperties.join('`, `'))}`\n );\n }\n }, {type: strictType, shortType: 'strict shape'}, disabled);\n\n return shapeChecker;\n }\n\n shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n otherProps = [otherProps];\n }\n let description;\n if (otherProps.length === 1) {\n description = `specified only if ${otherProps[0]} is not specified`;\n } else {\n description = `specified only if none of the following are specified: [${list(otherProps, ', ', 'and ')}]`;\n }\n const shortType = `ifNot[${otherProps.join(', ')}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n const propExists = obj && obj.hasOwnProperty(propName);\n const otherPropsExist = otherProps.some(otherProp => obj && obj.hasOwnProperty(otherProp));\n if (propExists === otherPropsExist) {\n return getError(propName, location, type);\n } else if (propExists) {\n return propChecker(prop, propName, location, obj);\n }\n }, {notRequired: true, type, shortType}, disabled);\n };\n\n shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n otherProps = arrayify(otherProps);\n let description;\n if (otherProps.length === 1) {\n description = `specified only if ${otherProps[0]} is also specified`;\n } else {\n description = `specified only if all of the following are specified: [${list(otherProps, ', ', 'and ')}]`;\n }\n const shortType = `onlyIf[${otherProps.join(', ')}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n const othersPresent = otherProps.every(property => obj.hasOwnProperty(property));\n if (!othersPresent) {\n return getError(propName, location, type);\n } else {\n return propChecker(prop, propName, location, obj);\n }\n }, {type, shortType}, disabled);\n };\n\n shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n otherProps = [otherProps];\n }\n return getRequiredIfNotChecker(false, otherProps, propChecker);\n };\n\n shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n if (!Array.isArray(otherProps)) {\n throw new Error('requiredIfNot.all must be passed an array');\n }\n return getRequiredIfNotChecker(true, otherProps, propChecker);\n };\n\n function getRequiredIfNotChecker(all, otherProps, propChecker) {\n const props = t(otherProps.join(', '));\n const ifProps = `if ${all ? 'all of' : 'at least one of'}`;\n const description = `specified ${ifProps} these are not specified: ${props} (otherwise it's optional)`;\n const shortType = `requiredIfNot${all ? '.all' : ''}[${otherProps.join(', ')}}]`;\n const type = getTypeForShapeChild(propChecker, description, shortType);\n return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n const propExists = obj && obj.hasOwnProperty(propName);\n const iteration = all ? 'every' : 'some';\n const otherPropsExist = otherProps[iteration](function(otherProp) {\n return obj && obj.hasOwnProperty(otherProp);\n });\n if (!otherPropsExist && !propExists) {\n return getError(propName, location, type);\n } else if (propExists) {\n return propChecker(prop, propName, location, obj);\n }\n }, {type, notRequired: true}, disabled);\n }\n\n return shapeCheckGetter;\n\n function getTypeForShapeChild(propChecker, description, shortType) {\n function type(options) {\n if (options && options.short) {\n return shortType;\n }\n return getCheckerDisplay(propChecker);\n }\n type.__apiCheckData = {optional: false, type: 'ifNot', description};\n return type;\n }\n }\n\n function argumentsCheckerGetter() {\n const type = 'function arguments';\n return setupChecker(function argsCheckerDefinition(val, name, location) {\n if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function anyCheckGetter() {\n return setupChecker(function anyCheckerDefinition() {\n // don't do anything\n }, {type: 'any'}, disabled);\n }\n\n function nullCheckGetter() {\n const type = 'null';\n return setupChecker(function nullChecker(val, name, location) {\n if (val !== null) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function rangeCheckGetter(min, max) {\n const type = `Range (${min} - ${max})`;\n return setupChecker(function rangeChecker(val, name, location) {\n if (typeof val !== 'number' || val < min || val > max) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function lessThanCheckGetter(min) {\n const type = `lessThan[${min}]`;\n return setupChecker(function lessThanChecker(val, name, location) {\n if (typeof val !== 'number' || val > min) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function greaterThanCheckGetter(max) {\n const type = `greaterThan[${max}]`;\n return setupChecker(function greaterThanChecker(val, name, location) {\n if (typeof val !== 'number' || val < max) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n function emptyObjectCheckGetter() {\n const type = 'empty object';\n return setupChecker(function emptyObjectChecker(val, name, location) {\n if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) {\n return getError(name, location, type);\n }\n }, {type}, disabled);\n }\n\n}\n\n\n\n/** WEBPACK FOOTER **\n ** ../~/eslint-loader!./checkers.js\n **/"],"sourceRoot":""} \ No newline at end of file diff --git a/static/js/eda.dragdropway.css b/static/js/eda.dragdropway.css new file mode 100644 index 0000000..2a80d5d --- /dev/null +++ b/static/js/eda.dragdropway.css @@ -0,0 +1,913 @@ +/*========================================================= + colors const +===========================================================*/ +/*========================================================= + fonts const +===========================================================*/ +/*========================================================= + common +===========================================================*/ +.ta-hidden-input { + width: 1px; + height: 1px; + border: none; + margin: 0; + padding: 0; + position: absolute; + top: -10000px; + left: -10000px; + opacity: 0; + overflow: hidden; } + +.ta-root.focussed > .ta-scroll-window.form-control { + border-color: #66afe9; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } + +.ta-editor.ta-html, .ta-scroll-window.form-control { + min-height: 300px; + height: auto; + overflow: auto; + font-family: inherit; + font-size: 100%; } + +.ta-scroll-window.form-control { + position: relative; + padding: 0; } + +.ta-scroll-window > .ta-bind { + height: auto; + min-height: 300px; + padding: 6px 12px; } + +.ta-editor:focus { + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; } + +.ta-resizer-handle-overlay { + z-index: 100; + position: absolute; + display: none; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-info { + position: absolute; + bottom: 16px; + right: 16px; + border: 1px solid #000; + background-color: #FFF; + padding: 0 4px; + opacity: .7; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-background { + position: absolute; + bottom: 5px; + right: 5px; + left: 5px; + top: 5px; + border: 1px solid #000; + background-color: rgba(0, 0, 0, 0.2); } + +.ta-resizer-handle-overlay > .ta-resizer-handle-corner { + width: 10px; + height: 10px; + position: absolute; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-corner-tl { + top: 0; + left: 0; + border-left: 1px solid #000; + border-top: 1px solid #000; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-corner-tr { + top: 0; + right: 0; + border-right: 1px solid #000; + border-top: 1px solid #000; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-corner-bl { + bottom: 0; + left: 0; + border-left: 1px solid #000; + border-bottom: 1px solid #000; } + +.ta-resizer-handle-overlay > .ta-resizer-handle-corner-br { + bottom: 0; + right: 0; + border: 1px solid #000; + cursor: se-resize; + background-color: #fff; } + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-size: 14px; + font-weight: 400; + line-height: 1.42857143; + text-align: left; + white-space: normal; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); } + +.popover.top { + margin-top: -10px; } + +.popover.bottom { + margin-top: 10px; } + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; } + +.popover-content { + padding: 9px 14px; } + +.popover > .arrow, .popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; } + +.popover > .arrow { + border-width: 11px; } + +.popover > .arrow:after { + content: ""; + border-width: 10px; } + +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; } + +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; } + +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); } + +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; } + +/*========================================================= + common +===========================================================*/ +body { + padding-top: 50px; + padding-bottom: 20px; + height: 100%; + background-color: #F2F2F2; + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; } + +.margintop60px { + margin-top: 80px; } + +.margintop120px { + margin-top: 120px; } + +.vAlignMiddle { + vertical-align: middle; } + +[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { + display: none !important; } + +/*========================================================= + bootstrap overrides +===========================================================*/ +.nav .open > a, .nav .open > a:hover, .nav .open > a:focus { + background-color: #0d87e9; + border-color: #2196f3; } + +/*correction bug sur theme bootstrap journal*/ +.modal-backdrop { + z-index: -1; } + +.navbar-right { + margin-right: 20px; } + +textarea, textarea.form-control, input.form-control, +input[type=text], input[type=password], input[type=email], +input[type=number], [type=text].form-control, [type=password].form-control, +[type=email].form-control, [type=tel].form-control, [contenteditable].form-control { + font-size: 13px; } + +select, select.form-control { + font-size: 13px; } + +/*container to 100%*/ +@media (min-width: 1200px) { + .container { + width: 100%; + margin-right: 20px; } } + +@media (min-width: 768px) { + .container { + width: 100%; + margin-right: 20px; } } + +@media (min-width: 992px) { + .container { + width: 100%; } } + +.container-fluid { + margin-right: auto; + margin-left: auto; } + +.container-fluid padding { + left: 30px; + right: 30px; } + +.panel-default > .panel-heading { + color: #212121; + background-color: #fff; + border-color: #eee; } + +.navbar-nav > li > a { + line-height: 30px; } + +.navbar-default .navbar-brand { + line-height: initial; } + +.panel-heading { + background-color: none; + border-bottom: solid 1px #eee; } + +.navBtnGroup { + padding-top: 20px; + padding-bottom: 22px; + padding-right: 15px; + padding-left: 15px; } + +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + vertical-align: middle; } + +a:hover { + color: #fff; } + +a:focus { + color: #fff; } + +/*Forms setup*/ +.form-control { + border-radius: 0; + box-shadow: none; + height: auto; } + +.float-label { + font-size: 10px; } + +.socialIcon { + font-size: 32px; } + .socialIcon:hover { + color: #F2F2F2; } + +input[type="text"].form-control, +input[type="search"].form-control { + border: none; + border-bottom: 1px dotted #CFCFCF; } + +textarea { + border: 1px dotted #CFCFCF !important; + height: 130px !important; } + +/*Content Container*/ +.content-container { + background-color: #fff; + padding: 35px 20px; + margin-bottom: 20px; } + +h1.content-title { + font-size: 32px; + font-weight: 300; + text-align: center; + margin-top: 0; + margin-bottom: 20px; + font-family: "Open Sans", sans-serif !important; } + +/*paper theme bootstrap*/ +.form-control { + font-family: "Roboto", "Helvetica Neue", Helvetica, Arial, sans-serif; + display: block; + width: 100%; + height: 39px; + padding: 8px 12px; + font-size: 13px; + line-height: 1.42857143; + color: #777777; + background-color: #ffffff; + background-image: none; + border: 1px solid #cccccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; } + +.form-control:focus { + border-color: #66afe9; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6); } + +.form-control::-moz-placeholder { + color: #999999; + opacity: 1; } + +.form-control:-ms-input-placeholder { + color: #999999; } + +.form-control::-webkit-input-placeholder { + color: #999999; } + +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eeeeee; + opacity: 1; } + +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; } + +textarea.form-control { + height: auto; } + +.fakeControl[disabled] { + background-color: #fff; + opacity: 1; } + +.fakeControl[disabled] { + cursor: all-scroll; } + +.radio input[type=radio].fakeCheck { + cursor: all-scroll; } + +.checkbox input[type=checkbox].fakeCheck { + cursor: all-scroll; } + +label.fakeCheck { + cursor: all-scroll; } + +/* animation ng-repeat +easy customize animation from here : http://www.nganimate.org/angularjs/ng-repeat/yo-yo-css3-keyframes-animation*/ +.animate-enter { + animation: enter 600ms cubic-bezier(0.445, 0.05, 0.55, 0.95); + display: block; + position: relative; } + +@keyframes enter { + from { + opacity: 0; + height: 0px; + left: -70px; } + 75% { + left: 15px; } + to { + opacity: 1; + height: 30px; + left: 0px; } } + +.animate-leave { + animation: leave 600ms cubic-bezier(0.445, 0.05, 0.55, 0.95); + display: block; + position: relative; } + +@keyframes leave { + to { + opacity: 0; + height: 0px; + left: -70px; } + 25% { + left: 15px; } + from { + opacity: 1; + height: 30px; + left: 0px; } } + +/* td table in myprofile */ +.tdCommun, .td40, .td60 { + height: 75px; + vertical-align: none; } + +.td40 { + width: 40%; } + +.td60 { + width: 60%; } + +.table-user-information > thead > tr > th, +.table-user-information > tbody > tr > th, +.table-user-information > tfoot > tr > th, +.table-user-information > thead > tr > td, +.table-user-information > tbody > tr > td, +.table-user-information > tfoot > tr > td { + vertical-align: middle; } + +/*========================================================= + ANGULAR ANIMATIONS (in pair on animate.css) +===========================================================*/ +/* animation on ng-switch */ +.switchAngularFadeIn .ng-enter { + animation: fadeIn 1s; } + +/*========================================================= + wfEdit +===========================================================*/ +#pageWfEdit { + margin-top: 40px; + /* right:2%; + left:2%; */ + padding-top: 30px; + padding-bottom: 30px; + background-color: #F2F2F2; + /* border-top: solid 3px white; + border-bottom: solid 3px white; */ } + +.lineCommandButtons { + padding-bottom: 25px; } + +.addNewLine { + font-size: 24px; + vertical-align: middle; + color: #666666; } + +#editor { + margin-top: 0px; + margin-bottom: 0px; + height: 150px; + background-color: #52B3D9; + border-bottom: solid 1px #2C3E50; } + +#editor-content { + /* padding-top: 25px; */ + /* padding-bottom: 25px; */ + text-align: center; + color: white; + font-size: 13px; } + +#preview { + margin-top: 0px; + margin-bottom: 0px; + /* background-color: #E4F1FE; */ + border: solid 1 px #2C3E50; + -o-box-shadow: 0px 0px 10px 0px #ddd; + box-shadow: 0px 0px 10px 0px #ddd; + filter: progid:DXImageTransform.Microsoft.Shadow(color=#ddd, Direction=NaN, Strength=10); } + +#preview-content { + background-color: #FFF; + padding-bottom: 25px; + /*text-align: center;*/ + color: black; + /*font-size: 13px;*/ } + +#commandPanel { + padding-top: 25px; + padding-bottom: 25px; } + +/* #commandPanel.affix { + position: fixed; + top: 0; + width:25%; + margin-top: -45px; + } */ +#visualPanel { + padding-top: 25px; + padding-bottom: 25px; } + +.customPagerButton { + width: 100px; } + +.numberOfColumnsLabel { + font-size: 32px; + text-align: center; + padding-top: 25%; + padding-bottom: 25%; + font-weight: bold; + text-align: center; + color: #666666; } + +.btnMinusColumns { + margin-top: 10px; } + +.btnAddColumns { + margin-top: 10px; } + +.numberOfcolumsText { + color: #666666; } + +.greyText { + color: #666666; } + +.blackText { + color: #000; } + +/*========================================================= + ANIMATE NG-SWITCH +=========================================================*/ +.animate-switch-container { + position: relative; + background: white; + border-top: solid 1px #ECECEC; + border-bottom: solid 1px #ECECEC; + overflow: scroll; } + .animate-switch-container .well { + background-color: #89C4F4; + margin-bottom: 0px; + color: #ECECEC; } + +.linesList { + margin-top: 5px; } + +/*switch 1 : move top*/ +.animate-switch { + padding: 10px; } + +.animate-switch.ng-animate { + transition: all cubic-bezier(0.25, 0.46, 0.45, 0.94) 0.6s; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; } + +.animate-switch.ng-leave.ng-leave-active, +.animate-switch.ng-enter { + left: 0px; + top: -500px; + opacity: 0; } + +.animate-switch.ng-leave, +.animate-switch.ng-enter.ng-enter-active { + left: 0px; + top: 0px; + opacity: 0.8; } + +/*========================================================= + STEP INDICATOR +=========================================================*/ +.stepwizardTopmargin { + margin-top: 25px; } + +.stepwizard-step p { + margin-top: 10px; + color: #666666; } + +.stepwizard-row { + display: table-row; } + +.stepwizard { + display: table; + width: 100%; + position: relative; } + +.stepwizard-step button[disabled] { + opacity: 1 !important; + filter: alpha(opacity=100) !important; } + +.stepwizard-row:before { + top: 14px; + bottom: 0; + position: absolute; + content: " "; + width: 100%; + height: 1px; + background-color: #ccc; + z-order: 0; } + +.stepwizard-step { + display: table-cell; + text-align: center; + position: relative; } + +.btn-circle { + width: 30px; + height: 30px; + text-align: center; + padding: 6px 0; + font-size: 12px; + line-height: 1.428571429; + border-radius: 15px; } + +.panelDebugScope { + color: #000; } + +/*========================================================= + Modal add control +=========================================================*/ +.texteRouge { + color: #CF000F; } + +.editPropertiesLabel { + margin-top: 6px; } + +.textControlLabel { + color: #000; } + +.marginTopFivepixels { + margin-top: 5px; } + +.marginTopTenpixels { + margin-top: 5px; } + +.checkboxCssCorrection { + font-size: 4px; } + +.noGroupText { + margin-bottom: 0px; } + +.nya-bs-select { + margin-bottom: 16px; } + +.ta-scroll-window { + margin-bottom: 16px; } + +.formly-field-checkbox { + margin-top: 28px; } + +#inputAddNewRadioOption { + margin-bottom: 20px; } + +#inputAddNewBasicOption { + margin-bottom: 20px; } + +#inputAddNewGroupedOption { + margin-bottom: 20px; } + +#inputAddNewGroupGroupedOption { + margin-bottom: 20px; } + +.editGroupedSelectnyaSelect { + margin-bottom: 0px; } + +.heading-preview { + cursor: pointer; } + +/*========================================================= + specific drag and drop test (will change or be deleted) +===========================================================*/ +/***************************** pageSlide directive css *****************************/ +/* Needed for hiding crollbars when pushing */ +html { + overflow-x: hidden; } + +.ng-pageslide { + background: #eee; + box-shadow: 5px 1px 12px 0px rgba(188, 183, 183, 0.7); + -moz-box-shadow: 5px 1px 12px 0px rgba(188, 183, 183, 0.7); + -webkit-box-shadow: 5px 1px 12px 0px rgba(188, 183, 183, 0.7); } + +#controlEditLeftPanel { + margin-top: 95px; + padding-top: 20px; + padding-bottom: 20px; + padding-right: 10px; + padding-left: 10px; + height: 85%; + overflow-y: scroll; } + +.separator10pixel { + margin-top: 5px; + margin-bottom: 5px; + height: 25px; } + +.panelControlWidth { + width: 45%; } + +/***************************** Required styles *****************************/ +/** + * For the correct positioning of the placeholder element, the dnd-list and + * it's children must have position: relative + */ +.advancedDemo ul[dnd-list], +.advancedDemo ul[dnd-list] > li { + position: relative; + border: solid 1px #F1F1F1; } + +/***************************** Dropzone Styling *****************************/ +/** + * The dnd-list should always have a min-height, + * otherwise you can't drop to it once it's empty + */ +.advancedDemo .dropzone ul[dnd-list] { + min-height: 42px; + margin: 0px; + padding-left: 0px; } + +/** + * The dnd-lists's child elements currently MUST have + * position: relative. Otherwise we can not determine + * whether the mouse pointer is in the upper or lower + * half of the element we are dragging over. In other + * browsers we can use event.offsetY for this. + */ +.advancedDemo .dropzone li { + display: block; } + +/** + * Reduce opacity of elements during the drag operation. This allows the user + * to see where he is dropping his element, even if the element is huge. The + * .dndDragging class is automatically set during the drag operation. + */ +.advancedDemo .dropzone .dndDragging { + opacity: 0.7; + border: 2px dotted #000; } + +/** + * The dndDraggingSource class will be applied to the source element of a drag + * operation. It makes sense to hide it to give the user the feeling that he's + * actually moving it. Note that the source element has also .dndDragging class. + */ +.advancedDemo .dropzone .dndDraggingSource { + display: none; } + +/** + * An element with .dndPlaceholder class will be added as child of the dnd-list + * while the user is dragging over it. + */ +.advancedDemo .dropzone .dndPlaceholder { + background-color: #ddd !important; + min-height: 155px; + display: block; + position: relative; + -o-box-shadow: inset 0px 0px 5px 0px #343434; + box-shadow: inset 0px 0px 5px 0px #343434; + filter: progid:DXImageTransform.Microsoft.Shadow(color=#343434, Direction=NaN, Strength=5); } + +/***************************** Element type specific styles *****************************/ +.advancedDemo .dropzone .itemlist { + min-height: 115px !important; } + +ul.itemlist.ng-scope { + border: none; } + +.effect1ForDragDropItem, #itemContent { + box-shadow: 0 10px 6px -6px #777; + min-height: 115px; } + +.advancedDemo .dropzone .itemlist > li { + border: none; + min-width: 180px; + border-radius: .25em; + float: left; + font-weight: 700; + height: 135px; } + +#itemContent { + background-color: #fff; + border: 2px outset #0d87e9; + border-radius: .25em; + color: #fff; + float: left; + font-weight: 700; + height: 115px; + margin: 5px; + padding: 3px; + text-align: center; + width: 100%; + cursor: all-scroll; } + +.dragItemtextarea { + height: 60px; } + +textarea { + border: 1px dotted #CFCFCF !important; + height: 50px !important; } + +.advancedDemo .dropzone .container-element { + margin: 10px; } + +.isCollapsableZone { + cursor: pointer; } + +.buttonHeaderAddNewLine { + margin-top: 15px; + margin-bottom: 0px; } + +.buttonCloneLineHidden { + visibility: hidden; } + +.buttonCloseLine { + margin-top: -10px; + margin-right: -10px; + border-radius: 50%; + height: 45px; } + +.interligne { + padding-bottom: 10px; } + +.confirmLineDelete { + margin-top: 0; + margin-bottom: 0; + background-color: #F5F5F5; + opacity: 1.0; + animation: shake 1.3s infinite; } + +.demoddDatepicker { + padding-left: 0; + margin-left: 0; } + +.selectfordemo { + margin-top: 30px; } + +/*========================================================= + animation shake +===========================================================*/ + +@keyframes shake { + 0%, 100% { + transform: translate3d(0, 0, 0); } + 10%, 30%, 50%, 70%, 90% { + transform: translate3d(-10px, 0, 0); } + 20%, 40%, 60%, 80% { + transform: translate3d(10px, 0, 0); } } + +.shake { + animation-name: shake; } + +.previewControlinItem { + margin-top: 2%; + background-color: #fff; + padding-top: 5px; + padding-bottom: 5px; + padding-left: 10px; + padding-right: 10px; + border-radius: 5px; + color: #F1F1F1; + font-size: 18px; } + +.vertical-line { + border-left: thick solid #000; } + +/*========================================================= + animation glyphicon rotate +===========================================================*/ +.gly-spin { + animation: spin 2s infinite linear; } + +@keyframes spin { + 0% { + transform: rotate(0deg); } + 100% { + transform: rotate(359deg); } } + +.gly-rotate-90 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); + transform: rotate(90deg); } + +.gly-rotate-180 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); + transform: rotate(180deg); } + +.gly-rotate-270 { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); + transform: rotate(270deg); } + +.gly-flip-horizontal { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1); + transform: scale(-1, 1); } + +.gly-flip-vertical { + filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1); + transform: scale(1, -1); } + +.rightClickCtrl { + opacity: 1.0; + transition: opacity .3s ease-in; } + +.rightClickCtrlSelected { + opacity: 0.5; } diff --git a/static/js/eda.dragdropway.css.map b/static/js/eda.dragdropway.css.map new file mode 100644 index 0000000..68ed994 --- /dev/null +++ b/static/js/eda.dragdropway.css.map @@ -0,0 +1 @@ +{"version":3,"sources":[],"names":[],"mappings":"","file":"eda.dragdropway.css","sourceRoot":""} \ No newline at end of file diff --git a/static/js/eda.dragdropway.js b/static/js/eda.dragdropway.js index f6badf4..1f5a301 100644 --- a/static/js/eda.dragdropway.js +++ b/static/js/eda.dragdropway.js @@ -1,6158 +1,545 @@ -!function(e){function r(e,r,o){return 4===arguments.length?t.apply(this,arguments):void n(e,{declarative:!0,deps:r,declare:o})}function t(e,r,t,o){n(e,{declarative:!1,deps:r,executingRequire:t,execute:o})}function n(e,r){r.name=e,e in p||(p[e]=r),r.normalizedDeps=r.deps}function o(e,r){if(r[e.groupIndex]=r[e.groupIndex]||[],-1==v.call(r[e.groupIndex],e)){r[e.groupIndex].push(e);for(var t=0,n=e.normalizedDeps.length;n>t;t++){var a=e.normalizedDeps[t],u=p[a];if(u&&!u.evaluated){var d=e.groupIndex+(u.declarative!=e.declarative);if(void 0===u.groupIndex||u.groupIndex=0;a--){for(var u=t[a],i=0;ia;a++){var d=t.importers[a];if(!d.locked)for(var i=0;ia;a++){var l,s=r.normalizedDeps[a],c=p[s],v=x[s];v?l=v.exports:c&&!c.declarative?l=c.esModule:c?(d(c),v=c.module,l=v.exports):l=f(s),v&&v.importers?(v.importers.push(t),t.dependencies.push(v)):t.dependencies.push(null),t.setters[a]&&t.setters[a](l)}}}function i(e){var r,t=p[e];if(t)t.declarative?c(e,[]):t.evaluated||l(t),r=t.module.exports;else if(r=f(e),!r)throw new Error("Unable to load dependency "+e+".");return(!t||t.declarative)&&r&&r.__useDefault?r["default"]:r}function l(r){if(!r.module){var t={},n=r.module={exports:t,id:r.name};if(!r.executingRequire)for(var o=0,a=r.normalizedDeps.length;a>o;o++){var u=r.normalizedDeps[o],d=p[u];d&&l(d)}r.evaluated=!0;var c=r.execute.call(e,function(e){for(var t=0,n=r.deps.length;n>t;t++)if(r.deps[t]==e)return i(r.normalizedDeps[t]);throw new TypeError("Module "+e+" not declared as a dependency.")},t,n);c&&(n.exports=c),t=n.exports,t&&t.__esModule?r.esModule=t:r.esModule=s(t)}}function s(r){if(r===e)return r;var t={};if("object"==typeof r||"function"==typeof r)if(g){var n;for(var o in r)(n=Object.getOwnPropertyDescriptor(r,o))&&h(t,o,n)}else{var a=r&&r.hasOwnProperty;for(var o in r)(!a||r.hasOwnProperty(o))&&(t[o]=r[o])}return t["default"]=r,h(t,"__useDefault",{value:!0}),t}function c(r,t){var n=p[r];if(n&&!n.evaluated&&n.declarative){t.push(r);for(var o=0,a=n.normalizedDeps.length;a>o;o++){var u=n.normalizedDeps[o];-1==v.call(t,u)&&(p[u]?c(u,t):f(u))}n.evaluated||(n.evaluated=!0,n.module.execute.call(e))}}function f(e){if(D[e])return D[e];if("@node/"==e.substr(0,6))return y(e.substr(6));var r=p[e];if(!r)throw"Module "+e+" not present.";return a(e),c(e,[]),p[e]=void 0,r.declarative&&h(r.module.exports,"__esModule",{value:!0}),D[e]=r.declarative?r.module.exports:r.esModule}var p={},v=Array.prototype.indexOf||function(e){for(var r=0,t=this.length;t>r;r++)if(this[r]===e)return r;return-1},g=!0;try{Object.getOwnPropertyDescriptor({a:0},"a")}catch(m){g=!1}var h;!function(){try{Object.defineProperty({},"a",{})&&(h=Object.defineProperty)}catch(e){h=function(e,r,t){try{e[r]=t.value||t.get.call(e)}catch(n){}}}}();var x={},y="undefined"!=typeof System&&System._nodeRequire||"undefined"!=typeof require&&require.resolve&&"undefined"!=typeof process&&require,D={"@empty":{}};return function(e,n,o){return function(a){a(function(a){for(var u={_nodeRequire:y,register:r,registerDynamic:t,get:f,set:function(e,r){D[e]=r},newModule:function(e){return e}},d=0;d1)for(var d=1;d
' - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'empty', - name: 'no control', - subtitle: 'no control', - group: 'Blank', - formlyType: 'blank', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '
\n
\n
\n
\n
\n
', - control: 'empty', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'blank' - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Header', - name: 'Header', - subtitle: 'no control', - group: 'Decoration', - formlyType: 'header', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: ['
\n
\n
\n

Header

\n
\n
\n
\n
'].join(''), - control: 'Header', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'headers' - }); - - var subTitleTemplate = '\n
\n
\n

{{options.templateOptions.placeholder}}

\n
\n

\n
'; - - formlyConfigProvider.setType({ - name: 'subTitle', - template: subTitleTemplate - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Subtitle', - name: 'Subtitle', - subtitle: 'no control', - group: 'Decoration', - formlyType: 'subTitle', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - 'label': '
\n
\n
\n

SubTitle

\n
\n
\n
\n
', - 'control': 'Subtitle', - 'cssClass': 'col-xs-12' - }, { - addToGroupCtrl: 'headers' - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'TextInput', - name: 'Text input', - subtitle: 'Text input', - group: 'input', - formlyType: 'input', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - - /** - * drag and drop text input (basic) control template - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - 'label': '
\n
\n \n
\n \n

Description

\n
\n
\n
', - 'control': 'TextInput', - 'cssClass': 'col-xs-12' - }, { - addToGroupCtrl: 'inputs' - }); - - /** - * Add text input (Password) - * - * note : formly template already exists - * no need to create a custom one - * - * just declare in EasyFormGenFormlyBindingModelsProvider - */ - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Password', - name: 'Password', - subtitle: 'Password', - group: 'input', - formlyType: 'input', - formlySubtype: 'password', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop text input — password —control template - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - 'label': '
\n
\n \n
\n \n

Description

\n
\n
\n
', - 'control': 'Password', - 'cssClass': 'col-xs-12' - }, { - addToGroupCtrl: 'inputs' - }); - - /** - * Add angular UI date picker - * - * thx Kent C. Dodds for formly config template (since it was a huge config) - */ - var attributes = ['date-disabled', 'custom-class', 'show-weeks', 'starting-day', 'init-date', 'min-mode', 'max-mode', 'format-day', 'format-month', 'format-year', 'format-day-header', 'format-day-title', 'format-month-title', 'year-range', 'shortcut-propagation', 'datepicker-popup', 'show-button-bar', 'current-text', 'clear-text', 'close-text', 'close-on-date-selection', 'datepicker-append-to-body']; - - var bindings = ['datepicker-mode', 'min-date', 'max-date']; - - var ngModelAttrs = {}; - - angular.forEach(attributes, function (attr) { - return ngModelAttrs[camelize(attr)] = { attribute: attr }; - }); - angular.forEach(bindings, function (binding) { - return ngModelAttrs[camelize(binding)] = { bound: binding }; - }); - - function camelize(string) { - string = string.replace(/[\-_\s]+(.)?/g, function (match, chr) { - return chr ? chr.toUpperCase() : ''; - }); - // Ensure 1st char is always lowercase - return string.replace(/^([A-Z])/, function (match, chr) { - return chr ? chr.toLowerCase() : ''; - }); - } - - var angularUIDatePickerTemplate = '\n '; - - formlyConfigProvider.setType({ - name: 'datepicker', - template: angularUIDatePickerTemplate, - wrapper: ['bootstrapLabel', 'bootstrapHasError'], - controller: ['$scope', function ($scope) { - $scope.open = function ($event) { - $event.preventDefault(); - $event.stopPropagation(); - $scope.opened = true; - }; - }], - defaultOptions: { - ngModelAttrs: ngModelAttrs, - templateOptions: { - addonLeft: { - 'class': 'glyphicon glyphicon-calendar', - onClick: function onClick(options) { - return options.templateOptions.isOpen = !options.templateOptions.isOpen; - } - }, - onFocus: function onFocus($viewValue, $modelValue, scope) { - return scope.to.isOpen = !scope.to.isOpen; - }, - datepickerOptions: {} - } - } - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Date', - name: 'Date', - subtitle: 'Date', - group: 'input', - formlyType: 'datepicker', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [], - datepickerPopup: 'dd-MMMM-yyyy' - }); - /** - * drag and drop text input — date — control template (using angular UI datepicker) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '\n
\n
\n \n
\n\t\t\t\t\t
\n \t\t\t\t\t\n \t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n

description

\n
\n
', - control: 'Date', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'inputs' - }); - - /** - * Add textarea - * - * note : formly template already exists - * no need to create a custom one - * - * just declare in EasyFormGenFormlyBindingModelsProvider - */ - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Texarea', - name: 'Textarea', - subtitle: 'Textarea', - group: 'Textarea', - formlyType: 'textarea', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop textarea control template - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - 'label': '\n
\n
\n \n
\n \n

description

\n
\n
\n
', - 'control': 'Texarea', - 'cssClass': 'col-xs-12' - }, { - addToGroupCtrl: 'textareas' - }); - - /** - * Add rich text editor control (using textAngular) - * - */ - var richTexEditorTemplate = '\n \n '; - - formlyConfigProvider.setType({ - name: 'richEditor', - template: richTexEditorTemplate - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'RichTextEditor', - name: 'RichTextEditor', - subtitle: 'RichTextEditor', - group: 'Textarea', - formlyType: 'richEditor', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop rich text editor control template (using textAngular) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '\n
\n
\n \n
\n \n

description

\n
\n
\n
', - control: 'RichTextEditor', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'textareas' - }); - - /** - * Add radio - * - * note : formly template already exists - * no need to create a custom one - * - * just declare in EasyFormGenFormlyBindingModelsProvider - */ - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Radio', - name: 'Radio', - subtitle: 'Radio', - options: [], - group: 'Radio', - formlyType: 'radio', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop radio control template (using textAngular) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - 'label': '\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n

description

\n
\n
\n
', - 'control': 'Radio', - 'cssClass': 'col-xs-12' - }, { - addToGroupCtrl: 'radios' - }); - - /** - * Add checkbox - * - * note : formly template already exists - * no need to create a custom one - * - * just declare in EasyFormGenFormlyBindingModelsProvider - */ - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'Checkbox', - name: 'Checkbox', - subtitle: 'Checkbox', - group: 'Checkbox', - formlyType: 'checkbox', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop checkbox control template (using textAngular) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '\n
\n
\n \n
\n

description

\n
', - control: 'Checkbox', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'checkboxes' - }); - - /** - * Add basic Select control - * - * using nya-bs-select - */ - var basicSelectTemplate = '\n
    \n
  1. \n {{option.name}} \n
  2. \n
'; - - formlyConfigProvider.setType({ - name: 'basicSelect', - template: basicSelectTemplate - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'BasicSelect', - name: 'Basic select', - subtitle: 'Basic select', - options: [], - group: 'Select', - formlyType: 'basicSelect', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - - /** - * drag and drop basic select control template (using textAngular) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '\n
\n
\n
\n\n
    \n \n \n\n
\n
', - control: 'BasicSelect', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'selects' - }); - - /** - * Add Grouped Select control - * - * using nya-bs-select - */ - var groupedSelectTemplate = '\n
    \n
  1. \n {{$group}}\n \n {{option.name}}\n \n \n
  2. \n
'; - - formlyConfigProvider.setType({ - name: 'groupedSelect', - template: groupedSelectTemplate - }); - - EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({ - id: 'GroupedSelect', - name: 'Grouped Select', - subtitle: 'Grouped Select', - options: [], - group: 'Select', - formlyType: 'groupedSelect', - formlySubtype: '', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyOptions: [] - }); - /** - * drag and drop grouped select control template (using textAngular) - * - * - * @PARAM 1 : control template object (drag an drop) - * @PARAM 2 : object to indicates in which group of control it will be inserted - * (related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider) - */ - easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({ - label: '\n
\n
\n
\n
    \n \n
\n
', - control: 'GroupedSelect', - cssClass: 'col-xs-12' - }, { - addToGroupCtrl: 'selects' - }); - } - - return { - setters: [], - execute: function () { - formlyConfig.$inject = ['formlyConfigProvider', 'EasyFormGenFormlyBindingModelsProvider', 'easyFormDragWayConfigProvider']; - - _export('default', formlyConfig); - } - }; -}); -$__System.registerDynamic("4", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = { - "stepway": {"version": "1.1.0"}, - "dragdropway": {"version": "1.1.0"}, - "formviewer": {"version": "1.1.0"} - }; - global.define = __define; - return module.exports; -}); - -$__System.register('5', ['4'], function (_export) { - 'use strict'; - - var easyFormConfig, EASY_FORM_DD_VERSION_NAME, EASY_FORM_DD_VERSION_VALUE; - - function dragDropConfigFunct(easyFormDragWayConfigProvider) { - easyFormDragWayConfigProvider.setItemsNotTocount({ - //placeholder : '', - itemBeingDragged: 'dndDraggingSource' - }); - } - - return { - setters: [function (_) { - easyFormConfig = _['default']; - }], - execute: function () { - EASY_FORM_DD_VERSION_NAME = 'easyFormGenVersion'; - EASY_FORM_DD_VERSION_VALUE = easyFormConfig.dragdropway.version; - dragDropConfigFunct.$inject = ['easyFormDragWayConfigProvider']; - - _export('default', dragDropConfigFunct); - - _export('EASY_FORM_DD_VERSION_NAME', EASY_FORM_DD_VERSION_NAME); - - _export('EASY_FORM_DD_VERSION_VALUE', EASY_FORM_DD_VERSION_VALUE); - } - }; -}); -$__System.register('6', [], function (_export) { - 'use strict'; - - var CORE_MODULES; - return { - setters: [], - execute: function () { - CORE_MODULES = ['textAngular', 'textAngularSetup', 'ngAnimate', 'toaster', 'formly', 'formlyBootstrap', 'ui.bootstrap', 'nya.bootstrap.select', 'mgcrea.ngStrap.affix' - // 'pascalprecht.translate' - ]; - - _export('default', angular.module('easyFormGen.dragDropWay.core', CORE_MODULES)); - } - }; -}); -$__System.register('7', [], function (_export) { - 'use strict'; - - var dateFormats, setToday, clearDateTime; - return { - setters: [], - execute: function () { - dateFormats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate']; - - setToday = function setToday(datetimePickerModel) { - datetimePickerModel.dt = new Date(); - }; - - clearDateTime = function clearDateTime(datetimePickerModel) { - datetimePickerModel.dt = new Date(); - }; - - _export('dateFormats', dateFormats); - - _export('setToday', setToday); - - _export('clearDateTime', clearDateTime); - } - }; -}); -$__System.register('8', ['7', '9', 'a'], function (_export) { - var dateFormats, setToday, clearDateTime, _createClass, _classCallCheck, LEFT_PANEL_CONTROLLER, LEFT_PANEL_CONTROLLERAS, leftPanelController; - - return { - setters: [function (_2) { - dateFormats = _2.dateFormats; - setToday = _2.setToday; - clearDateTime = _2.clearDateTime; - }, function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - LEFT_PANEL_CONTROLLER = 'leftPanelController'; - LEFT_PANEL_CONTROLLERAS = 'leftPanelCtrl'; - - leftPanelController = (function () { - function leftPanelController(toaster, $timeout, $selectOptionMange, controllerModalProxy) { - _classCallCheck(this, leftPanelController); - - this.toaster = toaster; - this.$timeout = $timeout; - this.$selectOptionMange = $selectOptionMange; - this.controllerModalProxy = controllerModalProxy; - - this.init(); - } - - _createClass(leftPanelController, [{ - key: 'init', - value: function init() { - this.proxyModel = this.controllerModalProxy.proxyModel; - this.proxyModel.selectedControl = this.proxyModel.temporyConfig.selectedControl; - this.basicSelectRowCollection = this.controllerModalProxy.basicSelectRowCollection; - this.newOptionBasicSelect = this.controllerModalProxy.newOptionBasicSelect; - - this.groupedSelectRowCollection = this.controllerModalProxy.groupedSelectRowCollection; - this.newOptionGroupedSelect = this.controllerModalProxy.newOptionGroupedSelect; - this.GroupedSelectGroups = this.controllerModalProxy.GroupedSelectGroups; - this.newGroupGroupedSelect = this.controllerModalProxy.newGroupGroupedSelect; - this.groupSelectGroupClick = this.controllerModalProxy.groupSelectGroupClick; - - this.radioRowCollection = this.controllerModalProxy.radioRowCollection; - this.newOptionRadio = this.controllerModalProxy.newOptionRadio; - - this.demodt = {}; - this.demodt.formats = dateFormats; - this.dateOptions = this.getDateOptions(); - - // this.controllerModalProxy.resetAllTemporyModels(); - this.initNyaSelectConformingSelectedControl(); - } - }, { - key: 'getDateOptions', - value: function getDateOptions() { - var dateOptions = { - formatYear: 'yy', - startingDay: 1, - showWeeks: true, - initDate: null - }; - return dateOptions; - } - }, { - key: 'initNyaSelectConformingSelectedControl', - value: function initNyaSelectConformingSelectedControl() { - //place proxyModel to selection if not none : - if (this.proxyModel.temporyConfig.selectedControl !== 'none') { - for (var i = this.proxyModel.controls.length - 1; i >= 0; i--) { - if (this.proxyModel.controls[i].id === this.proxyModel.temporyConfig.selectedControl) this.modelproxyModel = this.proxyModel.controls[i]; - } - if (this.proxyModel.temporyConfig.selectedControl === 'BasicSelect') this.controllerModalProxy.bindBasicSelectFromProxyModel(self.basicSelectRowCollection); - if (this.proxyModel.temporyConfig.selectedControl === 'GroupedSelect') this.controllerModalProxy.bindGroupedSelectFromProxyModel(this.groupedSelectRowCollection, this.GroupedSelectGroups); - if (this.proxyModel.temporyConfig.selectedControl === 'Radio') this.controllerModalProxy.bindRadioFromProxyModel(this.radioRowCollection); - } - } - }, { - key: 'updateSpecialControl', - value: function updateSpecialControl() { - //refresh service data for particular controls as selects and radio - this.proxyModel.basicSelectRowCollection = this.basicSelectRowCollection; - this.proxyModel.newOptionBasicSelect = this.newOptionBasicSelect; - this.proxyModel.groupedSelectRowCollection = this.groupedSelectRowCollection; - this.proxyModel.newOptionGroupedSelect = this.newOptionGroupedSelect; - this.proxyModel.GroupedSelectGroups = this.GroupedSelectGroups; - this.proxyModel.newGroupGroupedSelect = this.newGroupGroupedSelect; - this.proxyModel.groupSelectGroupClick = this.groupSelectGroupClick; - this.proxyModel.radioRowCollection = this.radioRowCollection; - this.proxyModel.newOptionRadio = this.newOptionRadio; - //force apply update proxyModel - this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel(); - return true; - } - }, { - key: 'resetTemporyConfig', - value: function resetTemporyConfig() { - this.proxyModel.temporyConfig = { - formlyLabel: '', - formlyRequired: false, - formlyPlaceholder: '', - formlyDesciption: '', - formlyOptions: [] - }; - } - }, { - key: 'resetControl', - value: function resetControl() { - this.proxyModel.temporyConfig.formlyLabel = ''; - this.proxyModel.temporyConfig.formlyRequired = false; - this.proxyModel.temporyConfig.formlyPlaceholder = ''; - this.proxyModel.temporyConfig.formlyDesciption = ''; - this.proxyModel.temporyConfig.formlyOptions = []; - this.proxyModel.temporyConfig.datepickerPopup = this.initDatePicker(); - } - }, { - key: 'initDatePicker', - value: function initDatePicker() { - this.proxyModel.temporyConfig.datepickerPopup = this.demodt.formats[0]; - } - }, { - key: 'selectThisControl', - value: function selectThisControl(controlName) { - this.proxyModel.selectedControl = 'none'; - this.resetTemporyConfig(); - for (var i = this.proxyModel.controls.length - 1; i >= 0; i--) { - if (this.proxyModel.controls[i].id === controlName) { - this.proxyModel.selectedControl = this.proxyModel.controls[i].id; - } - } - if (this.proxyModel.selectedControl === 'Date') this.initDatePicker(); - } - - /** - * ============================================================== - * specific controls management - * (display, properties.... : ex : grouped Select) - * ============================================================== - */ - }, { - key: 'addNewOptionRadio', - value: function addNewOptionRadio() { - var result = this.$selectOptionMange.addNewOptionRadio(this.radioRowCollection, this.newOptionRadio.saisie); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: '\'' + this.newOptionRadio.saisie + '\' cannot be added.', - showCloseButton: true - }); - } - //reset input - this.newOptionRadio = { saisie: '' }; - } - }, { - key: 'removeRadioRow', - value: function removeRadioRow(index) { - var result = this.$selectOptionMange.removeOption(this.radioRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Delete was cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'upThisRadioRow', - value: function upThisRadioRow(index) { - var result = this.$selectOptionMange.upthisOption(this.radioRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'downThisRadioRow', - value: function downThisRadioRow(index) { - var result = this.$selectOptionMange.downthisOption(this.radioRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'addNewOptionBasicSelect', - value: function addNewOptionBasicSelect() { - var result = this.$selectOptionMange.addNewOptionBasicSelect(this.basicSelectRowCollection, this.newOptionBasicSelect.saisie); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: '\'' + this.newOptionBasicSelect.saisie + '\' cannot be added.', - showCloseButton: true - }); - } - this.newOptionBasicSelect = { saisie: '' }; //reset input - } - }, { - key: 'removeRow', - value: function removeRow(index) { - var result = this.$selectOptionMange.removeOption(this.basicSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Delete was cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'upThisRow', - value: function upThisRow(index) { - var result = this.$selectOptionMange.upthisOption(this.basicSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'downThisRow', - value: function downThisRow(index) { - var result = this.$selectOptionMange.downthisOption(this.basicSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'showGroupListToChoose', - value: function showGroupListToChoose() { - this.groupSelectGroupClick.showList = !this.groupSelectGroupClick.showList; - } - }, { - key: 'addNewGroupToGroupedSelect', - value: function addNewGroupToGroupedSelect() { - if (this.newGroupGroupedSelect.saisie !== '') { - for (var i = this.GroupedSelectGroups.list.length - 1; i >= 0; i--) { - if (this.GroupedSelectGroups.list[i] === this.newGroupGroupedSelect.saisie) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: 'Group already exists', - body: 'No group added.', - showCloseButton: true - }); - } - } - this.GroupedSelectGroups.list.push(this.newGroupGroupedSelect.saisie); - } else { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: 'Not a valid group to add', - body: 'No group added.', - showCloseButton: true - }); - } - this.newGroupGroupedSelect.saisie = ''; - } - }, { - key: 'addNewOptionGroupedSelect', - value: function addNewOptionGroupedSelect() { - var result = this.$selectOptionMange.addNewOptionGroupedSelect(this.groupedSelectRowCollection, this.newOptionGroupedSelect.saisie, ''); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: '\'' + this.newOptionGroupedSelect.saisie + '\' cannot be added.', - showCloseButton: true - }); - } - //bind nya : dont bind here $apply is not done fast enough - //bindGroupedSelectToNya(); - //reset input - this.newOptionGroupedSelect = { saisie: '' }; - } - }, { - key: 'removeGroupedSelectRow', - value: function removeGroupedSelectRow(index) { - var result = this.$selectOptionMange.removeOption(this.groupedSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Delete was cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'upThisGroupedSelectRow', - value: function upThisGroupedSelectRow(index) { - var result = this.$selectOptionMange.upthisOption(this.groupedSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'downThisGroupedSelectRow', - value: function downThisGroupedSelectRow(index) { - var result = this.$selectOptionMange.downthisOption(this.groupedSelectRowCollection, index); - if (result.resultFlag === false) { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: result.details, - body: 'Operation cancelled.', - showCloseButton: true - }); - } - } - }, { - key: 'today', - value: function today() { - setToday(this.demodt); - } - }, { - key: 'clear', - value: function clear() { - clearDateTime(this.demodt); - } - }, { - key: 'open', - value: function open($event) { - $event.preventDefault(); - $event.stopPropagation(); - this.demodt.opened = true; - } - }]); - - return leftPanelController; - })(); - - leftPanelController.$inject = ['toaster', '$timeout', '$selectOptionMange', 'controllerModalProxy']; - - _export('default', leftPanelController); - - _export('LEFT_PANEL_CONTROLLER', LEFT_PANEL_CONTROLLER); - - _export('LEFT_PANEL_CONTROLLERAS', LEFT_PANEL_CONTROLLERAS); - } - }; -}); -$__System.registerDynamic("b", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n\t
\n\t\t\n\t\t\t\n ×\n \n\t\t\n\t
\n\t
\n\t
\n\t\t
\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n \n  \n Select a control\n
\n\t\t\t\t
\n\t\t\t
\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t\n Close\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('c', ['8', 'b'], function (_export) { - 'use strict'; - - var LEFT_PANEL_CONTROLLER, LEFT_PANEL_CONTROLLERAS, leftPanelTemplate, LEFT_PANEL_DIRECTIVE; - - function leftPanel() { - var directive = { - restrict: 'E', - template: leftPanelTemplate, - scope: {}, - controller: LEFT_PANEL_CONTROLLER, - controllerAs: LEFT_PANEL_CONTROLLERAS, - bindToController: { - closeEditPanel: '&', - selectedControl: '&', - saveFromEditPanel: '&' - } - }; - return directive; - } - - return { - setters: [function (_) { - LEFT_PANEL_CONTROLLER = _.LEFT_PANEL_CONTROLLER; - LEFT_PANEL_CONTROLLERAS = _.LEFT_PANEL_CONTROLLERAS; - }, function (_b) { - leftPanelTemplate = _b['default']; - }], - execute: function () { - LEFT_PANEL_DIRECTIVE = 'leftPanel'; - leftPanel.$inject = []; - - _export('default', leftPanel); - - _export('LEFT_PANEL_DIRECTIVE', LEFT_PANEL_DIRECTIVE); - } - }; -}); -$__System.register('d', [], function (_export) { - /* global angular */ - 'use strict'; - - var resetModel, validOption; - return { - setters: [], - execute: function () { - resetModel = function resetModel(selectObj) { - var zeroModel = { rows: [] }; - angular.copy(zeroModel, selectObj); - }; - - validOption = function validOption(selectObj, newOptionText) { - var fullResponse = { - resultFlag: false, - details: '' - }; - if (typeof newOptionText === 'undefined') { - fullResponse.resultFlag = false; - fullResponse.details = 'Entered option is empty'; - return fullResponse; - } - if (newOptionText !== '') { - for (var i = selectObj.rows.length - 1; i >= 0; i--) { - if (selectObj.rows[i].option === newOptionText) { - fullResponse.resultFlag = false; - fullResponse.details = 'Entered option is not unique'; - return fullResponse; - } - } - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } - fullResponse.resultFlag = false; - fullResponse.details = 'Entered option is empty'; - return fullResponse; - }; - - _export('resetModel', resetModel); - - _export('validOption', validOption); - } - }; -}); -$__System.register('e', ['9', 'a', 'd'], function (_export) { - var _createClass, _classCallCheck, helpers, LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE, selectOptionMange; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }, function (_d) { - helpers = _d; - }], - execute: function () { - /* global angular */ - 'use strict'; - - LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE = '$selectOptionMange'; - - selectOptionMange = (function () { - function selectOptionMange() { - _classCallCheck(this, selectOptionMange); - - this.init(); - } - - _createClass(selectOptionMange, [{ - key: 'init', - value: function init() {} - }, { - key: 'initModel', - value: function initModel(selectObj) { - helpers.resetModel(selectObj); - } - }, { - key: 'isOptionUnique', - value: function isOptionUnique(selectObj, textValue) { - for (var i = selectObj.rows.length - 1; i >= 0; i--) { - if (selectObj.rows[i].option === textValue) return false; - } - return true; - } - }, { - key: 'isOptionValidFormat', - value: function isOptionValidFormat(textValue) { - if (textValue !== '') return true; - return false; - } - }, { - key: 'addNewOptionRadio', - value: function addNewOptionRadio(selectObj, newOptionText) { - var fullResponse = { - resultFlag: false, - details: '' - }; - var checkResult = helpers.validOption(selectObj, newOptionText); - if (checkResult.resultFlag === true) { - var newOption = { - option: newOptionText, - order: selectObj.rows.length - }; - selectObj.rows.push(newOption); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - angular.copy(checkResult, fullResponse); - return fullResponse; - } - } - }, { - key: 'addNewOptionBasicSelect', - value: function addNewOptionBasicSelect(selectObj, newOptionText) { - var fullResponse = { - resultFlag: false, - details: '' - }; - var checkResult = helpers.validOption(selectObj, newOptionText); - if (checkResult.resultFlag === true) { - var newOption = { - option: newOptionText, - order: selectObj.rows.length - }; - selectObj.rows.push(newOption); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - angular.copy(checkResult, fullResponse); - return fullResponse; - } - } - }, { - key: 'addNewOptionGroupedSelect', - value: function addNewOptionGroupedSelect(selectObj, newOptionText, newOptionGroup) { - var fullResponse = { - resultFlag: false, - details: '' - }; - var checkResult = helpers.validOption(selectObj, newOptionText); - if (checkResult.resultFlag === true) { - var newOption = { - option: newOptionText, - group: newOptionGroup, - order: selectObj.rows.length - }; - selectObj.rows.push(newOption); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - angular.copy(checkResult, fullResponse); - return fullResponse; - } - } - }, { - key: 'removeOption', - value: function removeOption(selectObj, AtIndex) { - var fullResponse = { - resultFlag: false, - details: '' - }; - if (AtIndex !== -1) { - selectObj.rows.splice(AtIndex, 1); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - fullResponse.resultFlag = false; - fullResponse.details = 'Option index not valid'; - return fullResponse; - } - } - }, { - key: 'upthisOption', - value: function upthisOption(selectObj, indexOption) { - var fullResponse = { - resultFlag: false, - details: '' - }; - if (indexOption > -1) { - if (indexOption > 0) { - if (selectObj.rows[indexOption - 1]) { - var currentOption = selectObj.rows[indexOption]; - selectObj.rows.splice(indexOption, 1); - selectObj.rows.splice(indexOption - 1, 0, currentOption); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - fullResponse.resultFlag = false; - fullResponse.details = 'Can\'t retreive option from option index'; - return fullResponse; - } - } else { - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } - } else { - fullResponse.resultFlag = false; - fullResponse.details = 'Option index not valid'; - return fullResponse; - } - } - }, { - key: 'downthisOption', - value: function downthisOption(selectObj, indexOption) { - var fullResponse = { - resultFlag: false, - details: '' - }; - if (indexOption > -1) { - if (indexOption < selectObj.rows.length - 1) { - if (selectObj.rows[indexOption + 1]) { - var currentOption = selectObj.rows[indexOption]; - selectObj.rows.splice(indexOption, 1); - selectObj.rows.splice(indexOption + 1, 0, currentOption); - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } else { - fullResponse.resultFlag = false; - fullResponse.details = 'Can\'t retreive option from option index'; - return fullResponse; - } - } else { - fullResponse.resultFlag = true; - fullResponse.details = ''; - return fullResponse; - } - } else { - fullResponse.resultFlag = false; - fullResponse.details = 'Option index not valid'; - return fullResponse; - } - } - }]); - - return selectOptionMange; - })(); - - selectOptionMange.$inject = []; - - _export('default', selectOptionMange); - - _export('LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE', LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE); - } - }; -}); -$__System.register('f', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, CONTROLLER_MODAL_PROXY, INIT_OPTION_MODEL, controllerModalProxy; - - return { - setters: [function (_2) { - _createClass = _2['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - /// - /// - - /** - * TODO : - * - clean deprecated functions - * - method 'resetAllTemporyModels' -> remove no use angular.copy to optimize - */ - - 'use strict'; - - CONTROLLER_MODAL_PROXY = 'controllerModalProxy'; - INIT_OPTION_MODEL = { rows: [] }; - - controllerModalProxy = (function () { - function controllerModalProxy(EasyFormGenFormlyBindingModels) { - _classCallCheck(this, controllerModalProxy); - - this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels; - this.init(); - } - - _createClass(controllerModalProxy, [{ - key: 'init', - value: function init() { - this.proxyModel = {}; - this.resetProxyModel(); - this.editPanelModel = { - toggle: false, - lineIndex: -1, - columnIndex: -1, - control: {} - }; - this.basicSelectRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionBasicSelect = angular.copy({ saisie: '' }); - - this.groupedSelectRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionGroupedSelect = angular.copy({ saisie: '' }); - this.GroupedSelectGroups = angular.copy({ list: [] }); - this.newGroupGroupedSelect = angular.copy({ saisie: '' }); - this.groupSelectGroupClick = angular.copy({ showList: false }); - - this.radioRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionRadio = angular.copy({ saisie: '' }); - } - - // deprecated in drag and drop version, use initProxyModel insead - }, { - key: 'initNyaSelect', - value: function initNyaSelect(nyaSelectObj) { - return this.resetNyaSelect(nyaSelectObj); - } - }, { - key: 'initProxyModel', - value: function initProxyModel(thisProxyModelToInit) { - return this.resetProxyModel(thisProxyModelToInit); - } - - // deprecated : in drag and drop version, use "resetProxyModel()"" - }, { - key: 'resetNyaSelect', - value: function resetNyaSelect(nyaSelectObj) { - var newNyaSelectObj = this.EasyFormGenFormlyBindingModels.getEasyFormListControls(); - angular.copy(newNyaSelectObj, nyaSelectObj); - return true; - } - }, { - key: 'resetProxyModel', - value: function resetProxyModel() { - var newProxyModel = this.EasyFormGenFormlyBindingModels.getEasyFormListControls(); - this.proxyModel = angular.copy(newProxyModel); - return true; - } - }, { - key: 'returnControlFromAddCtrlModalModel', - value: function returnControlFromAddCtrlModalModel(CtrlModalModel) { - var modelToReturn = { - selectedControl: 'none', - formlyType: 'none', - formlySubtype: 'none', - formlyLabel: '', - formlyRequired: false, - formlyDesciption: '', - formlyPlaceholder: '', - formlyOptions: [] - }; - for (var i = CtrlModalModel.controls.length - 1; i >= 0; i--) { - if (CtrlModalModel.selectedControl === CtrlModalModel.controls[i].id) { - - modelToReturn.selectedControl = CtrlModalModel.selectedControl; - modelToReturn.formlyType = CtrlModalModel.controls[i].formlyType; - modelToReturn.formlySubtype = CtrlModalModel.controls[i].formlySubtype; - modelToReturn.formlyLabel = CtrlModalModel.controls[i].formlyLabel; - modelToReturn.formlyRequired = CtrlModalModel.controls[i].formlyRequired; - modelToReturn.formlyDesciption = CtrlModalModel.controls[i].formlyDesciption; - modelToReturn.formlyPlaceholder = CtrlModalModel.controls[i].formlyPlaceholder; - modelToReturn.formlyOptions = CtrlModalModel.controls[i].formlyOptions; - // particular properties, here ; datetpicker format - if (CtrlModalModel.controls[i].formlyType === 'datepicker') modelToReturn.datepickerPopup = CtrlModalModel.controls[i].datepickerPopup; - } - } - return modelToReturn; - } - }, { - key: 'validKeyUniqueness', - value: function validKeyUniqueness(thisKey, configurationObj) { - var isUnique = true; - for (var i = configurationObj.lines.length - 1; i >= 0; i--) { - for (var j = configurationObj.lines[i].columns.length - 1; j >= 0; j--) { - if (configurationObj.lines[i].columns[j].control.key === thisKey) { - isUnique = false; - } - } - } - return isUnique; - } - }, { - key: 'getSelectedProxyModel', - value: function getSelectedProxyModel(configurationSelectedCtrl) { - var selectedProxyModelControl = 'none'; - var listProxyModelCTRL = angular.copy(this.EasyFormGenFormlyBindingModels.getEasyFormListControls().controls); - - listProxyModelCTRL.forEach(function (control) { - if (control.formlyType === configurationSelectedCtrl.type && control.formlySubtype === configurationSelectedCtrl.subtype) { - selectedProxyModelControl = control.id; - return selectedProxyModelControl; - } - }); - return selectedProxyModelControl; - } - - // to refresh configuration model from edit panel - }, { - key: 'bindConfigurationModelFromProxyModel', - value: function bindConfigurationModelFromProxyModel(indexLine, numcolumn, configurationObj) { - var extractedProps = angular.copy(this.proxyModel.temporyConfig); - - configurationObj.lines[indexLine].columns[numcolumn].control.selectedControl = extractedProps.selectedControl; - configurationObj.lines[indexLine].columns[numcolumn].control.type = extractedProps.formlyType; - configurationObj.lines[indexLine].columns[numcolumn].control.subtype = extractedProps.formlySubtype; - // templateOptions - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions = { - label: '', - required: false, - description: '', - placeholder: '', - options: [] - }; - // then bind template option - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label = extractedProps.formlyLabel; - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required = extractedProps.formlyRequired; - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description = extractedProps.formlyDesciption; - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder = extractedProps.formlyPlaceholder; - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options = extractedProps.formlyOptions; - // add additionnal — particular — properties : -> datepicker : datepickerPopup - if (configurationObj.lines[indexLine].columns[numcolumn].control.type === 'datepicker') { - configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup = extractedProps.datepickerPopup; - } - // unique key (set only first time) in this model is formly control type + Date.now(); - var newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now(); - - if (this.validKeyUniqueness(newKey, configurationObj) === true) { - configurationObj.lines[indexLine].columns[numcolumn].control.key = newKey; - } else { - newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now(); - if (this.validKeyUniqueness(newKey, configurationObj) === true) { - configurationObj.lines[indexLine].columns[numcolumn].control.key = newKey; - } else { - newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now(); - } - } - configurationObj.lines[indexLine].columns[numcolumn].control.edited = true; - } - - /** - * set local proxyModel from Selected control in configuration model - * - * replace deprecated "getNyASelectFromSelectedLineColumn" - * -model is now named "proxyModel" - * -model is stored in this service - * - * -> it has just more sence! - */ - }, { - key: 'setProxyModelFromConfigurationSelection', - value: function setProxyModelFromConfigurationSelection(configurationObj, indexLine, numcolumn) { - // data send to modal controller - if (typeof configurationObj.lines[indexLine].columns[numcolumn].control != 'undefined') { - // determine selected control from indexes and control.type and control.subtype in configuration model - this.proxyModel.selectedControl = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? this.getSelectedProxyModel(configurationObj.lines[indexLine].columns[numcolumn].control) : 'none'; - this.proxyModel.temporyConfig.selectedControl = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? this.getSelectedProxyModel(configurationObj.lines[indexLine].columns[numcolumn].control) : 'none'; - this.proxyModel.temporyConfig.formlyType = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.type : 'none'; - this.proxyModel.temporyConfig.formlySubtype = typeof configurationObj.lines[indexLine].columns[numcolumn].control.subtype != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.subtype : 'none'; - this.proxyModel.temporyConfig.formlyLabel = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label : ''; - this.proxyModel.temporyConfig.formlyRequired = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required : ''; - this.proxyModel.temporyConfig.formlyDesciption = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description : ''; - this.proxyModel.temporyConfig.formlyPlaceholder = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder : ''; - this.proxyModel.temporyConfig.formlyOptions = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options : ''; - // particular case : datepicker - if (this.proxyModel.temporyConfig.selectedControl === 'Date') { - this.proxyModel.temporyConfig.datepickerPopup = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup : ''; - } - // console.info('debug setProxyModelFromConfigurationSelection'); - // console.dir({ - // selectedControl : angular.copy(this.proxyModel.selectedControl ), - // temporyConfig : angular.copy(this.proxyModel.temporyConfig) - // }); - } - return this.proxyModel; - } - }, { - key: 'getProxyModel', - value: function getProxyModel() { - return this.proxyModel; - } - - /** - * ============================================================ - * following methods for "editPanelModel" - * - * Note this model : - * - to manage side edit control panel - * ============================================================ - */ - - // getter : editPanelModel (whole model => type = object) - }, { - key: 'getEditPanelModelAllModel', - value: function getEditPanelModelAllModel() { - return this.editPanelModel; - } - - // setter : editPanelModel (whole model => type = object) - }, { - key: 'setEditPanelModelControl', - value: function setEditPanelModelControl(newEditPanelModel) { - var successfullDone = false; - if (typeof newEditPanelModel !== 'undefined') { - angular.merge(this.editPanelModel, newEditPanelModel); - successfullDone = true; - } - return successfullDone; - } - - // getter : editPanelModel.columnIndex - }, { - key: 'getEditPanelModelColumnIndex', - value: function getEditPanelModelColumnIndex() { - return this.editPanelModel.columnIndex; - } - - // setter : editPanelModel.columnIndex - }, { - key: 'setEditPanelModelColumnIndex', - value: function setEditPanelModelColumnIndex(newColumnIndex) { - var successfullDone = false; - if (typeof newColumnIndex !== 'undefined') { - this.editPanelModel.columnIndex = newColumnIndex; - successfullDone = true; - } - return successfullDone; - } - - // getter : editPanelModel.lineIndex - }, { - key: 'getEditPanelModelLineIndex', - value: function getEditPanelModelLineIndex() { - return this.editPanelModel.lineIndex; - } - - // setter : editPanelModel.lineIndex - }, { - key: 'setEditPanelModelLineIndex', - value: function setEditPanelModelLineIndex(newLineIndex) { - var successfullDone = false; - if (typeof newLineIndex !== 'undefined') { - this.editPanelModel.lineIndex = newLineIndex; - successfullDone = true; - } - return successfullDone; - } - - // getter : editPanelModel.control - }, { - key: 'getEditPanelModelControl', - value: function getEditPanelModelControl() { - return this.editPanelModel.control; - } - - // getter : editPanelModel.toggle - }, { - key: 'getEditPanelModelToggle', - value: function getEditPanelModelToggle() { - return this.editPanelModel.toggle; - } - - // setter : editPanelModel.toggle - }, { - key: 'setEditPanelModelToggle', - value: function setEditPanelModelToggle(newToggleValue) { - var successfullDone = false; - if (typeof newToggleValue !== 'undefined') { - this.editPanelModel.toggle = newToggleValue; - successfullDone = true; - } - return successfullDone; - } - }, { - key: 'resetAllTemporyModels', - value: function resetAllTemporyModels() { - this.basicSelectRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionBasicSelect = angular.copy({ saisie: '' }); - - this.groupedSelectRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionGroupedSelect = angular.copy({ saisie: '' }); - this.GroupedSelectGroups = angular.copy({ list: [] }); - this.newGroupGroupedSelect = angular.copy({ saisie: '' }); - this.groupSelectGroupClick = angular.copy({ showList: false }); - - this.radioRowCollection = angular.copy(INIT_OPTION_MODEL); - this.newOptionRadio = angular.copy({ saisie: '' }); - return true; - } - - /** - * bindSpecialCtrlTemporyModelsToProxyModel: needed when validating after editing a control - * tempory models applied to proxyModel if control is one of these - * - * example : if selected control is a basic select options - * -> so its tempory models are bound to proxyModel - */ - }, { - key: 'bindSpecialCtrlTemporyModelsToProxyModel', - value: function bindSpecialCtrlTemporyModelsToProxyModel() { - if (this.proxyModel.selectedControl === 'BasicSelect') { - this.bindBasicSelectToProxyModel(this.basicSelectRowCollection); - } - if (this.proxyModel.selectedControl === 'GroupedSelect') { - this.bindGroupedSelectToProxyModel(this.groupedSelectRowCollection); - } - if (this.proxyModel.selectedControl === 'Radio') { - this.bindRadioToProxyModel(this.radioRowCollection); - } - } - - // basic select - }, { - key: 'bindBasicSelectFromProxyModel', - value: function bindBasicSelectFromProxyModel(basicSelectRowCollection) { - if (this.proxyModel.temporyConfig.formlyOptions.length > 0) { - for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) { - var newOption = { - 'option': this.proxyModel.temporyConfig.formlyOptions[i].name, - 'order': i, - 'group': '' - }; - basicSelectRowCollection.rows.push(newOption); - } - } - } - }, { - key: 'bindBasicSelectToProxyModel', - value: function bindBasicSelectToProxyModel(basicSelectRowCollection) { - var resetNyASelectOptions = []; - this.proxyModel.temporyConfig.formlyOptions = resetNyASelectOptions; - if (basicSelectRowCollection.rows.length > 0) { - for (var i = 0; i <= basicSelectRowCollection.rows.length - 1; i++) { - var newOption = { - 'name': basicSelectRowCollection.rows[i].option, - 'value': i, - 'group': '' - }; - this.proxyModel.temporyConfig.formlyOptions.push(newOption); - } - } - } - - //* grouped select - }, { - key: 'bindGroupedSelectFromProxyModel', - value: function bindGroupedSelectFromProxyModel(groupedSelectRowCollection, GroupedSelectGroups) { - if (this.proxyModel.temporyConfig.formlyOptions.length > 0) { - for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) { - var newOption = { - 'option': this.proxyModel.temporyConfig.formlyOptions[i].name, - 'order': i, - 'group': this.proxyModel.temporyConfig.formlyOptions[i].group - }; - groupedSelectRowCollection.rows.push(newOption); - } - //grouplist : thx to lodash it is easy - var filteredgroup = _.uniq(_.pluck(groupedSelectRowCollection.rows, 'group')); - angular.copy(filteredgroup, GroupedSelectGroups.list); - } - } - }, { - key: 'bindGroupedSelectToProxyModel', - value: function bindGroupedSelectToProxyModel(groupedSelectRowCollection) { - this.proxyModel.temporyConfig.formlyOptions = []; - for (var i = 0; i <= groupedSelectRowCollection.rows.length - 1; i++) { - var newOption = { - 'name': groupedSelectRowCollection.rows[i].option, - 'value': i, - 'group': groupedSelectRowCollection.rows[i].group - }; - this.proxyModel.temporyConfig.formlyOptions.push(newOption); - } - } - - // radio - }, { - key: 'bindRadioFromProxyModel', - value: function bindRadioFromProxyModel(radioRowCollection) { - if (this.proxyModel.temporyConfig.formlyOptions.length > 0) { - for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) { - var newOption = { - 'option': this.proxyModel.temporyConfig.formlyOptions[i].name, - 'order': i, - 'group': '' - }; - radioRowCollection.rows.push(newOption); - } - } - } - }, { - key: 'bindRadioToProxyModel', - value: function bindRadioToProxyModel(radioRowCollection) { - var resetproxyModelOptions = []; - this.proxyModel.temporyConfig.formlyOptions = resetproxyModelOptions; - if (radioRowCollection.rows.length > 0) { - for (var i = 0; i <= radioRowCollection.rows.length - 1; i++) { - var newOption = { - 'name': radioRowCollection.rows[i].option, - 'value': i, - 'group': '' - }; - this.proxyModel.temporyConfig.formlyOptions.push(newOption); - } - } - } - }]); - - return controllerModalProxy; - })(); - - controllerModalProxy.$inject = ['EasyFormGenFormlyBindingModels']; - - _export('default', controllerModalProxy); - - _export('CONTROLLER_MODAL_PROXY', CONTROLLER_MODAL_PROXY); - } - }; -}); -$__System.registerDynamic("10", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n \n \n  \n Reset\n \n \n \n  \n Save\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('11', ['10'], function (_export) { - 'use strict'; - - var leftPanelValidEditFooterTemplate, LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE; - - function leftPanelValidEditFooter() { - var directive = { - restrict: 'E', - template: leftPanelValidEditFooterTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelValidEditFooterTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE = 'leftPanelValidEditFooter'; - leftPanelValidEditFooter.$inject = []; - - _export('default', leftPanelValidEditFooter); - - _export('LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE', LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("12", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Label text :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n placeholder :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Required :\n \n
\n
 
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Description :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('13', ['12'], function (_export) { - 'use strict'; - - var leftPanelTextInputControlTemplate, LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE; - - function leftPanelTextInputControl() { - var directive = { - restrict: 'E', - template: leftPanelTextInputControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelTextInputControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE = 'leftPanelTextInputControl'; - leftPanelTextInputControl.$inject = []; - - _export('default', leftPanelTextInputControl); - - _export('LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE', LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("14", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Label text :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Required :\n \n
\n
\n  \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Description :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('15', ['14'], function (_export) { - 'use strict'; - - var leftPanelTextareaControlTemplate, LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE; - - function leftPanelTextareaControl() { - var directive = { - restrict: 'E', - template: leftPanelTextareaControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelTextareaControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE = 'leftPanelTextareaControl'; - leftPanelTextareaControl.$inject = []; - - _export('default', leftPanelTextareaControl); - - _export('LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE', LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("16", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Subtitle text :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('17', ['16'], function (_export) { - 'use strict'; - - var leftPanelSubtitleControlTemplate, LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE; - - function leftPanelSubtitleControl() { - var directive = { - restrict: 'E', - template: leftPanelSubtitleControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelSubtitleControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE = 'leftPanelSubtitleControl'; - leftPanelSubtitleControl.$inject = []; - - _export('default', leftPanelSubtitleControl); - - _export('LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE', LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("18", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n   Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Description :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('19', ['18'], function (_export) { - 'use strict'; - - var leftPanelRichTextEditorControlTemplate, LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE; - - function leftPanelRichTextEditorControl() { - var directive = { - restrict: 'E', - template: leftPanelRichTextEditorControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelRichTextEditorControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE = 'leftPanelRichTextEditorControl'; - leftPanelRichTextEditorControl.$inject = []; - - _export('default', leftPanelRichTextEditorControl); - - _export('LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE', LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("1a", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n \n Add new radio :\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n add\n \n
\n
\n
\n
\n
\n
\n \n Edit/Remove radio :\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n - no radio : add new radio values -\n \n
\n
\n 0\"\n class=\"table table-striped\">\n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{radioRow.option}}\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Label text :\n \n
\n \n
\n \t\t\t
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Required :\n \n
\n
 
\n \n
\n \t\t\t
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Description :\n \n
\n \n
\n \t\t\t
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('1b', ['1a'], function (_export) { - 'use strict'; - - var leftPanelRadioControlTemplate, LEFT_PANEL_RADIO_CONTROL_DIRECTIVE; - - function leftPanelRadioControl() { - var directive = { - restrict: 'E', - template: leftPanelRadioControlTemplate - }; - return directive; - } - - return { - setters: [function (_a) { - leftPanelRadioControlTemplate = _a['default']; - }], - execute: function () { - LEFT_PANEL_RADIO_CONTROL_DIRECTIVE = 'leftPanelRadioControl'; - leftPanelRadioControl.$inject = []; - - _export('default', leftPanelRadioControl); - - _export('LEFT_PANEL_RADIO_CONTROL_DIRECTIVE', LEFT_PANEL_RADIO_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("1c", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Label text :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n placeholder :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Required :\n \n
\n
 
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Description :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('1d', ['1c'], function (_export) { - 'use strict'; - - var leftPanelPasswordControlTemplate, LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE; - - function leftPanelPasswordControl() { - var directive = { - restrict: 'E', - template: leftPanelPasswordControlTemplate - }; - return directive; - } - - return { - setters: [function (_c) { - leftPanelPasswordControlTemplate = _c['default']; - }], - execute: function () { - LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE = 'leftPanelPasswordControl'; - leftPanelPasswordControl.$inject = []; - - _export('default', leftPanelPasswordControl); - - _export('LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE', LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("1e", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n
\n \n Header text :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('1f', ['1e'], function (_export) { - 'use strict'; - - var leftPanelHeaderControlTemplate, LEFT_PANEL_HEADER_CONTROL_DIRECTIVE; - - function leftPanelHeaderControl() { - var directive = { - restrict: 'E', - template: leftPanelHeaderControlTemplate - }; - return directive; - } - - return { - setters: [function (_e) { - leftPanelHeaderControlTemplate = _e['default']; - }], - execute: function () { - LEFT_PANEL_HEADER_CONTROL_DIRECTIVE = 'leftPanelHeaderControl'; - leftPanelHeaderControl.$inject = []; - - _export('default', leftPanelHeaderControl); - - _export('LEFT_PANEL_HEADER_CONTROL_DIRECTIVE', LEFT_PANEL_HEADER_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("20", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n \n Add new options :\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n add\n \n
\n
\n
\n
\n
\n
\n \n Add new groups :\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n add\n \n
\n
\n
\n
\n
\n
\n \n Edit/Remove options/groups:\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n - no option : add new options -\n \n
\n
\n 0\"\n class=\"table table-striped\">\n \n \n \n order\n \n \n group\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n
\n
\n

\n - add new groups -\n

\n
\n
0\">\n \n \n \n {{GroupedSelectGroup}}\n \n \n \n
\n
\n
\n {{groupedSelectRow.group}}\n
\n \n \n {{groupedSelectRow.option}}\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n\t\t\t\t
\n \n Description :\n \n
\n \n
\n\t\t\t\t
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('21', ['20'], function (_export) { - 'use strict'; - - var leftPanelGroupedSelectControlTemplate, LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE; - - function leftPanelGroupedSelectControl() { - var directive = { - restrict: 'E', - template: leftPanelGroupedSelectControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelGroupedSelectControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE = 'leftPanelGroupedSelectControl'; - leftPanelGroupedSelectControl.$inject = []; - - _export('default', leftPanelGroupedSelectControl); - - _export('LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE', LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("22", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n \n
\n \n \n \n {{dateformat}}\n \n \n \n
\n
\n
\n
\n
\n \n Label text :\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Required :\n \n
\n
 
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Description :\n \n
\n \n
\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('23', ['22'], function (_export) { - 'use strict'; - - var leftPanelDateControlTemplate, LEFT_PANEL_DATE_CONTROL_DIRECTIVE; - - function leftPanelDateControl() { - var directive = { - restrict: 'E', - template: leftPanelDateControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelDateControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_DATE_CONTROL_DIRECTIVE = 'leftPanelDateControl'; - leftPanelDateControl.$inject = []; - - _export('default', leftPanelDateControl); - - _export('LEFT_PANEL_DATE_CONTROL_DIRECTIVE', LEFT_PANEL_DATE_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("24", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Label text :\n \n
\n \n
\n \t\t\t
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Required :\n \n
\n
 
\n \n
\n \t\t\t
\n
\n
\n
\n
\n
\n \t\t\t
\n \n Description :\n \n
\n \n
\n \t\t\t
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('25', ['24'], function (_export) { - 'use strict'; - - var leftPanelCheckBoxControlTemplate, LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE; - - function leftPanelCheckBoxControl() { - var directive = { - restrict: 'E', - template: leftPanelCheckBoxControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelCheckBoxControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE = 'leftPanelCheckBoxControl'; - leftPanelCheckBoxControl.$inject = []; - - _export('default', leftPanelCheckBoxControl); - - _export('LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE', LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("26", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n   \n Edit :\n
\n
\n
\n
\n
\n
\n Column will be blank\n
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('27', ['26'], function (_export) { - 'use strict'; - - var leftPanelBlankControlTemplate, LEFT_PANEL_BLANK_CONTROL_DIRECTIVE; - - function leftPanelBlankControl() { - var directive = { - restrict: 'E', - template: leftPanelBlankControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelBlankControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_BLANK_CONTROL_DIRECTIVE = 'leftPanelBlankControl'; - leftPanelBlankControl.$inject = []; - - _export('default', leftPanelBlankControl); - - _export('LEFT_PANEL_BLANK_CONTROL_DIRECTIVE', LEFT_PANEL_BLANK_CONTROL_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("28", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n
\n \n  \n Edit properties :\n
\n
\n
\n
\n
\n
\n \n Add new options :\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n \n add\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n \n - no option : add new options -\n \n
\n
\n 0\"\n class=\"table table-striped\">\n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{basicSelectRow.option}}\n \n \n
\n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n \t
\n \n Description :\n \n
\n \n
\n \t
\n
\n
\n
\n \n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('29', ['28'], function (_export) { - 'use strict'; - - var leftPanelBasicSelectControlTemplate, LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE; - - function leftPanelBasicSelectControl() { - var directive = { - restrict: 'E', - template: leftPanelBasicSelectControlTemplate - }; - return directive; - } - - return { - setters: [function (_) { - leftPanelBasicSelectControlTemplate = _['default']; - }], - execute: function () { - LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE = 'leftPanelBasicSelectControl'; - leftPanelBasicSelectControl.$inject = []; - - _export('default', leftPanelBasicSelectControl); - - _export('LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE', LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE); - } - }; -}); -$__System.register('2a', ['8', '11', '13', '15', '17', '19', '21', '23', '25', '27', '29', 'c', 'e', 'f', '1b', '1d', '1f'], function (_export) { - /* global angular */ - 'use strict'; - - var leftPanelController, LEFT_PANEL_CONTROLLER, leftPanelValidEditFooter, LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE, leftPanelTextInputControl, LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE, leftPanelTextareaControl, LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE, leftPanelSubtitleControl, LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE, leftPanelRichTextEditorControl, LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE, leftPanelGroupedSelectControl, LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE, leftPanelDateControl, LEFT_PANEL_DATE_CONTROL_DIRECTIVE, leftPanelCheckBoxControl, LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE, leftPanelBlankControl, LEFT_PANEL_BLANK_CONTROL_DIRECTIVE, leftPanelBasicSelectControl, LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE, leftPanel, LEFT_PANEL_DIRECTIVE, selectOptionMange, LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE, controllerModalProxy, CONTROLLER_MODAL_PROXY, leftPanelRadioControl, LEFT_PANEL_RADIO_CONTROL_DIRECTIVE, leftPanelPasswordControl, LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE, leftPanelHeaderControl, LEFT_PANEL_HEADER_CONTROL_DIRECTIVE, LEFT_PANEL_MODULE; - return { - setters: [function (_) { - leftPanelController = _['default']; - LEFT_PANEL_CONTROLLER = _.LEFT_PANEL_CONTROLLER; - }, function (_2) { - leftPanelValidEditFooter = _2['default']; - LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE = _2.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE; - }, function (_3) { - leftPanelTextInputControl = _3['default']; - LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE = _3.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE; - }, function (_4) { - leftPanelTextareaControl = _4['default']; - LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE = _4.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE; - }, function (_5) { - leftPanelSubtitleControl = _5['default']; - LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE = _5.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE; - }, function (_6) { - leftPanelRichTextEditorControl = _6['default']; - LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE = _6.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE; - }, function (_7) { - leftPanelGroupedSelectControl = _7['default']; - LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE = _7.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE; - }, function (_8) { - leftPanelDateControl = _8['default']; - LEFT_PANEL_DATE_CONTROL_DIRECTIVE = _8.LEFT_PANEL_DATE_CONTROL_DIRECTIVE; - }, function (_9) { - leftPanelCheckBoxControl = _9['default']; - LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE = _9.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE; - }, function (_10) { - leftPanelBlankControl = _10['default']; - LEFT_PANEL_BLANK_CONTROL_DIRECTIVE = _10.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE; - }, function (_11) { - leftPanelBasicSelectControl = _11['default']; - LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE = _11.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE; - }, function (_c) { - leftPanel = _c['default']; - LEFT_PANEL_DIRECTIVE = _c.LEFT_PANEL_DIRECTIVE; - }, function (_e) { - selectOptionMange = _e['default']; - LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE = _e.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE; - }, function (_f) { - controllerModalProxy = _f['default']; - CONTROLLER_MODAL_PROXY = _f.CONTROLLER_MODAL_PROXY; - }, function (_b) { - leftPanelRadioControl = _b['default']; - LEFT_PANEL_RADIO_CONTROL_DIRECTIVE = _b.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE; - }, function (_d) { - leftPanelPasswordControl = _d['default']; - LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE = _d.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE; - }, function (_f2) { - leftPanelHeaderControl = _f2['default']; - LEFT_PANEL_HEADER_CONTROL_DIRECTIVE = _f2.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE; - }], - execute: function () { - LEFT_PANEL_MODULE = 'edaDragDropWay.leftPanel.module'; - - _export('default', angular.module(LEFT_PANEL_MODULE, []).directive(LEFT_PANEL_DIRECTIVE, leftPanel).controller(LEFT_PANEL_CONTROLLER, leftPanelController).service(LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE, selectOptionMange).service(CONTROLLER_MODAL_PROXY, controllerModalProxy).directive(LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE, leftPanelValidEditFooter).directive(LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE, leftPanelTextInputControl).directive(LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE, leftPanelTextareaControl).directive(LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE, leftPanelSubtitleControl).directive(LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE, leftPanelRichTextEditorControl).directive(LEFT_PANEL_RADIO_CONTROL_DIRECTIVE, leftPanelRadioControl).directive(LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE, leftPanelPasswordControl).directive(LEFT_PANEL_HEADER_CONTROL_DIRECTIVE, leftPanelHeaderControl).directive(LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE, leftPanelGroupedSelectControl).directive(LEFT_PANEL_DATE_CONTROL_DIRECTIVE, leftPanelDateControl).directive(LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE, leftPanelCheckBoxControl).directive(LEFT_PANEL_BLANK_CONTROL_DIRECTIVE, leftPanelBlankControl).directive(LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE, leftPanelBasicSelectControl)); - } - }; -}); -$__System.register('2b', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, FORM_FIELD_MANAGE_SERVICE, formFieldManage; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - FORM_FIELD_MANAGE_SERVICE = 'formFieldManage'; - - formFieldManage = (function () { - function formFieldManage(EasyFormGenFormlyBindingModels) { - _classCallCheck(this, formFieldManage); - - this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels; - this.init(); - } - - _createClass(formFieldManage, [{ - key: 'init', - value: function init() {} - - /** - * At initial state : configuration model will contain 1 line, since : - * -> it is non sense to create a form without a single line (no line = no form at all) - * -> so it is non sense to force user to add a first line - * - * PLEASE NOTE columns array contains objects that look like formly fields one - */ - }, { - key: 'initConfigurationEditFromScratch', - value: function initConfigurationEditFromScratch(configurationModel, addStepWayProperties) { - var configurationModelInit = this.EasyFormGenFormlyBindingModels.getEasyFormInitialStateConfigurationModel(addStepWayProperties); - angular.copy(configurationModelInit, configurationModel); - } - - /** - * Get an configuration empty (no init line) then empty it with lines array provided in param - * @param object - configurationModel [configuration model] - * @param array - lines [an array : lines to apply to an empty configuration model] - * @param bool - addStepWayProperties [description] - * @return {object message} [give details on how it happened to caller] - */ - }, { - key: 'bindConfigurationLines', - value: function bindConfigurationLines(configurationModel, lines, addStepWayProperties) { - if (Object.prototype.toString.call(lines) === '[object Array]') { - var configurationModelResult = this.EasyFormGenFormlyBindingModels.getEasyFormReloadConfigurationModel(addStepWayProperties); - configurationModelResult.lines = [].concat(lines); - angular.copy(configurationModelResult, configurationModel); - return this.getMessageObject('configuration model is bound', 'lines are bound to configuration model.'); - } else { - return this.getErrorObject('lines is not an array', 'Checks lines type, it is not an array.'); - } - } - - /** - * applyConfigurationToformlyModel : - * - bind configuration model into formly field model - * - reset dataModel (formlyfield may have changed so previous dataModel would be false) - * @param configurationModel - * @param formlyModel - * @param formlyDataModel - */ - }, { - key: 'applyConfigurationToformlyModel', - value: function applyConfigurationToformlyModel(configurationModel, formlyModel, formlyDataModel) { - this.resetFormlyModel(formlyModel); - this.resetDataModel(formlyDataModel); - var lineNumber = configurationModel.lines.length; - for (var i = 0; i < lineNumber; i++) { - this.AddNColumnControl(formlyModel, configurationModel, i); - } - } - }, { - key: 'resetFormlyModel', - value: function resetFormlyModel(formlyModel) { - var resetformly = []; - angular.copy(resetformly, formlyModel); - } - }, { - key: 'AddNColumnControl', - value: function AddNColumnControl(formlyModel, configurationModel, lineIndex) { - var _this = this; - - var numberOfColumns = configurationModel.lines[lineIndex].columns.length; - /** - * push formly model - * here : only className and empty fieldGroup (controls != header) - * if header will be reset to set a template (at least we have now indexFormlyModel) - */ - var rawFormlyModel = { - className: 'row', - fieldGroup: [] - }; - //get index formlyModel for this line : - var indexFormlyModel = formlyModel.push(rawFormlyModel) - 1; - - // iterates through controls in the line - configurationModel.lines[lineIndex].columns.forEach(function (column) { - var controlTemplate = {}; - if (typeof controlTemplate !== 'undefined' && - // column.control.type !== 'header' && - // column.control.type !== 'subTitle' && - column.control.type !== 'none') { - /** - * controls : getFormlyControlTemplateForNcolumnLine() - * - * @PARAM numberOfColumns : integer to deduce cssClss to apply - * @PARAM column.control.type : to add if needed specific properties (example : datepicker) - */ - if (column.control.type === 'header' || column.control.type === 'subTitle') { - var headerTextContent = column.control.templateOptions.description; - controlTemplate.template = _this.EasyFormGenFormlyBindingModels.getHeaderTemplateForNcolumnLine(numberOfColumns, headerTextContent).template; - controlTemplate.className = _this.EasyFormGenFormlyBindingModels.getRawHeaderTemplates().selectedClass; - } else { - controlTemplate = _this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(numberOfColumns, column.control.type); - /** - * NEED REFACTOR HERE - * should bind properties dynamically - * - * TODO need to validate all controls (datepicker may not work) - * need to refactor - */ - controlTemplate.className = column.control.className; - controlTemplate.type = column.control.type; - controlTemplate.key = column.control.key; - controlTemplate.templateOptions.type = column.control.templateOptions.type; - controlTemplate.templateOptions.label = column.control.templateOptions.label; - controlTemplate.templateOptions.required = column.control.templateOptions.required; - controlTemplate.templateOptions.placeholder = column.control.templateOptions.placeholder; - controlTemplate.templateOptions.description = column.control.templateOptions.description; - controlTemplate.templateOptions.options = [].concat(column.control.templateOptions.options); - - if (typeof controlTemplate.templateOptions.datepickerPopup !== 'undefined') column.control.templateOptions.datepickerPopup = controlTemplate.templateOptions.datepickerPopup; - } - /** - * popuplate properties - */ - - /** - * push control into formly model in its group - */ - - /** - * need to catch this random error - */ - formlyModel[indexFormlyModel].fieldGroup.push(controlTemplate); - } - }); - } - }, { - key: 'isTemplateOptionDefined', - value: function isTemplateOptionDefined(obj) { - return typeof obj.templateOptions !== 'undefined' ? true : false; - } - }, { - key: 'extractTemplateOptionLabel', - value: function extractTemplateOptionLabel(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.label !== 'undefined' ? obj.templateOptions.label : '' : ''; - } - }, { - key: 'extractTemplateOptionDatepickerPopup', - value: function extractTemplateOptionDatepickerPopup(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.datepickerPopup !== 'undefined' ? obj.templateOptions.datepickerPopup : '' : ''; - } - }, { - key: 'extractTemplateOptionRequired', - value: function extractTemplateOptionRequired(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.required !== 'undefined' ? obj.templateOptions.required : '' : ''; - } - - //radio and select - }, { - key: 'extractTemplateOptionOptions', - value: function extractTemplateOptionOptions(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.options !== 'undefined' ? obj.templateOptions.options : '' : ''; - } - }, { - key: 'extractTemplateOptionType', - value: function extractTemplateOptionType(obj) { - return typeof obj.subtype !== 'undefined' ? obj.subtype : ''; - } - }, { - key: 'extractTemplateOptionPlaceholder', - value: function extractTemplateOptionPlaceholder(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.placeholder !== 'undefined' ? obj.templateOptions.placeholder : '' : ''; - } - }, { - key: 'extractTemplateOptionDescription', - value: function extractTemplateOptionDescription(obj) { - return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.description !== 'undefined' ? obj.templateOptions.description : '' : ''; - } - - // formly model functions - }, { - key: 'resetDataModel', - value: function resetDataModel(obj) { - var emptyDataModel = {}; - angular.copy(emptyDataModel, obj); - return true; - } - - // custom errors - }, { - key: 'getErrorObject', - value: function getErrorObject(errorTitle, errorMessage) { - var messageObj = { - noError: false, - title: '', - Message: '' - }; - messageObj.noError = false; - messageObj.title = errorTitle; - messageObj.Message = errorMessage; - return messageObj; - } - }, { - key: 'getMessageObject', - value: function getMessageObject(messageTitle, messageBody) { - var messageObj = { - noError: false, - title: '', - Message: '' - }; - messageObj.noError = true; - messageObj.title = messageTitle; - messageObj.Message = messageBody; - return messageObj; - } - }]); - - return formFieldManage; - })(); - - formFieldManage.$inject = ['EasyFormGenFormlyBindingModels']; - - _export('default', formFieldManage); - - _export('FORM_FIELD_MANAGE_SERVICE', FORM_FIELD_MANAGE_SERVICE); - } - }; -}); -$__System.register('2c', [], function (_export) { - 'use strict'; - - var initEasyFormListControls, initEasyFormEmptyConfigurationLineModel, initEmptyControlFieldModel, initEasyFormInitialStateConfigurationModel, initEasyFormInitialStateConfigurationModelAddOnForStepWay, initEasyFormReloadConfigurationModel, initHeaderTemplates, initFormlyControlTemplates, initParticularControlProperties; - return { - setters: [], - execute: function () { - initEasyFormListControls = function initEasyFormListControls() { - return { - controls: [], - selectedControl: 'none', - temporyConfig: { - selectedControl: 'none', - formlyLabel: 'label', - formlyRequired: false, - formlyDesciption: '', - formlyPlaceholder: '', - formlyOptions: [] - } - }; - }; - - _export('initEasyFormListControls', initEasyFormListControls); - - initEasyFormEmptyConfigurationLineModel = function initEasyFormEmptyConfigurationLineModel() { - return { - line: 1, - activeColumn: 1, - columns: [{ - numColumn: 1, - exist: true, - control: { - type: 'none', - key: 'none' - } - }] - }; - }; - - _export('initEasyFormEmptyConfigurationLineModel', initEasyFormEmptyConfigurationLineModel); - - initEmptyControlFieldModel = function initEmptyControlFieldModel() { - return { - 'control': { - 'type': 'none', - 'key': 'none' - } - }; - }; - - _export('initEmptyControlFieldModel', initEmptyControlFieldModel); - - initEasyFormInitialStateConfigurationModel = function initEasyFormInitialStateConfigurationModel(_easyFormEmptyConfigurationLineModel) { - // commun all easy form generator ways - return { - submitButtonText: 'submit', - cancelButtonText: 'cancel', - lines: [].concat(_easyFormEmptyConfigurationLineModel) - }; - }; - - _export('initEasyFormInitialStateConfigurationModel', initEasyFormInitialStateConfigurationModel); - - initEasyFormInitialStateConfigurationModelAddOnForStepWay = function initEasyFormInitialStateConfigurationModelAddOnForStepWay() { - // specific easy form generator — step way — (not drag and drop way), needed for wizard management - return { - activeLine: 1, - listConfigStep: ['init', 'first', 'second', 'third'], - stepIndicators: [true, false, false, false], - configStepCounter: 0 - }; - }; - - _export('initEasyFormInitialStateConfigurationModelAddOnForStepWay', initEasyFormInitialStateConfigurationModelAddOnForStepWay); - - initEasyFormReloadConfigurationModel = function initEasyFormReloadConfigurationModel() { - var reloadConfigModel = initEasyFormInitialStateConfigurationModel(); - reloadConfigModel.lines = []; - return reloadConfigModel; - }; - - _export('initEasyFormReloadConfigurationModel', initEasyFormReloadConfigurationModel); - - // can't use arrow function here -> 'this' would be bound to caller rather than expected current returned object... - - initHeaderTemplates = function initHeaderTemplates() { - var headerTemplate = { - cssClass: ['col-xs-12', 'col-xs-6', 'col-xs-4'], - textContent: '', - html_part1: ['
', '

'].join(''), - html_part3: this.textContent, - html_part4: ['

', '
', '

'].join(''), - simpleHtml1: ['

'].join(''), - simpleHtml2: ['

', '
'].join('') - }; - return headerTemplate; - }; - - _export('initHeaderTemplates', initHeaderTemplates); - - initFormlyControlTemplates = function initFormlyControlTemplates() { - return { - className: ['col-xs-12', 'col-xs-6', 'col-xs-4'], - type: '', - key: '', - templateOptions: { - type: '', - label: '', - required: '', - placeholder: '', - description: '', - options: '' - } - }; - }; - - _export('initFormlyControlTemplates', initFormlyControlTemplates); - - initParticularControlProperties = function initParticularControlProperties() { - return [{ - controlType: 'datepicker', - properties: [{ - isRoot: false, - isTemplateOptions: true, - value: 'datepickerPopup' - }] - }]; - }; - - _export('initParticularControlProperties', initParticularControlProperties); - } - }; -}); -$__System.register('2d', ['2c'], function (_export) { - 'use strict'; - - var helpers, EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER; - - function EasyFormGenFormlyBindingModels() { - - var _easyFormListControls = helpers.initEasyFormListControls(); - var _easyFormEmptyConfigurationLineModel = helpers.initEasyFormEmptyConfigurationLineModel(); - var _emptyControlFieldModel = helpers.initEmptyControlFieldModel(); - var _easyFormInitialStateConfigurationModel = helpers.initEasyFormInitialStateConfigurationModel(_easyFormEmptyConfigurationLineModel); - var _easyFormInitialStateConfigurationModelAddOnForStepWay = helpers.initEasyFormInitialStateConfigurationModelAddOnForStepWay(); - var _easyFormReloadConfigurationModel = helpers.initEasyFormReloadConfigurationModel(); - var _headerTemplates = helpers.initHeaderTemplates(); - var _formlyControlTemplates = helpers.initFormlyControlTemplates(); - var _particularControlProperties = helpers.initParticularControlProperties(); - - this.getAllParticularControlProperties = getAllParticularControlProperties; - this.addParticularControlProperties = addParticularControlProperties; - this.getEasyFormListControls = getEasyFormListControls; - this.addEasyFormControlToList = addEasyFormControlToList; - this.getHeaderTemplates = getHeaderTemplates; - this.addHeaderTemplateCssClass = addHeaderTemplateCssClass; - this.getFormlyControlTemplate = getFormlyControlTemplate; - this.addformlyControlTemplatesCssClass = addformlyControlTemplatesCssClass; - this.setFormlyControlTemplate = setFormlyControlTemplate; - this.$get = getFct; - - function getAllParticularControlProperties() { - return _particularControlProperties; - } - - function addParticularControlProperties(newParticularControlProperty) { - // test object param has waited properties - if ('controlType' in newParticularControlProperty && 'properties' in newParticularControlProperty) { - var isAnUpdate = false; - if (_particularControlProperties.length > 0) { - _particularControlProperties.forEach(function (controlProp) { - if (controlProp.controlType === newParticularControlProperty.controlType) { - controlProp.properties = [].concat(newParticularControlProperty.properties); - isAnUpdate = true; - } - }); - } - if (!isAnUpdate) { - _particularControlProperties.push(newParticularControlProperty); - } - } - return _particularControlProperties; - } - - function getEasyFormListControls() { - return _easyFormListControls; - } - - function addEasyFormControlToList(controlDeclaration) { - if (typeof controlDeclaration !== 'undefined') { - _easyFormListControls.controls.push(controlDeclaration); - } - } - - function getHeaderTemplates() { - return _headerTemplates; - } - - function addHeaderTemplateCssClass(cssClassToAdd) { - if (typeof cssClassToAdd !== 'undefined') { - _headerTemplates.cssClass.push(cssClassToAdd); - } - } - - function getFormlyControlTemplate() { - return _formlyControlTemplates; - } - - function addformlyControlTemplatesCssClass(cssClassToAdd) { - if (typeof cssClassToAdd !== 'undefined') { - _formlyControlTemplates.className.push(cssClassToAdd); - } - } - - function setFormlyControlTemplate(newFormlyControlTemplate) { - if ('className' in newFormlyControlTemplate && 'type' in newFormlyControlTemplate && 'key' in newFormlyControlTemplate && 'templateOptions' in newFormlyControlTemplate) { - _formlyControlTemplates = angular.copy(newFormlyControlTemplate); - } - return true; - } - - getFct.$inject = []; - function getFct() { - var service = { - getEasyFormListControls: getEasyFormListControlsFct, - getEasyFormInitialStateConfigurationModel: getEasyFormInitialStateConfigurationModel, - getEasyFormReloadConfigurationModel: getEasyFormReloadConfigurationModel, - getEasyFormEmptyConfigurationLineModel: getEasyFormEmptyConfigurationLineModel, - getEasyFormConfigurationEmptyControlModel: getEasyFormConfigurationEmptyControlModel, - getRawHeaderTemplates: getRawHeaderTemplates, - getHeaderTemplateForNcolumnLine: getHeaderTemplateForNcolumnLine, - getRawFormlyControlTemplates: getRawFormlyControlTemplates, - getFormlyControlTemplateForNcolumnLine: getFormlyControlTemplateForNcolumnLine - }; - return service; - - function getEasyFormListControlsFct() { - return _easyFormListControls; - } - - function getEasyFormInitialStateConfigurationModel(addStepWayProperties) { - var initialConfigurationModel = angular.copy(_easyFormInitialStateConfigurationModel); - if (typeof addStepWayProperties !== 'undefined') { - if (addStepWayProperties) { - // add properties specific to step way - angular.extend(initialConfigurationModel, _easyFormInitialStateConfigurationModelAddOnForStepWay); - } - } - return initialConfigurationModel; - } - - function getEasyFormReloadConfigurationModel(addStepWayProperties) { - var initialConfigurationModel = angular.copy(_easyFormReloadConfigurationModel); - if (typeof addStepWayProperties !== 'undefined') { - if (addStepWayProperties) { - // add properties specific to step way - angular.extend(initialConfigurationModel, _easyFormInitialStateConfigurationModelAddOnForStepWay); - } - } - return initialConfigurationModel; - } - - function getEasyFormEmptyConfigurationLineModel() { - return _easyFormEmptyConfigurationLineModel; - } - - function getEasyFormConfigurationEmptyControlModel() { - return _emptyControlFieldModel; - } - - function getRawHeaderTemplates() { - return _headerTemplates; - } - - function getHeaderTemplateForNcolumnLine(nbColInLines, textContent) { - if (typeof nbColInLines !== 'undefined' && typeof textContent !== 'undefined') { - if (nbColInLines === parseInt(nbColInLines, 10)) { - if (nbColInLines <= _headerTemplates.cssClass.length) { - var headerToReturn = {}; - headerToReturn.className = _headerTemplates.cssClass[nbColInLines - 1]; - // header html property depends this property dont forget to set it before reading html property - _headerTemplates.textContent = textContent; - _headerTemplates.selectedClass = headerToReturn.className; - headerToReturn.template = [_headerTemplates.simpleHtml1, textContent, _headerTemplates.simpleHtml2].join(''); - return headerToReturn; - } - } - } - } - - function getRawFormlyControlTemplates() { - return _formlyControlTemplates; - } - - function getFormlyControlTemplateForNcolumnLine(nbColInLines, controlType) { - if (typeof nbColInLines !== 'undefined') { - if (nbColInLines === parseInt(nbColInLines, 10)) { - if (nbColInLines <= _formlyControlTemplates.className.length) { - var _ret = (function () { - var controlToReturn = angular.copy(_formlyControlTemplates); - controlToReturn.className = _formlyControlTemplates.className[nbColInLines - 1]; - // throw `it should have a bug upper line`; - /* eslint no-console:0 */ - console.warn('it should have a bug upper line'); - /** - * check controlType: it may require another particular property - */ - if (typeof controlType !== 'undefined') { - _particularControlProperties.forEach(function (controlProp) { - if (controlProp.controlType === controlType) { - /** - * add all properties this controlType has - * - * NOTE : dot expression and bracket expression to access object property - * http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.1 - */ - controlProp.properties.forEach(function (aPropToAdd) { - if (aPropToAdd.isRoot) controlToReturn[aPropToAdd.value] = ''; - if (aPropToAdd.isTemplateOptions) controlToReturn.templateOptions[aPropToAdd.value] = ''; - }); - } - }); - } - return { - v: controlToReturn - }; - })(); - - if (typeof _ret === 'object') return _ret.v; - } - } - } - } - } - } - - return { - setters: [function (_c) { - helpers = _c; - }], - execute: function () { - EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER = 'EasyFormGenFormlyBindingModels'; - EasyFormGenFormlyBindingModels.$inject = []; - - _export('default', EasyFormGenFormlyBindingModels); - - _export('EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER', EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER); - } - }; -}); -$__System.register('2e', ['2b', '2d'], function (_export) { - 'use strict'; - - var formFieldManage, FORM_FIELD_MANAGE_SERVICE, EasyFormGenFormlyBindingModels, EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER, FORMLY_PROXY_MODULE; - return { - setters: [function (_b) { - formFieldManage = _b['default']; - FORM_FIELD_MANAGE_SERVICE = _b.FORM_FIELD_MANAGE_SERVICE; - }, function (_d) { - EasyFormGenFormlyBindingModels = _d['default']; - EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER = _d.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER; - }], - execute: function () { - FORMLY_PROXY_MODULE = ''; - - _export('default', angular.module(FORMLY_PROXY_MODULE, []).service(FORM_FIELD_MANAGE_SERVICE, formFieldManage).provider(EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER, EasyFormGenFormlyBindingModels)); - } - }; -}); -$__System.register('2f', [], function (_export) { - 'use strict'; - - var DD_CONTENT_COUNTER_DIRECTIVE; - - function ddContentCounter(dragDropItemCounterService, $timeout) { - var directive = { - restrict: 'A', - scope: { - valueWhenPlaceholder: '@ddValueWhenPlaceholder', - valueWhendragging: '@ddValueWhenDragging', - fullModel: '=ddFullModel', - currentIndex: '@ddContentCounterCurrentIndex', - parentIndex: '@ddContentCounterParentIndex', - forceRefresh: '=ddContentCounterForceCssRefresh' - }, - link: linkfct - }; - return directive; - - function linkfct($scope, element) { - var timer = undefined; - // watch children length change : to update css item class - $scope.$watch(function () { - return element[0].children.length; - }, function (newValue, oldValue) { - if (newValue !== oldValue) { - (function () { - var newRealCount = 0; - var listClassForThisRow = []; - for (var i = element[0].children.length - 1; i >= 0; i--) { - if (dragDropItemCounterService.isHtmlElementToCount(element[0].children[i].classList)) { - newRealCount++; - listClassForThisRow.push({ item: i, isReal: true }); - } else { - listClassForThisRow.push({ item: i, isReal: false }); - } - } - $scope.contentRealCount = newRealCount; - // a timer otherwise won't refresh everytime - timer = $timeout(function () { - dragDropItemCounterService.updateLineItemCss($scope.fullModel, listClassForThisRow, $scope.parentIndex, $scope.currentIndex, newRealCount); - }, 20); - })(); - } - }); - - $scope.$on('$destroy', function () { - $timeout.cancel(timer); - }); - } - } - - return { - setters: [], - execute: function () { - DD_CONTENT_COUNTER_DIRECTIVE = 'ddContentCounter'; - ddContentCounter.$inject = ['dragDropItemCounterService', '$timeout']; - - _export('default', ddContentCounter); - - _export('DD_CONTENT_COUNTER_DIRECTIVE', DD_CONTENT_COUNTER_DIRECTIVE); - } - }; -}); -$__System.register('30', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, DRAG_DROP_ITEM_COUNTER_SERVICE, dragDropItemCounterService; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - DRAG_DROP_ITEM_COUNTER_SERVICE = 'dragDropItemCounterService'; - - dragDropItemCounterService = (function () { - function dragDropItemCounterService(easyFormDragWayConfig) { - _classCallCheck(this, dragDropItemCounterService); - - this.easyFormDragWayConfig = easyFormDragWayConfig; - this.init(); - } - - _createClass(dragDropItemCounterService, [{ - key: 'init', - value: function init() { - this._modelItemRealCounter = []; - this._itemsNotToCount = angular.copy(this.easyFormDragWayConfig.getItemsNotToCount()); - } - }, { - key: 'getItemsNotToCount', - value: function getItemsNotToCount() { - return this._itemsNotToCount; - } - }, { - key: 'getModelItemsRealCounter', - value: function getModelItemsRealCounter() { - return this._modelItemRealCounter; - } - }, { - key: 'isHtmlElementToCount', - value: function isHtmlElementToCount(htmlvalue) { - var isToCount = true; - if (htmlvalue.length > 0) { - angular.forEach(this._itemsNotToCount, function (value) { - for (var classes = htmlvalue.length - 1; classes >= 0; classes--) { - if (htmlvalue[classes] === value) isToCount = isToCount && false; - } - }); - } - return isToCount; - } - }, { - key: 'updateLineItemCss', - value: function updateLineItemCss(fullModel, listCssToApply, columIndex, lineIndex, realCount) { - if (typeof fullModel !== 'undefined' && typeof listCssToApply !== 'undefined' && typeof columIndex !== 'undefined' && typeof lineIndex !== 'undefined' && typeof realCount !== 'undefined') { - for (var i = fullModel[columIndex][lineIndex].length - 1; i >= 0; i--) { - for (var j = 0; j < listCssToApply.length; j++) { - if (listCssToApply[j].item === i && listCssToApply[j].isReal === true) { - fullModel[columIndex][lineIndex][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(realCount); - } - } - } - return true; - } - } - }]); - - return dragDropItemCounterService; - })(); - - dragDropItemCounterService.$inject = ['easyFormDragWayConfig']; - - _export('default', dragDropItemCounterService); - - _export('DRAG_DROP_ITEM_COUNTER_SERVICE', DRAG_DROP_ITEM_COUNTER_SERVICE); - } - }; -}); -$__System.registerDynamic("31", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n \n \n  \n {{ddDecorContainerCtrl.currentTitle}}\n

\n
\n
\n
\n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('32', ['31', '33'], function (_export) { - /* global angular */ - 'use strict'; - - var ddDecorContainerTemplate, DD_DECOR_CONTAINER_CONTROLLER_NAME, DD_DECOR_CONTAINER_CONTROLLERAS_NAME, DD_DECOR_CONTAINER_DIRECTIVE; - - function ddDecorContainer() { - var directive = { - restrict: 'A', - template: ddDecorContainerTemplate, - scope: {}, - controller: DD_DECOR_CONTAINER_CONTROLLER_NAME, - controllerAs: DD_DECOR_CONTAINER_CONTROLLERAS_NAME, - bindToController: { - 'styleParam': '=ddContainerProperties', - 'isStillCollapsed': '=ddContainerIsCollpased', - 'verboseMode': '@ddContainerVerboseMode', - 'currentIndex': '@ddContainerCurrentIndex', - 'collpaseAll': '&ddCollapseAll' - }, - transclude: true, - link: linkFct - }; - return directive; - - function linkFct($scope, element, attrs, ctrl, transclude) { - var verboseModeActive = $scope.ddDecorContainerCtrl.verboseMode; - var currentIndex = $scope.ddDecorContainerCtrl.currentIndex; - $scope.ddDecorContainerCtrl.isCollapsed = false; - $scope.ddDecorContainerCtrl.config.isEnabled = false; - /** - * forceCollapse when : - * dragDropConfigModel.containerConfig.decoration.isCollapsed changed (here bound to $scope.isStillCollapsed) - */ - $scope.$watch(function () { - return $scope.ddDecorContainerCtrl.isStillCollapsed; - }, function (newVal, oldVal) { - if (newVal !== oldVal) { - if ($scope.$parent.$parent.$index === 0) $scope.ddDecorContainerCtrl.isCollapsed = newVal; - } - }); - - /** - * verbose mode for developments only - */ - if (verboseModeActive !== '') { - var verbose = angular.lowercase(verboseModeActive); - if (verbose === 'true' || verbose === '1') { - /* eslint no-console:0 */ - console.dir({ - whoAmI: 'I am verbose from ddDecorContainer link', - verbodeMode: verbose, - ParentParentIndex: $scope.$parent.$parent.$index, - ParentIndex: $scope.$parent.$index, - currentIndex: currentIndex, - styleParam: $scope.ddDecorContainerCtrl.styleParam, - columnindex: $scope.$parent.$parent.$parent.$parent.$index - }); - } - } - - /** - * no header (no title, no collapse....) - */ - //$scope.ddDecorContainerCtrl.config.isEnabled - if (typeof currentIndex !== 'undefined') { - if (currentIndex !== '') { - /** - * specific 1st column - */ - if (currentIndex === '0') { - /** - * apply title - */ - if (typeof $scope.ddDecorContainerCtrl.styleParam.title !== 'undefined') { - $scope.ddDecorContainerCtrl.currentTitle = $scope.ddDecorContainerCtrl.styleParam.title; - $scope.ddDecorContainerCtrl.config.isEnabled = true; - $scope.ddDecorContainerCtrl.isCollapsed = true; - } - } - } - } - - /** - * prevent transclusion creating child scope - * want to know more about what I'm talking about : check this nice tip on the subject : - * http://angular-tips.com/blog/2014/03/transclusion-and-scopes/ - */ - transclude($scope.$parent, function (contentClone) { - /** - * transclusion will append content to '
' - */ - var childDiv = angular.element(element.children()[1]); - childDiv.append(contentClone); - }); - } - } - - return { - setters: [function (_) { - ddDecorContainerTemplate = _['default']; - }, function (_2) { - DD_DECOR_CONTAINER_CONTROLLER_NAME = _2.DD_DECOR_CONTAINER_CONTROLLER_NAME; - DD_DECOR_CONTAINER_CONTROLLERAS_NAME = _2.DD_DECOR_CONTAINER_CONTROLLERAS_NAME; - }], - execute: function () { - DD_DECOR_CONTAINER_DIRECTIVE = 'ddDecorContainer'; - - _export('default', ddDecorContainer); - - _export('DD_DECOR_CONTAINER_DIRECTIVE', DD_DECOR_CONTAINER_DIRECTIVE); - } - }; -}); -$__System.register('33', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, DD_DECOR_CONTAINER_CONTROLLER_NAME, DD_DECOR_CONTAINER_CONTROLLERAS_NAME, ddDecorContainerController; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - /* global angular */ - 'use strict'; - - DD_DECOR_CONTAINER_CONTROLLER_NAME = 'ddDecorContainerController'; - DD_DECOR_CONTAINER_CONTROLLERAS_NAME = 'ddDecorContainerCtrl'; - - ddDecorContainerController = (function () { - function ddDecorContainerController() { - _classCallCheck(this, ddDecorContainerController); - - this.init(); - } - - _createClass(ddDecorContainerController, [{ - key: 'init', - value: function init() { - this.config = angular.extend({}, { isEnabled: false }); - /** - * TODO (low priority) : make icon css configurable (provider) - */ - this.icons = angular.extend({}, { - closedClass: 'glyphicon glyphicon-eye-open', - opened: 'glyphicon glyphicon-eye-close' - }); - } - }, { - key: 'collapseFct', - value: function collapseFct() { - this.collpaseAll({ exceptThisOne: this.styleParam.WhenIndex }); //note : collpaseAll function is boundToController from directive attribute : 'collpaseAll' : '&ddCollapseAll' - this.isCollapsed = !this.isCollapsed; - this.isStillCollapsed = this.isCollapsed; //note : isStillCollapsed is boundToController from directive attribute : 'isStillCollapsed' : '=ddContainerIsCollpased', - } - }, { - key: 'currentIconClass', - value: function currentIconClass() { - if (this.isCollapsed) { - return this.icons.closedClass; - } else { - return this.icons.opened; - } - } - }]); - - return ddDecorContainerController; - })(); - - _export('default', ddDecorContainerController); - - _export('DD_DECOR_CONTAINER_CONTROLLER_NAME', DD_DECOR_CONTAINER_CONTROLLER_NAME); - - _export('DD_DECOR_CONTAINER_CONTROLLERAS_NAME', DD_DECOR_CONTAINER_CONTROLLERAS_NAME); - } - }; -}); -$__System.registerDynamic("34", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n
\n

\n  \n {{currentTitle}}\n
\n \n \n  \n add new line\n \n
\n

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('35', ['34'], function (_export) { - /* global angular */ - 'use strict'; - - var ddDecorDropZoneTemplate, DD_DECOR_DROPZONE_DIRECTIVE; - - function ddDecorDropZone() { - var directive = { - restrict: 'A', - template: ddDecorDropZoneTemplate, - scope: { - 'styleParam': '=ddDropZoneProperties', - 'verboseMode': '@ddDropZoneVerboseMode', - 'currentIndex': '@ddDropZoneCurrentIndex', - 'addNewLineFct': '&ddDropZoneAddNewLine' - }, - transclude: true, - link: linkfct - }; - return directive; - - function linkfct($scope) { - - var verboseModeActive = $scope.verboseMode; - var currentIndex = $scope.currentIndex; - - $scope.headerConfig = { - HeaderButtonVisible: false, - affixAttr: 'bs-affix', - affixEnabled: false - }; - /** - * verbose mode : just for dev - */ - if (verboseModeActive !== '') { - var verbose = angular.lowercase(verboseModeActive); - if (verbose === 'true' || verbose === '1') { - /* eslint no-console:0 */ - console.dir({ - whoAmI: 'I am verbose from ddDecorDropZone link', - verbodeMode: verbose, - ParentParentIndex: $scope.$parent.$parent.$index, - ParentIndex: $scope.$parent.$index, - currentIndex: currentIndex, - styleParam: $scope.styleParam - }); - } - } - - if (typeof currentIndex !== 'undefined') { - if (currentIndex !== '') { - // apply title - if (typeof $scope.styleParam.title !== 'undefined') $scope.currentTitle = $scope.styleParam.title; - //apply font-awesome - if (typeof $scope.styleParam.fontAwesomeIcon !== 'undefined') $scope.currentFontAwesome = $scope.styleParam.fontAwesomeIcon; - //show add new line button - if (currentIndex === '1') $scope.headerConfig.HeaderButtonVisible = true; - } - } - } - } - - return { - setters: [function (_) { - ddDecorDropZoneTemplate = _['default']; - }], - execute: function () { - DD_DECOR_DROPZONE_DIRECTIVE = 'ddDecorDropZone'; - ddDecorDropZone.$inject = []; - - _export('default', ddDecorDropZone); - - _export('DD_DECOR_DROPZONE_DIRECTIVE', DD_DECOR_DROPZONE_DIRECTIVE); - } - }; -}); -$__System.registerDynamic("36", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
\n
\n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('37', ['36'], function (_export) { - 'use strict'; - - var dragdropItemTemplate, DRAG_DROP_DECOR_ITEM; - - function ddDecorItem(easyFormDragWayConfig) { - var directive = { - restrict: 'A', - scope: { - 'verboseMode': '@ddItemVerboseMode', - 'currentIndex': '@ddItemCurrentIndex', - 'parentIndex': '@ddItemParentIndex', - 'parentParentIndex': '@ddItemParentParentIndex', - 'lineItemsCount': '@ddItemsCount', - 'cssClass': '@ddItemCssClass' - }, - template: dragdropItemTemplate, - transclude: true, - link: linkfct - }; - return directive; - - function linkfct($scope, element, attrs, ctrl, transclude) { - var verboseModeActive = $scope.verboseMode; - var currentIndex = $scope.currentIndex; - var parentIndex = $scope.parentIndex; - var listClass = easyFormDragWayConfig.getDistinctItemCssClass(); - - /** - * init css class - */ - angular.forEach(listClass, function (css) { - return element.removeClass(css); - }); - element.addClass($scope.cssClass); - /** - * update css class - */ - $scope.$watch('cssClass', function (newValue, oldValue) { - if (newValue !== oldValue) { - /** - * update css class - */ - angular.forEach(listClass, function (css) { - return element.removeClass(css); - }); - element.addClass(newValue); - } - }); - - /** - * verbose mode : just for dev - */ - if (verboseModeActive !== '') { - var verbose = angular.lowercase(verboseModeActive); - if (verbose === 'true' || verbose === '1') { - /* eslint no-console:0 */ - console.dir({ - whoAmI: 'I am verbose from ddDecorItem directive link', - verbodeMode: verbose, - ParentParentIndex: $scope.$parent.$parent.$index, - ParentIndex: parentIndex, - parentParentIndex: $scope.parentParentIndex, - currentIndex: currentIndex, - lineItemsCount: $scope.lineItemsCount - }); - } - } - /** - * control column : apply css class to item - */ - if ($scope.parentParentIndex === '0') element.addClass(listClass[0]); - /** - * prevent transclusion creating child scope - * - * - * NOTE :if you want to know more about what I'm saying : check this nice tip on the subject : - * http://angular-tips.com/blog/2014/03/transclusion-and-scopes/ - */ - transclude($scope.$parent, function (contentClone) { - /** - * transclusion will append content to '
' - */ - var childDiv = angular.element(element.children()[0]); - childDiv.append(contentClone); - }); - } - } - - return { - setters: [function (_) { - dragdropItemTemplate = _['default']; - }], - execute: function () { - DRAG_DROP_DECOR_ITEM = 'ddDecorItem'; - ddDecorItem.$inject = ['easyFormDragWayConfig']; - - _export('default', ddDecorItem); - - _export('DRAG_DROP_DECOR_ITEM', DRAG_DROP_DECOR_ITEM); - } - }; -}); -$__System.register('38', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, DRAG_DROP_ITEM_DECOR_SERVICE, dragDropItemDecorationService; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - DRAG_DROP_ITEM_DECOR_SERVICE = 'dragDropItemDecorationService'; - - dragDropItemDecorationService = (function () { - function dragDropItemDecorationService(easyFormDragWayConfig) { - _classCallCheck(this, dragDropItemDecorationService); - - this.easyFormDragWayConfig = easyFormDragWayConfig; - this.init(); - } - - _createClass(dragDropItemDecorationService, [{ - key: 'init', - value: function init() { - this._listItemClass = [].concat(this.easyFormDragWayConfig.getListItemCssClass()); - } - }, { - key: 'getListClass', - value: function getListClass() { - return this._listItemClass; - } - }, { - key: 'getCssClassWhenNumberItemsInRowIs', - value: function getCssClassWhenNumberItemsInRowIs(thisNumber) { - return this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(thisNumber); - } - }, { - key: 'applyCssClassWholeLine', - value: function applyCssClassWholeLine(model, indexColumn, indexLine, numberItems, restrictToThisIndexColumn) { - if (typeof numberItems !== 'undefined' && typeof indexLine !== 'undefined' && typeof indexColumn !== 'undefined' && typeof model !== 'undefined' && typeof restrictToThisIndexColumn !== 'undefined') { - if (indexColumn === restrictToThisIndexColumn) { - for (var i = model[indexColumn][indexLine].length - 1; i >= 0; i--) { - model[indexColumn][indexLine][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(numberItems); - } - } - return true; - } else { - return false; - } - } - }, { - key: 'updateCssClassWholeColumn', - value: function updateCssClassWholeColumn(model, indexColumn) { - if (typeof indexColumn !== 'undefined' && typeof model !== 'undefined') { - for (var cpt = model[indexColumn].length - 1; cpt >= 0; cpt--) { - for (var i = model[indexColumn][cpt].length - 1; i >= 0; i--) { - model[indexColumn][cpt][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(model[indexColumn][cpt].length); - } - } - return true; - } else { - return false; - } - } - }]); - - return dragDropItemDecorationService; - })(); - - dragDropItemDecorationService.$inject = ['easyFormDragWayConfig']; - - _export('default', dragDropItemDecorationService); - - _export('DRAG_DROP_ITEM_DECOR_SERVICE', DRAG_DROP_ITEM_DECOR_SERVICE); - } - }; -}); -$__System.registerDynamic("39", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "\n \n \n \n \n
\n
\n"; - global.define = __define; - return module.exports; -}); - -$__System.register('3a', ['39'], function (_export) { - /* global angular */ - 'use strict'; - - var ddDecorLineTemplate, DRAG_DROP_DECOR_LINE; - - function ddDecorLine($timeout) { - var directive = { - restrict: 'A', - scope: { - 'verboseMode': '@ddLineVerboseMode', - 'currentIndex': '@ddLineCurrentIndex', - 'parentIndex': '@ddLineParentIndex', - 'removeLine': '&ddRemoveLine' - }, - template: ddDecorLineTemplate, - transclude: true, - link: linkfct - }; - return directive; - - function linkfct($scope, element, attrs, ctrl, transclude) { - var verboseModeActive = $scope.verboseMode; - var currentIndex = $scope.currentIndex; - var parentIndex = $scope.parentIndex; - $scope.deleteLine = {}; - $scope.deleteLine.readyToDelete = false; - $scope.deleteLine.dblClickCount = 0; - $scope.isCollapsed = false; - var timer = undefined; - - // verbose mode : just for dev - if (verboseModeActive !== '') { - var verbose = angular.lowercase(verboseModeActive); - if (verbose === 'true' || verbose === '1') { - /* eslint no-console:0 */ - console.dir({ - whoAmI: 'I am verbose from ddDecorLine directive link', - verbodeMode: verbose, - ParentParentIndex: $scope.$parent.$parent.$index, - ParentIndex: parentIndex, - currentIndex: currentIndex - }); - } - } - - /** - * removeMe is function related to twice double click sequence to delete a line - * - * - addClass / remove/class ; will make line in a shake movement - * - call "removeLine function to delete the line (if it was rwice double clicked) - */ - $scope.removeMe = function (event) { - event.preventDefault(); - event.stopPropagation(); - - if ($scope.parentIndex === '1') { - //2nd dbl click : if is shaking so it is confirmation to delete - if ($scope.deleteLine.dblClickCount === 1) { - $scope.deleteLine.dblClickCount = 0; - $scope.deleteLine.readyToDelete = false; - /** - * NOTE : trick in calling parent controller function with input param when directive with isolate scope - * see : https://thinkster.io/egghead/isolate-scope-am - * - * Here should be: - * - *-> in html : dd-remove-line="removeThisLine(indexToDelete) - *-> in controller : $scope.removeThisLine = function(lineIndex){ - *-> so in directive call it : $scope.removeLine({indexToDelete: currentIndex}); - * - * - * BUT in this case (repeats, ul> li.... complicated) - * => works better (if shaking a lot of line in a row it won't mess up) - * - *-> in html : dd-remove-line="removeThisLine($index) - *-> in controller : $scope.removeThisLine = function(lineIndex){ - *-> so in directive call it : $scope.removeLine(); - */ - //$scope.removeLine({indexToDelete: currentIndex}); - $scope.removeLine(); - //console.warn('force timer destruction after delete!'); - $timeout.cancel(timer); - } - - //1st dbl click : make it shake so ready to delete - if ($scope.deleteLine.dblClickCount === 0) { - $scope.deleteLine.dblClickCount = $scope.deleteLine.dblClickCount + 1; - $scope.deleteLine.readyToDelete = true; - } - } - }; - - /** - * signle event will ever occur - * - * to prevent it to interfere with double click sequence - * -> set a time out (shaking line to delete will automaticallly end shaking after timeout : 2 seconds) - */ - $scope.cancelDelete = function () { - //event.preventDefault(); - //event.stopPropagation(); - timer = $timeout(function () { - $scope.deleteLine.dblClickCount = 0; - $scope.deleteLine.readyToDelete = false; - }, 500); - - /** - * debug - */ - // timer.then( - // () =>{ - // console.log( 'Timer resolved!', Date.now() ); - // }, - // () =>{ - // console.log( 'Timer rejected!', Date.now() ); - // } - // ); - }; - - /** - * timer destruction to prevent from bad UI experience - */ - $scope.$on('$destroy', function () { - return $timeout.cancel(timer); - }); - - /** - * prevent transclusion creating child scope - * - * - * NOTE :if you want to know more about what I'm saying : check this nice tip on the subject : - * http://angular-tips.com/blog/2014/03/transclusion-and-scopes/ - */ - transclude($scope.$parent, function (contentClone) { - //transclusion will append content to '
' - var childDiv = angular.element(element.children()[0]); - childDiv.append(contentClone); - }); - } - } - - return { - setters: [function (_) { - ddDecorLineTemplate = _['default']; - }], - execute: function () { - DRAG_DROP_DECOR_LINE = 'ddDecorLine'; - ddDecorLine.$inject = ['$timeout']; - - _export('default', ddDecorLine); - - _export('DRAG_DROP_DECOR_LINE', DRAG_DROP_DECOR_LINE); - } - }; -}); -$__System.register('3b', [], function (_export) { - 'use strict'; - - var DRAG_DROP_NO_EDITABLE_CONTROL; - - function ddNoEditableControl() { - var directive = { - restrict: 'A', - link: linkfct - }; - return directive; - - function linkfct($scope, element) { - element.on('click', function (event) { - return event.preventDefault(); - }); - } - } - - return { - setters: [], - execute: function () { - DRAG_DROP_NO_EDITABLE_CONTROL = 'ddNoEditableControl'; - ddNoEditableControl.$inject = []; - - _export('default', ddNoEditableControl); - - _export('DRAG_DROP_NO_EDITABLE_CONTROL', DRAG_DROP_NO_EDITABLE_CONTROL); - } - }; -}); -$__System.register('3c', ['30', '32', '33', '35', '37', '38', '2f', '3a', '3b'], function (_export) { - /* global angular */ - 'use strict'; - - var dragDropItemCounterService, DRAG_DROP_ITEM_COUNTER_SERVICE, ddDecorContainerDirective, DD_DECOR_CONTAINER_DIRECTIVE, ddDecorContainerController, DD_DECOR_CONTAINER_CONTROLLER_NAME, ddDecorDropZone, DD_DECOR_DROPZONE_DIRECTIVE, ddDecorItem, DRAG_DROP_DECOR_ITEM, dragDropItemDecorationService, DRAG_DROP_ITEM_DECOR_SERVICE, ddContentCounter, DD_CONTENT_COUNTER_DIRECTIVE, ddDecorLine, DRAG_DROP_DECOR_LINE, ddNoEditableControl, DRAG_DROP_NO_EDITABLE_CONTROL, DRAGDROP_MODULE; - return { - setters: [function (_) { - dragDropItemCounterService = _['default']; - DRAG_DROP_ITEM_COUNTER_SERVICE = _.DRAG_DROP_ITEM_COUNTER_SERVICE; - }, function (_2) { - ddDecorContainerDirective = _2['default']; - DD_DECOR_CONTAINER_DIRECTIVE = _2.DD_DECOR_CONTAINER_DIRECTIVE; - }, function (_3) { - ddDecorContainerController = _3['default']; - DD_DECOR_CONTAINER_CONTROLLER_NAME = _3.DD_DECOR_CONTAINER_CONTROLLER_NAME; - }, function (_4) { - ddDecorDropZone = _4['default']; - DD_DECOR_DROPZONE_DIRECTIVE = _4.DD_DECOR_DROPZONE_DIRECTIVE; - }, function (_5) { - ddDecorItem = _5['default']; - DRAG_DROP_DECOR_ITEM = _5.DRAG_DROP_DECOR_ITEM; - }, function (_6) { - dragDropItemDecorationService = _6['default']; - DRAG_DROP_ITEM_DECOR_SERVICE = _6.DRAG_DROP_ITEM_DECOR_SERVICE; - }, function (_f) { - ddContentCounter = _f['default']; - DD_CONTENT_COUNTER_DIRECTIVE = _f.DD_CONTENT_COUNTER_DIRECTIVE; - }, function (_a) { - ddDecorLine = _a['default']; - DRAG_DROP_DECOR_LINE = _a.DRAG_DROP_DECOR_LINE; - }, function (_b) { - ddNoEditableControl = _b['default']; - DRAG_DROP_NO_EDITABLE_CONTROL = _b.DRAG_DROP_NO_EDITABLE_CONTROL; - }], - execute: function () { - DRAGDROP_MODULE = 'edaDragDropWay.dragdrop.module'; - - _export('default', angular.module(DRAGDROP_MODULE, []).directive(DD_CONTENT_COUNTER_DIRECTIVE, ddContentCounter).controller(DD_DECOR_CONTAINER_CONTROLLER_NAME, ddDecorContainerController).directive(DD_DECOR_CONTAINER_DIRECTIVE, ddDecorContainerDirective).directive(DD_DECOR_DROPZONE_DIRECTIVE, ddDecorDropZone).directive(DRAG_DROP_DECOR_ITEM, ddDecorItem).service(DRAG_DROP_ITEM_DECOR_SERVICE, dragDropItemDecorationService).directive(DRAG_DROP_NO_EDITABLE_CONTROL, ddNoEditableControl).service(DRAG_DROP_ITEM_COUNTER_SERVICE, dragDropItemCounterService).directive(DRAG_DROP_DECOR_LINE, ddDecorLine)); - } - }; -}); -$__System.register('3d', [], function (_export) { - 'use strict'; - - var EDA_RIGHT_CLICK_DIRECTIVE; - - function edaRightClick($parse) { - - var directive = { - restrict: 'A', - link: linkFct - }; - return directive; - - function linkFct(scope, element, attrs) { - var fn = $parse(attrs.edaRightClick); - var columnIndex = $parse(attrs.edaRightClickColIndex); - var fctSetRightclicked = $parse(attrs.edaSetRightClicked); - /** - * on right click event manage - * - open edit panel through attrs.edaRightClick function - * - set rightCliked attribute (to true) to control (in dragDropModel) - */ - element.on('contextmenu', function (event) { - scope.$apply(function () { - event.preventDefault(); - if (columnIndex(scope) === 1) fctSetRightclicked(scope, {}); //right click limited to template column (index = 1) - if (columnIndex(scope) === 1) fn(scope, { $event: event }); //right click limited to template column (index = 1) - }); - }); - } - } - - return { - setters: [], - execute: function () { - EDA_RIGHT_CLICK_DIRECTIVE = 'edaRightClick'; - edaRightClick.$inject = ['$parse']; - - _export('default', edaRightClick); - - _export('EDA_RIGHT_CLICK_DIRECTIVE', EDA_RIGHT_CLICK_DIRECTIVE); - } - }; -}); -$__System.register('3e', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, EDA_RIGHT_CLICKED_MANAGER_SERVICE, ddItemRightClickedManager; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - EDA_RIGHT_CLICKED_MANAGER_SERVICE = 'ddItemRightClickedManager'; - - ddItemRightClickedManager = (function () { - function ddItemRightClickedManager() { - _classCallCheck(this, ddItemRightClickedManager); - - this.init(); - } - - _createClass(ddItemRightClickedManager, [{ - key: 'init', - value: function init() {} - - /** - * setUnRightClicked - * set unSelected (see edaRightClick directive) - * - * used in edaEditcontroller when droping control - */ - }, { - key: 'setUnRightClicked', - value: function setUnRightClicked(dragDropModelItem) { - dragDropModelItem.rightCliked = false; - } - - /** - * resetAllDragDropItemSelectedState - * - * simply reset (=set to false) all item.rightCliked - * in edit column (dragable column) - * - * used in edaEditPanel when closeEditPanel() called - */ - }, { - key: 'resetAllDragDropItemSelectedState', - value: function resetAllDragDropItemSelectedState(dragDropModel) { - angular.forEach(dragDropModel[1], function (line) { - angular.forEach(line, function (item) { - return item.rightCliked = false; - }); - }); - } - }]); - - return ddItemRightClickedManager; - })(); - - ddItemRightClickedManager.$inject = []; - - _export('default', ddItemRightClickedManager); - - _export('EDA_RIGHT_CLICKED_MANAGER_SERVICE', EDA_RIGHT_CLICKED_MANAGER_SERVICE); - } - }; -}); -$__System.register('3f', ['3d', '3e'], function (_export) { - 'use strict'; - - var edaRightClick, EDA_RIGHT_CLICK_DIRECTIVE, ddItemRightClickedManager, EDA_RIGHT_CLICKED_MANAGER_SERVICE, EDA_RIGHT_CLICK_MODULE; - return { - setters: [function (_d) { - edaRightClick = _d['default']; - EDA_RIGHT_CLICK_DIRECTIVE = _d.EDA_RIGHT_CLICK_DIRECTIVE; - }, function (_e) { - ddItemRightClickedManager = _e['default']; - EDA_RIGHT_CLICKED_MANAGER_SERVICE = _e.EDA_RIGHT_CLICKED_MANAGER_SERVICE; - }], - execute: function () { - EDA_RIGHT_CLICK_MODULE = 'eda.right.click.module'; - - _export('default', angular.module(EDA_RIGHT_CLICK_MODULE, []).directive(EDA_RIGHT_CLICK_DIRECTIVE, edaRightClick).service(EDA_RIGHT_CLICKED_MANAGER_SERVICE, ddItemRightClickedManager)); - } - }; -}); -$__System.register('40', ['9', 'a'], function (_export) { - var _createClass, _classCallCheck, DRAG_DROP_CONFIG_PROXY_SERVICE, ddModelConfModelProxyService; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }], - execute: function () { - 'use strict'; - - DRAG_DROP_CONFIG_PROXY_SERVICE = 'ddModelConfModelProxyService'; - - ddModelConfModelProxyService = (function () { - function ddModelConfModelProxyService(EasyFormGenFormlyBindingModels, - // controllerModalProxy, - easyFormDragWayConfig, $parse) { - _classCallCheck(this, ddModelConfModelProxyService); - - this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels; - // this.controllerModalProxy = controllerModalProxy; - // this.dragDropConfig = dragDropConfig; - this.easyFormDragWayConfig = easyFormDragWayConfig; - this.$parse = $parse; - this.init(); - } - - _createClass(ddModelConfModelProxyService, [{ - key: 'init', - value: function init() {} - }, { - key: 'refreshAllConfigurationFromDragAndDropModel', - value: function refreshAllConfigurationFromDragAndDropModel(configModel, ddModel) { - var _this = this; - - /** - * TODO : prevent reset already set props - * - * previousConfigurationModel = a backup of configuration model 'configModel 'before resetting it - * -> dragDrop model contains unique keys of already existing controls : these controls must not be reset / overwritten - */ - // let previousConfigurationModel = angular.copy(configModel); - configModel.lines = []; - // iterates line config model - angular.forEach(ddModel[1], function (lineValue, keyValue) { - // add empty line 1st - if line is empty -> it will be enough - configModel.lines.push(angular.copy(_this.EasyFormGenFormlyBindingModels.getEasyFormEmptyConfigurationLineModel())); - // update line value field - _this.applyThisLine(keyValue + 1, keyValue, configModel); - // iterate through columns and add them if control exists - angular.forEach(lineValue, function (colValue, colIndex) { - // push an empty control model but relative to dradrop : model control type - (if datepicker so additionnal properties are added) - var controlToBind = { - control: angular.copy(_this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(lineValue.length, _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]).formlyType)) - }; - var formlyDetailedControlModel = _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]); - // controls alreadys existed so do not reset it - control to bind is the previous one - if (typeof colValue.key !== 'undefined') { - //console.warn('debug dragdropModel show this control key : ' + colValue.key); - controlToBind.control = angular.copy(colValue.configModelControl); - //update cssClass depending new position: - var newClassName = _this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(lineValue.length, _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]).formlyType); - controlToBind.control.className = newClassName.className; - //test if header nee this one - controlToBind.control.cssClass = newClassName.className; - // get control details for this key in backup : previousConfigurationModel - } else { - // controls did not exists before : control to bind is a new one - // bind dragdrop control properties to configuration model through controlToBind var - _this.bindConfigCtrlModelFromFormlyDetailedCtrlModel(formlyDetailedControlModel, controlToBind, configModel); - } - // apply controlToBind var to configuration model control - if (typeof configModel.lines[keyValue].columns[colIndex] === 'undefined') configModel.lines[keyValue].columns.push(angular.copy(_this.EasyFormGenFormlyBindingModels.getEasyFormConfigurationEmptyControlModel())); - configModel.lines[keyValue].columns[colIndex].control = angular.copy(controlToBind.control); - configModel.lines[keyValue].columns[colIndex].numColumn = colIndex + 1; - configModel.lines[keyValue].columns[colIndex].exist = true; - }); - }); - return configModel; - } - }, { - key: 'refreshControlsKeys', - value: function refreshControlsKeys(configModel, dragDropModel) { - angular.forEach(configModel.lines, function (aConfigLine, aConfigLineIndex) { - angular.forEach(aConfigLine.columns, function (aConfigControl, aConfigControlIndex) { - //if last control removed from line - and dragDrop model did not already removed this line - if (typeof dragDropModel[1][aConfigLineIndex] !== 'undefined') { - if (dragDropModel[1][aConfigLineIndex].length > 0) { - dragDropModel[1][aConfigLineIndex][aConfigControlIndex].key = aConfigControl.control.key; - //need to save all in dragdropModel as it is a reference - //configModel still needed - // -> to keep coherence (same back model) between all version of easyForm Generator - // -> is the back model (can be saved to dataBase) - dragDropModel[1][aConfigLineIndex][aConfigControlIndex].configModelControl = angular.copy(aConfigControl.control); - } - } - }); - }); - } - - /** - * drag drop model - * -> will be used to bind configuration model - * of no key saved, configuration model controls would be reset each drop events - * - * -> matching key : will prevent to reset existing control - */ - }, { - key: 'loadDragDropModelFromConfigurationModel', - value: function loadDragDropModelFromConfigurationModel(configModel, dragDropModel) { - var _this2 = this; - - //reset dragdrop fields model NOT all dragDropModel! - dragDropModel[1] = []; - angular.forEach(configModel.lines, function (aConfigLine, aConfigLineIndex) { - //add new line - dragDropModel[1].push([]); - angular.forEach(aConfigLine.columns, function (aConfigControl) { - // get control type from configuration.control.selectedControl - var dragdropControlRef = { - control: 'empty', - cssClass: 'col-xs-12', - label: '
' - }; - angular.forEach(dragDropModel[0], function (groupOfCtrlRef) { - angular.forEach(groupOfCtrlRef, function (aCtrlref) { - if (aCtrlref.control === aConfigControl.control.selectedControl) dragdropControlRef = angular.copy(aCtrlref); - }); - }); - dragDropModel[1][aConfigLineIndex].push(dragdropControlRef); - //update class depending number of control per line - var cssClassToApply = _this2.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(dragDropModel[1][aConfigLineIndex].length); - angular.forEach(dragDropModel[1][aConfigLineIndex], function (ddControlToUpdate) { - return ddControlToUpdate.cssClass = cssClassToApply; - }); - }); - }); - // console.info('bindDragDropModelFromConfigurationModel'); - // console.dir( - // { - // 'when' : 'starting', - // 'configModel is ' : angular.copy(configModel), - // 'dragDropModel is ' : angular.copy(dragDropModel) - // } - // ); - } - - /** - * returns a control model that is more formly detailed - * (more formly detailed : see controls property in EasyFormGenFormlyBindingModels._easyFormListControls) - */ - }, { - key: 'getFormlyDetailedControlModelFromDragDropObject', - value: function getFormlyDetailedControlModelFromDragDropObject(dragDrapCtrlModel) { - var controlModel = {}; - var listControl = this.EasyFormGenFormlyBindingModels.getEasyFormListControls(); - var controlsListGetter = this.$parse('controls'); - - angular.forEach(controlsListGetter(listControl), function (ctrlListValue) { - if (ctrlListValue.id === dragDrapCtrlModel.control) controlModel = ctrlListValue; - }); - return controlModel; - } - - /** - * valid a control key is unique - * - * yes... function name already told us that, - * -> it's just confirmation and to see if - * you keep focus while reading it ^^ - */ - }, { - key: 'validKeyUniqueness', - value: function validKeyUniqueness(thisKey, configurationObj) { - var isUnique = true; - for (var i = configurationObj.lines.length - 1; i >= 0; i--) { - for (var j = configurationObj.lines[i].columns.length - 1; j >= 0; j--) { - if (typeof configurationObj.lines[i].columns[j].control !== 'undefined') { - if (configurationObj.lines[i].columns[j].control.key === thisKey) { - isUnique = false; - } - } - } - } - return isUnique; - } - }, { - key: 'createUniqueKey', - value: function createUniqueKey(baseKeyValue, configurationObj) { - // unique key (set only first time) in this model is formly control type + Date.now(); - var newKey = baseKeyValue + '-' + Date.now(); - if (this.validKeyUniqueness(newKey, configurationObj) === true) { - return newKey; - } else { - newKey = baseKeyValue + '-' + Date.now(); - if (this.validKeyUniqueness(newKey, configurationObj) === true) { - return newKey; - } else { - newKey = baseKeyValue + '-' + Date.now(); - return newKey; - } - } - } - }, { - key: 'applyThisLine', - value: function applyThisLine(linevalue, lineIndex, configModel) { - angular.forEach(configModel.lines, function (aLineValue, aLineKey) { - if (aLineKey === lineIndex) aLineValue.line = linevalue; - }); - } - - /** - * bind formly detailed model to configuration control model - */ - }, { - key: 'bindConfigCtrlModelFromFormlyDetailedCtrlModel', - value: function bindConfigCtrlModelFromFormlyDetailedCtrlModel(formlyDetailCtrlModel, configurationCtrlModel, configModel) { - /** - * TODO :properties should be served by provider - * more configurable without pain - */ - //set selected control : - this.$parse('control.selectedControl').assign(configurationCtrlModel, this.$parse('selectedControl')(formlyDetailCtrlModel)); - //set type : - this.$parse('control.type').assign(configurationCtrlModel, this.$parse('formlyType')(formlyDetailCtrlModel)); - //set key : - this.$parse('control.key').assign(configurationCtrlModel, this.createUniqueKey(this.$parse('control.type')(configurationCtrlModel), configModel)); - //set subtype : - this.$parse('control.subtype').assign(configurationCtrlModel, this.$parse('formlySubtype')(formlyDetailCtrlModel)); - //set templateOptions.label : - this.$parse('control.templateOptions.label').assign(configurationCtrlModel, this.$parse('formlyLabel')(formlyDetailCtrlModel)); - //set templateOptions.required : - this.$parse('control.templateOptions.required').assign(configurationCtrlModel, this.$parse('formlyRequired')(formlyDetailCtrlModel)); - //set templateOptions.required : - this.$parse('control.templateOptions.description').assign(configurationCtrlModel, this.$parse('formlyDesciption')(formlyDetailCtrlModel)); - //set templateOptions.required : - this.$parse('control.templateOptions.placeholder').assign(configurationCtrlModel, this.$parse('formlyPlaceholder')(formlyDetailCtrlModel)); - //set templateOptions.required : - this.$parse('control.templateOptions.options').assign(configurationCtrlModel, this.$parse('formlyOptions')(formlyDetailCtrlModel)); - - if (this.$parse('control.type')(configurationCtrlModel) === 'datepicker') { - this.$parse('control.templateOptions.datepickerPopup').assign(configurationCtrlModel, this.$parse('datepickerPopup')(formlyDetailCtrlModel)); - } - } - }]); - - return ddModelConfModelProxyService; - })(); - - ddModelConfModelProxyService.$inject = ['EasyFormGenFormlyBindingModels', - // 'controllerModalProxy', - // 'dragDropConfig', - 'easyFormDragWayConfig', '$parse']; - - _export('default', ddModelConfModelProxyService); - - _export('DRAG_DROP_CONFIG_PROXY_SERVICE', DRAG_DROP_CONFIG_PROXY_SERVICE); - } - }; -}); -// dragDropConfig, -$__System.register('41', ['40'], function (_export) { - 'use strict'; - - var ddModelConfModelProxyService, DRAG_DROP_CONFIG_PROXY_SERVICE, EDA_CONFIG_PROXY_MODULE; - return { - setters: [function (_) { - ddModelConfModelProxyService = _['default']; - DRAG_DROP_CONFIG_PROXY_SERVICE = _.DRAG_DROP_CONFIG_PROXY_SERVICE; - }], - execute: function () { - EDA_CONFIG_PROXY_MODULE = 'eda.config.proxy.module'; - - _export('default', angular.module(EDA_CONFIG_PROXY_MODULE, []).service(DRAG_DROP_CONFIG_PROXY_SERVICE, ddModelConfModelProxyService)); - } - }; -}); -$__System.register('42', [], function (_export) { - 'use strict'; - - var DNDLIST_DIRECTIVE, TO_INJECT; - - function dndList($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) { - var directive = { - link: linkFct - }; - return directive; - - function linkFct(scope, element, attr) { - // While an element is dragged over the list, this placeholder element is inserted - // at the location where the element would be inserted after dropping - var placeholder = angular.element('
  • '); - var placeholderNode = placeholder[0]; - var listNode = element[0]; - var horizontal = attr.dndHorizontalList && scope.$eval(attr.dndHorizontalList); - var externalSources = attr.dndExternalSources && scope.$eval(attr.dndExternalSources); - - /** - * The dragover event is triggered "every few hundred milliseconds" while an element - * is being dragged over our list, or over an child element. - */ - element.on('dragover', function (event) { - event = event.originalEvent || event; - if (!isDropAllowed(event)) return true; - // First of all, make sure that the placeholder is shown - // This is especially important if the list is empty - if (placeholderNode.parentNode != listNode) { - element.append(placeholder); - } - if (event.target !== listNode) { - // Try to find the node direct directly below the list node. - var listItemNode = event.target; - while (listItemNode.parentNode !== listNode && listItemNode.parentNode) { - listItemNode = listItemNode.parentNode; - } - if (listItemNode.parentNode === listNode && listItemNode !== placeholderNode) { - // If the mouse pointer is in the upper half of the child element, - // we place it before the child element, otherwise below it. - if (isMouseInFirstHalf(event, listItemNode)) { - listNode.insertBefore(placeholderNode, listItemNode); - } else { - listNode.insertBefore(placeholderNode, listItemNode.nextSibling); - } - } - } else { - // This branch is reached when we are dragging directly over the list element. - // Usually we wouldn't need to do anything here, but the IE does not fire it's - // events for the child element, only for the list directly. Therefore we repeat - // the positioning algorithm for IE here. - if (isMouseInFirstHalf(event, placeholderNode, true)) { - // Check if we should move the placeholder element one spot towards the top. - // Note that display none elements will have offsetTop and offsetHeight set to - // zero, therefore we need a special check for them. - while (placeholderNode.previousElementSibling && (isMouseInFirstHalf(event, placeholderNode.previousElementSibling, true) || placeholderNode.previousElementSibling.offsetHeight === 0)) { - listNode.insertBefore(placeholderNode, placeholderNode.previousElementSibling); - } - } else { - // Check if we should move the placeholder element one spot towards the bottom - while (placeholderNode.nextElementSibling && !isMouseInFirstHalf(event, placeholderNode.nextElementSibling, true)) { - listNode.insertBefore(placeholderNode, placeholderNode.nextElementSibling.nextElementSibling); - } - } - } - - // At this point we invoke the callback, which still can disallow the drop. - // We can't do this earlier because we want to pass the index of the placeholder. - if (attr.dndDragover && !invokeCallback(attr.dndDragover, event)) { - return stopDragover(); - } - element.addClass('dndDragover'); - event.preventDefault(); - event.stopPropagation(); - return false; - }); - - /** - * When the element is dropped, we use the position of the placeholder element as the - * position where we insert the transferred data. This assumes that the list has exactly - * one child element per array element. - */ - element.on('drop', function (event) { - event = event.originalEvent || event; - if (!isDropAllowed(event)) return true; - // The default behavior in Firefox is to interpret the dropped element as URL and - // forward to it. We want to prevent that even if our drop is aborted. - event.preventDefault(); - // Unserialize the data that was serialized in dragstart. According to the HTML5 specs, - // the "Text" drag type will be converted to text/plain, but IE does not do that. - var data = event.dataTransfer.getData('Text') || event.dataTransfer.getData('text/plain'); - var transferredObject; - try { - transferredObject = JSON.parse(data); - } catch (e) { - return stopDragover(); - } - // Invoke the callback, which can transform the transferredObject and even abort the drop. - if (attr.dndDrop) { - transferredObject = invokeCallback(attr.dndDrop, event, transferredObject); - if (!transferredObject) { - return stopDragover(); - } - } - // Retrieve the JSON array and insert the transferred object into it. - var targetArray = scope.$eval(attr.dndList); - scope.$apply(function () { - targetArray.splice(getPlaceholderIndex(), 0, transferredObject); - }); - // In Chrome on Windows the dropEffect will always be none... - // We have to determine the actual effect manually from the allowed effects - if (event.dataTransfer.dropEffect === 'none') { - if (event.dataTransfer.effectAllowed === 'copy' || event.dataTransfer.effectAllowed === 'move') { - dndDropEffectWorkaround.dropEffect = event.dataTransfer.effectAllowed; - } else { - dndDropEffectWorkaround.dropEffect = event.ctrlKey ? 'copy' : 'move'; - } - } else { - dndDropEffectWorkaround.dropEffect = event.dataTransfer.dropEffect; - } - // Clean up - stopDragover(); - event.stopPropagation(); - return false; - }); - - /** - * We have to remove the placeholder when the element is no longer dragged over our list. The - * problem is that the dragleave event is not only fired when the element leaves our list, - * but also when it leaves a child element -- so practically it's fired all the time. As a - * workaround we wait a few milliseconds and then check if the dndDragover class was added - * again. If it is there, dragover must have been called in the meantime, i.e. the element - * is still dragging over the list. If you know a better way of doing this, please tell me! - */ - element.on('dragleave', function (event) { - event = event.originalEvent || event; - - element.removeClass('dndDragover'); - $timeout(function () { - if (!element.hasClass('dndDragover')) { - placeholder.remove(); - } - }, 100); - }); - - /** - * Checks whether the mouse pointer is in the first half of the given target element. - * - * In Chrome we can just use offsetY, but in Firefox we have to use layerY, which only - * works if the child element has position relative. In IE the events are only triggered - * on the listNode instead of the listNodeItem, therefore the mouse positions are - * relative to the parent element of targetNode. - */ - function isMouseInFirstHalf(event, targetNode, relativeToParent) { - var mousePointer = horizontal ? event.offsetX || event.layerX : event.offsetY || event.layerY; - var targetSize = horizontal ? targetNode.offsetWidth : targetNode.offsetHeight; - var targetPosition = horizontal ? targetNode.offsetLeft : targetNode.offsetTop; - targetPosition = relativeToParent ? targetPosition : 0; - return mousePointer < targetPosition + targetSize / 2; - } - - /** - * We use the position of the placeholder node to determine at which position of the array the - * object needs to be inserted - */ - function getPlaceholderIndex() { - return Array.prototype.indexOf.call(listNode.children, placeholderNode); - } - - /** - * Checks various conditions that must be fulfilled for a drop to be allowed - */ - function isDropAllowed(event) { - // Disallow drop from external source unless it's allowed explicitly. - if (!dndDragTypeWorkaround.isDragging && !externalSources) return false; - // Check mimetype. Usually we would use a custom drag type instead of Text, but IE doesn't - // support that. - if (!hasTextMimetype(event.dataTransfer.types)) return false; - // Now check the dnd-allowed-types against the type of the incoming element. For drops from - // external sources we don't know the type, so it will need to be checked via dnd-drop. - if (attr.dndAllowedTypes && dndDragTypeWorkaround.isDragging) { - var allowed = scope.$eval(attr.dndAllowedTypes); - if (angular.isArray(allowed) && allowed.indexOf(dndDragTypeWorkaround.dragType) === -1) { - return false; - } - } - // Check whether droping is disabled completely - if (attr.dndDisableIf && scope.$eval(attr.dndDisableIf)) return false; - return true; - } - - /** - * Small helper function that cleans up if we aborted a drop. - */ - function stopDragover() { - placeholder.remove(); - element.removeClass('dndDragover'); - return true; - } - - /** - * Invokes a callback with some interesting parameters and returns the callbacks return value. - */ - function invokeCallback(expression, event, item) { - return $parse(expression)(scope, { - event: event, - index: getPlaceholderIndex(), - item: item || undefined, - external: !dndDragTypeWorkaround.isDragging, - type: dndDragTypeWorkaround.isDragging ? dndDragTypeWorkaround.dragType : undefined - }); - } - - /** - * Check if the dataTransfer object contains a drag type that we can handle. In old versions - * of IE the types collection will not even be there, so we just assume a drop is possible. - */ - function hasTextMimetype(types) { - if (!types) return true; - for (var i = 0; i < types.length; i++) { - if (types[i] === 'Text' || types[i] === 'text/plain') return true; - } - return false; - } - } - } - - return { - setters: [], - execute: function () { - DNDLIST_DIRECTIVE = 'dndList'; - TO_INJECT = ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround']; - - dndList.$inject = TO_INJECT; - - _export('default', dndList); - - _export('DNDLIST_DIRECTIVE', DNDLIST_DIRECTIVE); - } - }; -}); -$__System.register('43', [], function (_export) { - 'use strict'; - - var DNDDRAGGABLE_DIRECTIVE, TO_INJECT; - - function dndDraggable($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) { - var directive = { - link: linkFct - }; - return directive; - - function linkFct(scope, element, attr) { - var _this = this; - - // Set the HTML5 draggable attribute on the element - element.attr('draggable', 'true'); - - // If the dnd-disable-if attribute is set, we have to watch that - if (attr.dndDisableIf) { - scope.$watch(attr.dndDisableIf, function (disabled) { - return element.attr('draggable', !disabled); - }); - } - - /** - * When the drag operation is started we have to prepare the dataTransfer object, - * which is the primary way we communicate with the target element - */ - element.on('dragstart', function (event) { - event = event.originalEvent || event; - // Serialize the data associated with this element. IE only supports the Text drag type - event.dataTransfer.setData('Text', angular.toJson(scope.$eval(attr.dndDraggable))); - // Only allow actions specified in dnd-effect-allowed attribute - event.dataTransfer.effectAllowed = attr.dndEffectAllowed || 'move'; - // Add CSS classes. See documentation above - element.addClass('dndDragging'); - $timeout(function () { - element.addClass('dndDraggingSource'); - }, 0); - // Workarounds for stupid browsers, see description below - dndDropEffectWorkaround.dropEffect = 'none'; - dndDragTypeWorkaround.isDragging = true; - // Save type of item in global state. Usually, this would go into the dataTransfer - // typename, but we have to use "Text" there to support IE - dndDragTypeWorkaround.dragType = attr.dndType ? scope.$eval(attr.dndType) : undefined; - // Invoke callback - $parse(attr.dndDragstart)(scope, { event: event }); - event.stopPropagation(); - }); - - /** - * The dragend event is triggered when the element was dropped or when the drag - * operation was aborted (e.g. hit escape button). Depending on the executed action - * we will invoke the callbacks specified with the dnd-moved or dnd-copied attribute. - */ - element.on('dragend', function (event) { - event = event.originalEvent || event; - - // Invoke callbacks. Usually we would use event.dataTransfer.dropEffect to determine - // the used effect, but Chrome has not implemented that field correctly. On Windows - // it always sets it to 'none', while Chrome on Linux sometimes sets it to something - // else when it's supposed to send 'none' (drag operation aborted). - var dropEffect = dndDropEffectWorkaround.dropEffect; - scope.$apply(function () { - switch (dropEffect) { - case 'move': - $parse(attr.dndMoved)(scope, { event: event }); - break; - - case 'copy': - $parse(attr.dndCopied)(scope, { event: event }); - break; - } - }); - - // Clean up - element.removeClass('dndDragging'); - element.removeClass('dndDraggingSource'); - dndDragTypeWorkaround.isDragging = false; - event.stopPropagation(); - }); - - /** - * When the element is clicked we invoke the callback function - * specified with the dnd-selected attribute. - */ - element.on('click', function (event) { - event = event.originalEvent || event; - scope.$apply(function () { - return $parse(attr.dndSelected)(scope, { event: event }); - }); - event.stopPropagation(); - }); - - /** - * Workaround to make element draggable in IE9 - */ - element.on('selectstart', function () { - if (_this.dragDrop) _this.dragDrop(); - return false; - }); - } - } - - return { - setters: [], - execute: function () { - DNDDRAGGABLE_DIRECTIVE = 'dndDraggable'; - TO_INJECT = ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround']; - - dndDraggable.$inject = TO_INJECT; - - _export('default', dndDraggable); - - _export('DNDDRAGGABLE_DIRECTIVE', DNDDRAGGABLE_DIRECTIVE); - } - }; -}); -$__System.register('44', ['42', '43'], function (_export) { - 'use strict'; - - var dndList, DNDLIST_DIRECTIVE, dndDraggable, DNDDRAGGABLE_DIRECTIVE, DRAG_DROP_LIST_MODULE; - return { - setters: [function (_) { - dndList = _['default']; - DNDLIST_DIRECTIVE = _.DNDLIST_DIRECTIVE; - }, function (_2) { - dndDraggable = _2['default']; - DNDDRAGGABLE_DIRECTIVE = _2.DNDDRAGGABLE_DIRECTIVE; - }], - execute: function () { - DRAG_DROP_LIST_MODULE = 'dndLists.module'; - - _export('default', angular.module(DRAG_DROP_LIST_MODULE, []).directive(DNDLIST_DIRECTIVE, dndList).directive(DNDDRAGGABLE_DIRECTIVE, dndDraggable).factory('dndDragTypeWorkaround', function () { - return {}; - }).factory('dndDropEffectWorkaround', function () { - return {}; - })); - } - }; -}); -$__System.register('45', [], function (_export) { - 'use strict'; - - var PAGE_SLIDE_DIRECTIVE; - - function pageslide() { - var directive = { - restrict: 'EAC', - transclude: false, - scope: { - psOpen: '=?', - psAutoClose: '=?', - psSide: '@', - psSpeed: '@', - psClass: '@', - psSize: '@', - psSqueeze: '@', - psCloak: '@', - psPush: '@', - psContainer: '@' - }, - link: linkFct - }; - return directive; - - function linkFct($scope, el, attrs) { - /* Inspect */ - //console.log($scope); - //console.log(el); - //console.log(attrs); - - /* Parameters */ - var param = {}; - - param.side = $scope.psSide || 'right'; - param.speed = $scope.psSpeed || '0.5'; - param.size = $scope.psSize || '300px'; - param.zindex = 1000; // Override with custom CSS - param.className = $scope.psClass || 'ng-pageslide'; - param.cloak = $scope.psCloak && $scope.psCloak.toLowerCase() == 'false' ? false : true; - param.squeeze = Boolean($scope.psSqueeze) || false; - param.push = Boolean($scope.psPush) || false; - param.container = $scope.psContainer || false; - - // Apply Class - el.addClass(param.className); - - /* DOM manipulation */ - var content = null; - var slider = null; - var body = param.container ? document.getElementById(param.container) : document.body; - - slider = el[0]; - - // Check for div tag - if (slider.tagName.toLowerCase() !== 'div' && slider.tagName.toLowerCase() !== 'pageslide') throw new Error('Pageslide can only be applied to
    or elements'); - - // Check for content - if (slider.children.length === 0) throw new Error('You have to content inside the '); - - content = angular.element(slider.children); - - /* Append */ - body.appendChild(slider); - - /* Style setup */ - slider.style.zIndex = param.zindex; - slider.style.position = param.container !== false ? 'absolute' : 'fixed'; - slider.style.width = 0; - slider.style.height = 0; - slider.style.overflow = 'hidden'; - slider.style.transitionDuration = param.speed + 's'; - slider.style.webkitTransitionDuration = param.speed + 's'; - slider.style.transitionProperty = 'width, height'; - if (param.squeeze) { - body.style.position = 'absolute'; - body.style.transitionDuration = param.speed + 's'; - body.style.webkitTransitionDuration = param.speed + 's'; - body.style.transitionProperty = 'top, bottom, left, right'; - } - - switch (param.side) { - case 'right': - slider.style.height = attrs.psCustomHeight || '100%'; - slider.style.top = attrs.psCustomTop || '0px'; - slider.style.bottom = attrs.psCustomBottom || '0px'; - slider.style.right = attrs.psCustomRight || '0px'; - break; - case 'left': - slider.style.height = attrs.psCustomHeight || '100%'; - slider.style.top = attrs.psCustomTop || '0px'; - slider.style.bottom = attrs.psCustomBottom || '0px'; - slider.style.left = attrs.psCustomLeft || '0px'; - break; - case 'top': - slider.style.width = attrs.psCustomWidth || '100%'; - slider.style.left = attrs.psCustomLeft || '0px'; - slider.style.top = attrs.psCustomTop || '0px'; - slider.style.right = attrs.psCustomRight || '0px'; - break; - case 'bottom': - slider.style.width = attrs.psCustomWidth || '100%'; - slider.style.bottom = attrs.psCustomBottom || '0px'; - slider.style.left = attrs.psCustomLeft || '0px'; - slider.style.right = attrs.psCustomRight || '0px'; - break; - } - - /* Closed */ - function psClose(slider, param) { - if (slider && slider.style.width !== 0 && slider.style.width !== 0) { - if (param.cloak) content.css('display', 'none'); - switch (param.side) { - case 'right': - slider.style.width = '0px'; - if (param.squeeze) body.style.right = '0px'; - if (param.push) { - body.style.right = '0px'; - body.style.left = '0px'; - } - break; - case 'left': - slider.style.width = '0px'; - if (param.squeeze) body.style.left = '0px'; - if (param.push) { - body.style.left = '0px'; - body.style.right = '0px'; - } - break; - case 'top': - slider.style.height = '0px'; - if (param.squeeze) body.style.top = '0px'; - if (param.push) { - body.style.top = '0px'; - body.style.bottom = '0px'; - } - break; - case 'bottom': - slider.style.height = '0px'; - if (param.squeeze) body.style.bottom = '0px'; - if (param.push) { - body.style.bottom = '0px'; - body.style.top = '0px'; - } - break; - } - } - $scope.psOpen = false; - } - - /* Open */ - function psOpen(slider, param) { - if (slider.style.width !== 0 && slider.style.width !== 0) { - switch (param.side) { - case 'right': - slider.style.width = param.size; - if (param.squeeze) body.style.right = param.size; - if (param.push) { - body.style.right = param.size; - body.style.left = '-' + param.size; - } - break; - case 'left': - slider.style.width = param.size; - if (param.squeeze) body.style.left = param.size; - if (param.push) { - body.style.left = param.size; - body.style.right = '-' + param.size; - } - break; - case 'top': - slider.style.height = param.size; - if (param.squeeze) body.style.top = param.size; - if (param.push) { - body.style.top = param.size; - body.style.bottom = '-' + param.size; - } - break; - case 'bottom': - slider.style.height = param.size; - if (param.squeeze) body.style.bottom = param.size; - if (param.push) { - body.style.bottom = param.size; - body.style.top = '-' + param.size; - } - break; - } - setTimeout(function () { - if (param.cloak) content.css('display', 'block'); - }, param.speed * 1000); - } - } - - // function isFunction(functionToCheck) { - // var getType = {}; - // return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; - // } - - /* - * Watchers - * */ - - $scope.$watch('psOpen', function (value) { - /* eslint no-extra-boolean-cast:0 */ - if (!!value) { - // Open - psOpen(slider, param); - } else { - // Close - psClose(slider, param); - } - }); - - /* - * Events - * */ - - $scope.$on('$destroy', function () { - return body.removeChild(slider); - }); - - if ($scope.psAutoClose) { - $scope.$on('$locationChangeStart', function () { - return psClose(slider, param); - }); - $scope.$on('$stateChangeStart', function () { - return psClose(slider, param); - }); - } - } - } - - return { - setters: [], - execute: function () { - PAGE_SLIDE_DIRECTIVE = 'pageslide'; - pageslide.$inject = []; - - _export('default', pageslide); - - _export('PAGE_SLIDE_DIRECTIVE', PAGE_SLIDE_DIRECTIVE); - } - }; -}); -$__System.register('46', ['45'], function (_export) { - 'use strict'; - - var pageslide, PAGE_SLIDE_DIRECTIVE, PAGE_SLIDE_MODULE; - return { - setters: [function (_) { - pageslide = _['default']; - PAGE_SLIDE_DIRECTIVE = _.PAGE_SLIDE_DIRECTIVE; - }], - execute: function () { - PAGE_SLIDE_MODULE = 'pageslide.module'; - - _export('default', angular.module(PAGE_SLIDE_MODULE, []).directive(PAGE_SLIDE_DIRECTIVE, pageslide)); - } - }; -}); -$__System.register('47', [], function (_export) { - 'use strict'; - - var LIST_DRAG_DROP_ITEM_CSS_CLASSES, DRAG_DROP_CONFIG_MODEL, DRAG_DROP_PRESENTATION_MODEL, ITEMS_NOT_TO_COUNT_FOR_REAL; - return { - setters: [], - execute: function () { - LIST_DRAG_DROP_ITEM_CSS_CLASSES = [{ - cssClass: 'col-md-12', - numberItemPerRow: 0 - }, { - cssClass: 'col-md-12', - numberItemPerRow: 1 - }, { - cssClass: 'col-md-6', - numberItemPerRow: 2 - }, { - cssClass: 'col-md-4', - numberItemPerRow: 3 - }]; - DRAG_DROP_CONFIG_MODEL = { - dropZoneConfig: { - decoration: [{ - WhenIndex: 0, - ApplycssClass: 'col-md-4', - fontAwesomeIcon: 'fa fa-level-up', - title: 'Drag control from here : ' - }, { - WhenIndex: 1, - ApplycssClass: 'col-md-8', - fontAwesomeIcon: 'fa fa-level-down', - title: 'Drop control into here : ' - }], - verboseMode: false - }, - containerConfig: { - decoration: [{ - WhenIndex: 0, - ApplycssClass: 'col-md-12', - title: 'Blank : ', - groupId: 'blank', - isCollapsed: true - }, { - WhenIndex: 1, - ApplycssClass: 'col-md-12', - title: 'Headers : ', - groupId: 'headers', - isCollapsed: true - }, { - WhenIndex: 2, - ApplycssClass: 'col-md-12', - title: 'Text inputs : ', - groupId: 'inputs', - isCollapsed: true - }, { - WhenIndex: 3, - ApplycssClass: 'col-md-12', - title: 'Textareas : ', - groupId: 'textareas', - isCollapsed: true - }, { - WhenIndex: 4, - ApplycssClass: 'col-md-12', - title: 'Radios : ', - groupId: 'radios', - isCollapsed: true - }, { - WhenIndex: 5, - ApplycssClass: 'col-md-12', - title: 'Checkboxes : ', - groupId: 'checkboxes', - isCollapsed: true - }, { - WhenIndex: 6, - ApplycssClass: 'col-md-12', - title: 'Selects : ', - groupId: 'selects', - isCollapsed: true - }], - verboseMode: false, - collapseEnabled: true, - collapseCtrl: [{ - atIndex: 0, - collapse: true - }, { - atIndex: 1, - collapse: true - }] - }, - itemConfig: { - verboseMode: false - } - }; - DRAG_DROP_PRESENTATION_MODEL = [ - //1 column here is control selection column - [], [ - //empty 1st line at initialisation - []]]; - ITEMS_NOT_TO_COUNT_FOR_REAL = { - //placeholder : '', - itemBeingDragged: '' - }; - - _export('LIST_DRAG_DROP_ITEM_CSS_CLASSES', LIST_DRAG_DROP_ITEM_CSS_CLASSES); - - _export('DRAG_DROP_CONFIG_MODEL', DRAG_DROP_CONFIG_MODEL); - - _export('DRAG_DROP_PRESENTATION_MODEL', DRAG_DROP_PRESENTATION_MODEL); - - _export('ITEMS_NOT_TO_COUNT_FOR_REAL', ITEMS_NOT_TO_COUNT_FOR_REAL); - } - }; -}); -$__System.register('48', ['47'], function (_export) { - // TODO : Add here configs from ES5 dragDropConfigProvider - - 'use strict'; - - var LIST_DRAG_DROP_ITEM_CSS_CLASSES, DRAG_DROP_CONFIG_MODEL, DRAG_DROP_PRESENTATION_MODEL, ITEMS_NOT_TO_COUNT_FOR_REAL, EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME; - - function easyFormDragWayConfig() { - - var _listDragDropItemCssClasses = [].concat(LIST_DRAG_DROP_ITEM_CSS_CLASSES); - var _dragDropConfigModel = angular.copy(DRAG_DROP_CONFIG_MODEL); - var _dragDropPresentationModel = [].concat(DRAG_DROP_PRESENTATION_MODEL); - var _itemsNotToCountFoReal = angular.copy(ITEMS_NOT_TO_COUNT_FOR_REAL); - - var _configuration = defaultConfig(); - var _controlsList = controlsList(); - // let _defaultLanguage = getDefaultLanguage(); - // let _currentLanguage = initDefaultLanguage(); - var _showPreviewPanel = getDefaultshowPreviewPanel(); - var _showPreviewModels = getDefaultShowPreviewModel(); - /* jshint validthis:true */ - this.$get = easyFormDragDropWayConfigGET; - this.setModalAnimation = setModalAnimation; - this.getModalAnimation = getModalAnimation; - this.configuration = _configuration; - this.getEnabledControls = getEnabledControls; - this.disableControl = disableControl; - this.enableControl = enableControl; - // this.setLanguage = setLanguage; - // this.getCurrentLanguage = getCurrentLanguage; - this.showPreviewPanel = showPreviewPanel; - this.showPreviewModels = showPreviewModels; - - this.setListItemCssClass = setListItemCssClass; - this.getItemsNotTocount = getItemsNotTocount; - this.setItemsNotTocount = setItemsNotTocount; - this.addControlToDragDropPresentationModel = addControlToDragDropPresentationModel; - this.getDragDropPresentationModel = getDragDropPresentationModel; - - function setListItemCssClass(fromConfig) { - _listDragDropItemCssClasses = [].concat(fromConfig); - } - - function getItemsNotTocount() { - return _itemsNotToCountFoReal; - } - - function setItemsNotTocount(fromConfig) { - _itemsNotToCountFoReal = angular.copy(fromConfig); - } - - //set default config - function defaultConfig() { - var _defaultConfiguration = { - modalAnimated: false - }; - return _defaultConfiguration; - } - - function addControlToDragDropPresentationModel(controlToAdd, groupToAdd) { - if (typeof controlToAdd !== 'undefined' && typeof groupToAdd !== 'undefined') { - addToGroupControl(controlToAdd, groupToAdd); - } - } - - function getDragDropPresentationModel() { - return _dragDropPresentationModel; - } - - //show preview panel by default - function getDefaultshowPreviewPanel() { - return true; - } - - //show preview data, fields models in preview panel - function getDefaultShowPreviewModel() { - return true; - } - - // function getCurrentLanguage(){ - // return _currentLanguage; - // } - - //list of controls - function controlsList() { - var controls = [{ name: 'empty', enabled: true }, { name: 'Header', enabled: true }, { name: 'Subtitle', enabled: true }, { name: 'TextInput', enabled: true }, { name: 'Password', enabled: true }, { name: 'Email', enabled: true }, { name: 'Date', enabled: true }, { name: 'Texarea', enabled: true }, { name: 'RichTextEditor', enabled: true }, { name: 'Radio', enabled: true }, { name: 'Checkbox', enabled: true }, { name: 'BasicSelect', enabled: true }, { name: 'GroupedSelect', enabled: true }]; - return controls; - } - - function showPreviewPanel(wantToShow) { - if (angular.isDefined(wantToShow)) { - if (wantToShow === true) _showPreviewPanel = true; - if (wantToShow === false) _showPreviewPanel = false; - } - } - - function showPreviewModels(wantToShow) { - if (angular.isDefined(wantToShow)) { - if (wantToShow === true) _showPreviewModels = true; - if (wantToShow === false) _showPreviewModels = false; - } - } - - // //language : set default to english - // function getDefaultLanguage(){ - // let lang = 'en'; - // return lang; - // } - - // function setDefaultLanguage(){ - // _currentLanguage = _defaultLanguage; - // $translateProvider.preferredLanguage(_currentLanguage); - // return _currentLanguage; - // } - - // function setLanguage(language){ - // if (angular.isString(language)) { - // _currentLanguage = language; - // $translateProvider.preferredLanguage(language); - // }else{ - // setDefaultLanguage(); - // } - // } - - // function initDefaultLanguage(){ - // $translateProvider.useSanitizeValueStrategy('escape'); //security : Enable escaping of HTML - // $translateProvider.fallbackLanguage(_defaultLanguage); //fallback language to default language - // $translateProvider.preferredLanguage(_defaultLanguage); - // return _defaultLanguage; - // } - - function getEnabledControls() { - return _controlsList; - } - - function disableControl(controlName) { - if (angular.isString(controlName)) { - angular.forEach(_controlsList, function (aControl) { - if (aControl.name === controlName) aControl.enabled = false; - }); - } - } - - function enableControl(controlName) { - if (angular.isString(controlName)) { - angular.forEach(_controlsList, function (aControl) { - if (aControl.name === controlName) aControl.enabled = true; - }); - } - } - - function setModalAnimation(flagConfig) { - var valueToApply = flagConfig === true ? flagConfig : flagConfig === false ? flagConfig : _configuration.modalAnimated; - - _configuration.modalAnimated = valueToApply; - } - - function getModalAnimation() { - return _configuration.modalAnimated; - } - - //$get implementation : - // easyFormDragDropWayConfigGET.$inject = ['$translate']; - // function easyFormDragDropWayConfigGET($translate){ - easyFormDragDropWayConfigGET.$inject = []; - function easyFormDragDropWayConfigGET() { - - var service = { - setModalAnimation: setModalAnimationFct, - getModalAnimationValue: getModalAnimationValue, - getListEnabledControl: getListEnabledControl, - // setLanguage : switchLanguage, - // getCurrentLanguage : getCurrentLanguage, - isPreviewPanelVisible: isPreviewPanelVisible, - arePreviewModelsVisible: arePreviewModelsVisible, - - getListItemCssClass: getListItemCssClass, - getItemsNotToCount: getItemsNotToCount, - getItemCssDependingNumberItemsInRow: getItemCssDependingNumberItemsInRow, - getDistinctItemCssClass: getDistinctItemCssClass, - getDragDropConfigModel: getDragDropConfigModel, - getDragDropPresentationModel: getDragDropPresentationModel, - setDragDropConfigContainerDecorationCollapse: setDragDropConfigContainerDecorationCollapse - }; - return service; - - function getDragDropPresentationModel() { - return _dragDropPresentationModel; - } - - function setDragDropConfigContainerDecorationCollapse(dragDropConfigModel, indexValue, isCollapsedBool) { - if (typeof indexValue !== 'undefined' && typeof isCollapsedBool !== 'undefined') { - if (indexValue === parseInt(indexValue, 10)) { - dragDropConfigModel.containerConfig.decoration[indexValue].isCollapsed = isCollapsedBool; - } - } - return true; - } - - function getDragDropConfigModel() { - return _dragDropConfigModel; - } - - function getDistinctItemCssClass() { - var distinctCssClass = []; - angular.forEach(_listDragDropItemCssClasses, function (valueRef) { - - var cssClassRef = valueRef.cssClass; - - if (distinctCssClass.length === 0) { - distinctCssClass.push(cssClassRef); - } else { - var canAdd = true; - angular.forEach(distinctCssClass, function (valueProc) { - var cssClassProc = valueProc; - if (cssClassRef === cssClassProc) { - canAdd = false; - } - }); - if (canAdd) distinctCssClass.push(cssClassRef); - } - }); - return distinctCssClass; - } - - function getItemCssDependingNumberItemsInRow(numberOfItems) { - if (typeof numberOfItems !== 'undefined') { - var classToReturn = ''; - for (var i = _listDragDropItemCssClasses.length - 1; i >= 0; i--) { - if (_listDragDropItemCssClasses[i].numberItemPerRow === numberOfItems) { - classToReturn = _listDragDropItemCssClasses[i].cssClass; - } - } - return classToReturn; - } else { - return ''; - } - } - - function getListItemCssClass() { - return _listDragDropItemCssClasses; - } - - function getItemsNotToCount() { - return _itemsNotToCountFoReal; - } - - function getModalAnimationValue() { - return _configuration.modalAnimated; - } - - function setModalAnimationFct(value) { - setModalAnimation(value); - } - - function getListEnabledControl() { - return angular.copy(_controlsList); - } - - // function switchLanguage(language){ - // if (angular.isString(language)) { - // _currentLanguage = language; - // $translate.use(language); - // }else{ - // setDefaultLanguage(); - // } - // } - - function isPreviewPanelVisible() { - return _showPreviewPanel; - } - - function arePreviewModelsVisible() { - return _showPreviewModels; - } - } - - /** - * addToGroupControl : add control to _dragDropPresentationModel - * @param {[type]} thisControl : control to add - * @param {[type]} thisGroup : groupId wher this control should be added - * - * NOTE : if _dragDropPresentationModel wrong initialized it will create list of group conforming to - * configModel - */ - function addToGroupControl(thisControl, thisGroup) { - /** - * search group if already exists - */ - if (_dragDropPresentationModel[0].length > 0) { - /** - * case when _dragDropConfigModel.containerConfig.decoration.length is > to _dragDropPresentationModel[0].length - * - * for instance : initialization _dragDropPresentationModel[0] in between - */ - if (_dragDropPresentationModel[0].length < _dragDropConfigModel.containerConfig.decoration.length) { - var missingGroupNumber = _dragDropConfigModel.containerConfig.decoration.length - _dragDropPresentationModel[0].length; - - for (var i = 0; i < missingGroupNumber; i++) { - _dragDropPresentationModel[0].push([]); - } - } - /** - * push control to right index - * (deduced by _dragDropConfigModel.containerConfig.decoration.WhenIndex value for groupId === thisGroup) - */ - _dragDropConfigModel.containerConfig.decoration.forEach(function (groupConfig) { - if (thisGroup.addToGroupCtrl === groupConfig.groupId) { - _dragDropPresentationModel[0][groupConfig.WhenIndex].push(thisControl); - } - }); - } else { - /** - * no group no control - * - * initialize _dragDropConfigModel.containerConfig.decoration list - */ - _dragDropConfigModel.containerConfig.decoration.forEach(function () { - return _dragDropPresentationModel[0].push([]); - }); - /** - * push control to right index - * (deduced by _dragDropConfigModel.containerConfig.decoration.WhenIndex value for groupId === thisGroup) - */ - _dragDropConfigModel.containerConfig.decoration.forEach(function (groupConfig) { - if (thisGroup.addToGroupCtrl === groupConfig.groupId) { - _dragDropPresentationModel[0][groupConfig.WhenIndex].push(thisControl); - } - }); - } - } - } - - // easyFormDragWayConfig.$inject = ['$translateProvider']; - - return { - setters: [function (_) { - LIST_DRAG_DROP_ITEM_CSS_CLASSES = _.LIST_DRAG_DROP_ITEM_CSS_CLASSES; - DRAG_DROP_CONFIG_MODEL = _.DRAG_DROP_CONFIG_MODEL; - DRAG_DROP_PRESENTATION_MODEL = _.DRAG_DROP_PRESENTATION_MODEL; - ITEMS_NOT_TO_COUNT_FOR_REAL = _.ITEMS_NOT_TO_COUNT_FOR_REAL; - }], - execute: function () { - EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME = 'easyFormDragWayConfig'; - easyFormDragWayConfig.$inject = []; - - _export('default', easyFormDragWayConfig); - - _export('EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME', EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME); - } - }; -}); -$__System.registerDynamic("49", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = "
    \n
    \n
    \n
    \n
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t 2\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdnd-dragover=\"vm.dragoverCallbackItems($parent.$parent.$index, $parent.$index, $index, external);\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdnd-drop=\"vm.dropCallbackItems(event, index, $index,$parent.$index, $parent.$parent.$index, $parent.$parent.$parent.$index, item, external, type, 'itemType');\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"itemlist\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-content-counter\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-value-when-placeholder=\"dndPlaceholder\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-value-when-dragging=\"dndDraggingSource\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-full-model = \"vm.dragDropModel\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-content-counter-current-index=\"{{$index}}\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-content-counter-parent-index=\"{{$parent.$index}}\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdd-content-counter-force-css-refresh = \"command.forceRefresh\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{vm.configuration.submitButtonText}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{{vm.configuration.cancelButtonText}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\tCustomize form buttons\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCustomize Submit button Text :\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCustomize Cancel button Text :\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\tDATA MODEL\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t{{vm.model | json}}\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\tFIELDS MODEL (ready to save to database one)\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t{{vm.wfFormFieldsOnlyNeededProperties | json}}\n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\t\t\tSave this form\n\t\t\t\t\t\t\t\t\t\t

    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tName to this form :\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\tsave this form\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\n\t\t\t
    \n\t\t\t
    \n
    \n Easy form generator : {{vm.easyFormGeneratorVERSION}} — Erwan DATIN (MacKentoch)\n
    \n\t\t\t
    \n
    \n \n\n"; - global.define = __define; - return module.exports; -}); - -$__System.registerDynamic("4a", [], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - var $Object = Object; - module.exports = { - create: $Object.create, - getProto: $Object.getPrototypeOf, - isEnum: {}.propertyIsEnumerable, - getDesc: $Object.getOwnPropertyDescriptor, - setDesc: $Object.defineProperty, - setDescs: $Object.defineProperties, - getKeys: $Object.keys, - getNames: $Object.getOwnPropertyNames, - getSymbols: $Object.getOwnPropertySymbols, - each: [].forEach - }; - global.define = __define; - return module.exports; -}); - -$__System.registerDynamic("4b", ["4a"], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - var $ = $__require('4a'); - module.exports = function defineProperty(it, key, desc) { - return $.setDesc(it, key, desc); - }; - global.define = __define; - return module.exports; -}); - -$__System.registerDynamic("4c", ["4b"], true, function($__require, exports, module) { - ; - var global = this, - __define = global.define; - global.define = undefined; - module.exports = { - "default": $__require('4b'), - __esModule: true - }; - global.define = __define; - return module.exports; -}); - -$__System.registerDynamic("9", ["4c"], true, function($__require, exports, module) { - "use strict"; - ; - var global = this, - __define = global.define; - global.define = undefined; - var _Object$defineProperty = $__require('4c')["default"]; - exports["default"] = (function() { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) - descriptor.writable = true; - _Object$defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - if (protoProps) - defineProperties(Constructor.prototype, protoProps); - if (staticProps) - defineProperties(Constructor, staticProps); - return Constructor; - }; - })(); - exports.__esModule = true; - global.define = __define; - return module.exports; -}); - -$__System.registerDynamic("a", [], true, function($__require, exports, module) { - "use strict"; - ; - var global = this, - __define = global.define; - global.define = undefined; - exports["default"] = function(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - exports.__esModule = true; - global.define = __define; - return module.exports; -}); - -$__System.register('4d', [], function (_export) { - /* global angular */ - 'use strict'; - - var DEBUG_MODEL, initDebugModel, DEFAULT_TAB_MODEL, initTabModel, COLUMN_TEMPLATE, initColumnTemplate, LINE_TEMPLATE, initLineTemplate, DEFAULT_IHM_MODEL, initIhmModel; - return { - setters: [], - execute: function () { - DEBUG_MODEL = { - showDebug: false, - configurationModelNumberofLines: 1 - }; - - initDebugModel = function initDebugModel() { - return angular.copy(DEBUG_MODEL); - }; - - DEFAULT_TAB_MODEL = { - editTab: { - active: true - }, - previewTab: { - active: false, - tabVisible: true, - modelsVisible: true - } - }; - - initTabModel = function initTabModel(isPreviewPanelVisible, arePreviewModelsVisible) { - var _tabModel = angular.copy(DEFAULT_TAB_MODEL); - angular.extend(_tabModel.previewTab, { - tabVisible: isPreviewPanelVisible, - modelsVisible: arePreviewModelsVisible - }); - return _tabModel; - }; - - COLUMN_TEMPLATE = { - numColumn: -1, - exist: true, - control: { - type: 'none', - key: 'none', - subtype: 'none' - // templateOptions: { - // label: 'none', - // placeholder: 'none', - // required: false, - // description: 'Descriptive text' - // } - } - }; - - initColumnTemplate = function initColumnTemplate() { - return angular.copy(COLUMN_TEMPLATE); - }; - - LINE_TEMPLATE = { - line: -1, - activeColumn: 1, - columns: [{ - numColumn: 1, - exist: true, - control: { - type: 'none', - key: 'none' - // templateOptions: { - // label: 'none', - // placeholder: 'none', - // required: false, - // description: 'Descriptive text' - // } - } - }] - }; - - initLineTemplate = function initLineTemplate() { - return angular.copy(LINE_TEMPLATE); - }; - - DEFAULT_IHM_MODEL = { - preview: { - formlyModelViewExpanded: true, - formlyFieldsViewExpanded: true, - customizeFormButtonsExpanded: true, - saveThisFormExpanded: true - } - }; - - initIhmModel = function initIhmModel() { - return angular.copy(DEFAULT_IHM_MODEL); - }; - - _export('initDebugModel', initDebugModel); - - _export('initTabModel', initTabModel); - - _export('initColumnTemplate', initColumnTemplate); - - _export('initLineTemplate', initLineTemplate); - - _export('initIhmModel', initIhmModel); - } - }; -}); -$__System.register('4e', ['9', 'a', '4d'], function (_export) { - var _createClass, _classCallCheck, initTabModel, initIhmModel, DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS, edaDragDropWayEasyFormGenCtrl; - - return { - setters: [function (_) { - _createClass = _['default']; - }, function (_a) { - _classCallCheck = _a['default']; - }, function (_d) { - initTabModel = _d.initTabModel; - initIhmModel = _d.initIhmModel; - }], - execute: function () { - /* global angular */ - - /////////////////////////////////////////////////////////////////////// - // TODO : - // - check no use methods that come from step way and delete if not needed - // - check other TODO (a lot of fixes are needed) - /////////////////////////////////////////////////////////////////////// - - 'use strict'; - - DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = 'edaDragDropWayEasyFormGenCtrl'; - DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS = 'vm'; - - edaDragDropWayEasyFormGenCtrl = (function () { - function edaDragDropWayEasyFormGenCtrl($scope, easyFormGenVersion, $filter, $anchorScroll, toaster, $timeout, $modal, $log, formFieldManage, controllerModalProxy, dragDropItemDecorationService, - // dragDropConfig, - ddModelConfModelProxyService, ddItemRightClickedManager, easyFormDragWayConfig) { - _classCallCheck(this, edaDragDropWayEasyFormGenCtrl); - - this.$scope = $scope; - this.easyFormGenVersion = easyFormGenVersion; - this.$filter = $filter; - this.$anchorScroll = $anchorScroll; - this.toaster = toaster; - this.$timeout = $timeout; - this.$modal = $modal; - this.$log = $log; - this.formFieldManage = formFieldManage; - this.controllerModalProxy = controllerModalProxy; - this.dragDropItemDecorationService = dragDropItemDecorationService; - // this.dragDropConfig = dragDropConfig; - this.ddModelConfModelProxyService = ddModelConfModelProxyService; - this.ddItemRightClickedManager = ddItemRightClickedManager; - this.easyFormDragWayConfig = easyFormDragWayConfig; - - this.init(); - } - - _createClass(edaDragDropWayEasyFormGenCtrl, [{ - key: 'init', - value: function init() { - this.easyFormGeneratorVERSION = this.easyFormGenVersion; - this.tab = initTabModel(this.easyFormDragWayConfig.isPreviewPanelVisible(), this.easyFormDragWayConfig.arePreviewModelsVisible()); - this.returnSaveEvent = false; - this.dataModel = {}; //was vm.model in ES5 version - this.wfFormFields = []; - this.wfFormFieldsOnlyNeededProperties = []; - this.ihm = initIhmModel(); - this.easyFormDragDropProperties = this.easyFormDragWayConfig.getDragDropConfigModel(); - this.dragDropModel = [].concat(this.easyFormDragWayConfig.getDragDropPresentationModel()); - this.numberOfColumns = 1; - this.MaxNumberOfColumns = 3; - this.MinNumberOfColumns = 1; - this.configuration = {}; - this.animationsEnabled = this.easyFormDragWayConfig.getModalAnimationValue(); - this.editPanelModel = { toggle: false }; - this.debugProxyModel = this.controllerModalProxy.ProxyModel; - this.model = []; - - this.formFieldManage.initConfigurationEditFromScratch(this.configuration, false); - this.controllerModalProxy.initProxyModel(); - } - }, { - key: 'collapseAllGroupControl', - value: function collapseAllGroupControl(allExceptThisGroupIndex) { - var _this = this; - - angular.forEach(this.easyFormDragDropProperties.containerConfig.decoration, function (value) { - if (value.WhenIndex !== allExceptThisGroupIndex) _this.easyFormDragWayConfig.setDragDropConfigContainerDecorationCollapse(_this.easyFormDragDropProperties, value.WhenIndex, true); - }); - } - }, { - key: 'onSubmit', - value: function onSubmit() { - this.toaster.pop({ - type: 'info', - timeout: 2000, - title: 'should save data model if it were not a static example', - body: 'data :' + this.$filter('json')(this.dataModel, 4), - showCloseButton: true - }); - } - }, { - key: 'resetToZeroModel', - value: function resetToZeroModel() { - this.configuration.activeLine = 1; - if (this.configuration.lines.length > 1) this.configuration.lines.splice(1, this.configuration.lines.length - 2); - return this.countConfigurationModelLines(); - } - - //TO CHECK if does not come from step way : - }, { - key: 'countConfigurationModelLines', - value: function countConfigurationModelLines() { - return this.configuration.lines.length; - } - - // //TO CHECK THEN TO DELETE : should come from step way... - // setActiveLineNumber(lineNumber){ - // if (lineNumber <= this.countConfigurationModelLines()) this.configuration.activeLine = lineNumber; - // } - - // //TO CHECK THEN TO DELETE : should come from step way... - // upThisLine(indexLine){ - // if (indexLine > -1) { - // if (this.configuration.lines[indexLine - 1]) { - // let currentLineObj = this.configuration.lines[indexLine]; - // this.configuration.lines.splice(indexLine , 1); - // this.configuration.lines.splice((indexLine - 1), 0, currentLineObj); - // this.configuration.activeLine = 1; - // } - // } - // - // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // } - - // //TO CHECK THEN TO DELETE : should come from step way... - // downThisLine(indexLine){ - // if (indexLine > -1) { - // if (this.configuration.lines[indexLine + 1]) { - // let currentLineObj = this.configuration.lines[indexLine]; - // this.configuration.lines.splice(indexLine , 1); - // this.configuration.lines.splice((indexLine + 1), 0, currentLineObj); - // this.configuration.activeLine = 1; - // } - // } - // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // } - - // //TO CHECK THEN TO DELETE : should come from step way... - // removeThisLine(index){ - // if (index > -1) { - // if (this.configuration.lines.length > 1) { - // if (this.configuration.activeLine === index + 1) this.configuration.activeLine = 1; - // this.configuration.lines.splice(index, 1); - // }else{ - // this.$timeout(()=>{ - // this.toaster.pop({ - // type : 'warning', - // title : 'Last line' , - // body : 'Can\'t delete the last line', - // showCloseButton : true - // }); - // }, 100); - // } - // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // } - // } - - // //TO CHECK THEN TO DELETE : should come from step way... - // increaseNumberOfColumns(){ - // if (this.configuration.lines[this.configuration.activeLine -1].columns.length < this.MaxNumberOfColumns) { - // let newNumberOfColumns = this.configuration.lines[this.configuration.activeLine -1].columns.push(initColumnTemplate()); - // this.configuration.lines[this.configuration.activeLine -1].columns[newNumberOfColumns - 1].numColumn = newNumberOfColumns; - // } - // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // } - - // //TO CHECK THEN TO DELETE : should come from step way... - // decreaseNumberOfColumns(indexLine, indexColumn){ - // if (this.configuration.lines[this.configuration.activeLine -1].columns.length > 1) { - // this.configuration.lines[this.configuration.activeLine -1].columns.splice(this.configuration.lines[this.configuration.activeLine -1].columns.length -1, 1); - // } - // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // } - - }, { - key: 'saveThisForm', - value: function saveThisForm() { - if (typeof this.configuration.formName === 'undefined') { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: 'Form name is undefined', - body: 'Form has not been saved.', - showCloseButton: true - }); - return false; - } - if (this.configuration.formName === '') { - this.toaster.pop({ - type: 'warning', - timeout: 2000, - title: 'Form name is required', - body: 'Form has not been saved.', - showCloseButton: true - }); - return false; - } - this.toaster.pop({ - type: 'wait', - timeout: 10000, - title: 'Form is being saved', - body: 'Wait.', - showCloseButton: true - }); - this.toaster.clear(); - this.returnSaveEvent = true; - return true; - } - }, { - key: 'dragoverCallbackContainer', - value: function dragoverCallbackContainer(parentparentIndex, parentIndex, index) { - //prevent container in layout column to be drag to control select contianer - if (index === 0) return false; - return true; - } - }, { - key: 'dropCallback', - value: function dropCallback(event, index, item, external, type, allowedType) { - var _this2 = this; - - if (external) { - if (allowedType === 'itemType' && !item.label) return false; - if (allowedType === 'containerType' && !angular.isArray(item)) return false; - } - //set a timeout befire binding since ddModel may not be called when already full updated - var timerRefreshDDToConfig = this.$timeout(function () { - _this2.configuration = angular.copy(_this2.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(_this2.configuration, _this2.dragDropModel)); - _this2.formFieldManage.applyConfigurationToformlyModel(_this2.configuration, _this2.wfFormFields, _this2.dataModel); - _this2.wfFormFieldsOnlyNeededProperties = angular.copy(_this2.wfFormFields); - _this2.ddModelConfModelProxyService.refreshControlsKeys(_this2.configuration, _this2.dragDropModel); - }, 200); - this.$scope.$on('$destroy', function () { - return _this2.$timeout.cancel(timerRefreshDDToConfig); - }); - return item; - } - }, { - key: 'dndItemMoved', - value: function dndItemMoved(parentParentIndex, parentIndex, itemIndex) { - //prevent item from first container to disapear when dropped on other container - if (parentParentIndex > 0) this.dragDropModel[parentParentIndex][parentIndex].splice(itemIndex, 1); - } - }, { - key: 'dragoverCallbackItems', - value: function dragoverCallbackItems(ParentParentIndex, parentIndex) { - //prevent items in layout column to be drag to control select - if (parentIndex === 0) return false; - return true; - } - - //TODO : will replace in html : dnd-disable-if="items.length > 2" - }, { - key: 'disableItemDropIf', - value: function disableItemDropIf() {} - }, { - key: 'dropCallbackItems', - value: function dropCallbackItems(event, index, realIndex, parentIndex, parentParentIndex, parentParentParentIndex, item, external, type, allowedType) { - var _this3 = this; - - if (external) { - if (allowedType === 'itemType' && !item.label) return false; - if (allowedType === 'containerType' && !angular.isArray(item)) return false; - } - //set a timeout before binding since ddModel may not be called when already full updated - var timerRefreshDDToConfig = this.$timeout(function () { - _this3.configuration = angular.copy(_this3.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(_this3.configuration, _this3.dragDropModel)); - _this3.formFieldManage.applyConfigurationToformlyModel(_this3.configuration, _this3.wfFormFields, _this3.dataModel); - _this3.wfFormFieldsOnlyNeededProperties = angular.copy(_this3.wfFormFields); - // refresh controls key in dragDrop Model to persist already exists controls between refreshes when item drop events - _this3.ddModelConfModelProxyService.refreshControlsKeys(_this3.configuration, _this3.dragDropModel); - }, 200); - // add/set rightCliked property to false (will help edaRightClick directive) - this.ddItemRightClickedManager.setUnRightClicked(item); - // timerRefreshDDToConfig timer destruction - this.$scope.$on('$destroy', function () { - return _this3.$timeout.cancel(timerRefreshDDToConfig); - }); - return item; - } - }, { - key: 'saveFromEditPanel', - value: function saveFromEditPanel() { - /** - * TODO : - * should be called from edit panel - * - * AND - * - * should call all these methods - * - * need to get : - * - * - line index - * - column index - * - basicSelectRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service - * - groupedSelectRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service - * - radioRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service - */ - this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel(); - //save config to control - //controllerModalProxy.applyConfigToSelectedControl(self.proxyModel); - //return current model to parent controller : - - //update configuration model and formly model - this.controllerModalProxy.bindConfigurationModelFromProxyModel(this.controllerModalProxy.getEditPanelModelLineIndex(), this.controllerModalProxy.getEditPanelModelColumnIndex(), this.configuration); - this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - this.ddModelConfModelProxyService.refreshControlsKeys(this.configuration, this.dragDropModel); - this.controllerModalProxy.setEditPanelModelToggle(false); - this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle(); - this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel); - } - }, { - key: 'closeEditPanel', - value: function closeEditPanel() { - // reset all rightClicked control properties to false - this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel); - - /** - * TODO : refresh configuration model - * uncomment after update these next 3 lines - * - * NOTE : indexLine AND numcolumn should be stored in service and - * updated when togle sidepanel - */ - //this.controllerModalProxy.bindConfigurationModelFromProxyModel(indexLine, numcolumn, modalAddCtrlModel, this.configuration); - //this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - //this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - - this.controllerModalProxy.setEditPanelModelToggle(false); - this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle(); - } - }, { - key: 'setRightClicked', - value: function setRightClicked(previousState, item) { - item.rightCliked = true; - } - }, { - key: 'toggleEditPanel', - value: function toggleEditPanel(event, lineIndex, colIndex, item) { - var _this4 = this; - - this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel); - // already opened (could be another control edit) - if (this.controllerModalProxy.getEditPanelModelToggle()) { - // -> immediate close and refresh configuration model + formly model - this.controllerModalProxy.setEditPanelModelToggle(false); - this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle(); - - //TODO : for refreshing - //this.controllerModalProxy.bindConfigurationModelFromProxyModel(indexLine, numcolumn, modalAddCtrlModel, this.configuration); - //this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - //this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - - // check if new control right clicked otherwise just toggle side panel - if (typeof this.controllerModalProxy.getEditPanelModelLineIndex() !== 'undefined' && typeof this.controllerModalProxy.getEditPanelModelColumnIndex() !== 'undefined' && typeof this.controllerModalProxy.getEditPanelModelControl() !== 'undefined') { - if (this.controllerModalProxy.getEditPanelModelLineIndex() === lineIndex && this.controllerModalProxy.getEditPanelModelColumnIndex() === colIndex && angular.equals(this.controllerModalProxy.getEditPanelModelControl(), item)) { - //console.info('already opened for SAME ctrl : so close - no re-open'); - } else { - (function () { - //console.info('already opened for DIFFERENT ctrl : so re-open'); - item.rightCliked = true; - // set a timeout before re-opening, 500ms is ok for a ps-size="400px" - var timerCloseOpenedEditPanel = _this4.$timeout(function () { - _this4.controllerModalProxy.setEditPanelModelLineIndex(lineIndex); - _this4.controllerModalProxy.setEditPanelModelColumnIndex(colIndex); - _this4.controllerModalProxy.setEditPanelModelControl(item); - // control model passed to Service : controllerModalProxy - _this4.controllerModalProxy.setProxyModelFromConfigurationSelection(_this4.configuration, lineIndex, colIndex); - _this4.controllerModalProxy.setEditPanelModelToggle(true); - _this4.$scope.editPanelModel.toggle = _this4.controllerModalProxy.getEditPanelModelToggle(); - }, 200); - _this4.$scope.$on('$destroy', function () { - return _this4.$timeout.cancel(timerCloseOpenedEditPanel); - }); - })(); - } - } - } else { - // previous state = closed = immediate open - // console.info('NOT already opened : so open'); - item.rightCliked = true; - - this.controllerModalProxy.setEditPanelModelLineIndex(lineIndex); - this.controllerModalProxy.setEditPanelModelColumnIndex(colIndex); - this.controllerModalProxy.setEditPanelModelControl(item); - // control model passed to Service : controllerModalProxy - this.controllerModalProxy.setProxyModelFromConfigurationSelection(this.configuration, lineIndex, colIndex); - this.controllerModalProxy.setEditPanelModelToggle(true); - this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle(); - } - - // console.info('after toggleLeftPanel check :'); - // console.dir({ - // 'this.editPanelModel' : angular.copy(this.editPanelModel), - // 'controllerModalProxy.editPanelModel' : angular.copy(this.controllerModalProxy.editPanelModel) - // }); - } - - // // refreshModels : to call after drag and drop events - // refreshModels(){ - // this.$timeout(()=>{ - // console.info('refreshing models'); - // formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - // }, 10); - // } - - }, { - key: 'removeThisLine', - value: function removeThisLine(lineIndex) { - this.dragDropModel[1].splice(lineIndex, 1); - } - - //TODO : to fix - }, { - key: 'addNewline', - value: function addNewline() { - // re-render formfield - // TODO : to fix - this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel); - this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields); - } - }, { - key: 'insertNewLine', - value: function insertNewLine() { - this.addNewline(); - this.dragDropModel[1].push([]); - } - }]); - - return edaDragDropWayEasyFormGenCtrl; - })(); - - edaDragDropWayEasyFormGenCtrl.$inject = ['$scope', 'easyFormGenVersion', '$filter', '$anchorScroll', 'toaster', '$timeout', '$modal', '$log', 'formFieldManage', 'controllerModalProxy', 'dragDropItemDecorationService', - // 'dragDropConfig', - 'ddModelConfModelProxyService', 'ddItemRightClickedManager', 'easyFormDragWayConfig']; - - _export('default', edaDragDropWayEasyFormGenCtrl); - - _export('DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER', DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER); - - _export('DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS', DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS); - } - }; -}); -$__System.register('4f', ['49', '4e'], function (_export) { - /* global angular */ - - //TODO : to bindToController - //-> then angular 1.4+ will be required... - //-> check methot to refactor inside rag drop way then common step way and drag drop way - - 'use strict'; - - var edaDragDropWayEasyFormGenDirectiveTemplate, DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS, EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE; - - function edaDragdropWayEasyFormGen($timeout, formFieldManage, ddModelConfModelProxyService, - // dragDropConfig, - easyFormDragWayConfig) { - - var directive = { - restrict: 'E', - template: edaDragDropWayEasyFormGenDirectiveTemplate, - scope: { - edaEasyFormGeneratorModel: '=', - edaSaveFormEvent: '&edaSaveFormEvent' - }, - controller: DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, - controllerAs: DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS, - replace: false, - link: linkFct - }; - return directive; - - function linkFct(scope) { - // watch "scope.easyFormGeneratorModel" - scope.$watch(function () { - return scope.edaEasyFormGeneratorModel; - }, function () { - return loadExistingConfigurationModel(); - }, true); - - // watch "scope.returnSaveEvent"" = catch saving form event - scope.$watch(function () { - return scope.returnSaveEvent; - }, function (newValue) { - if (newValue === true) { - var _easyFormGeneratorModel = { - formName: scope.vm.configuration.formName, - btnSubmitText: scope.vm.configuration.submitButtonText, - btnCancelText: scope.vm.configuration.cancelButtonText, - edaFieldsModel: scope.vm.configuration.lines, - //just as test - edaFieldsModelStringified: angular.toJson(scope.vm.configuration.lines), - formlyFieldsModel: scope.vm.wfFormFieldsOnlyNeededProperties, - dataModel: scope.vm.dataModel - }; - scope.edaSaveFormEvent({ - edaEasyFormGeneratorModel: _easyFormGeneratorModel - }); - //back to false, waiting next save event - scope.returnSaveEvent = false; - } - }); - - function returnAttributeConfigurationLinesIfNotEmpty() { - var edaEasyFormGeneratorModelToReturn = angular.isArray(scope.edaEasyFormGeneratorModel.edaFieldsModel) ? scope.edaEasyFormGeneratorModel.edaFieldsModel.length > 0 ? scope.edaEasyFormGeneratorModel.edaFieldsModel : emptyEdaFieldsModel() : emptyEdaFieldsModel(); - return edaEasyFormGeneratorModelToReturn; - } - - /** - * empty fields model : to display at least an empty line - * otherwise would look like ugly empty line like it were a bug - */ - function emptyEdaFieldsModel() { - var emptyModel = [{ - 'line': 1, - 'activeColumn': 1, - 'columns': [{ - 'numColumn': 1, - 'exist': true, - 'control': { - 'type': 'none', - 'key': 'none' - } - }] - }]; - return emptyModel; - } - - function returnAttributeDataModelIfNotEmpty() { - var dataModelToReturn = angular.isArray(scope.edaEasyFormGeneratorModel.dataModel) ? scope.edaEasyFormGeneratorModel.dataModel.length > 0 ? scope.edaEasyFormGeneratorModel.dataModel : [] : []; - return dataModelToReturn; - } - - function loadExistingConfigurationModel() { - if (angular.isDefined(scope.edaEasyFormGeneratorModel)) { - var configlines = returnAttributeConfigurationLinesIfNotEmpty(); - scope.vm.configurationLoaded = {}; - formFieldManage.bindConfigurationLines(scope.vm.configurationLoaded, configlines, false); - //apply configuration model - scope.vm.configuration = angular.copy(scope.vm.configurationLoaded); - //apply ddModel - ddModelConfModelProxyService.loadDragDropModelFromConfigurationModel(scope.vm.configuration, scope.vm.dragDropModel); - updateConfigurationClassName(scope.vm.configuration); - ddModelConfModelProxyService.refreshControlsKeys(scope.vm.configuration, scope.vm.dragDropModel); - //apply formly model - formFieldManage.applyConfigurationToformlyModel(scope.vm.configuration, scope.vm.wfFormFields, scope.vm.dataModel); - scope.vm.wfFormFieldsOnlyNeededProperties = angular.copy(scope.vm.wfFormFields); - scope.vm.dataModel = returnAttributeDataModelIfNotEmpty(); - scope.vm.configuration.formName = angular.isString(scope.edaEasyFormGeneratorModel.formName) ? scope.edaEasyFormGeneratorModel.formName : ''; - scope.vm.configuration.submitButtonText = angular.isString(scope.edaEasyFormGeneratorModel.btnSubmitText) ? scope.edaEasyFormGeneratorModel.btnSubmitText : 'Submit'; - scope.vm.configuration.cancelButtonText = angular.isString(scope.edaEasyFormGeneratorModel.btnCancelText) ? scope.edaEasyFormGeneratorModel.btnCancelText : 'Cancel'; - } - } - - function updateConfigurationClassName(configModel) { - angular.forEach(configModel.lines, function (aline) { - var cssClassToApply = easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(aline.columns.length); - angular.forEach(aline.columns, function (aControl) { - return aControl.control.className = cssClassToApply; - }); - }); - } - } - } - - return { - setters: [function (_) { - edaDragDropWayEasyFormGenDirectiveTemplate = _['default']; - }, function (_e) { - DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = _e.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER; - DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS = _e.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS; - }], - execute: function () { - EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE = 'edaDragdropWayEasyFormGen'; - edaDragdropWayEasyFormGen.$inject = ['$timeout', 'formFieldManage', 'ddModelConfModelProxyService', - // 'dragDropConfig', - 'easyFormDragWayConfig']; - - _export('default', edaDragdropWayEasyFormGen); - - _export('EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE', EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE); - } - }; -}); -$__System.register('50', ['48', '4e', '4f'], function (_export) { - /* global angular */ - - 'use strict'; - - var easyFormDragWayConfig, EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME, edaDragDropWayEasyFormGenCtrl, DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, edaDragdropWayEasyFormGen, EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE, DRAGDROP_MODULE; - return { - setters: [function (_) { - easyFormDragWayConfig = _['default']; - EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME = _.EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME; - }, function (_e) { - edaDragDropWayEasyFormGenCtrl = _e['default']; - DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = _e.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER; - }, function (_f) { - edaDragdropWayEasyFormGen = _f['default']; - EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE = _f.EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE; - }], - execute: function () { - DRAGDROP_MODULE = 'edaDragDropWay.main.module'; - - _export('default', angular.module(DRAGDROP_MODULE, []).provider(EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME, easyFormDragWayConfig).controller(DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, edaDragDropWayEasyFormGenCtrl).directive(EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE, edaDragdropWayEasyFormGen)); - } - }; -}); -$__System.register('51', [], function (_export) { - 'use strict'; - - var TRUST_THIS_FILTER_NAME; - - function trustThis($sce) { - return function (value, type) { - return $sce.trustAs(type || 'html', value); - }; - } - - return { - setters: [], - execute: function () { - TRUST_THIS_FILTER_NAME = 'trustThis'; - trustThis.$inject = ['$sce']; - - _export('default', trustThis); - - _export('TRUST_THIS_FILTER_NAME', TRUST_THIS_FILTER_NAME); - } - }; -}); -$__System.register('52', ['51'], function (_export) { - 'use strict'; - - var trustThis, TRUST_THIS_FILTER_NAME, TRUST_THIS_FILTER_MODULE; - return { - setters: [function (_) { - trustThis = _['default']; - TRUST_THIS_FILTER_NAME = _.TRUST_THIS_FILTER_NAME; - }], - execute: function () { - TRUST_THIS_FILTER_MODULE = 'edaDragDropWay.trustThis.filter'; - - _export('default', angular.module(TRUST_THIS_FILTER_MODULE, []).filter(TRUST_THIS_FILTER_NAME, trustThis)); - } - }; -}); -$__System.register('1', ['2', '3', '5', '6', '41', '44', '46', '50', '52', '2a', '2e', '3c', '3f'], function (_export) { - 'use strict'; - - var formlyConfigFunct, dragDropConfigFunt, EASY_FORM_DD_VERSION_NAME, EASY_FORM_DD_VERSION_VALUE, coreModule, configProxyModule, dragAndDropListModule, pageSlideModule, easyFormDragDropModule, trustThisFilterModule, leftPanelModule, formlyProxyModule, dragdropModule, rightClickModule, DRAG_DROP_WAY_MODULE_NAME, DRAG_DROP_MODULES_INJECT, mainModule; - return { - setters: [function (_) {}, function (_2) { - formlyConfigFunct = _2['default']; - }, function (_3) { - dragDropConfigFunt = _3['default']; - EASY_FORM_DD_VERSION_NAME = _3.EASY_FORM_DD_VERSION_NAME; - EASY_FORM_DD_VERSION_VALUE = _3.EASY_FORM_DD_VERSION_VALUE; - }, function (_4) { - coreModule = _4['default']; - }, function (_5) { - configProxyModule = _5['default']; - }, function (_6) { - dragAndDropListModule = _6['default']; - }, function (_7) { - pageSlideModule = _7['default']; - }, function (_8) { - easyFormDragDropModule = _8['default']; - }, function (_9) { - trustThisFilterModule = _9['default']; - }, function (_a) { - leftPanelModule = _a['default']; - }, function (_e) { - formlyProxyModule = _e['default']; - }, function (_c) { - dragdropModule = _c['default']; - }, function (_f) { - rightClickModule = _f['default']; - }], - execute: function () { - DRAG_DROP_WAY_MODULE_NAME = 'eda.easyformGen.dragDropWay'; - DRAG_DROP_MODULES_INJECT = [coreModule.name, configProxyModule.name, trustThisFilterModule.name, leftPanelModule.name, formlyProxyModule.name, dragdropModule.name, easyFormDragDropModule.name, rightClickModule.name, dragAndDropListModule.name, pageSlideModule.name]; - mainModule = angular.module(DRAG_DROP_WAY_MODULE_NAME, DRAG_DROP_MODULES_INJECT).config(dragDropConfigFunt).config(formlyConfigFunct).value(EASY_FORM_DD_VERSION_NAME, EASY_FORM_DD_VERSION_VALUE); - - _export('default', mainModule); - } - }; -}); -}) -(function(factory) { - factory(); -}); -//# sourceMappingURL=eda.dragdropway.js.map \ No newline at end of file +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = "http://localhost:8080/"; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\n__webpack_require__(1);\n\n__webpack_require__(6);\n\n__webpack_require__(10);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2luZGV4LmpzPzQ1NmMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFDQTs7QUFDQSIsImZpbGUiOiIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL3ZlbmRvcnMnO1xuaW1wb3J0ICcuL3N0eWxlL2RyYWdfYW5kX2Ryb3Auc2Nzcyc7XG5pbXBvcnQgJy4vbWFpbic7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2luZGV4LmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 1 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\n__webpack_require__(2);\n\n__webpack_require__(3);\n\n__webpack_require__(5);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L3ZlbmRvcnMuanM/YjcxMyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOztBQUNBOztBQUNBIiwiZmlsZSI6IjEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJ2FwaS1jaGVjayc7IC8vIE5PVEU6IGFsd2F5cyBpbXBvcnRlZCBiZWZvcmUgYW5ndWxhci1mb3JtbHkhXG5pbXBvcnQgJ2FuZ3VsYXItZm9ybWx5JztcbmltcG9ydCAnYW5ndWxhci1mb3JtbHktdGVtcGxhdGVzLWJvb3RzdHJhcCc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L3ZlbmRvcnMuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 2 */ +/***/ function(module, exports, __webpack_require__) { + + eval("//! api-check version 7.5.5 built with ♥ by Kent C. Dodds (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apiCheck\"] = factory();\n\telse\n\t\troot[\"apiCheck\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n\tvar _apiCheck = __webpack_require__(1);\n\n\tvar _apiCheck2 = _interopRequireDefault(_apiCheck);\n\n\texports['default'] = _apiCheck2['default'];\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar stringify = __webpack_require__(2);\n\tvar apiCheckUtil = __webpack_require__(3);\n\tvar each = apiCheckUtil.each;\n\tvar isError = apiCheckUtil.isError;\n\tvar t = apiCheckUtil.t;\n\tvar arrayify = apiCheckUtil.arrayify;\n\tvar getCheckerDisplay = apiCheckUtil.getCheckerDisplay;\n\tvar typeOf = apiCheckUtil.typeOf;\n\tvar getError = apiCheckUtil.getError;\n\n\tvar checkers = __webpack_require__(4);\n\tvar apiCheckApis = getApiCheckApis();\n\n\tmodule.exports = getApiCheckInstance;\n\tmodule.exports.VERSION = (\"7.5.5\");\n\tmodule.exports.utils = apiCheckUtil;\n\tmodule.exports.globalConfig = {\n\t verbose: false,\n\t disabled: false\n\t};\n\n\tvar apiCheckApiCheck = getApiCheckInstance({\n\t output: { prefix: 'apiCheck' }\n\t});\n\tmodule.exports.internalChecker = apiCheckApiCheck;\n\n\teach(checkers, function (checker, name) {\n\t return module.exports[name] = checker;\n\t});\n\n\tfunction getApiCheckInstance() {\n\t var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\t var extraCheckers = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n\t /* eslint complexity:[2, 6] */\n\t if (apiCheckApiCheck && arguments.length) {\n\t apiCheckApiCheck['throw'](apiCheckApis.getApiCheckInstanceCheckers, arguments, {\n\t prefix: 'creating an apiCheck instance'\n\t });\n\t }\n\n\t var additionalProperties = {\n\t 'throw': getApiCheck(true),\n\t warn: getApiCheck(false),\n\t getErrorMessage: getErrorMessage,\n\t handleErrorMessage: handleErrorMessage,\n\t config: {\n\t output: config.output || {\n\t prefix: '',\n\t suffix: '',\n\t docsBaseUrl: ''\n\t },\n\t verbose: config.verbose || false,\n\t disabled: config.disabled || false\n\t },\n\t utils: apiCheckUtil\n\t };\n\n\t each(additionalProperties, function (wrapper, name) {\n\t return apiCheck[name] = wrapper;\n\t });\n\n\t var disabled = apiCheck.disabled || module.exports.globalConfig.disabled;\n\t each(checkers.getCheckers(disabled), function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\t each(extraCheckers, function (checker, name) {\n\t return apiCheck[name] = checker;\n\t });\n\n\t return apiCheck;\n\n\t /**\n\t * This is the instance function. Other things are attached to this see additional properties above.\n\t * @param {Array} api - the checkers to check with\n\t * @param {Array} args - the args to check\n\t * @param {Object} output - output options\n\t * @returns {Object} - if this has a failed = true property, then it failed\n\t */\n\t function apiCheck(api, args, output) {\n\t /* eslint complexity:[2, 8] */\n\t if (apiCheck.config.disabled || module.exports.globalConfig.disabled) {\n\t return {\n\t apiTypes: {}, argTypes: {},\n\t passed: true, message: '',\n\t failed: false\n\t }; // empty version of what is normally returned\n\t }\n\t checkApiCheckApi(arguments);\n\t if (!Array.isArray(api)) {\n\t api = [api];\n\t args = [args];\n\t } else {\n\t // turn arguments into an array\n\t args = Array.prototype.slice.call(args);\n\t }\n\t var messages = checkEnoughArgs(api, args);\n\t if (!messages.length) {\n\t // this is where we actually go perform the checks.\n\t messages = checkApiWithArgs(api, args);\n\t }\n\n\t var returnObject = getTypes(api, args);\n\t returnObject.args = args;\n\t if (messages.length) {\n\t returnObject.message = apiCheck.getErrorMessage(api, args, messages, output);\n\t returnObject.failed = true;\n\t returnObject.passed = false;\n\t } else {\n\t returnObject.message = '';\n\t returnObject.failed = false;\n\t returnObject.passed = true;\n\t }\n\t return returnObject;\n\t }\n\n\t /**\n\t * checkApiCheckApi, should be read like: check apiCheck api. As in, check the api for apiCheck :-)\n\t * @param {Array} checkApiArgs - args provided to apiCheck function\n\t */\n\t function checkApiCheckApi(checkApiArgs) {\n\t var api = checkApiArgs[0];\n\t var args = checkApiArgs[1];\n\t var isArrayOrArgs = Array.isArray(args) || args && typeof args === 'object' && typeof args.length === 'number';\n\n\t if (Array.isArray(api) && !isArrayOrArgs) {\n\t throw new Error(getErrorMessage(api, [args], ['If an array is provided for the api, an array must be provided for the args as well.'], { prefix: 'apiCheck' }));\n\t }\n\t // dog fooding here\n\t var errors = checkApiWithArgs(apiCheckApis.checkApiCheckApi, checkApiArgs);\n\t if (errors.length) {\n\t var message = apiCheck.getErrorMessage(apiCheckApis.checkApiCheckApi, checkApiArgs, errors, {\n\t prefix: 'apiCheck'\n\t });\n\t apiCheck.handleErrorMessage(message, true);\n\t }\n\t }\n\n\t function getApiCheck(shouldThrow) {\n\t return function apiCheckWrapper(api, args, output) {\n\t var result = apiCheck(api, args, output);\n\t apiCheck.handleErrorMessage(result.message, shouldThrow);\n\t return result; // wont get here if an error is thrown\n\t };\n\t }\n\n\t function handleErrorMessage(message, shouldThrow) {\n\t if (shouldThrow && message) {\n\t throw new Error(message);\n\t } else if (message) {\n\t /* eslint no-console:0 */\n\t console.warn(message);\n\t }\n\t }\n\n\t function getErrorMessage(api, args) {\n\t var messages = arguments.length <= 2 || arguments[2] === undefined ? [] : arguments[2];\n\t var output = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];\n\n\t var gOut = apiCheck.config.output || {};\n\t var prefix = getPrefix();\n\t var suffix = getSuffix();\n\t var url = getUrl();\n\t var message = 'apiCheck failed! ' + messages.join(', ');\n\t var passedAndShouldHavePassed = '\\n\\n' + buildMessageFromApiAndArgs(api, args);\n\t return (prefix + ' ' + message + ' ' + suffix + ' ' + (url || '') + passedAndShouldHavePassed).trim();\n\n\t function getPrefix() {\n\t var p = output.onlyPrefix;\n\t if (!p) {\n\t p = ((gOut.prefix || '') + ' ' + (output.prefix || '')).trim();\n\t }\n\t return p;\n\t }\n\n\t function getSuffix() {\n\t var s = output.onlySuffix;\n\t if (!s) {\n\t s = ((output.suffix || '') + ' ' + (gOut.suffix || '')).trim();\n\t }\n\t return s;\n\t }\n\n\t function getUrl() {\n\t var u = output.url;\n\t if (!u) {\n\t u = gOut.docsBaseUrl && output.urlSuffix && ('' + gOut.docsBaseUrl + output.urlSuffix).trim();\n\t }\n\t return u;\n\t }\n\t }\n\n\t function buildMessageFromApiAndArgs(api, args) {\n\t var _getTypes = getTypes(api, args);\n\n\t var apiTypes = _getTypes.apiTypes;\n\t var argTypes = _getTypes.argTypes;\n\n\t var copy = Array.prototype.slice.call(args || []);\n\t var replacedItems = [];\n\t replaceFunctionWithName(copy);\n\t var passedArgs = getObjectString(copy);\n\t argTypes = getObjectString(argTypes);\n\t apiTypes = getObjectString(apiTypes);\n\n\t return generateMessage();\n\n\t // functions\n\n\t function replaceFunctionWithName(obj) {\n\t each(obj, function (val, name) {\n\t /* eslint complexity:[2, 6] */\n\t if (replacedItems.indexOf(val) === -1) {\n\t // avoid recursive problems\n\t replacedItems.push(val);\n\t if (typeof val === 'object') {\n\t replaceFunctionWithName(obj);\n\t } else if (typeof val === 'function') {\n\t obj[name] = val.displayName || val.name || 'anonymous function';\n\t }\n\t }\n\t });\n\t }\n\n\t function getObjectString(types) {\n\t if (!types || !types.length) {\n\t return 'nothing';\n\t } else if (types && types.length === 1) {\n\t types = types[0];\n\t }\n\t return stringify(types, null, 2);\n\t }\n\n\t function generateMessage() {\n\t var n = '\\n';\n\t var useS = true;\n\t if (args && args.length === 1) {\n\t if (typeof args[0] === 'object' && args[0] !== null) {\n\t useS = !!Object.keys(args[0]).length;\n\t } else {\n\t useS = false;\n\t }\n\t }\n\t var types = 'type' + (useS ? 's' : '');\n\t var newLine = n + n;\n\t return 'You passed:' + n + passedArgs + newLine + ('With the ' + types + ':' + n + argTypes + newLine) + ('The API calls for:' + n + apiTypes);\n\t }\n\t }\n\n\t function getTypes(api, args) {\n\t api = arrayify(api);\n\t args = arrayify(args);\n\t var apiTypes = api.map(function (checker, index) {\n\t var specified = module.exports.globalConfig.hasOwnProperty('verbose');\n\t return getCheckerDisplay(checker, {\n\t terse: specified ? !module.exports.globalConfig.verbose : !apiCheck.config.verbose,\n\t obj: args[index],\n\t addHelpers: true\n\t });\n\t });\n\t var argTypes = args.map(function (arg) {\n\t return getArgDisplay(arg, []);\n\t });\n\t return { argTypes: argTypes, apiTypes: apiTypes };\n\t }\n\t}\n\n\t// STATELESS FUNCTIONS\n\n\t/**\n\t * This is where the magic happens for actually checking the arguments with the api.\n\t * @param {Array} api - checkers\n\t * @param {Array} args - and arguments object\n\t * @returns {Array} - the error messages\n\t */\n\tfunction checkApiWithArgs(api, args) {\n\t /* eslint complexity:[2, 7] */\n\t var messages = [];\n\t var failed = false;\n\t var checkerIndex = 0;\n\t var argIndex = 0;\n\t var arg = undefined,\n\t checker = undefined,\n\t res = undefined,\n\t lastChecker = undefined,\n\t argName = undefined,\n\t argFailed = undefined,\n\t skipPreviousChecker = undefined;\n\t /* jshint -W084 */\n\t while ((checker = api[checkerIndex++]) && argIndex < args.length) {\n\t arg = args[argIndex++];\n\t argName = 'Argument ' + argIndex + (checker.isOptional ? ' (optional)' : '');\n\t res = checker(arg, 'value', argName);\n\t argFailed = isError(res);\n\t lastChecker = checkerIndex >= api.length;\n\t skipPreviousChecker = checkerIndex > 1 && api[checkerIndex - 1].isOptional;\n\t if (argFailed && lastChecker || argFailed && !lastChecker && !checker.isOptional && !skipPreviousChecker) {\n\t failed = true;\n\t messages.push(getCheckerErrorMessage(res, checker, arg));\n\t } else if (argFailed && checker.isOptional) {\n\t argIndex--;\n\t } else {\n\t messages.push(t(argName) + ' passed');\n\t }\n\t }\n\t return failed ? messages : [];\n\t}\n\n\tcheckerTypeType.type = 'function with __apiCheckData property and `${function.type}` property';\n\tfunction checkerTypeType(checkerType, name, location) {\n\t var apiCheckDataChecker = checkers.shape({\n\t type: checkers.string,\n\t optional: checkers.bool\n\t });\n\t var asFunc = checkers.func.withProperties({ __apiCheckData: apiCheckDataChecker });\n\t var asShape = checkers.shape({ __apiCheckData: apiCheckDataChecker });\n\t var wrongShape = checkers.oneOfType([asFunc, asShape])(checkerType, name, location);\n\t if (isError(wrongShape)) {\n\t return wrongShape;\n\t }\n\t if (typeof checkerType !== 'function' && !checkerType.hasOwnProperty(checkerType.__apiCheckData.type)) {\n\t return getError(name, location, checkerTypeType.type);\n\t }\n\t}\n\n\tfunction getCheckerErrorMessage(res, checker, val) {\n\t var checkerHelp = getCheckerHelp(checker, val);\n\t checkerHelp = checkerHelp ? ' - ' + checkerHelp : '';\n\t return res.message + checkerHelp;\n\t}\n\n\tfunction getCheckerHelp(_ref, val) {\n\t var help = _ref.help;\n\n\t if (!help) {\n\t return '';\n\t }\n\t if (typeof help === 'function') {\n\t help = help(val);\n\t }\n\t return help;\n\t}\n\n\tfunction checkEnoughArgs(api, args) {\n\t var requiredArgs = api.filter(function (a) {\n\t return !a.isOptional;\n\t });\n\t if (args.length < requiredArgs.length) {\n\t return ['Not enough arguments specified. Requires `' + requiredArgs.length + '`, you passed `' + args.length + '`'];\n\t } else {\n\t return [];\n\t }\n\t}\n\n\tfunction getArgDisplay(arg, gottenArgs) {\n\t /* eslint complexity:[2, 7] */\n\t var cName = arg && arg.constructor && arg.constructor.name;\n\t var type = typeOf(arg);\n\t if (type === 'function') {\n\t if (hasKeys()) {\n\t var properties = stringify(getDisplayIfNotGotten());\n\t return cName + ' (with properties: ' + properties + ')';\n\t }\n\t return cName;\n\t }\n\n\t if (arg === null) {\n\t return 'null';\n\t }\n\n\t if (type !== 'array' && type !== 'object') {\n\t return type;\n\t }\n\n\t if (hasKeys()) {\n\t return getDisplayIfNotGotten();\n\t }\n\n\t return cName;\n\n\t // utility functions\n\t function hasKeys() {\n\t return arg && Object.keys(arg).length;\n\t }\n\n\t function getDisplayIfNotGotten() {\n\t if (gottenArgs.indexOf(arg) !== -1) {\n\t return '[Circular]';\n\t }\n\t gottenArgs.push(arg);\n\t return getDisplay(arg, gottenArgs);\n\t }\n\t}\n\n\tfunction getDisplay(obj, gottenArgs) {\n\t var argDisplay = {};\n\t each(obj, function (v, k) {\n\t return argDisplay[k] = getArgDisplay(v, gottenArgs);\n\t });\n\t return argDisplay;\n\t}\n\n\tfunction getApiCheckApis() {\n\t var os = checkers.string.optional;\n\n\t var checkerFnChecker = checkers.func.withProperties({\n\t type: checkers.oneOfType([checkers.string, checkerTypeType]).optional,\n\t displayName: checkers.string.optional,\n\t shortType: checkers.string.optional,\n\t notOptional: checkers.bool.optional,\n\t notRequired: checkers.bool.optional\n\t });\n\n\t var getApiCheckInstanceCheckers = [checkers.shape({\n\t output: checkers.shape({\n\t prefix: checkers.string.optional,\n\t suffix: checkers.string.optional,\n\t docsBaseUrl: checkers.string.optional\n\t }).strict.optional,\n\t verbose: checkers.bool.optional,\n\t disabled: checkers.bool.optional\n\t }).strict.optional, checkers.objectOf(checkerFnChecker).optional];\n\n\t var checkApiCheckApi = [checkers.typeOrArrayOf(checkerFnChecker), checkers.any.optional, checkers.shape({\n\t prefix: os, suffix: os, urlSuffix: os, // appended case\n\t onlyPrefix: os, onlySuffix: os, url: os // override case\n\t }).strict.optional];\n\n\t return {\n\t checkerFnChecker: checkerFnChecker,\n\t getApiCheckInstanceCheckers: getApiCheckInstanceCheckers,\n\t checkApiCheckApi: checkApiCheckApi\n\t };\n\t}\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\tmodule.exports = stringify;\n\n\tfunction getSerialize (fn, decycle) {\n\t var seen = [], keys = [];\n\t decycle = decycle || function(key, value) {\n\t return '[Circular ' + getPath(value, seen, keys) + ']'\n\t };\n\t return function(key, value) {\n\t var ret = value;\n\t if (typeof value === 'object' && value) {\n\t if (seen.indexOf(value) !== -1)\n\t ret = decycle(key, value);\n\t else {\n\t seen.push(value);\n\t keys.push(key);\n\t }\n\t }\n\t if (fn) ret = fn(key, ret);\n\t return ret;\n\t }\n\t}\n\n\tfunction getPath (value, seen, keys) {\n\t var index = seen.indexOf(value);\n\t var path = [ keys[index] ];\n\t for (index--; index >= 0; index--) {\n\t if (seen[index][ path[0] ] === value) {\n\t value = seen[index];\n\t path.unshift(keys[index]);\n\t }\n\t }\n\t return '~' + path.join('.');\n\t}\n\n\tfunction stringify(obj, fn, spaces, decycle) {\n\t return JSON.stringify(obj, getSerialize(fn, decycle), spaces);\n\t}\n\n\tstringify.getSerialize = getSerialize;\n\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n\tvar stringify = __webpack_require__(2);\n\tvar checkerHelpers = {\n\t addOptional: addOptional, getRequiredVersion: getRequiredVersion, setupChecker: setupChecker, addNullable: addNullable\n\t};\n\n\tmodule.exports = {\n\t each: each, copy: copy, typeOf: typeOf, arrayify: arrayify, getCheckerDisplay: getCheckerDisplay,\n\t isError: isError, list: list, getError: getError, nAtL: nAtL, t: t, undef: undef, checkerHelpers: checkerHelpers,\n\t noop: noop\n\t};\n\n\tfunction copy(obj) {\n\t var type = typeOf(obj);\n\t var daCopy = undefined;\n\t if (type === 'array') {\n\t daCopy = [];\n\t } else if (type === 'object') {\n\t daCopy = {};\n\t } else {\n\t return obj;\n\t }\n\t each(obj, function (val, key) {\n\t daCopy[key] = val; // cannot single-line this because we don't want to abort the each\n\t });\n\t return daCopy;\n\t}\n\n\tfunction typeOf(obj) {\n\t if (Array.isArray(obj)) {\n\t return 'array';\n\t } else if (obj instanceof RegExp) {\n\t return 'object';\n\t } else {\n\t return typeof obj;\n\t }\n\t}\n\n\tfunction getCheckerDisplay(checker, options) {\n\t /* eslint complexity:[2, 7] */\n\t var display = undefined;\n\t var short = options && options.short;\n\t if (short && checker.shortType) {\n\t display = checker.shortType;\n\t } else if (!short && typeof checker.type === 'object' || checker.type === 'function') {\n\t display = getCheckerType(checker, options);\n\t } else {\n\t display = getCheckerType(checker, options) || checker.displayName || checker.name;\n\t }\n\t return display;\n\t}\n\n\tfunction getCheckerType(_ref, options) {\n\t var type = _ref.type;\n\n\t if (typeof type === 'function') {\n\t var __apiCheckData = type.__apiCheckData;\n\t var typeTypes = type(options);\n\t type = _defineProperty({\n\t __apiCheckData: __apiCheckData\n\t }, __apiCheckData.type, typeTypes);\n\t }\n\t return type;\n\t}\n\n\tfunction arrayify(obj) {\n\t if (!obj) {\n\t return [];\n\t } else if (Array.isArray(obj)) {\n\t return obj;\n\t } else {\n\t return [obj];\n\t }\n\t}\n\n\tfunction each(obj, iterator, context) {\n\t if (Array.isArray(obj)) {\n\t return eachArry(obj, iterator, context);\n\t } else {\n\t return eachObj(obj, iterator, context);\n\t }\n\t}\n\n\tfunction eachObj(obj, iterator, context) {\n\t var ret = undefined;\n\t var hasOwn = Object.prototype.hasOwnProperty;\n\t /* eslint prefer-const:0 */ // some weird eslint bug?\n\t for (var key in obj) {\n\t if (hasOwn.call(obj, key)) {\n\t ret = iterator.call(context, obj[key], key, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t }\n\t return true;\n\t}\n\n\tfunction eachArry(obj, iterator, context) {\n\t var ret = undefined;\n\t var length = obj.length;\n\t for (var i = 0; i < length; i++) {\n\t ret = iterator.call(context, obj[i], i, obj);\n\t if (ret === false) {\n\t return ret;\n\t }\n\t }\n\t return true;\n\t}\n\n\tfunction isError(obj) {\n\t return obj instanceof Error;\n\t}\n\n\tfunction list(arry, join, finalJoin) {\n\t arry = arrayify(arry);\n\t var copy = arry.slice();\n\t var last = copy.pop();\n\t if (copy.length === 1) {\n\t join = ' ';\n\t }\n\t return copy.join(join) + ('' + (copy.length ? join + finalJoin : '') + last);\n\t}\n\n\tfunction getError(name, location, checkerType) {\n\t if (typeof checkerType === 'function') {\n\t checkerType = checkerType({ short: true });\n\t }\n\t var stringType = typeof checkerType !== 'object' ? checkerType : stringify(checkerType);\n\t return new Error(nAtL(name, location) + ' must be ' + t(stringType));\n\t}\n\n\tfunction nAtL(name, location) {\n\t var tName = t(name || 'value');\n\t var tLocation = !location ? '' : ' at ' + t(location);\n\t return '' + tName + tLocation;\n\t}\n\n\tfunction t(thing) {\n\t return '`' + thing + '`';\n\t}\n\n\tfunction undef(thing) {\n\t return typeof thing === 'undefined';\n\t}\n\n\t/**\n\t * This will set up the checker with all of the defaults that most checkers want like required by default and an\n\t * optional version\n\t *\n\t * @param {Function} checker - the checker to setup with properties\n\t * @param {Object} properties - properties to add to the checker\n\t * @param {boolean} disabled - when set to true, this will set the checker to a no-op function\n\t * @returns {Function} checker - the setup checker\n\t */\n\tfunction setupChecker(checker, properties, disabled) {\n\t /* eslint complexity:[2, 9] */\n\t if (disabled) {\n\t // swap out the checker for its own copy of noop\n\t checker = getNoop();\n\t checker.isNoop = true;\n\t }\n\n\t if (typeof checker.type === 'string') {\n\t checker.shortType = checker.type;\n\t }\n\n\t // assign all properties given\n\t each(properties, function (prop, name) {\n\t return checker[name] = prop;\n\t });\n\n\t if (!checker.displayName) {\n\t checker.displayName = 'apiCheck ' + t(checker.shortType || checker.type || checker.name) + ' type checker';\n\t }\n\n\t if (!checker.notRequired) {\n\t checker = getRequiredVersion(checker, disabled);\n\t }\n\n\t if (!checker.notNullable) {\n\t addNullable(checker, disabled);\n\t }\n\n\t if (!checker.notOptional) {\n\t addOptional(checker, disabled);\n\t }\n\n\t return checker;\n\t}\n\n\tfunction getRequiredVersion(checker, disabled) {\n\t var requiredChecker = disabled ? getNoop() : function requiredChecker(val, name, location, obj) {\n\t if (undef(val) && !checker.isOptional) {\n\t var tLocation = location ? ' in ' + t(location) : '';\n\t var type = getCheckerDisplay(checker, { short: true });\n\t var stringType = typeof type !== 'object' ? type : stringify(type);\n\t return new Error('Required ' + t(name) + ' not specified' + tLocation + '. Must be ' + t(stringType));\n\t } else {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t copyProps(checker, requiredChecker);\n\t requiredChecker.originalChecker = checker;\n\t return requiredChecker;\n\t}\n\n\tfunction addOptional(checker, disabled) {\n\t var optionalCheck = disabled ? getNoop() : function optionalCheck(val, name, location, obj) {\n\t if (!undef(val)) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, optionalCheck);\n\n\t optionalCheck.isOptional = true;\n\t optionalCheck.displayName = checker.displayName + ' (optional)';\n\t optionalCheck.originalChecker = checker;\n\n\t // the magic line that allows you to add .optional to the end of the checkers\n\t checker.optional = optionalCheck;\n\n\t fixType(checker, checker.optional);\n\t}\n\n\tfunction addNullable(checker, disabled) {\n\t var nullableCheck = disabled ? getNoop() : function nullableCheck(val, name, location, obj) {\n\t if (val !== null) {\n\t return checker(val, name, location, obj);\n\t }\n\t };\n\t // inherit all properties on the original checker\n\t copyProps(checker, nullableCheck);\n\n\t nullableCheck.isNullable = true;\n\t nullableCheck.displayName = checker.displayName + ' (nullable)';\n\t nullableCheck.originalChecker = checker;\n\n\t // the magic line that allows you to add .nullable to the end of the checkers\n\t checker.nullable = nullableCheck;\n\n\t fixType(checker, checker.nullable);\n\t if (!checker.notOptional) {\n\t addOptional(checker.nullable, disabled);\n\t }\n\t}\n\n\tfunction fixType(checker, checkerCopy) {\n\t // fix type, because it's not a straight copy...\n\t // the reason is we need to specify type.__apiCheckData.optional as true for the terse/verbose option.\n\t // we also want to add \"(optional)\" to the types with a string\n\t if (typeof checkerCopy.type === 'object') {\n\t checkerCopy.type = copy(checkerCopy.type); // make our own copy of this\n\t } else if (typeof checkerCopy.type === 'function') {\n\t checkerCopy.type = function () {\n\t return checker.type.apply(checker, arguments);\n\t };\n\t } else {\n\t checkerCopy.type += ' (optional)';\n\t return;\n\t }\n\t checkerCopy.type.__apiCheckData = copy(checker.type.__apiCheckData) || {}; // and this\n\t checkerCopy.type.__apiCheckData.optional = true;\n\t}\n\n\t// UTILS\n\n\tfunction copyProps(src, dest) {\n\t each(Object.keys(src), function (key) {\n\t return dest[key] = src[key];\n\t });\n\t}\n\n\tfunction noop() {}\n\n\tfunction getNoop() {\n\t /* eslint no-shadow:0 */\n\t /* istanbul ignore next */\n\t return function noop() {};\n\t}\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\n\tvar stringify = __webpack_require__(2);\n\n\tvar _require = __webpack_require__(3);\n\n\tvar typeOf = _require.typeOf;\n\tvar each = _require.each;\n\tvar copy = _require.copy;\n\tvar getCheckerDisplay = _require.getCheckerDisplay;\n\tvar isError = _require.isError;\n\tvar arrayify = _require.arrayify;\n\tvar list = _require.list;\n\tvar getError = _require.getError;\n\tvar nAtL = _require.nAtL;\n\tvar t = _require.t;\n\tvar checkerHelpers = _require.checkerHelpers;\n\tvar undef = _require.undef;\n\tvar setupChecker = checkerHelpers.setupChecker;\n\n\tvar checkers = module.exports = getCheckers();\n\tmodule.exports.getCheckers = getCheckers;\n\n\tfunction getCheckers(disabled) {\n\t return {\n\t array: typeOfCheckGetter('Array'),\n\t bool: typeOfCheckGetter('Boolean'),\n\t number: typeOfCheckGetter('Number'),\n\t string: typeOfCheckGetter('String'),\n\t func: funcCheckGetter(),\n\t object: objectCheckGetter(),\n\n\t emptyObject: emptyObjectCheckGetter(),\n\n\t instanceOf: instanceCheckGetter,\n\t oneOf: oneOfCheckGetter,\n\t oneOfType: oneOfTypeCheckGetter,\n\n\t arrayOf: arrayOfCheckGetter,\n\t objectOf: objectOfCheckGetter,\n\t typeOrArrayOf: typeOrArrayOfCheckGetter,\n\n\t range: rangeCheckGetter,\n\t lessThan: lessThanCheckGetter,\n\t greaterThan: greaterThanCheckGetter,\n\n\t shape: getShapeCheckGetter(),\n\t args: argumentsCheckerGetter(),\n\n\t any: anyCheckGetter(),\n\t 'null': nullCheckGetter()\n\n\t };\n\n\t function typeOfCheckGetter(type) {\n\t var lType = type.toLowerCase();\n\t return setupChecker(function typeOfCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== lType) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function funcCheckGetter() {\n\t var type = 'Function';\n\t var functionChecker = setupChecker(function functionCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'function') {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\n\t functionChecker.withProperties = function getWithPropertiesChecker(properties) {\n\t var apiError = checkers.objectOf(checkers.func)(properties, 'properties', 'apiCheck.func.withProperties');\n\t if (isError(apiError)) {\n\t throw apiError;\n\t }\n\t var shapeChecker = checkers.shape(properties, true);\n\t shapeChecker.type.__apiCheckData.type = 'func.withProperties';\n\n\t return setupChecker(function functionWithPropertiesChecker(val, name, location) {\n\t var notFunction = checkers.func(val, name, location);\n\t if (isError(notFunction)) {\n\t return notFunction;\n\t }\n\t return shapeChecker(val, name, location);\n\t }, { type: shapeChecker.type, shortType: 'func.withProperties' }, disabled);\n\t };\n\t return functionChecker;\n\t }\n\n\t function objectCheckGetter() {\n\t var type = 'Object';\n\t var nullType = 'Object (null ok)';\n\t var objectNullOkChecker = setupChecker(function objectNullOkCheckerDefinition(val, name, location) {\n\t if (typeOf(val) !== 'object') {\n\t return getError(name, location, nullType);\n\t }\n\t }, { type: nullType }, disabled);\n\n\t var objectChecker = setupChecker(function objectCheckerDefinition(val, name, location) {\n\t if (val === null || isError(objectNullOkChecker(val, name, location))) {\n\t return getError(name, location, objectChecker.type);\n\t }\n\t }, { type: type, nullOk: objectNullOkChecker }, disabled);\n\n\t return objectChecker;\n\t }\n\n\t function instanceCheckGetter(classToCheck) {\n\t return setupChecker(function instanceCheckerDefinition(val, name, location) {\n\t if (!(val instanceof classToCheck)) {\n\t return getError(name, location, classToCheck.name);\n\t }\n\t }, { type: classToCheck.name }, disabled);\n\t }\n\n\t function oneOfCheckGetter(enums) {\n\t var type = {\n\t __apiCheckData: { optional: false, type: 'enum' },\n\t 'enum': enums\n\t };\n\t var shortType = 'oneOf[' + enums.map(function (enm) {\n\t return stringify(enm);\n\t }).join(', ') + ']';\n\t return setupChecker(function oneOfCheckerDefinition(val, name, location) {\n\t if (!enums.some(function (enm) {\n\t return enm === val;\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function oneOfTypeCheckGetter(typeCheckers) {\n\t var checkersDisplay = typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, { short: true });\n\t });\n\t var shortType = 'oneOfType[' + checkersDisplay.join(', ') + ']';\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return typeCheckers.map(function (checker) {\n\t return getCheckerDisplay(checker, options);\n\t });\n\t }\n\t type.__apiCheckData = { optional: false, type: 'oneOfType' };\n\t return setupChecker(function oneOfTypeCheckerDefinition(val, name, location) {\n\t if (!typeCheckers.some(function (checker) {\n\t return !isError(checker(val, name, location));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function arrayOfCheckGetter(checker) {\n\t var shortCheckerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'arrayOf[' + shortCheckerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'arrayOf' };\n\n\t return setupChecker(function arrayOfCheckerDefinition(val, name, location) {\n\t if (isError(checkers.array(val)) || !val.every(function (item) {\n\t return !isError(checker(item));\n\t })) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function objectOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'objectOf[' + checkerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'objectOf' };\n\n\t return setupChecker(function objectOfCheckerDefinition(val, name, location) {\n\t var notObject = checkers.object(val, name, location);\n\t if (isError(notObject)) {\n\t return notObject;\n\t }\n\t var allTypesSuccess = each(val, function (item, key) {\n\t if (isError(checker(item, key, name))) {\n\t return false;\n\t }\n\t });\n\t if (!allTypesSuccess) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function typeOrArrayOfCheckGetter(checker) {\n\t var checkerDisplay = getCheckerDisplay(checker, { short: true });\n\t var shortType = 'typeOrArrayOf[' + checkerDisplay + ']';\n\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(checker, options);\n\t }\n\n\t type.__apiCheckData = { optional: false, type: 'typeOrArrayOf' };\n\t return setupChecker(function typeOrArrayOfDefinition(val, name, location, obj) {\n\t if (isError(checkers.oneOfType([checker, checkers.arrayOf(checker)])(val, name, location, obj))) {\n\t return getError(name, location, shortType);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t }\n\n\t function getShapeCheckGetter() {\n\t function shapeCheckGetter(shape, nonObject) {\n\t var shapeTypes = {};\n\t each(shape, function (checker, prop) {\n\t shapeTypes[prop] = getCheckerDisplay(checker);\n\t });\n\t function type() {\n\t var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];\n\n\t var ret = {};\n\t var terse = options.terse;\n\t var obj = options.obj;\n\t var addHelpers = options.addHelpers;\n\n\t var parentRequired = options.required;\n\t each(shape, function (checker, prop) {\n\t /* eslint complexity:[2, 6] */\n\t var specified = obj && obj.hasOwnProperty(prop);\n\t var required = undef(parentRequired) ? !checker.isOptional : parentRequired;\n\t if (!terse || (specified || !checker.isOptional)) {\n\t ret[prop] = getCheckerDisplay(checker, { terse: terse, obj: obj && obj[prop], required: required, addHelpers: addHelpers });\n\t }\n\t if (addHelpers) {\n\t modifyTypeDisplayToHelpOut(ret, prop, specified, checker, required);\n\t }\n\t });\n\t return ret;\n\n\t function modifyTypeDisplayToHelpOut(theRet, prop, specified, checker, required) {\n\t if (!specified && required && !checker.isOptional) {\n\t var item = 'ITEM';\n\t if (checker.type && checker.type.__apiCheckData) {\n\t item = checker.type.__apiCheckData.type.toUpperCase();\n\t }\n\t addHelper('missing', 'MISSING THIS ' + item, ' <-- YOU ARE MISSING THIS');\n\t } else if (specified) {\n\t var error = checker(obj[prop], prop, null, obj);\n\t if (isError(error)) {\n\t addHelper('error', 'THIS IS THE PROBLEM: ' + error.message, ' <-- THIS IS THE PROBLEM: ' + error.message);\n\t }\n\t }\n\n\t function addHelper(property, objectMessage, stringMessage) {\n\t if (typeof theRet[prop] === 'string') {\n\t theRet[prop] += stringMessage;\n\t } else {\n\t theRet[prop].__apiCheckData[property] = objectMessage;\n\t }\n\t }\n\t }\n\t }\n\n\t type.__apiCheckData = { strict: false, optional: false, type: 'shape' };\n\t var shapeChecker = setupChecker(function shapeCheckerDefinition(val, name, location) {\n\t /* eslint complexity:[2, 6] */\n\t var isObject = !nonObject && checkers.object(val, name, location);\n\t if (isError(isObject)) {\n\t return isObject;\n\t }\n\t var shapePropError = undefined;\n\t location = location ? location + (name ? '/' : '') : '';\n\t name = name || '';\n\t each(shape, function (checker, prop) {\n\t if (val.hasOwnProperty(prop) || !checker.isOptional) {\n\t shapePropError = checker(val[prop], prop, '' + location + name, val);\n\t return !isError(shapePropError);\n\t }\n\t });\n\t if (isError(shapePropError)) {\n\t return shapePropError;\n\t }\n\t }, { type: type, shortType: 'shape' }, disabled);\n\n\t function strictType() {\n\t return type.apply(undefined, arguments);\n\t }\n\n\t strictType.__apiCheckData = copy(shapeChecker.type.__apiCheckData);\n\t strictType.__apiCheckData.strict = true;\n\t shapeChecker.strict = setupChecker(function strictShapeCheckerDefinition(val, name, location) {\n\t var shapeError = shapeChecker(val, name, location);\n\t if (isError(shapeError)) {\n\t return shapeError;\n\t }\n\t var allowedProperties = Object.keys(shape);\n\t var extraProps = Object.keys(val).filter(function (prop) {\n\t return allowedProperties.indexOf(prop) === -1;\n\t });\n\t if (extraProps.length) {\n\t return new Error(nAtL(name, location) + ' cannot have extra properties: ' + t(extraProps.join('`, `')) + '.' + ('It is limited to ' + t(allowedProperties.join('`, `'))));\n\t }\n\t }, { type: strictType, shortType: 'strict shape' }, disabled);\n\n\t return shapeChecker;\n\t }\n\n\t shapeCheckGetter.ifNot = function ifNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is not specified';\n\t } else {\n\t description = 'specified only if none of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'ifNot[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function ifNotChecker(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (propExists === otherPropsExist) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { notRequired: true, type: type, shortType: shortType }, disabled);\n\t };\n\n\t shapeCheckGetter.onlyIf = function onlyIf(otherProps, propChecker) {\n\t otherProps = arrayify(otherProps);\n\t var description = undefined;\n\t if (otherProps.length === 1) {\n\t description = 'specified only if ' + otherProps[0] + ' is also specified';\n\t } else {\n\t description = 'specified only if all of the following are specified: [' + list(otherProps, ', ', 'and ') + ']';\n\t }\n\t var shortType = 'onlyIf[' + otherProps.join(', ') + ']';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function onlyIfCheckerDefinition(prop, propName, location, obj) {\n\t var othersPresent = otherProps.every(function (property) {\n\t return obj.hasOwnProperty(property);\n\t });\n\t if (!othersPresent) {\n\t return getError(propName, location, type);\n\t } else {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, shortType: shortType }, disabled);\n\t };\n\n\t shapeCheckGetter.requiredIfNot = function shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t return getRequiredIfNotChecker(false, otherProps, propChecker);\n\t };\n\n\t shapeCheckGetter.requiredIfNot.all = function shapeRequiredIfNotAll(otherProps, propChecker) {\n\t if (!Array.isArray(otherProps)) {\n\t throw new Error('requiredIfNot.all must be passed an array');\n\t }\n\t return getRequiredIfNotChecker(true, otherProps, propChecker);\n\t };\n\n\t function getRequiredIfNotChecker(all, otherProps, propChecker) {\n\t var props = t(otherProps.join(', '));\n\t var ifProps = 'if ' + (all ? 'all of' : 'at least one of');\n\t var description = 'specified ' + ifProps + ' these are not specified: ' + props + ' (otherwise it\\'s optional)';\n\t var shortType = 'requiredIfNot' + (all ? '.all' : '') + '[' + otherProps.join(', ') + '}]';\n\t var type = getTypeForShapeChild(propChecker, description, shortType);\n\t return setupChecker(function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var iteration = all ? 'every' : 'some';\n\t var otherPropsExist = otherProps[iteration](function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }, { type: type, notRequired: true }, disabled);\n\t }\n\n\t return shapeCheckGetter;\n\n\t function getTypeForShapeChild(propChecker, description, shortType) {\n\t function type(options) {\n\t if (options && options.short) {\n\t return shortType;\n\t }\n\t return getCheckerDisplay(propChecker);\n\t }\n\t type.__apiCheckData = { optional: false, type: 'ifNot', description: description };\n\t return type;\n\t }\n\t }\n\n\t function argumentsCheckerGetter() {\n\t var type = 'function arguments';\n\t return setupChecker(function argsCheckerDefinition(val, name, location) {\n\t if (Array.isArray(val) || isError(checkers.object(val)) || isError(checkers.number(val.length))) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function anyCheckGetter() {\n\t return setupChecker(function anyCheckerDefinition() {\n\t // don't do anything\n\t }, { type: 'any' }, disabled);\n\t }\n\n\t function nullCheckGetter() {\n\t var type = 'null';\n\t return setupChecker(function nullChecker(val, name, location) {\n\t if (val !== null) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function rangeCheckGetter(min, max) {\n\t var type = 'Range (' + min + ' - ' + max + ')';\n\t return setupChecker(function rangeChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < min || val > max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function lessThanCheckGetter(min) {\n\t var type = 'lessThan[' + min + ']';\n\t return setupChecker(function lessThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val > min) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function greaterThanCheckGetter(max) {\n\t var type = 'greaterThan[' + max + ']';\n\t return setupChecker(function greaterThanChecker(val, name, location) {\n\t if (typeof val !== 'number' || val < max) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\n\t function emptyObjectCheckGetter() {\n\t var type = 'empty object';\n\t return setupChecker(function emptyObjectChecker(val, name, location) {\n\t if (typeOf(val) !== 'object' || val === null || Object.keys(val).length) {\n\t return getError(name, location, type);\n\t }\n\t }, { type: type }, disabled);\n\t }\n\t}\n\n/***/ }\n/******/ ])\n});\n;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FwaS1jaGVjay9kaXN0L2FwaS1jaGVjay5qcz83ZWE5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxvQ0FBb0M7QUFDcEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGLHVDQUF1Qyx1Q0FBdUMsa0JBQWtCOztBQUVoRzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBLHdFQUF3RTtBQUN4RSwrRUFBK0U7O0FBRS9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBLGNBQWMsTUFBTTtBQUNwQixjQUFjLE1BQU07QUFDcEIsY0FBYyxPQUFP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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEdBQUcsYUFBYTtBQUN0QjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QiLCJmaWxlIjoiMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vISBhcGktY2hlY2sgdmVyc2lvbiA3LjUuNSBidWlsdCB3aXRoIOKZpSBieSBLZW50IEMuIERvZGRzIDxrZW50QGRvZGRzZmFtaWx5LnVzPiAoaHR0cDovL2tlbnQuZG9kZHNmYW1pbHkudXMpICjDsyDDrF/DrSk9w7PDsj0ow6xfw60gw7IpXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1wiYXBpQ2hlY2tcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wiYXBpQ2hlY2tcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSlcbi8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuXG4vKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4vKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbi8qKioqKiovIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4vKioqKioqLyBcdFx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuXG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4vKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbi8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuLyoqKioqKi8gfSlcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyAoW1xuLyogMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblxuXHRmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cblx0dmFyIF9hcGlDaGVjayA9IF9fd2VicGFja19yZXF1aXJlX18oMSk7XG5cblx0dmFyIF9hcGlDaGVjazIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9hcGlDaGVjayk7XG5cblx0ZXhwb3J0c1snZGVmYXVsdCddID0gX2FwaUNoZWNrMlsnZGVmYXVsdCddO1xuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHR2YXIgc3RyaW5naWZ5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcblx0dmFyIGFwaUNoZWNrVXRpbCA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cdHZhciBlYWNoID0gYXBpQ2hlY2tVdGlsLmVhY2g7XG5cdHZhciBpc0Vycm9yID0gYXBpQ2hlY2tVdGlsLmlzRXJyb3I7XG5cdHZhciB0ID0gYXBpQ2hlY2tVdGlsLnQ7XG5cdHZhciBhcnJheWlmeSA9IGFwaUNoZWNrVXRpbC5hcnJheWlmeTtcblx0dmFyIGdldENoZWNrZXJEaXNwbGF5ID0gYXBpQ2hlY2tVdGlsLmdldENoZWNrZXJEaXNwbGF5O1xuXHR2YXIgdHlwZU9mID0gYXBpQ2hlY2tVdGlsLnR5cGVPZjtcblx0dmFyIGdldEVycm9yID0gYXBpQ2hlY2tVdGlsLmdldEVycm9yO1xuXG5cdHZhciBjaGVja2VycyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XG5cdHZhciBhcGlDaGVja0FwaXMgPSBnZXRBcGlDaGVja0FwaXMoKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGdldEFwaUNoZWNrSW5zdGFuY2U7XG5cdG1vZHVsZS5leHBvcnRzLlZFUlNJT04gPSAoXCI3LjUuNVwiKTtcblx0bW9kdWxlLmV4cG9ydHMudXRpbHMgPSBhcGlDaGVja1V0aWw7XG5cdG1vZHVsZS5leHBvcnRzLmdsb2JhbENvbmZpZyA9IHtcblx0ICB2ZXJib3NlOiBmYWxzZSxcblx0ICBkaXNhYmxlZDogZmFsc2Vcblx0fTtcblxuXHR2YXIgYXBpQ2hlY2tBcGlDaGVjayA9IGdldEFwaUNoZWNrSW5zdGFuY2Uoe1xuXHQgIG91dHB1dDogeyBwcmVmaXg6ICdhcGlDaGVjaycgfVxuXHR9KTtcblx0bW9kdWxlLmV4cG9ydHMuaW50ZXJuYWxDaGVja2VyID0gYXBpQ2hlY2tBcGlDaGVjaztcblxuXHRlYWNoKGNoZWNrZXJzLCBmdW5jdGlvbiAoY2hlY2tlciwgbmFtZSkge1xuXHQgIHJldHVybiBtb2R1bGUuZXhwb3J0c1tuYW1lXSA9IGNoZWNrZXI7XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIGdldEFwaUNoZWNrSW5zdGFuY2UoKSB7XG5cdCAgdmFyIGNvbmZpZyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzBdO1xuXHQgIHZhciBleHRyYUNoZWNrZXJzID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgNl0gKi9cblx0ICBpZiAoYXBpQ2hlY2tBcGlDaGVjayAmJiBhcmd1bWVudHMubGVuZ3RoKSB7XG5cdCAgICBhcGlDaGVja0FwaUNoZWNrWyd0aHJvdyddKGFwaUNoZWNrQXBpcy5nZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMsIGFyZ3VtZW50cywge1xuXHQgICAgICBwcmVmaXg6ICdjcmVhdGluZyBhbiBhcGlDaGVjayBpbnN0YW5jZSdcblx0ICAgIH0pO1xuXHQgIH1cblxuXHQgIHZhciBhZGRpdGlvbmFsUHJvcGVydGllcyA9IHtcblx0ICAgICd0aHJvdyc6IGdldEFwaUNoZWNrKHRydWUpLFxuXHQgICAgd2FybjogZ2V0QXBpQ2hlY2soZmFsc2UpLFxuXHQgICAgZ2V0RXJyb3JNZXNzYWdlOiBnZXRFcnJvck1lc3NhZ2UsXG5cdCAgICBoYW5kbGVFcnJvck1lc3NhZ2U6IGhhbmRsZUVycm9yTWVzc2FnZSxcblx0ICAgIGNvbmZpZzoge1xuXHQgICAgICBvdXRwdXQ6IGNvbmZpZy5vdXRwdXQgfHwge1xuXHQgICAgICAgIHByZWZpeDogJycsXG5cdCAgICAgICAgc3VmZml4OiAnJyxcblx0ICAgICAgICBkb2NzQmFzZVVybDogJydcblx0ICAgICAgfSxcblx0ICAgICAgdmVyYm9zZTogY29uZmlnLnZlcmJvc2UgfHwgZmFsc2UsXG5cdCAgICAgIGRpc2FibGVkOiBjb25maWcuZGlzYWJsZWQgfHwgZmFsc2Vcblx0ICAgIH0sXG5cdCAgICB1dGlsczogYXBpQ2hlY2tVdGlsXG5cdCAgfTtcblxuXHQgIGVhY2goYWRkaXRpb25hbFByb3BlcnRpZXMsIGZ1bmN0aW9uICh3cmFwcGVyLCBuYW1lKSB7XG5cdCAgICByZXR1cm4gYXBpQ2hlY2tbbmFtZV0gPSB3cmFwcGVyO1xuXHQgIH0pO1xuXG5cdCAgdmFyIGRpc2FibGVkID0gYXBpQ2hlY2suZGlzYWJsZWQgfHwgbW9kdWxlLmV4cG9ydHMuZ2xvYmFsQ29uZmlnLmRpc2FibGVkO1xuXHQgIGVhY2goY2hlY2tlcnMuZ2V0Q2hlY2tlcnMoZGlzYWJsZWQpLCBmdW5jdGlvbiAoY2hlY2tlciwgbmFtZSkge1xuXHQgICAgcmV0dXJuIGFwaUNoZWNrW25hbWVdID0gY2hlY2tlcjtcblx0ICB9KTtcblx0ICBlYWNoKGV4dHJhQ2hlY2tlcnMsIGZ1bmN0aW9uIChjaGVja2VyLCBuYW1lKSB7XG5cdCAgICByZXR1cm4gYXBpQ2hlY2tbbmFtZV0gPSBjaGVja2VyO1xuXHQgIH0pO1xuXG5cdCAgcmV0dXJuIGFwaUNoZWNrO1xuXG5cdCAgLyoqXG5cdCAgICogVGhpcyBpcyB0aGUgaW5zdGFuY2UgZnVuY3Rpb24uIE90aGVyIHRoaW5ncyBhcmUgYXR0YWNoZWQgdG8gdGhpcyBzZWUgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFib3ZlLlxuXHQgICAqIEBwYXJhbSB7QXJyYXl9IGFwaSAtIHRoZSBjaGVja2VycyB0byBjaGVjayB3aXRoXG5cdCAgICogQHBhcmFtIHtBcnJheX0gYXJncyAtIHRoZSBhcmdzIHRvIGNoZWNrXG5cdCAgICogQHBhcmFtIHtPYmplY3R9IG91dHB1dCAtIG91dHB1dCBvcHRpb25zXG5cdCAgICogQHJldHVybnMge09iamVjdH0gLSBpZiB0aGlzIGhhcyBhIGZhaWxlZCA9IHRydWUgcHJvcGVydHksIHRoZW4gaXQgZmFpbGVkXG5cdCAgICovXG5cdCAgZnVuY3Rpb24gYXBpQ2hlY2soYXBpLCBhcmdzLCBvdXRwdXQpIHtcblx0ICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA4XSAqL1xuXHQgICAgaWYgKGFwaUNoZWNrLmNvbmZpZy5kaXNhYmxlZCB8fCBtb2R1bGUuZXhwb3J0cy5nbG9iYWxDb25maWcuZGlzYWJsZWQpIHtcblx0ICAgICAgcmV0dXJuIHtcblx0ICAgICAgICBhcGlUeXBlczoge30sIGFyZ1R5cGVzOiB7fSxcblx0ICAgICAgICBwYXNzZWQ6IHRydWUsIG1lc3NhZ2U6ICcnLFxuXHQgICAgICAgIGZhaWxlZDogZmFsc2Vcblx0ICAgICAgfTsgLy8gZW1wdHkgdmVyc2lvbiBvZiB3aGF0IGlzIG5vcm1hbGx5IHJldHVybmVkXG5cdCAgICB9XG5cdCAgICBjaGVja0FwaUNoZWNrQXBpKGFyZ3VtZW50cyk7XG5cdCAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXBpKSkge1xuXHQgICAgICBhcGkgPSBbYXBpXTtcblx0ICAgICAgYXJncyA9IFthcmdzXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIC8vIHR1cm4gYXJndW1lbnRzIGludG8gYW4gYXJyYXlcblx0ICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpO1xuXHQgICAgfVxuXHQgICAgdmFyIG1lc3NhZ2VzID0gY2hlY2tFbm91Z2hBcmdzKGFwaSwgYXJncyk7XG5cdCAgICBpZiAoIW1lc3NhZ2VzLmxlbmd0aCkge1xuXHQgICAgICAvLyB0aGlzIGlzIHdoZXJlIHdlIGFjdHVhbGx5IGdvIHBlcmZvcm0gdGhlIGNoZWNrcy5cblx0ICAgICAgbWVzc2FnZXMgPSBjaGVja0FwaVdpdGhBcmdzKGFwaSwgYXJncyk7XG5cdCAgICB9XG5cblx0ICAgIHZhciByZXR1cm5PYmplY3QgPSBnZXRUeXBlcyhhcGksIGFyZ3MpO1xuXHQgICAgcmV0dXJuT2JqZWN0LmFyZ3MgPSBhcmdzO1xuXHQgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xuXHQgICAgICByZXR1cm5PYmplY3QubWVzc2FnZSA9IGFwaUNoZWNrLmdldEVycm9yTWVzc2FnZShhcGksIGFyZ3MsIG1lc3NhZ2VzLCBvdXRwdXQpO1xuXHQgICAgICByZXR1cm5PYmplY3QuZmFpbGVkID0gdHJ1ZTtcblx0ICAgICAgcmV0dXJuT2JqZWN0LnBhc3NlZCA9IGZhbHNlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuT2JqZWN0Lm1lc3NhZ2UgPSAnJztcblx0ICAgICAgcmV0dXJuT2JqZWN0LmZhaWxlZCA9IGZhbHNlO1xuXHQgICAgICByZXR1cm5PYmplY3QucGFzc2VkID0gdHJ1ZTtcblx0ICAgIH1cblx0ICAgIHJldHVybiByZXR1cm5PYmplY3Q7XG5cdCAgfVxuXG5cdCAgLyoqXG5cdCAgICogY2hlY2tBcGlDaGVja0FwaSwgc2hvdWxkIGJlIHJlYWQgbGlrZTogY2hlY2sgYXBpQ2hlY2sgYXBpLiBBcyBpbiwgY2hlY2sgdGhlIGFwaSBmb3IgYXBpQ2hlY2sgOi0pXG5cdCAgICogQHBhcmFtIHtBcnJheX0gY2hlY2tBcGlBcmdzIC0gYXJncyBwcm92aWRlZCB0byBhcGlDaGVjayBmdW5jdGlvblxuXHQgICAqL1xuXHQgIGZ1bmN0aW9uIGNoZWNrQXBpQ2hlY2tBcGkoY2hlY2tBcGlBcmdzKSB7XG5cdCAgICB2YXIgYXBpID0gY2hlY2tBcGlBcmdzWzBdO1xuXHQgICAgdmFyIGFyZ3MgPSBjaGVja0FwaUFyZ3NbMV07XG5cdCAgICB2YXIgaXNBcnJheU9yQXJncyA9IEFycmF5LmlzQXJyYXkoYXJncykgfHwgYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIGFyZ3MubGVuZ3RoID09PSAnbnVtYmVyJztcblxuXHQgICAgaWYgKEFycmF5LmlzQXJyYXkoYXBpKSAmJiAhaXNBcnJheU9yQXJncykge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoZ2V0RXJyb3JNZXNzYWdlKGFwaSwgW2FyZ3NdLCBbJ0lmIGFuIGFycmF5IGlzIHByb3ZpZGVkIGZvciB0aGUgYXBpLCBhbiBhcnJheSBtdXN0IGJlIHByb3ZpZGVkIGZvciB0aGUgYXJncyBhcyB3ZWxsLiddLCB7IHByZWZpeDogJ2FwaUNoZWNrJyB9KSk7XG5cdCAgICB9XG5cdCAgICAvLyBkb2cgZm9vZGluZyBoZXJlXG5cdCAgICB2YXIgZXJyb3JzID0gY2hlY2tBcGlXaXRoQXJncyhhcGlDaGVja0FwaXMuY2hlY2tBcGlDaGVja0FwaSwgY2hlY2tBcGlBcmdzKTtcblx0ICAgIGlmIChlcnJvcnMubGVuZ3RoKSB7XG5cdCAgICAgIHZhciBtZXNzYWdlID0gYXBpQ2hlY2suZ2V0RXJyb3JNZXNzYWdlKGFwaUNoZWNrQXBpcy5jaGVja0FwaUNoZWNrQXBpLCBjaGVja0FwaUFyZ3MsIGVycm9ycywge1xuXHQgICAgICAgIHByZWZpeDogJ2FwaUNoZWNrJ1xuXHQgICAgICB9KTtcblx0ICAgICAgYXBpQ2hlY2suaGFuZGxlRXJyb3JNZXNzYWdlKG1lc3NhZ2UsIHRydWUpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEFwaUNoZWNrKHNob3VsZFRocm93KSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gYXBpQ2hlY2tXcmFwcGVyKGFwaSwgYXJncywgb3V0cHV0KSB7XG5cdCAgICAgIHZhciByZXN1bHQgPSBhcGlDaGVjayhhcGksIGFyZ3MsIG91dHB1dCk7XG5cdCAgICAgIGFwaUNoZWNrLmhhbmRsZUVycm9yTWVzc2FnZShyZXN1bHQubWVzc2FnZSwgc2hvdWxkVGhyb3cpO1xuXHQgICAgICByZXR1cm4gcmVzdWx0OyAvLyB3b250IGdldCBoZXJlIGlmIGFuIGVycm9yIGlzIHRocm93blxuXHQgICAgfTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBoYW5kbGVFcnJvck1lc3NhZ2UobWVzc2FnZSwgc2hvdWxkVGhyb3cpIHtcblx0ICAgIGlmIChzaG91bGRUaHJvdyAmJiBtZXNzYWdlKSB7XG5cdCAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcblx0ICAgIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuXHQgICAgICAvKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cdCAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRFcnJvck1lc3NhZ2UoYXBpLCBhcmdzKSB7XG5cdCAgICB2YXIgbWVzc2FnZXMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDIgfHwgYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyBbXSA6IGFyZ3VtZW50c1syXTtcblx0ICAgIHZhciBvdXRwdXQgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDMgfHwgYXJndW1lbnRzWzNdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1szXTtcblxuXHQgICAgdmFyIGdPdXQgPSBhcGlDaGVjay5jb25maWcub3V0cHV0IHx8IHt9O1xuXHQgICAgdmFyIHByZWZpeCA9IGdldFByZWZpeCgpO1xuXHQgICAgdmFyIHN1ZmZpeCA9IGdldFN1ZmZpeCgpO1xuXHQgICAgdmFyIHVybCA9IGdldFVybCgpO1xuXHQgICAgdmFyIG1lc3NhZ2UgPSAnYXBpQ2hlY2sgZmFpbGVkISAnICsgbWVzc2FnZXMuam9pbignLCAnKTtcblx0ICAgIHZhciBwYXNzZWRBbmRTaG91bGRIYXZlUGFzc2VkID0gJ1xcblxcbicgKyBidWlsZE1lc3NhZ2VGcm9tQXBpQW5kQXJncyhhcGksIGFyZ3MpO1xuXHQgICAgcmV0dXJuIChwcmVmaXggKyAnICcgKyBtZXNzYWdlICsgJyAnICsgc3VmZml4ICsgJyAnICsgKHVybCB8fCAnJykgKyBwYXNzZWRBbmRTaG91bGRIYXZlUGFzc2VkKS50cmltKCk7XG5cblx0ICAgIGZ1bmN0aW9uIGdldFByZWZpeCgpIHtcblx0ICAgICAgdmFyIHAgPSBvdXRwdXQub25seVByZWZpeDtcblx0ICAgICAgaWYgKCFwKSB7XG5cdCAgICAgICAgcCA9ICgoZ091dC5wcmVmaXggfHwgJycpICsgJyAnICsgKG91dHB1dC5wcmVmaXggfHwgJycpKS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHA7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGdldFN1ZmZpeCgpIHtcblx0ICAgICAgdmFyIHMgPSBvdXRwdXQub25seVN1ZmZpeDtcblx0ICAgICAgaWYgKCFzKSB7XG5cdCAgICAgICAgcyA9ICgob3V0cHV0LnN1ZmZpeCB8fCAnJykgKyAnICcgKyAoZ091dC5zdWZmaXggfHwgJycpKS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHM7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGdldFVybCgpIHtcblx0ICAgICAgdmFyIHUgPSBvdXRwdXQudXJsO1xuXHQgICAgICBpZiAoIXUpIHtcblx0ICAgICAgICB1ID0gZ091dC5kb2NzQmFzZVVybCAmJiBvdXRwdXQudXJsU3VmZml4ICYmICgnJyArIGdPdXQuZG9jc0Jhc2VVcmwgKyBvdXRwdXQudXJsU3VmZml4KS50cmltKCk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gYnVpbGRNZXNzYWdlRnJvbUFwaUFuZEFyZ3MoYXBpLCBhcmdzKSB7XG5cdCAgICB2YXIgX2dldFR5cGVzID0gZ2V0VHlwZXMoYXBpLCBhcmdzKTtcblxuXHQgICAgdmFyIGFwaVR5cGVzID0gX2dldFR5cGVzLmFwaVR5cGVzO1xuXHQgICAgdmFyIGFyZ1R5cGVzID0gX2dldFR5cGVzLmFyZ1R5cGVzO1xuXG5cdCAgICB2YXIgY29weSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MgfHwgW10pO1xuXHQgICAgdmFyIHJlcGxhY2VkSXRlbXMgPSBbXTtcblx0ICAgIHJlcGxhY2VGdW5jdGlvbldpdGhOYW1lKGNvcHkpO1xuXHQgICAgdmFyIHBhc3NlZEFyZ3MgPSBnZXRPYmplY3RTdHJpbmcoY29weSk7XG5cdCAgICBhcmdUeXBlcyA9IGdldE9iamVjdFN0cmluZyhhcmdUeXBlcyk7XG5cdCAgICBhcGlUeXBlcyA9IGdldE9iamVjdFN0cmluZyhhcGlUeXBlcyk7XG5cblx0ICAgIHJldHVybiBnZW5lcmF0ZU1lc3NhZ2UoKTtcblxuXHQgICAgLy8gZnVuY3Rpb25zXG5cblx0ICAgIGZ1bmN0aW9uIHJlcGxhY2VGdW5jdGlvbldpdGhOYW1lKG9iaikge1xuXHQgICAgICBlYWNoKG9iaiwgZnVuY3Rpb24gKHZhbCwgbmFtZSkge1xuXHQgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgIGlmIChyZXBsYWNlZEl0ZW1zLmluZGV4T2YodmFsKSA9PT0gLTEpIHtcblx0ICAgICAgICAgIC8vIGF2b2lkIHJlY3Vyc2l2ZSBwcm9ibGVtc1xuXHQgICAgICAgICAgcmVwbGFjZWRJdGVtcy5wdXNoKHZhbCk7XG5cdCAgICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcblx0ICAgICAgICAgICAgcmVwbGFjZUZ1bmN0aW9uV2l0aE5hbWUob2JqKTtcblx0ICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgICAgICBvYmpbbmFtZV0gPSB2YWwuZGlzcGxheU5hbWUgfHwgdmFsLm5hbWUgfHwgJ2Fub255bW91cyBmdW5jdGlvbic7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZ2V0T2JqZWN0U3RyaW5nKHR5cGVzKSB7XG5cdCAgICAgIGlmICghdHlwZXMgfHwgIXR5cGVzLmxlbmd0aCkge1xuXHQgICAgICAgIHJldHVybiAnbm90aGluZyc7XG5cdCAgICAgIH0gZWxzZSBpZiAodHlwZXMgJiYgdHlwZXMubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgdHlwZXMgPSB0eXBlc1swXTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gc3RyaW5naWZ5KHR5cGVzLCBudWxsLCAyKTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gZ2VuZXJhdGVNZXNzYWdlKCkge1xuXHQgICAgICB2YXIgbiA9ICdcXG4nO1xuXHQgICAgICB2YXIgdXNlUyA9IHRydWU7XG5cdCAgICAgIGlmIChhcmdzICYmIGFyZ3MubGVuZ3RoID09PSAxKSB7XG5cdCAgICAgICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsKSB7XG5cdCAgICAgICAgICB1c2VTID0gISFPYmplY3Qua2V5cyhhcmdzWzBdKS5sZW5ndGg7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHVzZVMgPSBmYWxzZTtcblx0ICAgICAgICB9XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHR5cGVzID0gJ3R5cGUnICsgKHVzZVMgPyAncycgOiAnJyk7XG5cdCAgICAgIHZhciBuZXdMaW5lID0gbiArIG47XG5cdCAgICAgIHJldHVybiAnWW91IHBhc3NlZDonICsgbiArIHBhc3NlZEFyZ3MgKyBuZXdMaW5lICsgKCdXaXRoIHRoZSAnICsgdHlwZXMgKyAnOicgKyBuICsgYXJnVHlwZXMgKyBuZXdMaW5lKSArICgnVGhlIEFQSSBjYWxscyBmb3I6JyArIG4gKyBhcGlUeXBlcyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0VHlwZXMoYXBpLCBhcmdzKSB7XG5cdCAgICBhcGkgPSBhcnJheWlmeShhcGkpO1xuXHQgICAgYXJncyA9IGFycmF5aWZ5KGFyZ3MpO1xuXHQgICAgdmFyIGFwaVR5cGVzID0gYXBpLm1hcChmdW5jdGlvbiAoY2hlY2tlciwgaW5kZXgpIHtcblx0ICAgICAgdmFyIHNwZWNpZmllZCA9IG1vZHVsZS5leHBvcnRzLmdsb2JhbENvbmZpZy5oYXNPd25Qcm9wZXJ0eSgndmVyYm9zZScpO1xuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwge1xuXHQgICAgICAgIHRlcnNlOiBzcGVjaWZpZWQgPyAhbW9kdWxlLmV4cG9ydHMuZ2xvYmFsQ29uZmlnLnZlcmJvc2UgOiAhYXBpQ2hlY2suY29uZmlnLnZlcmJvc2UsXG5cdCAgICAgICAgb2JqOiBhcmdzW2luZGV4XSxcblx0ICAgICAgICBhZGRIZWxwZXJzOiB0cnVlXG5cdCAgICAgIH0pO1xuXHQgICAgfSk7XG5cdCAgICB2YXIgYXJnVHlwZXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG5cdCAgICAgIHJldHVybiBnZXRBcmdEaXNwbGF5KGFyZywgW10pO1xuXHQgICAgfSk7XG5cdCAgICByZXR1cm4geyBhcmdUeXBlczogYXJnVHlwZXMsIGFwaVR5cGVzOiBhcGlUeXBlcyB9O1xuXHQgIH1cblx0fVxuXG5cdC8vIFNUQVRFTEVTUyBGVU5DVElPTlNcblxuXHQvKipcblx0ICogVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucyBmb3IgYWN0dWFsbHkgY2hlY2tpbmcgdGhlIGFyZ3VtZW50cyB3aXRoIHRoZSBhcGkuXG5cdCAqIEBwYXJhbSB7QXJyYXl9IGFwaSAtIGNoZWNrZXJzXG5cdCAqIEBwYXJhbSAge0FycmF5fSBhcmdzIC0gYW5kIGFyZ3VtZW50cyBvYmplY3Rcblx0ICogQHJldHVybnMge0FycmF5fSAtIHRoZSBlcnJvciBtZXNzYWdlc1xuXHQgKi9cblx0ZnVuY3Rpb24gY2hlY2tBcGlXaXRoQXJncyhhcGksIGFyZ3MpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgbWVzc2FnZXMgPSBbXTtcblx0ICB2YXIgZmFpbGVkID0gZmFsc2U7XG5cdCAgdmFyIGNoZWNrZXJJbmRleCA9IDA7XG5cdCAgdmFyIGFyZ0luZGV4ID0gMDtcblx0ICB2YXIgYXJnID0gdW5kZWZpbmVkLFxuXHQgICAgICBjaGVja2VyID0gdW5kZWZpbmVkLFxuXHQgICAgICByZXMgPSB1bmRlZmluZWQsXG5cdCAgICAgIGxhc3RDaGVja2VyID0gdW5kZWZpbmVkLFxuXHQgICAgICBhcmdOYW1lID0gdW5kZWZpbmVkLFxuXHQgICAgICBhcmdGYWlsZWQgPSB1bmRlZmluZWQsXG5cdCAgICAgIHNraXBQcmV2aW91c0NoZWNrZXIgPSB1bmRlZmluZWQ7XG5cdCAgLyoganNoaW50IC1XMDg0ICovXG5cdCAgd2hpbGUgKChjaGVja2VyID0gYXBpW2NoZWNrZXJJbmRleCsrXSkgJiYgYXJnSW5kZXggPCBhcmdzLmxlbmd0aCkge1xuXHQgICAgYXJnID0gYXJnc1thcmdJbmRleCsrXTtcblx0ICAgIGFyZ05hbWUgPSAnQXJndW1lbnQgJyArIGFyZ0luZGV4ICsgKGNoZWNrZXIuaXNPcHRpb25hbCA/ICcgKG9wdGlvbmFsKScgOiAnJyk7XG5cdCAgICByZXMgPSBjaGVja2VyKGFyZywgJ3ZhbHVlJywgYXJnTmFtZSk7XG5cdCAgICBhcmdGYWlsZWQgPSBpc0Vycm9yKHJlcyk7XG5cdCAgICBsYXN0Q2hlY2tlciA9IGNoZWNrZXJJbmRleCA+PSBhcGkubGVuZ3RoO1xuXHQgICAgc2tpcFByZXZpb3VzQ2hlY2tlciA9IGNoZWNrZXJJbmRleCA+IDEgJiYgYXBpW2NoZWNrZXJJbmRleCAtIDFdLmlzT3B0aW9uYWw7XG5cdCAgICBpZiAoYXJnRmFpbGVkICYmIGxhc3RDaGVja2VyIHx8IGFyZ0ZhaWxlZCAmJiAhbGFzdENoZWNrZXIgJiYgIWNoZWNrZXIuaXNPcHRpb25hbCAmJiAhc2tpcFByZXZpb3VzQ2hlY2tlcikge1xuXHQgICAgICBmYWlsZWQgPSB0cnVlO1xuXHQgICAgICBtZXNzYWdlcy5wdXNoKGdldENoZWNrZXJFcnJvck1lc3NhZ2UocmVzLCBjaGVja2VyLCBhcmcpKTtcblx0ICAgIH0gZWxzZSBpZiAoYXJnRmFpbGVkICYmIGNoZWNrZXIuaXNPcHRpb25hbCkge1xuXHQgICAgICBhcmdJbmRleC0tO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgbWVzc2FnZXMucHVzaCh0KGFyZ05hbWUpICsgJyBwYXNzZWQnKTtcblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIGZhaWxlZCA/IG1lc3NhZ2VzIDogW107XG5cdH1cblxuXHRjaGVja2VyVHlwZVR5cGUudHlwZSA9ICdmdW5jdGlvbiB3aXRoIF9fYXBpQ2hlY2tEYXRhIHByb3BlcnR5IGFuZCBgJHtmdW5jdGlvbi50eXBlfWAgcHJvcGVydHknO1xuXHRmdW5jdGlvbiBjaGVja2VyVHlwZVR5cGUoY2hlY2tlclR5cGUsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgdmFyIGFwaUNoZWNrRGF0YUNoZWNrZXIgPSBjaGVja2Vycy5zaGFwZSh7XG5cdCAgICB0eXBlOiBjaGVja2Vycy5zdHJpbmcsXG5cdCAgICBvcHRpb25hbDogY2hlY2tlcnMuYm9vbFxuXHQgIH0pO1xuXHQgIHZhciBhc0Z1bmMgPSBjaGVja2Vycy5mdW5jLndpdGhQcm9wZXJ0aWVzKHsgX19hcGlDaGVja0RhdGE6IGFwaUNoZWNrRGF0YUNoZWNrZXIgfSk7XG5cdCAgdmFyIGFzU2hhcGUgPSBjaGVja2Vycy5zaGFwZSh7IF9fYXBpQ2hlY2tEYXRhOiBhcGlDaGVja0RhdGFDaGVja2VyIH0pO1xuXHQgIHZhciB3cm9uZ1NoYXBlID0gY2hlY2tlcnMub25lT2ZUeXBlKFthc0Z1bmMsIGFzU2hhcGVdKShjaGVja2VyVHlwZSwgbmFtZSwgbG9jYXRpb24pO1xuXHQgIGlmIChpc0Vycm9yKHdyb25nU2hhcGUpKSB7XG5cdCAgICByZXR1cm4gd3JvbmdTaGFwZTtcblx0ICB9XG5cdCAgaWYgKHR5cGVvZiBjaGVja2VyVHlwZSAhPT0gJ2Z1bmN0aW9uJyAmJiAhY2hlY2tlclR5cGUuaGFzT3duUHJvcGVydHkoY2hlY2tlclR5cGUuX19hcGlDaGVja0RhdGEudHlwZSkpIHtcblx0ICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgY2hlY2tlclR5cGVUeXBlLnR5cGUpO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoZWNrZXJFcnJvck1lc3NhZ2UocmVzLCBjaGVja2VyLCB2YWwpIHtcblx0ICB2YXIgY2hlY2tlckhlbHAgPSBnZXRDaGVja2VySGVscChjaGVja2VyLCB2YWwpO1xuXHQgIGNoZWNrZXJIZWxwID0gY2hlY2tlckhlbHAgPyAnIC0gJyArIGNoZWNrZXJIZWxwIDogJyc7XG5cdCAgcmV0dXJuIHJlcy5tZXNzYWdlICsgY2hlY2tlckhlbHA7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGVja2VySGVscChfcmVmLCB2YWwpIHtcblx0ICB2YXIgaGVscCA9IF9yZWYuaGVscDtcblxuXHQgIGlmICghaGVscCkge1xuXHQgICAgcmV0dXJuICcnO1xuXHQgIH1cblx0ICBpZiAodHlwZW9mIGhlbHAgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGhlbHAgPSBoZWxwKHZhbCk7XG5cdCAgfVxuXHQgIHJldHVybiBoZWxwO1xuXHR9XG5cblx0ZnVuY3Rpb24gY2hlY2tFbm91Z2hBcmdzKGFwaSwgYXJncykge1xuXHQgIHZhciByZXF1aXJlZEFyZ3MgPSBhcGkuZmlsdGVyKGZ1bmN0aW9uIChhKSB7XG5cdCAgICByZXR1cm4gIWEuaXNPcHRpb25hbDtcblx0ICB9KTtcblx0ICBpZiAoYXJncy5sZW5ndGggPCByZXF1aXJlZEFyZ3MubGVuZ3RoKSB7XG5cdCAgICByZXR1cm4gWydOb3QgZW5vdWdoIGFyZ3VtZW50cyBzcGVjaWZpZWQuIFJlcXVpcmVzIGAnICsgcmVxdWlyZWRBcmdzLmxlbmd0aCArICdgLCB5b3UgcGFzc2VkIGAnICsgYXJncy5sZW5ndGggKyAnYCddO1xuXHQgIH0gZWxzZSB7XG5cdCAgICByZXR1cm4gW107XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0QXJnRGlzcGxheShhcmcsIGdvdHRlbkFyZ3MpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgY05hbWUgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yICYmIGFyZy5jb25zdHJ1Y3Rvci5uYW1lO1xuXHQgIHZhciB0eXBlID0gdHlwZU9mKGFyZyk7XG5cdCAgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIGlmIChoYXNLZXlzKCkpIHtcblx0ICAgICAgdmFyIHByb3BlcnRpZXMgPSBzdHJpbmdpZnkoZ2V0RGlzcGxheUlmTm90R290dGVuKCkpO1xuXHQgICAgICByZXR1cm4gY05hbWUgKyAnICh3aXRoIHByb3BlcnRpZXM6ICcgKyBwcm9wZXJ0aWVzICsgJyknO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIGNOYW1lO1xuXHQgIH1cblxuXHQgIGlmIChhcmcgPT09IG51bGwpIHtcblx0ICAgIHJldHVybiAnbnVsbCc7XG5cdCAgfVxuXG5cdCAgaWYgKHR5cGUgIT09ICdhcnJheScgJiYgdHlwZSAhPT0gJ29iamVjdCcpIHtcblx0ICAgIHJldHVybiB0eXBlO1xuXHQgIH1cblxuXHQgIGlmIChoYXNLZXlzKCkpIHtcblx0ICAgIHJldHVybiBnZXREaXNwbGF5SWZOb3RHb3R0ZW4oKTtcblx0ICB9XG5cblx0ICByZXR1cm4gY05hbWU7XG5cblx0ICAvLyB1dGlsaXR5IGZ1bmN0aW9uc1xuXHQgIGZ1bmN0aW9uIGhhc0tleXMoKSB7XG5cdCAgICByZXR1cm4gYXJnICYmIE9iamVjdC5rZXlzKGFyZykubGVuZ3RoO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldERpc3BsYXlJZk5vdEdvdHRlbigpIHtcblx0ICAgIGlmIChnb3R0ZW5BcmdzLmluZGV4T2YoYXJnKSAhPT0gLTEpIHtcblx0ICAgICAgcmV0dXJuICdbQ2lyY3VsYXJdJztcblx0ICAgIH1cblx0ICAgIGdvdHRlbkFyZ3MucHVzaChhcmcpO1xuXHQgICAgcmV0dXJuIGdldERpc3BsYXkoYXJnLCBnb3R0ZW5BcmdzKTtcblx0ICB9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXREaXNwbGF5KG9iaiwgZ290dGVuQXJncykge1xuXHQgIHZhciBhcmdEaXNwbGF5ID0ge307XG5cdCAgZWFjaChvYmosIGZ1bmN0aW9uICh2LCBrKSB7XG5cdCAgICByZXR1cm4gYXJnRGlzcGxheVtrXSA9IGdldEFyZ0Rpc3BsYXkodiwgZ290dGVuQXJncyk7XG5cdCAgfSk7XG5cdCAgcmV0dXJuIGFyZ0Rpc3BsYXk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRBcGlDaGVja0FwaXMoKSB7XG5cdCAgdmFyIG9zID0gY2hlY2tlcnMuc3RyaW5nLm9wdGlvbmFsO1xuXG5cdCAgdmFyIGNoZWNrZXJGbkNoZWNrZXIgPSBjaGVja2Vycy5mdW5jLndpdGhQcm9wZXJ0aWVzKHtcblx0ICAgIHR5cGU6IGNoZWNrZXJzLm9uZU9mVHlwZShbY2hlY2tlcnMuc3RyaW5nLCBjaGVja2VyVHlwZVR5cGVdKS5vcHRpb25hbCxcblx0ICAgIGRpc3BsYXlOYW1lOiBjaGVja2Vycy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICBzaG9ydFR5cGU6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbCxcblx0ICAgIG5vdE9wdGlvbmFsOiBjaGVja2Vycy5ib29sLm9wdGlvbmFsLFxuXHQgICAgbm90UmVxdWlyZWQ6IGNoZWNrZXJzLmJvb2wub3B0aW9uYWxcblx0ICB9KTtcblxuXHQgIHZhciBnZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMgPSBbY2hlY2tlcnMuc2hhcGUoe1xuXHQgICAgb3V0cHV0OiBjaGVja2Vycy5zaGFwZSh7XG5cdCAgICAgIHByZWZpeDogY2hlY2tlcnMuc3RyaW5nLm9wdGlvbmFsLFxuXHQgICAgICBzdWZmaXg6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgZG9jc0Jhc2VVcmw6IGNoZWNrZXJzLnN0cmluZy5vcHRpb25hbFxuXHQgICAgfSkuc3RyaWN0Lm9wdGlvbmFsLFxuXHQgICAgdmVyYm9zZTogY2hlY2tlcnMuYm9vbC5vcHRpb25hbCxcblx0ICAgIGRpc2FibGVkOiBjaGVja2Vycy5ib29sLm9wdGlvbmFsXG5cdCAgfSkuc3RyaWN0Lm9wdGlvbmFsLCBjaGVja2Vycy5vYmplY3RPZihjaGVja2VyRm5DaGVja2VyKS5vcHRpb25hbF07XG5cblx0ICB2YXIgY2hlY2tBcGlDaGVja0FwaSA9IFtjaGVja2Vycy50eXBlT3JBcnJheU9mKGNoZWNrZXJGbkNoZWNrZXIpLCBjaGVja2Vycy5hbnkub3B0aW9uYWwsIGNoZWNrZXJzLnNoYXBlKHtcblx0ICAgIHByZWZpeDogb3MsIHN1ZmZpeDogb3MsIHVybFN1ZmZpeDogb3MsIC8vIGFwcGVuZGVkIGNhc2Vcblx0ICAgIG9ubHlQcmVmaXg6IG9zLCBvbmx5U3VmZml4OiBvcywgdXJsOiBvcyAvLyBvdmVycmlkZSBjYXNlXG5cdCAgfSkuc3RyaWN0Lm9wdGlvbmFsXTtcblxuXHQgIHJldHVybiB7XG5cdCAgICBjaGVja2VyRm5DaGVja2VyOiBjaGVja2VyRm5DaGVja2VyLFxuXHQgICAgZ2V0QXBpQ2hlY2tJbnN0YW5jZUNoZWNrZXJzOiBnZXRBcGlDaGVja0luc3RhbmNlQ2hlY2tlcnMsXG5cdCAgICBjaGVja0FwaUNoZWNrQXBpOiBjaGVja0FwaUNoZWNrQXBpXG5cdCAgfTtcblx0fVxuXG4vKioqLyB9LFxuLyogMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdpZnk7XG5cblx0ZnVuY3Rpb24gZ2V0U2VyaWFsaXplIChmbiwgZGVjeWNsZSkge1xuXHQgIHZhciBzZWVuID0gW10sIGtleXMgPSBbXTtcblx0ICBkZWN5Y2xlID0gZGVjeWNsZSB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG5cdCAgICByZXR1cm4gJ1tDaXJjdWxhciAnICsgZ2V0UGF0aCh2YWx1ZSwgc2Vlbiwga2V5cykgKyAnXSdcblx0ICB9O1xuXHQgIHJldHVybiBmdW5jdGlvbihrZXksIHZhbHVlKSB7XG5cdCAgICB2YXIgcmV0ID0gdmFsdWU7XG5cdCAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHQgICAgICBpZiAoc2Vlbi5pbmRleE9mKHZhbHVlKSAhPT0gLTEpXG5cdCAgICAgICAgcmV0ID0gZGVjeWNsZShrZXksIHZhbHVlKTtcblx0ICAgICAgZWxzZSB7XG5cdCAgICAgICAgc2Vlbi5wdXNoKHZhbHVlKTtcblx0ICAgICAgICBrZXlzLnB1c2goa2V5KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgaWYgKGZuKSByZXQgPSBmbihrZXksIHJldCk7XG5cdCAgICByZXR1cm4gcmV0O1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFBhdGggKHZhbHVlLCBzZWVuLCBrZXlzKSB7XG5cdCAgdmFyIGluZGV4ID0gc2Vlbi5pbmRleE9mKHZhbHVlKTtcblx0ICB2YXIgcGF0aCA9IFsga2V5c1tpbmRleF0gXTtcblx0ICBmb3IgKGluZGV4LS07IGluZGV4ID49IDA7IGluZGV4LS0pIHtcblx0ICAgIGlmIChzZWVuW2luZGV4XVsgcGF0aFswXSBdID09PSB2YWx1ZSkge1xuXHQgICAgICB2YWx1ZSA9IHNlZW5baW5kZXhdO1xuXHQgICAgICBwYXRoLnVuc2hpZnQoa2V5c1tpbmRleF0pO1xuXHQgICAgfVxuXHQgIH1cblx0ICByZXR1cm4gJ34nICsgcGF0aC5qb2luKCcuJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBzdHJpbmdpZnkob2JqLCBmbiwgc3BhY2VzLCBkZWN5Y2xlKSB7XG5cdCAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgZ2V0U2VyaWFsaXplKGZuLCBkZWN5Y2xlKSwgc3BhY2VzKTtcblx0fVxuXG5cdHN0cmluZ2lmeS5nZXRTZXJpYWxpemUgPSBnZXRTZXJpYWxpemU7XG5cblxuLyoqKi8gfSxcbi8qIDMgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0JztcblxuXHRmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5cdHZhciBzdHJpbmdpZnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXHR2YXIgY2hlY2tlckhlbHBlcnMgPSB7XG5cdCAgYWRkT3B0aW9uYWw6IGFkZE9wdGlvbmFsLCBnZXRSZXF1aXJlZFZlcnNpb246IGdldFJlcXVpcmVkVmVyc2lvbiwgc2V0dXBDaGVja2VyOiBzZXR1cENoZWNrZXIsIGFkZE51bGxhYmxlOiBhZGROdWxsYWJsZVxuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHQgIGVhY2g6IGVhY2gsIGNvcHk6IGNvcHksIHR5cGVPZjogdHlwZU9mLCBhcnJheWlmeTogYXJyYXlpZnksIGdldENoZWNrZXJEaXNwbGF5OiBnZXRDaGVja2VyRGlzcGxheSxcblx0ICBpc0Vycm9yOiBpc0Vycm9yLCBsaXN0OiBsaXN0LCBnZXRFcnJvcjogZ2V0RXJyb3IsIG5BdEw6IG5BdEwsIHQ6IHQsIHVuZGVmOiB1bmRlZiwgY2hlY2tlckhlbHBlcnM6IGNoZWNrZXJIZWxwZXJzLFxuXHQgIG5vb3A6IG5vb3Bcblx0fTtcblxuXHRmdW5jdGlvbiBjb3B5KG9iaikge1xuXHQgIHZhciB0eXBlID0gdHlwZU9mKG9iaik7XG5cdCAgdmFyIGRhQ29weSA9IHVuZGVmaW5lZDtcblx0ICBpZiAodHlwZSA9PT0gJ2FycmF5Jykge1xuXHQgICAgZGFDb3B5ID0gW107XG5cdCAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuXHQgICAgZGFDb3B5ID0ge307XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiBvYmo7XG5cdCAgfVxuXHQgIGVhY2gob2JqLCBmdW5jdGlvbiAodmFsLCBrZXkpIHtcblx0ICAgIGRhQ29weVtrZXldID0gdmFsOyAvLyBjYW5ub3Qgc2luZ2xlLWxpbmUgdGhpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gYWJvcnQgdGhlIGVhY2hcblx0ICB9KTtcblx0ICByZXR1cm4gZGFDb3B5O1xuXHR9XG5cblx0ZnVuY3Rpb24gdHlwZU9mKG9iaikge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0ICAgIHJldHVybiAnYXJyYXknO1xuXHQgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgUmVnRXhwKSB7XG5cdCAgICByZXR1cm4gJ29iamVjdCc7XG5cdCAgfSBlbHNlIHtcblx0ICAgIHJldHVybiB0eXBlb2Ygb2JqO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIG9wdGlvbnMpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgN10gKi9cblx0ICB2YXIgZGlzcGxheSA9IHVuZGVmaW5lZDtcblx0ICB2YXIgc2hvcnQgPSBvcHRpb25zICYmIG9wdGlvbnMuc2hvcnQ7XG5cdCAgaWYgKHNob3J0ICYmIGNoZWNrZXIuc2hvcnRUeXBlKSB7XG5cdCAgICBkaXNwbGF5ID0gY2hlY2tlci5zaG9ydFR5cGU7XG5cdCAgfSBlbHNlIGlmICghc2hvcnQgJiYgdHlwZW9mIGNoZWNrZXIudHlwZSA9PT0gJ29iamVjdCcgfHwgY2hlY2tlci50eXBlID09PSAnZnVuY3Rpb24nKSB7XG5cdCAgICBkaXNwbGF5ID0gZ2V0Q2hlY2tlclR5cGUoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgfSBlbHNlIHtcblx0ICAgIGRpc3BsYXkgPSBnZXRDaGVja2VyVHlwZShjaGVja2VyLCBvcHRpb25zKSB8fCBjaGVja2VyLmRpc3BsYXlOYW1lIHx8IGNoZWNrZXIubmFtZTtcblx0ICB9XG5cdCAgcmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDaGVja2VyVHlwZShfcmVmLCBvcHRpb25zKSB7XG5cdCAgdmFyIHR5cGUgPSBfcmVmLnR5cGU7XG5cblx0ICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgIHZhciBfX2FwaUNoZWNrRGF0YSA9IHR5cGUuX19hcGlDaGVja0RhdGE7XG5cdCAgICB2YXIgdHlwZVR5cGVzID0gdHlwZShvcHRpb25zKTtcblx0ICAgIHR5cGUgPSBfZGVmaW5lUHJvcGVydHkoe1xuXHQgICAgICBfX2FwaUNoZWNrRGF0YTogX19hcGlDaGVja0RhdGFcblx0ICAgIH0sIF9fYXBpQ2hlY2tEYXRhLnR5cGUsIHR5cGVUeXBlcyk7XG5cdCAgfVxuXHQgIHJldHVybiB0eXBlO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlpZnkob2JqKSB7XG5cdCAgaWYgKCFvYmopIHtcblx0ICAgIHJldHVybiBbXTtcblx0ICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuXHQgICAgcmV0dXJuIG9iajtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIFtvYmpdO1xuXHQgIH1cblx0fVxuXG5cdGZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuXHQgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcblx0ICAgIHJldHVybiBlYWNoQXJyeShvYmosIGl0ZXJhdG9yLCBjb250ZXh0KTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIGVhY2hPYmoob2JqLCBpdGVyYXRvciwgY29udGV4dCk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZWFjaE9iaihvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdCAgdmFyIHJldCA9IHVuZGVmaW5lZDtcblx0ICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0ICAvKiBlc2xpbnQgcHJlZmVyLWNvbnN0OjAgKi8gLy8gc29tZSB3ZWlyZCBlc2xpbnQgYnVnP1xuXHQgIGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0ICAgIGlmIChoYXNPd24uY2FsbChvYmosIGtleSkpIHtcblx0ICAgICAgcmV0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpba2V5XSwga2V5LCBvYmopO1xuXHQgICAgICBpZiAocmV0ID09PSBmYWxzZSkge1xuXHQgICAgICAgIHJldHVybiByZXQ7XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cdCAgcmV0dXJuIHRydWU7XG5cdH1cblxuXHRmdW5jdGlvbiBlYWNoQXJyeShvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSB7XG5cdCAgdmFyIHJldCA9IHVuZGVmaW5lZDtcblx0ICB2YXIgbGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0ICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdCAgICByZXQgPSBpdGVyYXRvci5jYWxsKGNvbnRleHQsIG9ialtpXSwgaSwgb2JqKTtcblx0ICAgIGlmIChyZXQgPT09IGZhbHNlKSB7XG5cdCAgICAgIHJldHVybiByZXQ7XG5cdCAgICB9XG5cdCAgfVxuXHQgIHJldHVybiB0cnVlO1xuXHR9XG5cblx0ZnVuY3Rpb24gaXNFcnJvcihvYmopIHtcblx0ICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRXJyb3I7XG5cdH1cblxuXHRmdW5jdGlvbiBsaXN0KGFycnksIGpvaW4sIGZpbmFsSm9pbikge1xuXHQgIGFycnkgPSBhcnJheWlmeShhcnJ5KTtcblx0ICB2YXIgY29weSA9IGFycnkuc2xpY2UoKTtcblx0ICB2YXIgbGFzdCA9IGNvcHkucG9wKCk7XG5cdCAgaWYgKGNvcHkubGVuZ3RoID09PSAxKSB7XG5cdCAgICBqb2luID0gJyAnO1xuXHQgIH1cblx0ICByZXR1cm4gY29weS5qb2luKGpvaW4pICsgKCcnICsgKGNvcHkubGVuZ3RoID8gam9pbiArIGZpbmFsSm9pbiA6ICcnKSArIGxhc3QpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIGNoZWNrZXJUeXBlKSB7XG5cdCAgaWYgKHR5cGVvZiBjaGVja2VyVHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgY2hlY2tlclR5cGUgPSBjaGVja2VyVHlwZSh7IHNob3J0OiB0cnVlIH0pO1xuXHQgIH1cblx0ICB2YXIgc3RyaW5nVHlwZSA9IHR5cGVvZiBjaGVja2VyVHlwZSAhPT0gJ29iamVjdCcgPyBjaGVja2VyVHlwZSA6IHN0cmluZ2lmeShjaGVja2VyVHlwZSk7XG5cdCAgcmV0dXJuIG5ldyBFcnJvcihuQXRMKG5hbWUsIGxvY2F0aW9uKSArICcgbXVzdCBiZSAnICsgdChzdHJpbmdUeXBlKSk7XG5cdH1cblxuXHRmdW5jdGlvbiBuQXRMKG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgdmFyIHROYW1lID0gdChuYW1lIHx8ICd2YWx1ZScpO1xuXHQgIHZhciB0TG9jYXRpb24gPSAhbG9jYXRpb24gPyAnJyA6ICcgYXQgJyArIHQobG9jYXRpb24pO1xuXHQgIHJldHVybiAnJyArIHROYW1lICsgdExvY2F0aW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gdCh0aGluZykge1xuXHQgIHJldHVybiAnYCcgKyB0aGluZyArICdgJztcblx0fVxuXG5cdGZ1bmN0aW9uIHVuZGVmKHRoaW5nKSB7XG5cdCAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gJ3VuZGVmaW5lZCc7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyB3aWxsIHNldCB1cCB0aGUgY2hlY2tlciB3aXRoIGFsbCBvZiB0aGUgZGVmYXVsdHMgdGhhdCBtb3N0IGNoZWNrZXJzIHdhbnQgbGlrZSByZXF1aXJlZCBieSBkZWZhdWx0IGFuZCBhblxuXHQgKiBvcHRpb25hbCB2ZXJzaW9uXG5cdCAqXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IGNoZWNrZXIgLSB0aGUgY2hlY2tlciB0byBzZXR1cCB3aXRoIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgLSBwcm9wZXJ0aWVzIHRvIGFkZCB0byB0aGUgY2hlY2tlclxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGRpc2FibGVkIC0gd2hlbiBzZXQgdG8gdHJ1ZSwgdGhpcyB3aWxsIHNldCB0aGUgY2hlY2tlciB0byBhIG5vLW9wIGZ1bmN0aW9uXG5cdCAqIEByZXR1cm5zIHtGdW5jdGlvbn0gY2hlY2tlciAtIHRoZSBzZXR1cCBjaGVja2VyXG5cdCAqL1xuXHRmdW5jdGlvbiBzZXR1cENoZWNrZXIoY2hlY2tlciwgcHJvcGVydGllcywgZGlzYWJsZWQpIHtcblx0ICAvKiBlc2xpbnQgY29tcGxleGl0eTpbMiwgOV0gKi9cblx0ICBpZiAoZGlzYWJsZWQpIHtcblx0ICAgIC8vIHN3YXAgb3V0IHRoZSBjaGVja2VyIGZvciBpdHMgb3duIGNvcHkgb2Ygbm9vcFxuXHQgICAgY2hlY2tlciA9IGdldE5vb3AoKTtcblx0ICAgIGNoZWNrZXIuaXNOb29wID0gdHJ1ZTtcblx0ICB9XG5cblx0ICBpZiAodHlwZW9mIGNoZWNrZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcblx0ICAgIGNoZWNrZXIuc2hvcnRUeXBlID0gY2hlY2tlci50eXBlO1xuXHQgIH1cblxuXHQgIC8vIGFzc2lnbiBhbGwgcHJvcGVydGllcyBnaXZlblxuXHQgIGVhY2gocHJvcGVydGllcywgZnVuY3Rpb24gKHByb3AsIG5hbWUpIHtcblx0ICAgIHJldHVybiBjaGVja2VyW25hbWVdID0gcHJvcDtcblx0ICB9KTtcblxuXHQgIGlmICghY2hlY2tlci5kaXNwbGF5TmFtZSkge1xuXHQgICAgY2hlY2tlci5kaXNwbGF5TmFtZSA9ICdhcGlDaGVjayAnICsgdChjaGVja2VyLnNob3J0VHlwZSB8fCBjaGVja2VyLnR5cGUgfHwgY2hlY2tlci5uYW1lKSArICcgdHlwZSBjaGVja2VyJztcblx0ICB9XG5cblx0ICBpZiAoIWNoZWNrZXIubm90UmVxdWlyZWQpIHtcblx0ICAgIGNoZWNrZXIgPSBnZXRSZXF1aXJlZFZlcnNpb24oY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGlmICghY2hlY2tlci5ub3ROdWxsYWJsZSkge1xuXHQgICAgYWRkTnVsbGFibGUoY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGlmICghY2hlY2tlci5ub3RPcHRpb25hbCkge1xuXHQgICAgYWRkT3B0aW9uYWwoY2hlY2tlciwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIHJldHVybiBjaGVja2VyO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0UmVxdWlyZWRWZXJzaW9uKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIHJlcXVpcmVkQ2hlY2tlciA9IGRpc2FibGVkID8gZ2V0Tm9vcCgpIDogZnVuY3Rpb24gcmVxdWlyZWRDaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgaWYgKHVuZGVmKHZhbCkgJiYgIWNoZWNrZXIuaXNPcHRpb25hbCkge1xuXHQgICAgICB2YXIgdExvY2F0aW9uID0gbG9jYXRpb24gPyAnIGluICcgKyB0KGxvY2F0aW9uKSA6ICcnO1xuXHQgICAgICB2YXIgdHlwZSA9IGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIHsgc2hvcnQ6IHRydWUgfSk7XG5cdCAgICAgIHZhciBzdHJpbmdUeXBlID0gdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnID8gdHlwZSA6IHN0cmluZ2lmeSh0eXBlKTtcblx0ICAgICAgcmV0dXJuIG5ldyBFcnJvcignUmVxdWlyZWQgJyArIHQobmFtZSkgKyAnIG5vdCBzcGVjaWZpZWQnICsgdExvY2F0aW9uICsgJy4gTXVzdCBiZSAnICsgdChzdHJpbmdUeXBlKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICByZXR1cm4gY2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgfVxuXHQgIH07XG5cdCAgY29weVByb3BzKGNoZWNrZXIsIHJlcXVpcmVkQ2hlY2tlcik7XG5cdCAgcmVxdWlyZWRDaGVja2VyLm9yaWdpbmFsQ2hlY2tlciA9IGNoZWNrZXI7XG5cdCAgcmV0dXJuIHJlcXVpcmVkQ2hlY2tlcjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE9wdGlvbmFsKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIG9wdGlvbmFsQ2hlY2sgPSBkaXNhYmxlZCA/IGdldE5vb3AoKSA6IGZ1bmN0aW9uIG9wdGlvbmFsQ2hlY2sodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICBpZiAoIXVuZGVmKHZhbCkpIHtcblx0ICAgICAgcmV0dXJuIGNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKTtcblx0ICAgIH1cblx0ICB9O1xuXHQgIC8vIGluaGVyaXQgYWxsIHByb3BlcnRpZXMgb24gdGhlIG9yaWdpbmFsIGNoZWNrZXJcblx0ICBjb3B5UHJvcHMoY2hlY2tlciwgb3B0aW9uYWxDaGVjayk7XG5cblx0ICBvcHRpb25hbENoZWNrLmlzT3B0aW9uYWwgPSB0cnVlO1xuXHQgIG9wdGlvbmFsQ2hlY2suZGlzcGxheU5hbWUgPSBjaGVja2VyLmRpc3BsYXlOYW1lICsgJyAob3B0aW9uYWwpJztcblx0ICBvcHRpb25hbENoZWNrLm9yaWdpbmFsQ2hlY2tlciA9IGNoZWNrZXI7XG5cblx0ICAvLyB0aGUgbWFnaWMgbGluZSB0aGF0IGFsbG93cyB5b3UgdG8gYWRkIC5vcHRpb25hbCB0byB0aGUgZW5kIG9mIHRoZSBjaGVja2Vyc1xuXHQgIGNoZWNrZXIub3B0aW9uYWwgPSBvcHRpb25hbENoZWNrO1xuXG5cdCAgZml4VHlwZShjaGVja2VyLCBjaGVja2VyLm9wdGlvbmFsKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZE51bGxhYmxlKGNoZWNrZXIsIGRpc2FibGVkKSB7XG5cdCAgdmFyIG51bGxhYmxlQ2hlY2sgPSBkaXNhYmxlZCA/IGdldE5vb3AoKSA6IGZ1bmN0aW9uIG51bGxhYmxlQ2hlY2sodmFsLCBuYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICBpZiAodmFsICE9PSBudWxsKSB7XG5cdCAgICAgIHJldHVybiBjaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaik7XG5cdCAgICB9XG5cdCAgfTtcblx0ICAvLyBpbmhlcml0IGFsbCBwcm9wZXJ0aWVzIG9uIHRoZSBvcmlnaW5hbCBjaGVja2VyXG5cdCAgY29weVByb3BzKGNoZWNrZXIsIG51bGxhYmxlQ2hlY2spO1xuXG5cdCAgbnVsbGFibGVDaGVjay5pc051bGxhYmxlID0gdHJ1ZTtcblx0ICBudWxsYWJsZUNoZWNrLmRpc3BsYXlOYW1lID0gY2hlY2tlci5kaXNwbGF5TmFtZSArICcgKG51bGxhYmxlKSc7XG5cdCAgbnVsbGFibGVDaGVjay5vcmlnaW5hbENoZWNrZXIgPSBjaGVja2VyO1xuXG5cdCAgLy8gdGhlIG1hZ2ljIGxpbmUgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCAubnVsbGFibGUgdG8gdGhlIGVuZCBvZiB0aGUgY2hlY2tlcnNcblx0ICBjaGVja2VyLm51bGxhYmxlID0gbnVsbGFibGVDaGVjaztcblxuXHQgIGZpeFR5cGUoY2hlY2tlciwgY2hlY2tlci5udWxsYWJsZSk7XG5cdCAgaWYgKCFjaGVja2VyLm5vdE9wdGlvbmFsKSB7XG5cdCAgICBhZGRPcHRpb25hbChjaGVja2VyLm51bGxhYmxlLCBkaXNhYmxlZCk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZml4VHlwZShjaGVja2VyLCBjaGVja2VyQ29weSkge1xuXHQgIC8vIGZpeCB0eXBlLCBiZWNhdXNlIGl0J3Mgbm90IGEgc3RyYWlnaHQgY29weS4uLlxuXHQgIC8vIHRoZSByZWFzb24gaXMgd2UgbmVlZCB0byBzcGVjaWZ5IHR5cGUuX19hcGlDaGVja0RhdGEub3B0aW9uYWwgYXMgdHJ1ZSBmb3IgdGhlIHRlcnNlL3ZlcmJvc2Ugb3B0aW9uLlxuXHQgIC8vIHdlIGFsc28gd2FudCB0byBhZGQgXCIob3B0aW9uYWwpXCIgdG8gdGhlIHR5cGVzIHdpdGggYSBzdHJpbmdcblx0ICBpZiAodHlwZW9mIGNoZWNrZXJDb3B5LnR5cGUgPT09ICdvYmplY3QnKSB7XG5cdCAgICBjaGVja2VyQ29weS50eXBlID0gY29weShjaGVja2VyQ29weS50eXBlKTsgLy8gbWFrZSBvdXIgb3duIGNvcHkgb2YgdGhpc1xuXHQgIH0gZWxzZSBpZiAodHlwZW9mIGNoZWNrZXJDb3B5LnR5cGUgPT09ICdmdW5jdGlvbicpIHtcblx0ICAgICAgY2hlY2tlckNvcHkudHlwZSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICByZXR1cm4gY2hlY2tlci50eXBlLmFwcGx5KGNoZWNrZXIsIGFyZ3VtZW50cyk7XG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICBjaGVja2VyQ29weS50eXBlICs9ICcgKG9wdGlvbmFsKSc7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICBjaGVja2VyQ29weS50eXBlLl9fYXBpQ2hlY2tEYXRhID0gY29weShjaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEpIHx8IHt9OyAvLyBhbmQgdGhpc1xuXHQgIGNoZWNrZXJDb3B5LnR5cGUuX19hcGlDaGVja0RhdGEub3B0aW9uYWwgPSB0cnVlO1xuXHR9XG5cblx0Ly8gVVRJTFNcblxuXHRmdW5jdGlvbiBjb3B5UHJvcHMoc3JjLCBkZXN0KSB7XG5cdCAgZWFjaChPYmplY3Qua2V5cyhzcmMpLCBmdW5jdGlvbiAoa2V5KSB7XG5cdCAgICByZXR1cm4gZGVzdFtrZXldID0gc3JjW2tleV07XG5cdCAgfSk7XG5cdH1cblxuXHRmdW5jdGlvbiBub29wKCkge31cblxuXHRmdW5jdGlvbiBnZXROb29wKCkge1xuXHQgIC8qIGVzbGludCBuby1zaGFkb3c6MCAqL1xuXHQgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIG5vb3AoKSB7fTtcblx0fVxuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBzdHJpbmdpZnkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xuXG5cdHZhciBfcmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XG5cblx0dmFyIHR5cGVPZiA9IF9yZXF1aXJlLnR5cGVPZjtcblx0dmFyIGVhY2ggPSBfcmVxdWlyZS5lYWNoO1xuXHR2YXIgY29weSA9IF9yZXF1aXJlLmNvcHk7XG5cdHZhciBnZXRDaGVja2VyRGlzcGxheSA9IF9yZXF1aXJlLmdldENoZWNrZXJEaXNwbGF5O1xuXHR2YXIgaXNFcnJvciA9IF9yZXF1aXJlLmlzRXJyb3I7XG5cdHZhciBhcnJheWlmeSA9IF9yZXF1aXJlLmFycmF5aWZ5O1xuXHR2YXIgbGlzdCA9IF9yZXF1aXJlLmxpc3Q7XG5cdHZhciBnZXRFcnJvciA9IF9yZXF1aXJlLmdldEVycm9yO1xuXHR2YXIgbkF0TCA9IF9yZXF1aXJlLm5BdEw7XG5cdHZhciB0ID0gX3JlcXVpcmUudDtcblx0dmFyIGNoZWNrZXJIZWxwZXJzID0gX3JlcXVpcmUuY2hlY2tlckhlbHBlcnM7XG5cdHZhciB1bmRlZiA9IF9yZXF1aXJlLnVuZGVmO1xuXHR2YXIgc2V0dXBDaGVja2VyID0gY2hlY2tlckhlbHBlcnMuc2V0dXBDaGVja2VyO1xuXG5cdHZhciBjaGVja2VycyA9IG1vZHVsZS5leHBvcnRzID0gZ2V0Q2hlY2tlcnMoKTtcblx0bW9kdWxlLmV4cG9ydHMuZ2V0Q2hlY2tlcnMgPSBnZXRDaGVja2VycztcblxuXHRmdW5jdGlvbiBnZXRDaGVja2VycyhkaXNhYmxlZCkge1xuXHQgIHJldHVybiB7XG5cdCAgICBhcnJheTogdHlwZU9mQ2hlY2tHZXR0ZXIoJ0FycmF5JyksXG5cdCAgICBib29sOiB0eXBlT2ZDaGVja0dldHRlcignQm9vbGVhbicpLFxuXHQgICAgbnVtYmVyOiB0eXBlT2ZDaGVja0dldHRlcignTnVtYmVyJyksXG5cdCAgICBzdHJpbmc6IHR5cGVPZkNoZWNrR2V0dGVyKCdTdHJpbmcnKSxcblx0ICAgIGZ1bmM6IGZ1bmNDaGVja0dldHRlcigpLFxuXHQgICAgb2JqZWN0OiBvYmplY3RDaGVja0dldHRlcigpLFxuXG5cdCAgICBlbXB0eU9iamVjdDogZW1wdHlPYmplY3RDaGVja0dldHRlcigpLFxuXG5cdCAgICBpbnN0YW5jZU9mOiBpbnN0YW5jZUNoZWNrR2V0dGVyLFxuXHQgICAgb25lT2Y6IG9uZU9mQ2hlY2tHZXR0ZXIsXG5cdCAgICBvbmVPZlR5cGU6IG9uZU9mVHlwZUNoZWNrR2V0dGVyLFxuXG5cdCAgICBhcnJheU9mOiBhcnJheU9mQ2hlY2tHZXR0ZXIsXG5cdCAgICBvYmplY3RPZjogb2JqZWN0T2ZDaGVja0dldHRlcixcblx0ICAgIHR5cGVPckFycmF5T2Y6IHR5cGVPckFycmF5T2ZDaGVja0dldHRlcixcblxuXHQgICAgcmFuZ2U6IHJhbmdlQ2hlY2tHZXR0ZXIsXG5cdCAgICBsZXNzVGhhbjogbGVzc1RoYW5DaGVja0dldHRlcixcblx0ICAgIGdyZWF0ZXJUaGFuOiBncmVhdGVyVGhhbkNoZWNrR2V0dGVyLFxuXG5cdCAgICBzaGFwZTogZ2V0U2hhcGVDaGVja0dldHRlcigpLFxuXHQgICAgYXJnczogYXJndW1lbnRzQ2hlY2tlckdldHRlcigpLFxuXG5cdCAgICBhbnk6IGFueUNoZWNrR2V0dGVyKCksXG5cdCAgICAnbnVsbCc6IG51bGxDaGVja0dldHRlcigpXG5cblx0ICB9O1xuXG5cdCAgZnVuY3Rpb24gdHlwZU9mQ2hlY2tHZXR0ZXIodHlwZSkge1xuXHQgICAgdmFyIGxUeXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiB0eXBlT2ZDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlT2YodmFsKSAhPT0gbFR5cGUpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGZ1bmNDaGVja0dldHRlcigpIHtcblx0ICAgIHZhciB0eXBlID0gJ0Z1bmN0aW9uJztcblx0ICAgIHZhciBmdW5jdGlvbkNoZWNrZXIgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gZnVuY3Rpb25DaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlT2YodmFsKSAhPT0gJ2Z1bmN0aW9uJykge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cblx0ICAgIGZ1bmN0aW9uQ2hlY2tlci53aXRoUHJvcGVydGllcyA9IGZ1bmN0aW9uIGdldFdpdGhQcm9wZXJ0aWVzQ2hlY2tlcihwcm9wZXJ0aWVzKSB7XG5cdCAgICAgIHZhciBhcGlFcnJvciA9IGNoZWNrZXJzLm9iamVjdE9mKGNoZWNrZXJzLmZ1bmMpKHByb3BlcnRpZXMsICdwcm9wZXJ0aWVzJywgJ2FwaUNoZWNrLmZ1bmMud2l0aFByb3BlcnRpZXMnKTtcblx0ICAgICAgaWYgKGlzRXJyb3IoYXBpRXJyb3IpKSB7XG5cdCAgICAgICAgdGhyb3cgYXBpRXJyb3I7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHNoYXBlQ2hlY2tlciA9IGNoZWNrZXJzLnNoYXBlKHByb3BlcnRpZXMsIHRydWUpO1xuXHQgICAgICBzaGFwZUNoZWNrZXIudHlwZS5fX2FwaUNoZWNrRGF0YS50eXBlID0gJ2Z1bmMud2l0aFByb3BlcnRpZXMnO1xuXG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gZnVuY3Rpb25XaXRoUHJvcGVydGllc0NoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICAgIHZhciBub3RGdW5jdGlvbiA9IGNoZWNrZXJzLmZ1bmModmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgICAgaWYgKGlzRXJyb3Iobm90RnVuY3Rpb24pKSB7XG5cdCAgICAgICAgICByZXR1cm4gbm90RnVuY3Rpb247XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiBzaGFwZUNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgIH0sIHsgdHlwZTogc2hhcGVDaGVja2VyLnR5cGUsIHNob3J0VHlwZTogJ2Z1bmMud2l0aFByb3BlcnRpZXMnIH0sIGRpc2FibGVkKTtcblx0ICAgIH07XG5cdCAgICByZXR1cm4gZnVuY3Rpb25DaGVja2VyO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIG9iamVjdENoZWNrR2V0dGVyKCkge1xuXHQgICAgdmFyIHR5cGUgPSAnT2JqZWN0Jztcblx0ICAgIHZhciBudWxsVHlwZSA9ICdPYmplY3QgKG51bGwgb2spJztcblx0ICAgIHZhciBvYmplY3ROdWxsT2tDaGVja2VyID0gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIG9iamVjdE51bGxPa0NoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKHR5cGVPZih2YWwpICE9PSAnb2JqZWN0Jykge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgbnVsbFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IG51bGxUeXBlIH0sIGRpc2FibGVkKTtcblxuXHQgICAgdmFyIG9iamVjdENoZWNrZXIgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gb2JqZWN0Q2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAodmFsID09PSBudWxsIHx8IGlzRXJyb3Iob2JqZWN0TnVsbE9rQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSkpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIG9iamVjdENoZWNrZXIudHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSwgbnVsbE9rOiBvYmplY3ROdWxsT2tDaGVja2VyIH0sIGRpc2FibGVkKTtcblxuXHQgICAgcmV0dXJuIG9iamVjdENoZWNrZXI7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gaW5zdGFuY2VDaGVja0dldHRlcihjbGFzc1RvQ2hlY2spIHtcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gaW5zdGFuY2VDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICghKHZhbCBpbnN0YW5jZW9mIGNsYXNzVG9DaGVjaykpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIGNsYXNzVG9DaGVjay5uYW1lKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiBjbGFzc1RvQ2hlY2submFtZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gb25lT2ZDaGVja0dldHRlcihlbnVtcykge1xuXHQgICAgdmFyIHR5cGUgPSB7XG5cdCAgICAgIF9fYXBpQ2hlY2tEYXRhOiB7IG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ2VudW0nIH0sXG5cdCAgICAgICdlbnVtJzogZW51bXNcblx0ICAgIH07XG5cdCAgICB2YXIgc2hvcnRUeXBlID0gJ29uZU9mWycgKyBlbnVtcy5tYXAoZnVuY3Rpb24gKGVubSkge1xuXHQgICAgICByZXR1cm4gc3RyaW5naWZ5KGVubSk7XG5cdCAgICB9KS5qb2luKCcsICcpICsgJ10nO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvbmVPZkNoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKCFlbnVtcy5zb21lKGZ1bmN0aW9uIChlbm0pIHtcblx0ICAgICAgICByZXR1cm4gZW5tID09PSB2YWw7XG5cdCAgICAgIH0pKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBvbmVPZlR5cGVDaGVja0dldHRlcih0eXBlQ2hlY2tlcnMpIHtcblx0ICAgIHZhciBjaGVja2Vyc0Rpc3BsYXkgPSB0eXBlQ2hlY2tlcnMubWFwKGZ1bmN0aW9uIChjaGVja2VyKSB7XG5cdCAgICAgIHJldHVybiBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgfSk7XG5cdCAgICB2YXIgc2hvcnRUeXBlID0gJ29uZU9mVHlwZVsnICsgY2hlY2tlcnNEaXNwbGF5LmpvaW4oJywgJykgKyAnXSc7XG5cdCAgICBmdW5jdGlvbiB0eXBlKG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgIHJldHVybiBzaG9ydFR5cGU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIHR5cGVDaGVja2Vycy5tYXAoZnVuY3Rpb24gKGNoZWNrZXIpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgICAgdHlwZS5fX2FwaUNoZWNrRGF0YSA9IHsgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiAnb25lT2ZUeXBlJyB9O1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvbmVPZlR5cGVDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICghdHlwZUNoZWNrZXJzLnNvbWUoZnVuY3Rpb24gKGNoZWNrZXIpIHtcblx0ICAgICAgICByZXR1cm4gIWlzRXJyb3IoY2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSk7XG5cdCAgICAgIH0pKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBhcnJheU9mQ2hlY2tHZXR0ZXIoY2hlY2tlcikge1xuXHQgICAgdmFyIHNob3J0Q2hlY2tlckRpc3BsYXkgPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgdmFyIHNob3J0VHlwZSA9ICdhcnJheU9mWycgKyBzaG9ydENoZWNrZXJEaXNwbGF5ICsgJ10nO1xuXG5cdCAgICBmdW5jdGlvbiB0eXBlKG9wdGlvbnMpIHtcblx0ICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgIHJldHVybiBzaG9ydFR5cGU7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIGdldENoZWNrZXJEaXNwbGF5KGNoZWNrZXIsIG9wdGlvbnMpO1xuXHQgICAgfVxuXHQgICAgdHlwZS5fX2FwaUNoZWNrRGF0YSA9IHsgb3B0aW9uYWw6IGZhbHNlLCB0eXBlOiAnYXJyYXlPZicgfTtcblxuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBhcnJheU9mQ2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAoaXNFcnJvcihjaGVja2Vycy5hcnJheSh2YWwpKSB8fCAhdmFsLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgICAgcmV0dXJuICFpc0Vycm9yKGNoZWNrZXIoaXRlbSkpO1xuXHQgICAgICB9KSkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gb2JqZWN0T2ZDaGVja0dldHRlcihjaGVja2VyKSB7XG5cdCAgICB2YXIgY2hlY2tlckRpc3BsYXkgPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyLCB7IHNob3J0OiB0cnVlIH0pO1xuXHQgICAgdmFyIHNob3J0VHlwZSA9ICdvYmplY3RPZlsnICsgY2hlY2tlckRpc3BsYXkgKyAnXSc7XG5cblx0ICAgIGZ1bmN0aW9uIHR5cGUob3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNob3J0KSB7XG5cdCAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICB9XG5cdCAgICB0eXBlLl9fYXBpQ2hlY2tEYXRhID0geyBvcHRpb25hbDogZmFsc2UsIHR5cGU6ICdvYmplY3RPZicgfTtcblxuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBvYmplY3RPZkNoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgdmFyIG5vdE9iamVjdCA9IGNoZWNrZXJzLm9iamVjdCh2YWwsIG5hbWUsIGxvY2F0aW9uKTtcblx0ICAgICAgaWYgKGlzRXJyb3Iobm90T2JqZWN0KSkge1xuXHQgICAgICAgIHJldHVybiBub3RPYmplY3Q7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGFsbFR5cGVzU3VjY2VzcyA9IGVhY2godmFsLCBmdW5jdGlvbiAoaXRlbSwga2V5KSB7XG5cdCAgICAgICAgaWYgKGlzRXJyb3IoY2hlY2tlcihpdGVtLCBrZXksIG5hbWUpKSkge1xuXHQgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICAgIGlmICghYWxsVHlwZXNTdWNjZXNzKSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCBzaG9ydFR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUsIHNob3J0VHlwZTogc2hvcnRUeXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiB0eXBlT3JBcnJheU9mQ2hlY2tHZXR0ZXIoY2hlY2tlcikge1xuXHQgICAgdmFyIGNoZWNrZXJEaXNwbGF5ID0gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgeyBzaG9ydDogdHJ1ZSB9KTtcblx0ICAgIHZhciBzaG9ydFR5cGUgPSAndHlwZU9yQXJyYXlPZlsnICsgY2hlY2tlckRpc3BsYXkgKyAnXSc7XG5cblx0ICAgIGZ1bmN0aW9uIHR5cGUob3B0aW9ucykge1xuXHQgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNob3J0KSB7XG5cdCAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgb3B0aW9ucyk7XG5cdCAgICB9XG5cblx0ICAgIHR5cGUuX19hcGlDaGVja0RhdGEgPSB7IG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ3R5cGVPckFycmF5T2YnIH07XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHR5cGVPckFycmF5T2ZEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgICBpZiAoaXNFcnJvcihjaGVja2Vycy5vbmVPZlR5cGUoW2NoZWNrZXIsIGNoZWNrZXJzLmFycmF5T2YoY2hlY2tlcildKSh2YWwsIG5hbWUsIGxvY2F0aW9uLCBvYmopKSkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0U2hhcGVDaGVja0dldHRlcigpIHtcblx0ICAgIGZ1bmN0aW9uIHNoYXBlQ2hlY2tHZXR0ZXIoc2hhcGUsIG5vbk9iamVjdCkge1xuXHQgICAgICB2YXIgc2hhcGVUeXBlcyA9IHt9O1xuXHQgICAgICBlYWNoKHNoYXBlLCBmdW5jdGlvbiAoY2hlY2tlciwgcHJvcCkge1xuXHQgICAgICAgIHNoYXBlVHlwZXNbcHJvcF0gPSBnZXRDaGVja2VyRGlzcGxheShjaGVja2VyKTtcblx0ICAgICAgfSk7XG5cdCAgICAgIGZ1bmN0aW9uIHR5cGUoKSB7XG5cdCAgICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcblxuXHQgICAgICAgIHZhciByZXQgPSB7fTtcblx0ICAgICAgICB2YXIgdGVyc2UgPSBvcHRpb25zLnRlcnNlO1xuXHQgICAgICAgIHZhciBvYmogPSBvcHRpb25zLm9iajtcblx0ICAgICAgICB2YXIgYWRkSGVscGVycyA9IG9wdGlvbnMuYWRkSGVscGVycztcblxuXHQgICAgICAgIHZhciBwYXJlbnRSZXF1aXJlZCA9IG9wdGlvbnMucmVxdWlyZWQ7XG5cdCAgICAgICAgZWFjaChzaGFwZSwgZnVuY3Rpb24gKGNoZWNrZXIsIHByb3ApIHtcblx0ICAgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgICAgdmFyIHNwZWNpZmllZCA9IG9iaiAmJiBvYmouaGFzT3duUHJvcGVydHkocHJvcCk7XG5cdCAgICAgICAgICB2YXIgcmVxdWlyZWQgPSB1bmRlZihwYXJlbnRSZXF1aXJlZCkgPyAhY2hlY2tlci5pc09wdGlvbmFsIDogcGFyZW50UmVxdWlyZWQ7XG5cdCAgICAgICAgICBpZiAoIXRlcnNlIHx8IChzcGVjaWZpZWQgfHwgIWNoZWNrZXIuaXNPcHRpb25hbCkpIHtcblx0ICAgICAgICAgICAgcmV0W3Byb3BdID0gZ2V0Q2hlY2tlckRpc3BsYXkoY2hlY2tlciwgeyB0ZXJzZTogdGVyc2UsIG9iajogb2JqICYmIG9ialtwcm9wXSwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBhZGRIZWxwZXJzOiBhZGRIZWxwZXJzIH0pO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgaWYgKGFkZEhlbHBlcnMpIHtcblx0ICAgICAgICAgICAgbW9kaWZ5VHlwZURpc3BsYXlUb0hlbHBPdXQocmV0LCBwcm9wLCBzcGVjaWZpZWQsIGNoZWNrZXIsIHJlcXVpcmVkKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gcmV0O1xuXG5cdCAgICAgICAgZnVuY3Rpb24gbW9kaWZ5VHlwZURpc3BsYXlUb0hlbHBPdXQodGhlUmV0LCBwcm9wLCBzcGVjaWZpZWQsIGNoZWNrZXIsIHJlcXVpcmVkKSB7XG5cdCAgICAgICAgICBpZiAoIXNwZWNpZmllZCAmJiByZXF1aXJlZCAmJiAhY2hlY2tlci5pc09wdGlvbmFsKSB7XG5cdCAgICAgICAgICAgIHZhciBpdGVtID0gJ0lURU0nO1xuXHQgICAgICAgICAgICBpZiAoY2hlY2tlci50eXBlICYmIGNoZWNrZXIudHlwZS5fX2FwaUNoZWNrRGF0YSkge1xuXHQgICAgICAgICAgICAgIGl0ZW0gPSBjaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEudHlwZS50b1VwcGVyQ2FzZSgpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGFkZEhlbHBlcignbWlzc2luZycsICdNSVNTSU5HIFRISVMgJyArIGl0ZW0sICcgPC0tIFlPVSBBUkUgTUlTU0lORyBUSElTJyk7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKHNwZWNpZmllZCkge1xuXHQgICAgICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKG9ialtwcm9wXSwgcHJvcCwgbnVsbCwgb2JqKTtcblx0ICAgICAgICAgICAgaWYgKGlzRXJyb3IoZXJyb3IpKSB7XG5cdCAgICAgICAgICAgICAgYWRkSGVscGVyKCdlcnJvcicsICdUSElTIElTIFRIRSBQUk9CTEVNOiAnICsgZXJyb3IubWVzc2FnZSwgJyA8LS0gVEhJUyBJUyBUSEUgUFJPQkxFTTogJyArIGVycm9yLm1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICB9XG5cblx0ICAgICAgICAgIGZ1bmN0aW9uIGFkZEhlbHBlcihwcm9wZXJ0eSwgb2JqZWN0TWVzc2FnZSwgc3RyaW5nTWVzc2FnZSkge1xuXHQgICAgICAgICAgICBpZiAodHlwZW9mIHRoZVJldFtwcm9wXSA9PT0gJ3N0cmluZycpIHtcblx0ICAgICAgICAgICAgICB0aGVSZXRbcHJvcF0gKz0gc3RyaW5nTWVzc2FnZTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICB0aGVSZXRbcHJvcF0uX19hcGlDaGVja0RhdGFbcHJvcGVydHldID0gb2JqZWN0TWVzc2FnZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIHR5cGUuX19hcGlDaGVja0RhdGEgPSB7IHN0cmljdDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgdHlwZTogJ3NoYXBlJyB9O1xuXHQgICAgICB2YXIgc2hhcGVDaGVja2VyID0gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHNoYXBlQ2hlY2tlckRlZmluaXRpb24odmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICAgIC8qIGVzbGludCBjb21wbGV4aXR5OlsyLCA2XSAqL1xuXHQgICAgICAgIHZhciBpc09iamVjdCA9ICFub25PYmplY3QgJiYgY2hlY2tlcnMub2JqZWN0KHZhbCwgbmFtZSwgbG9jYXRpb24pO1xuXHQgICAgICAgIGlmIChpc0Vycm9yKGlzT2JqZWN0KSkge1xuXHQgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0O1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgc2hhcGVQcm9wRXJyb3IgPSB1bmRlZmluZWQ7XG5cdCAgICAgICAgbG9jYXRpb24gPSBsb2NhdGlvbiA/IGxvY2F0aW9uICsgKG5hbWUgPyAnLycgOiAnJykgOiAnJztcblx0ICAgICAgICBuYW1lID0gbmFtZSB8fCAnJztcblx0ICAgICAgICBlYWNoKHNoYXBlLCBmdW5jdGlvbiAoY2hlY2tlciwgcHJvcCkge1xuXHQgICAgICAgICAgaWYgKHZhbC5oYXNPd25Qcm9wZXJ0eShwcm9wKSB8fCAhY2hlY2tlci5pc09wdGlvbmFsKSB7XG5cdCAgICAgICAgICAgIHNoYXBlUHJvcEVycm9yID0gY2hlY2tlcih2YWxbcHJvcF0sIHByb3AsICcnICsgbG9jYXRpb24gKyBuYW1lLCB2YWwpO1xuXHQgICAgICAgICAgICByZXR1cm4gIWlzRXJyb3Ioc2hhcGVQcm9wRXJyb3IpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChpc0Vycm9yKHNoYXBlUHJvcEVycm9yKSkge1xuXHQgICAgICAgICAgcmV0dXJuIHNoYXBlUHJvcEVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6ICdzaGFwZScgfSwgZGlzYWJsZWQpO1xuXG5cdCAgICAgIGZ1bmN0aW9uIHN0cmljdFR5cGUoKSB7XG5cdCAgICAgICAgcmV0dXJuIHR5cGUuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuXHQgICAgICB9XG5cblx0ICAgICAgc3RyaWN0VHlwZS5fX2FwaUNoZWNrRGF0YSA9IGNvcHkoc2hhcGVDaGVja2VyLnR5cGUuX19hcGlDaGVja0RhdGEpO1xuXHQgICAgICBzdHJpY3RUeXBlLl9fYXBpQ2hlY2tEYXRhLnN0cmljdCA9IHRydWU7XG5cdCAgICAgIHNoYXBlQ2hlY2tlci5zdHJpY3QgPSBzZXR1cENoZWNrZXIoZnVuY3Rpb24gc3RyaWN0U2hhcGVDaGVja2VyRGVmaW5pdGlvbih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgICAgdmFyIHNoYXBlRXJyb3IgPSBzaGFwZUNoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbik7XG5cdCAgICAgICAgaWYgKGlzRXJyb3Ioc2hhcGVFcnJvcikpIHtcblx0ICAgICAgICAgIHJldHVybiBzaGFwZUVycm9yO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB2YXIgYWxsb3dlZFByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzaGFwZSk7XG5cdCAgICAgICAgdmFyIGV4dHJhUHJvcHMgPSBPYmplY3Qua2V5cyh2YWwpLmZpbHRlcihmdW5jdGlvbiAocHJvcCkge1xuXHQgICAgICAgICAgcmV0dXJuIGFsbG93ZWRQcm9wZXJ0aWVzLmluZGV4T2YocHJvcCkgPT09IC0xO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIGlmIChleHRyYVByb3BzLmxlbmd0aCkge1xuXHQgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihuQXRMKG5hbWUsIGxvY2F0aW9uKSArICcgY2Fubm90IGhhdmUgZXh0cmEgcHJvcGVydGllczogJyArIHQoZXh0cmFQcm9wcy5qb2luKCdgLCBgJykpICsgJy4nICsgKCdJdCBpcyBsaW1pdGVkIHRvICcgKyB0KGFsbG93ZWRQcm9wZXJ0aWVzLmpvaW4oJ2AsIGAnKSkpKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHsgdHlwZTogc3RyaWN0VHlwZSwgc2hvcnRUeXBlOiAnc3RyaWN0IHNoYXBlJyB9LCBkaXNhYmxlZCk7XG5cblx0ICAgICAgcmV0dXJuIHNoYXBlQ2hlY2tlcjtcblx0ICAgIH1cblxuXHQgICAgc2hhcGVDaGVja0dldHRlci5pZk5vdCA9IGZ1bmN0aW9uIGlmTm90KG90aGVyUHJvcHMsIHByb3BDaGVja2VyKSB7XG5cdCAgICAgIGlmICghQXJyYXkuaXNBcnJheShvdGhlclByb3BzKSkge1xuXHQgICAgICAgIG90aGVyUHJvcHMgPSBbb3RoZXJQcm9wc107XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuXHQgICAgICBpZiAob3RoZXJQcm9wcy5sZW5ndGggPT09IDEpIHtcblx0ICAgICAgICBkZXNjcmlwdGlvbiA9ICdzcGVjaWZpZWQgb25seSBpZiAnICsgb3RoZXJQcm9wc1swXSArICcgaXMgbm90IHNwZWNpZmllZCc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZGVzY3JpcHRpb24gPSAnc3BlY2lmaWVkIG9ubHkgaWYgbm9uZSBvZiB0aGUgZm9sbG93aW5nIGFyZSBzcGVjaWZpZWQ6IFsnICsgbGlzdChvdGhlclByb3BzLCAnLCAnLCAnYW5kICcpICsgJ10nO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciBzaG9ydFR5cGUgPSAnaWZOb3RbJyArIG90aGVyUHJvcHMuam9pbignLCAnKSArICddJztcblx0ICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlRm9yU2hhcGVDaGlsZChwcm9wQ2hlY2tlciwgZGVzY3JpcHRpb24sIHNob3J0VHlwZSk7XG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gaWZOb3RDaGVja2VyKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICAgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgICAgICB2YXIgb3RoZXJQcm9wc0V4aXN0ID0gb3RoZXJQcm9wcy5zb21lKGZ1bmN0aW9uIChvdGhlclByb3ApIHtcblx0ICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KG90aGVyUHJvcCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKHByb3BFeGlzdHMgPT09IG90aGVyUHJvcHNFeGlzdCkge1xuXHQgICAgICAgICAgcmV0dXJuIGdldEVycm9yKHByb3BOYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgICAgfSBlbHNlIGlmIChwcm9wRXhpc3RzKSB7XG5cdCAgICAgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyBub3RSZXF1aXJlZDogdHJ1ZSwgdHlwZTogdHlwZSwgc2hvcnRUeXBlOiBzaG9ydFR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgICAgfTtcblxuXHQgICAgc2hhcGVDaGVja0dldHRlci5vbmx5SWYgPSBmdW5jdGlvbiBvbmx5SWYob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgb3RoZXJQcm9wcyA9IGFycmF5aWZ5KG90aGVyUHJvcHMpO1xuXHQgICAgICB2YXIgZGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG5cdCAgICAgIGlmIChvdGhlclByb3BzLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgIGRlc2NyaXB0aW9uID0gJ3NwZWNpZmllZCBvbmx5IGlmICcgKyBvdGhlclByb3BzWzBdICsgJyBpcyBhbHNvIHNwZWNpZmllZCc7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgZGVzY3JpcHRpb24gPSAnc3BlY2lmaWVkIG9ubHkgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHNwZWNpZmllZDogWycgKyBsaXN0KG90aGVyUHJvcHMsICcsICcsICdhbmQgJykgKyAnXSc7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHNob3J0VHlwZSA9ICdvbmx5SWZbJyArIG90aGVyUHJvcHMuam9pbignLCAnKSArICddJztcblx0ICAgICAgdmFyIHR5cGUgPSBnZXRUeXBlRm9yU2hhcGVDaGlsZChwcm9wQ2hlY2tlciwgZGVzY3JpcHRpb24sIHNob3J0VHlwZSk7XG5cdCAgICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gb25seUlmQ2hlY2tlckRlZmluaXRpb24ocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopIHtcblx0ICAgICAgICB2YXIgb3RoZXJzUHJlc2VudCA9IG90aGVyUHJvcHMuZXZlcnkoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG5cdCAgICAgICAgICByZXR1cm4gb2JqLmhhc093blByb3BlcnR5KHByb3BlcnR5KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICBpZiAoIW90aGVyc1ByZXNlbnQpIHtcblx0ICAgICAgICAgIHJldHVybiBnZXRFcnJvcihwcm9wTmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSwgeyB0eXBlOiB0eXBlLCBzaG9ydFR5cGU6IHNob3J0VHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgICB9O1xuXG5cdCAgICBzaGFwZUNoZWNrR2V0dGVyLnJlcXVpcmVkSWZOb3QgPSBmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3Qob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICAgICAgb3RoZXJQcm9wcyA9IFtvdGhlclByb3BzXTtcblx0ICAgICAgfVxuXHQgICAgICByZXR1cm4gZ2V0UmVxdWlyZWRJZk5vdENoZWNrZXIoZmFsc2UsIG90aGVyUHJvcHMsIHByb3BDaGVja2VyKTtcblx0ICAgIH07XG5cblx0ICAgIHNoYXBlQ2hlY2tHZXR0ZXIucmVxdWlyZWRJZk5vdC5hbGwgPSBmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3RBbGwob3RoZXJQcm9wcywgcHJvcENoZWNrZXIpIHtcblx0ICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZElmTm90LmFsbCBtdXN0IGJlIHBhc3NlZCBhbiBhcnJheScpO1xuXHQgICAgICB9XG5cdCAgICAgIHJldHVybiBnZXRSZXF1aXJlZElmTm90Q2hlY2tlcih0cnVlLCBvdGhlclByb3BzLCBwcm9wQ2hlY2tlcik7XG5cdCAgICB9O1xuXG5cdCAgICBmdW5jdGlvbiBnZXRSZXF1aXJlZElmTm90Q2hlY2tlcihhbGwsIG90aGVyUHJvcHMsIHByb3BDaGVja2VyKSB7XG5cdCAgICAgIHZhciBwcm9wcyA9IHQob3RoZXJQcm9wcy5qb2luKCcsICcpKTtcblx0ICAgICAgdmFyIGlmUHJvcHMgPSAnaWYgJyArIChhbGwgPyAnYWxsIG9mJyA6ICdhdCBsZWFzdCBvbmUgb2YnKTtcblx0ICAgICAgdmFyIGRlc2NyaXB0aW9uID0gJ3NwZWNpZmllZCAnICsgaWZQcm9wcyArICcgdGhlc2UgYXJlIG5vdCBzcGVjaWZpZWQ6ICcgKyBwcm9wcyArICcgKG90aGVyd2lzZSBpdFxcJ3Mgb3B0aW9uYWwpJztcblx0ICAgICAgdmFyIHNob3J0VHlwZSA9ICdyZXF1aXJlZElmTm90JyArIChhbGwgPyAnLmFsbCcgOiAnJykgKyAnWycgKyBvdGhlclByb3BzLmpvaW4oJywgJykgKyAnfV0nO1xuXHQgICAgICB2YXIgdHlwZSA9IGdldFR5cGVGb3JTaGFwZUNoaWxkKHByb3BDaGVja2VyLCBkZXNjcmlwdGlvbiwgc2hvcnRUeXBlKTtcblx0ICAgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBzaGFwZVJlcXVpcmVkSWZOb3REZWZpbml0aW9uKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKSB7XG5cdCAgICAgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgICAgICB2YXIgaXRlcmF0aW9uID0gYWxsID8gJ2V2ZXJ5JyA6ICdzb21lJztcblx0ICAgICAgICB2YXIgb3RoZXJQcm9wc0V4aXN0ID0gb3RoZXJQcm9wc1tpdGVyYXRpb25dKGZ1bmN0aW9uIChvdGhlclByb3ApIHtcblx0ICAgICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KG90aGVyUHJvcCk7XG5cdCAgICAgICAgfSk7XG5cdCAgICAgICAgaWYgKCFvdGhlclByb3BzRXhpc3QgJiYgIXByb3BFeGlzdHMpIHtcblx0ICAgICAgICAgIHJldHVybiBnZXRFcnJvcihwcm9wTmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAocHJvcEV4aXN0cykge1xuXHQgICAgICAgICAgcmV0dXJuIHByb3BDaGVja2VyKHByb3AsIHByb3BOYW1lLCBsb2NhdGlvbiwgb2JqKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0sIHsgdHlwZTogdHlwZSwgbm90UmVxdWlyZWQ6IHRydWUgfSwgZGlzYWJsZWQpO1xuXHQgICAgfVxuXG5cdCAgICByZXR1cm4gc2hhcGVDaGVja0dldHRlcjtcblxuXHQgICAgZnVuY3Rpb24gZ2V0VHlwZUZvclNoYXBlQ2hpbGQocHJvcENoZWNrZXIsIGRlc2NyaXB0aW9uLCBzaG9ydFR5cGUpIHtcblx0ICAgICAgZnVuY3Rpb24gdHlwZShvcHRpb25zKSB7XG5cdCAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaG9ydCkge1xuXHQgICAgICAgICAgcmV0dXJuIHNob3J0VHlwZTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGdldENoZWNrZXJEaXNwbGF5KHByb3BDaGVja2VyKTtcblx0ICAgICAgfVxuXHQgICAgICB0eXBlLl9fYXBpQ2hlY2tEYXRhID0geyBvcHRpb25hbDogZmFsc2UsIHR5cGU6ICdpZk5vdCcsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiB9O1xuXHQgICAgICByZXR1cm4gdHlwZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBhcmd1bWVudHNDaGVja2VyR2V0dGVyKCkge1xuXHQgICAgdmFyIHR5cGUgPSAnZnVuY3Rpb24gYXJndW1lbnRzJztcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gYXJnc0NoZWNrZXJEZWZpbml0aW9uKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCBpc0Vycm9yKGNoZWNrZXJzLm9iamVjdCh2YWwpKSB8fCBpc0Vycm9yKGNoZWNrZXJzLm51bWJlcih2YWwubGVuZ3RoKSkpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGFueUNoZWNrR2V0dGVyKCkge1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBhbnlDaGVja2VyRGVmaW5pdGlvbigpIHtcblx0ICAgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmdcblx0ICAgIH0sIHsgdHlwZTogJ2FueScgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIG51bGxDaGVja0dldHRlcigpIHtcblx0ICAgIHZhciB0eXBlID0gJ251bGwnO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBudWxsQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh2YWwgIT09IG51bGwpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHJhbmdlQ2hlY2tHZXR0ZXIobWluLCBtYXgpIHtcblx0ICAgIHZhciB0eXBlID0gJ1JhbmdlICgnICsgbWluICsgJyAtICcgKyBtYXggKyAnKSc7XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIHJhbmdlQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyB8fCB2YWwgPCBtaW4gfHwgdmFsID4gbWF4KSB7XG5cdCAgICAgICAgcmV0dXJuIGdldEVycm9yKG5hbWUsIGxvY2F0aW9uLCB0eXBlKTtcblx0ICAgICAgfVxuXHQgICAgfSwgeyB0eXBlOiB0eXBlIH0sIGRpc2FibGVkKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBsZXNzVGhhbkNoZWNrR2V0dGVyKG1pbikge1xuXHQgICAgdmFyIHR5cGUgPSAnbGVzc1RoYW5bJyArIG1pbiArICddJztcblx0ICAgIHJldHVybiBzZXR1cENoZWNrZXIoZnVuY3Rpb24gbGVzc1RoYW5DaGVja2VyKHZhbCwgbmFtZSwgbG9jYXRpb24pIHtcblx0ICAgICAgaWYgKHR5cGVvZiB2YWwgIT09ICdudW1iZXInIHx8IHZhbCA+IG1pbikge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ3JlYXRlclRoYW5DaGVja0dldHRlcihtYXgpIHtcblx0ICAgIHZhciB0eXBlID0gJ2dyZWF0ZXJUaGFuWycgKyBtYXggKyAnXSc7XG5cdCAgICByZXR1cm4gc2V0dXBDaGVja2VyKGZ1bmN0aW9uIGdyZWF0ZXJUaGFuQ2hlY2tlcih2YWwsIG5hbWUsIGxvY2F0aW9uKSB7XG5cdCAgICAgIGlmICh0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyB8fCB2YWwgPCBtYXgpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0RXJyb3IobmFtZSwgbG9jYXRpb24sIHR5cGUpO1xuXHQgICAgICB9XG5cdCAgICB9LCB7IHR5cGU6IHR5cGUgfSwgZGlzYWJsZWQpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGVtcHR5T2JqZWN0Q2hlY2tHZXR0ZXIoKSB7XG5cdCAgICB2YXIgdHlwZSA9ICdlbXB0eSBvYmplY3QnO1xuXHQgICAgcmV0dXJuIHNldHVwQ2hlY2tlcihmdW5jdGlvbiBlbXB0eU9iamVjdENoZWNrZXIodmFsLCBuYW1lLCBsb2NhdGlvbikge1xuXHQgICAgICBpZiAodHlwZU9mKHZhbCkgIT09ICdvYmplY3QnIHx8IHZhbCA9PT0gbnVsbCB8fCBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCkge1xuXHQgICAgICAgIHJldHVybiBnZXRFcnJvcihuYW1lLCBsb2NhdGlvbiwgdHlwZSk7XG5cdCAgICAgIH1cblx0ICAgIH0sIHsgdHlwZTogdHlwZSB9LCBkaXNhYmxlZCk7XG5cdCAgfVxuXHR9XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYXBpLWNoZWNrL2Rpc3QvYXBpLWNoZWNrLmpzXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 3 */ +/***/ function(module, exports, __webpack_require__) { + + eval("// angular-formly version 6.8.2 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(2), __webpack_require__(4));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormly\"] = factory(require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormly\"] = factory(root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_16__, __WEBPACK_EXTERNAL_MODULE_17__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n\n\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar index = _interopRequire(__webpack_require__(1));\n\n\tmodule.exports = index;\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tvar formlyApiCheck = _interopRequire(__webpack_require__(2));\n\n\tvar formlyErrorAndWarningsUrlPrefix = _interopRequire(__webpack_require__(3));\n\n\tvar formlyUsability = _interopRequire(__webpack_require__(4));\n\n\tvar formlyConfig = _interopRequire(__webpack_require__(5));\n\n\tvar formlyValidationMessages = _interopRequire(__webpack_require__(6));\n\n\tvar formlyUtil = _interopRequire(__webpack_require__(7));\n\n\tvar formlyWarn = _interopRequire(__webpack_require__(8));\n\n\tvar formlyCustomValidation = _interopRequire(__webpack_require__(9));\n\n\tvar formlyField = _interopRequire(__webpack_require__(10));\n\n\tvar formlyFocus = _interopRequire(__webpack_require__(11));\n\n\tvar formlyForm = _interopRequire(__webpack_require__(12));\n\n\tvar formlyNgModelAttrsManipulator = _interopRequire(__webpack_require__(13));\n\n\tvar formlyCustomTags = _interopRequire(__webpack_require__(14));\n\n\tvar ngModuleName = \"formly\";\n\n\tmodule.exports = ngModuleName;\n\n\tvar ngModule = angular.module(ngModuleName, []);\n\n\tngModule.constant(\"formlyApiCheck\", formlyApiCheck);\n\tngModule.constant(\"formlyErrorAndWarningsUrlPrefix\", formlyErrorAndWarningsUrlPrefix);\n\tngModule.constant(\"formlyVersion\", (\"6.8.2\")); // <-- webpack variable\n\n\tngModule.provider(\"formlyUsability\", formlyUsability);\n\tngModule.provider(\"formlyConfig\", formlyConfig);\n\n\tngModule.factory(\"formlyValidationMessages\", formlyValidationMessages);\n\tngModule.factory(\"formlyUtil\", formlyUtil);\n\tngModule.factory(\"formlyWarn\", formlyWarn);\n\n\tngModule.directive(\"formlyCustomValidation\", formlyCustomValidation);\n\tngModule.directive(\"formlyField\", formlyField);\n\tngModule.directive(\"formlyFocus\", formlyFocus);\n\tngModule.directive(\"formlyForm\", formlyForm);\n\n\tngModule.run(formlyNgModelAttrsManipulator);\n\tngModule.run(formlyCustomTags);\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar apiCheckFactory = _interopRequire(__webpack_require__(16));\n\n\tvar apiCheck = apiCheckFactory({\n\t output: {\n\t prefix: \"angular-formly:\",\n\t docsBaseUrl: __webpack_require__(3)\n\t }\n\t});\n\n\tfunction shapeRequiredIfNot(otherProps, propChecker) {\n\t if (!angular.isArray(otherProps)) {\n\t otherProps = [otherProps];\n\t }\n\t var type = \"specified if these are not specified: `\" + otherProps.join(\", \") + \"` (otherwise it's optional)\";\n\t function shapeRequiredIfNotDefinition(prop, propName, location, obj) {\n\t var propExists = obj && obj.hasOwnProperty(propName);\n\t var otherPropsExist = otherProps.some(function (otherProp) {\n\t return obj && obj.hasOwnProperty(otherProp);\n\t });\n\t if (!otherPropsExist && !propExists) {\n\t return apiCheck.utils.getError(propName, location, type);\n\t } else if (propExists) {\n\t return propChecker(prop, propName, location, obj);\n\t }\n\t }\n\t shapeRequiredIfNotDefinition.type = type;\n\t return apiCheck.utils.checkerHelpers.setupChecker(shapeRequiredIfNotDefinition);\n\t}\n\n\tvar formlyExpression = apiCheck.oneOfType([apiCheck.string, apiCheck.func]);\n\tvar specifyWrapperType = apiCheck.oneOfType([apiCheck.oneOf([null]), apiCheck.typeOrArrayOf(apiCheck.string)]);\n\n\tvar apiCheckProperty = apiCheck.objectOf(apiCheck.func);\n\n\tvar apiCheckInstanceProperty = apiCheck.shape.onlyIf(\"apiCheck\", apiCheck.func.withProperties({\n\t warn: apiCheck.func,\n\t \"throw\": apiCheck.func,\n\t shape: apiCheck.func\n\t}));\n\n\tvar apiCheckFunctionProperty = apiCheck.shape.onlyIf(\"apiCheck\", apiCheck.oneOf([\"throw\", \"warn\"]));\n\n\tvar formlyWrapperType = apiCheck.shape({\n\t name: shapeRequiredIfNot(\"types\", apiCheck.string).optional,\n\t template: apiCheck.shape.ifNot(\"templateUrl\", apiCheck.string).optional,\n\t templateUrl: apiCheck.shape.ifNot(\"template\", apiCheck.string).optional,\n\t types: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t overwriteOk: apiCheck.bool.optional,\n\t validateOptions: apiCheck.func.optional,\n\t apiCheck: apiCheckProperty.optional,\n\t apiCheckInstance: apiCheckInstanceProperty.optional,\n\t apiCheckFunction: apiCheckFunctionProperty.optional,\n\t apiCheckOptions: apiCheck.object.optional\n\t}).strict;\n\n\tvar expressionProperties = apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t expression: formlyExpression,\n\t message: formlyExpression.optional\n\t}).strict]));\n\n\tvar modelChecker = apiCheck.oneOfType([apiCheck.oneOf([\"formState\"]), apiCheck.object]);\n\n\tvar fieldOptionsApiShape = {\n\t $$hashKey: apiCheck.any.optional,\n\t type: apiCheck.shape.ifNot([\"template\", \"templateUrl\"], apiCheck.string).optional,\n\t template: apiCheck.shape.ifNot([\"type\", \"templateUrl\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t templateUrl: apiCheck.shape.ifNot([\"type\", \"template\"], apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t key: apiCheck.oneOfType([apiCheck.string, apiCheck.number]).optional,\n\t model: modelChecker.optional,\n\t className: apiCheck.string.optional,\n\t id: apiCheck.string.optional,\n\t expressionProperties: expressionProperties.optional,\n\t data: apiCheck.object.optional,\n\t templateOptions: apiCheck.object.optional,\n\t wrapper: specifyWrapperType.optional,\n\t modelOptions: apiCheck.shape({\n\t updateOn: apiCheck.string.optional,\n\t debounce: apiCheck.oneOfType([apiCheck.objectOf(apiCheck.number), apiCheck.number]).optional,\n\t allowInvalid: apiCheck.bool.optional,\n\t getterSetter: apiCheck.bool.optional,\n\t timezone: apiCheck.string.optional\n\t }).optional,\n\t watcher: apiCheck.typeOrArrayOf(apiCheck.shape({\n\t expression: formlyExpression.optional,\n\t listener: formlyExpression\n\t })).optional,\n\t validators: apiCheck.objectOf(apiCheck.oneOfType([formlyExpression, apiCheck.shape({\n\t expression: formlyExpression,\n\t message: formlyExpression.optional\n\t }).strict])).optional,\n\t noFormControl: apiCheck.bool.optional,\n\t hide: apiCheck.bool.optional,\n\t hideExpression: formlyExpression.optional,\n\t ngModelAttrs: apiCheck.objectOf(apiCheck.shape({\n\t expression: apiCheck.shape.ifNot([\"value\", \"attribute\", \"bound\"], apiCheck.any).optional,\n\t value: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t attribute: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional,\n\t bound: apiCheck.shape.ifNot(\"expression\", apiCheck.any).optional\n\t }).strict).optional,\n\t elementAttributes: apiCheck.objectOf(apiCheck.string).optional,\n\t optionsTypes: apiCheck.typeOrArrayOf(apiCheck.string).optional,\n\t link: apiCheck.func.optional,\n\t controller: apiCheck.oneOfType([apiCheck.string, apiCheck.func, apiCheck.array]).optional,\n\t validation: apiCheck.shape({\n\t show: apiCheck.oneOfType([apiCheck.bool, apiCheck.oneOf([null])]).optional,\n\t messages: apiCheck.objectOf(formlyExpression).optional,\n\t errorExistsAndShouldBeVisible: apiCheck.bool.optional\n\t }).optional,\n\t formControl: apiCheck.object.optional,\n\t value: apiCheck.func.optional,\n\t runExpressions: apiCheck.func.optional,\n\t resetModel: apiCheck.func.optional,\n\t updateInitialValue: apiCheck.func.optional,\n\t initialValue: apiCheck.any.optional,\n\t defaultValue: apiCheck.any.optional\n\t};\n\n\tvar formlyFieldOptions = apiCheck.shape(fieldOptionsApiShape).strict;\n\n\tvar formOptionsApi = apiCheck.shape({\n\t formState: apiCheck.object.optional,\n\t resetModel: apiCheck.func.optional,\n\t updateInitialValue: apiCheck.func.optional,\n\t removeChromeAutoComplete: apiCheck.bool.optional\n\t}).strict;\n\n\tvar fieldGroup = apiCheck.shape({\n\t $$hashKey: apiCheck.any.optional,\n\t // danger. Nested field groups wont get api-checked...\n\t fieldGroup: apiCheck.arrayOf(apiCheck.oneOfType([formlyFieldOptions, apiCheck.object])),\n\t className: apiCheck.string.optional,\n\t options: formOptionsApi.optional,\n\t hide: apiCheck.bool.optional,\n\t hideExpression: formlyExpression.optional,\n\t model: modelChecker.optional,\n\t form: apiCheck.object.optional,\n\t elementAttributes: apiCheck.objectOf(apiCheck.string).optional\n\t}).strict;\n\n\tvar typeOptionsDefaultOptions = angular.copy(fieldOptionsApiShape);\n\ttypeOptionsDefaultOptions.key = apiCheck.string.optional;\n\n\tvar formlyTypeOptions = apiCheck.shape({\n\t name: apiCheck.string,\n\t template: apiCheck.shape.ifNot(\"templateUrl\", apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t templateUrl: apiCheck.shape.ifNot(\"template\", apiCheck.oneOfType([apiCheck.string, apiCheck.func])).optional,\n\t controller: apiCheck.oneOfType([apiCheck.func, apiCheck.string, apiCheck.array]).optional,\n\t link: apiCheck.func.optional,\n\t defaultOptions: apiCheck.oneOfType([apiCheck.func, apiCheck.shape(typeOptionsDefaultOptions)]).optional,\n\t \"extends\": apiCheck.string.optional,\n\t wrapper: specifyWrapperType.optional,\n\t data: apiCheck.object.optional,\n\t validateOptions: apiCheck.func.optional,\n\t apiCheck: apiCheckProperty.optional,\n\t apiCheckInstance: apiCheckInstanceProperty.optional,\n\t apiCheckFunction: apiCheckFunctionProperty.optional,\n\t apiCheckOptions: apiCheck.object.optional,\n\t overwriteOk: apiCheck.bool.optional\n\t}).strict;\n\tangular.extend(apiCheck, {\n\t formlyTypeOptions: formlyTypeOptions, formlyFieldOptions: formlyFieldOptions, formlyExpression: formlyExpression, formlyWrapperType: formlyWrapperType, fieldGroup: fieldGroup, formOptionsApi: formOptionsApi\n\t});\n\n\tmodule.exports = apiCheck;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = \"https://github.com/formly-js/angular-formly/blob/\" + (\"6.8.2\") + \"/other/ERRORS_AND_WARNINGS.md#\";\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyUsability;\n\n\t// @ngInject\n\tfunction formlyUsability(formlyApiCheck, formlyErrorAndWarningsUrlPrefix) {\n\t var _this = this;\n\n\t angular.extend(this, {\n\t getFormlyError: getFormlyError,\n\t getFieldError: getFieldError,\n\t checkWrapper: checkWrapper,\n\t checkWrapperTemplate: checkWrapperTemplate,\n\t $get: function () {\n\t return _this;\n\t }\n\t });\n\n\t function getFieldError(errorInfoSlug, message, field) {\n\t if (arguments.length < 3) {\n\t field = message;\n\t message = errorInfoSlug;\n\t errorInfoSlug = null;\n\t }\n\t return new Error(getErrorMessage(errorInfoSlug, message) + (\" Field definition: \" + angular.toJson(field)));\n\t }\n\n\t function getFormlyError(errorInfoSlug, message) {\n\t if (!message) {\n\t message = errorInfoSlug;\n\t errorInfoSlug = null;\n\t }\n\t return new Error(getErrorMessage(errorInfoSlug, message));\n\t }\n\n\t function getErrorMessage(errorInfoSlug, message) {\n\t var url = \"\";\n\t if (errorInfoSlug !== null) {\n\t url = \"\" + formlyErrorAndWarningsUrlPrefix + \"\" + errorInfoSlug;\n\t }\n\t return \"Formly Error: \" + message + \". \" + url;\n\t }\n\n\t function checkWrapper(wrapper) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyWrapperType, wrapper, {\n\t prefix: \"formlyConfig.setWrapper\",\n\t urlSuffix: \"setwrapper-validation-failed\"\n\t });\n\t }\n\n\t function checkWrapperTemplate(template, additionalInfo) {\n\t var formlyTransclude = \"\";\n\t if (template.indexOf(formlyTransclude) === -1) {\n\t throw getFormlyError(\"Template wrapper templates must use \\\"\" + formlyTransclude + \"\\\" somewhere in them. \" + (\"This one does not have \\\"\\\" in it: \" + template) + \"\\n\" + (\"Additional information: \" + JSON.stringify(additionalInfo)));\n\t }\n\t }\n\t}\n\tformlyUsability.$inject = [\"formlyApiCheck\", \"formlyErrorAndWarningsUrlPrefix\"];\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tvar utils = _interopRequire(__webpack_require__(18));\n\n\tmodule.exports = formlyConfig;\n\n\t// @ngInject\n\tfunction formlyConfig(formlyUsabilityProvider, formlyApiCheck) {\n\t var _this2 = this;\n\n\t var typeMap = {};\n\t var templateWrappersMap = {};\n\t var defaultWrapperName = \"default\";\n\t var _this = this;\n\t var getError = formlyUsabilityProvider.getFormlyError;\n\n\t angular.extend(this, {\n\t setType: setType,\n\t getType: getType,\n\t setWrapper: setWrapper,\n\t getWrapper: getWrapper,\n\t getWrapperByType: getWrapperByType,\n\t removeWrapperByName: removeWrapperByName,\n\t removeWrappersForType: removeWrappersForType,\n\t disableWarnings: false,\n\t extras: {\n\t disableNgModelAttrsManipulator: false,\n\t ngModelAttrsManipulatorPreferUnbound: false,\n\t removeChromeAutoComplete: false,\n\t defaultHideDirective: \"ng-if\",\n\t getFieldId: null\n\t },\n\t templateManipulators: {\n\t preWrapper: [],\n\t postWrapper: []\n\t },\n\t $get: function () {\n\t return _this2;\n\t }\n\t });\n\n\t function setType(options) {\n\t if (angular.isArray(options)) {\n\t angular.forEach(options, setType);\n\t } else if (angular.isObject(options)) {\n\t checkType(options);\n\t if (options[\"extends\"]) {\n\t extendTypeOptions(options);\n\t }\n\t typeMap[options.name] = options;\n\t } else {\n\t throw getError(\"You must provide an object or array for setType. You provided: \" + JSON.stringify(arguments));\n\t }\n\t }\n\n\t function checkType(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyTypeOptions, options, {\n\t prefix: \"formlyConfig.setType\",\n\t url: \"settype-validation-failed\"\n\t });\n\t if (!options.overwriteOk) {\n\t checkOverwrite(options.name, typeMap, options, \"types\");\n\t } else {\n\t options.overwriteOk = undefined;\n\t }\n\t }\n\n\t function extendTypeOptions(options) {\n\t var extendsType = getType(options[\"extends\"], true, options);\n\t extendTypeControllerFunction(options, extendsType);\n\t extendTypeLinkFunction(options, extendsType);\n\t extendTypeValidateOptionsFunction(options, extendsType);\n\t extendTypeDefaultOptions(options, extendsType);\n\t utils.reverseDeepMerge(options, extendsType);\n\t extendTemplate(options, extendsType);\n\t }\n\n\t function extendTemplate(options, extendsType) {\n\t if (options.template && extendsType.templateUrl) {\n\t delete options.templateUrl;\n\t } else if (options.templateUrl && extendsType.template) {\n\t delete options.template;\n\t }\n\t }\n\n\t function extendTypeControllerFunction(options, extendsType) {\n\t var extendsCtrl = extendsType.controller;\n\t if (!angular.isDefined(extendsCtrl)) {\n\t return;\n\t }\n\t var optionsCtrl = options.controller;\n\t if (angular.isDefined(optionsCtrl)) {\n\t options.controller = function ($scope, $controller) {\n\t $controller(extendsCtrl, { $scope: $scope });\n\t $controller(optionsCtrl, { $scope: $scope });\n\t };\n\t options.controller.$inject = [\"$scope\", \"$controller\"];\n\t } else {\n\t options.controller = extendsCtrl;\n\t }\n\t }\n\n\t function extendTypeLinkFunction(options, extendsType) {\n\t var extendsFn = extendsType.link;\n\t if (!angular.isDefined(extendsFn)) {\n\t return;\n\t }\n\t var optionsFn = options.link;\n\t if (angular.isDefined(optionsFn)) {\n\t options.link = function () {\n\t extendsFn.apply(undefined, arguments);\n\t optionsFn.apply(undefined, arguments);\n\t };\n\t } else {\n\t options.link = extendsFn;\n\t }\n\t }\n\n\t function extendTypeValidateOptionsFunction(options, extendsType) {\n\t var extendsFn = extendsType.validateOptions;\n\t if (!angular.isDefined(extendsFn)) {\n\t return;\n\t }\n\t var optionsFn = options.validateOptions;\n\t var originalDefaultOptions = options.defaultOptions;\n\t if (angular.isDefined(optionsFn)) {\n\t options.validateOptions = function (options) {\n\t optionsFn(options);\n\t var mergedOptions = angular.copy(options);\n\t var defaultOptions = originalDefaultOptions;\n\t if (defaultOptions) {\n\t if (angular.isFunction(defaultOptions)) {\n\t defaultOptions = defaultOptions(mergedOptions);\n\t }\n\t utils.reverseDeepMerge(mergedOptions, defaultOptions);\n\t }\n\t extendsFn(mergedOptions);\n\t };\n\t } else {\n\t options.validateOptions = extendsFn;\n\t }\n\t }\n\n\t function extendTypeDefaultOptions(options, extendsType) {\n\t var extendsDO = extendsType.defaultOptions;\n\t if (!angular.isDefined(extendsDO)) {\n\t return;\n\t }\n\t var optionsDO = options.defaultOptions;\n\t var optionsDOIsFn = angular.isFunction(optionsDO);\n\t var extendsDOIsFn = angular.isFunction(extendsDO);\n\t if (extendsDOIsFn) {\n\t options.defaultOptions = function defaultOptions(options) {\n\t var extendsDefaultOptions = extendsDO(options);\n\t var mergedDefaultOptions = {};\n\t utils.reverseDeepMerge(mergedDefaultOptions, options, extendsDefaultOptions);\n\t var extenderOptionsDefaultOptions = optionsDO;\n\t if (optionsDOIsFn) {\n\t extenderOptionsDefaultOptions = extenderOptionsDefaultOptions(mergedDefaultOptions);\n\t }\n\t utils.reverseDeepMerge(extendsDefaultOptions, extenderOptionsDefaultOptions);\n\t return extendsDefaultOptions;\n\t };\n\t } else if (optionsDOIsFn) {\n\t options.defaultOptions = function defaultOptions(options) {\n\t var newDefaultOptions = {};\n\t utils.reverseDeepMerge(newDefaultOptions, options, extendsDO);\n\t return optionsDO(newDefaultOptions);\n\t };\n\t }\n\t }\n\n\t function getType(name, throwError, errorContext) {\n\t if (!name) {\n\t return undefined;\n\t }\n\t var type = typeMap[name];\n\t if (!type && throwError === true) {\n\t throw getError(\"There is no type by the name of \\\"\" + name + \"\\\": \" + JSON.stringify(errorContext));\n\t } else {\n\t return type;\n\t }\n\t }\n\n\t function setWrapper(_x, _x2) {\n\t var _again = true;\n\n\t _function: while (_again) {\n\t _again = false;\n\t var options = _x,\n\t name = _x2;\n\n\t if (angular.isArray(options)) {\n\t return options.map(function (wrapperOptions) {\n\t return setWrapper(wrapperOptions);\n\t });\n\t } else if (angular.isObject(options)) {\n\t options.types = getOptionsTypes(options);\n\t options.name = getOptionsName(options, name);\n\t checkWrapperAPI(options);\n\t templateWrappersMap[options.name] = options;\n\t return options;\n\t } else if (angular.isString(options)) {\n\t _x = {\n\t template: options,\n\t name: name\n\t };\n\t _again = true;\n\t continue _function;\n\t }\n\t }\n\t }\n\n\t function getOptionsTypes(options) {\n\t if (angular.isString(options.types)) {\n\t return [options.types];\n\t }\n\t if (!angular.isDefined(options.types)) {\n\t return [];\n\t } else {\n\t return options.types;\n\t }\n\t }\n\n\t function getOptionsName(options, name) {\n\t return options.name || name || options.types.join(\" \") || defaultWrapperName;\n\t }\n\n\t function checkWrapperAPI(options) {\n\t formlyUsabilityProvider.checkWrapper(options);\n\t if (options.template) {\n\t formlyUsabilityProvider.checkWrapperTemplate(options.template, options);\n\t }\n\t if (!options.overwriteOk) {\n\t checkOverwrite(options.name, templateWrappersMap, options, \"templateWrappers\");\n\t } else {\n\t delete options.overwriteOk;\n\t }\n\t checkWrapperTypes(options);\n\t }\n\n\t function checkWrapperTypes(options) {\n\t var shouldThrow = !angular.isArray(options.types) || !options.types.every(angular.isString);\n\t if (shouldThrow) {\n\t throw getError(\"Attempted to create a template wrapper with types that is not a string or an array of strings\");\n\t }\n\t }\n\n\t function checkOverwrite(property, object, newValue, objectName) {\n\t if (object.hasOwnProperty(property)) {\n\t warn([\"Attempting to overwrite \" + property + \" on \" + objectName + \" which is currently\", \"\" + JSON.stringify(object[property]) + \" with \" + JSON.stringify(newValue), \"To supress this warning, specify the property \\\"overwriteOk: true\\\"\"].join(\" \"));\n\t }\n\t }\n\n\t function getWrapper(name) {\n\t return templateWrappersMap[name || defaultWrapperName];\n\t }\n\n\t function getWrapperByType(type) {\n\t /* jshint maxcomplexity:6 */\n\t var wrappers = [];\n\t for (var name in templateWrappersMap) {\n\t if (templateWrappersMap.hasOwnProperty(name)) {\n\t if (templateWrappersMap[name].types && templateWrappersMap[name].types.indexOf(type) !== -1) {\n\t wrappers.push(templateWrappersMap[name]);\n\t }\n\t }\n\t }\n\t return wrappers;\n\t }\n\n\t function removeWrapperByName(name) {\n\t var wrapper = templateWrappersMap[name];\n\t delete templateWrappersMap[name];\n\t return wrapper;\n\t }\n\n\t function removeWrappersForType(type) {\n\t var wrappers = getWrapperByType(type);\n\t if (!wrappers) {\n\t return;\n\t }\n\t if (!angular.isArray(wrappers)) {\n\t return removeWrapperByName(wrappers.name);\n\t } else {\n\t wrappers.forEach(function (wrapper) {\n\t return removeWrapperByName(wrapper.name);\n\t });\n\t return wrappers;\n\t }\n\t }\n\n\t function warn() {\n\t if (!_this.disableWarnings) {\n\t console.warn.apply(console, arguments);\n\t }\n\t }\n\t}\n\tformlyConfig.$inject = [\"formlyUsabilityProvider\", \"formlyApiCheck\"];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyValidationMessages;\n\n\t// @ngInject\n\tfunction formlyValidationMessages() {\n\n\t var validationMessages = {\n\t addTemplateOptionValueMessage: addTemplateOptionValueMessage,\n\t addStringMessage: addStringMessage,\n\t messages: {}\n\t };\n\n\t return validationMessages;\n\n\t function addTemplateOptionValueMessage(name, prop, prefix, suffix, alternate) {\n\t validationMessages.messages[name] = templateOptionValue(prop, prefix, suffix, alternate);\n\t }\n\n\t function addStringMessage(name, string) {\n\t validationMessages.messages[name] = function () {\n\t return string;\n\t };\n\t }\n\n\t function templateOptionValue(prop, prefix, suffix, alternate) {\n\t return function getValidationMessage(viewValue, modelValue, scope) {\n\t if (scope.options.templateOptions[prop]) {\n\t return \"\" + prefix + \" \" + scope.options.templateOptions[prop] + \" \" + suffix;\n\t } else {\n\t return alternate;\n\t }\n\t };\n\t }\n\t}\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar utils = _interopRequire(__webpack_require__(18));\n\n\tmodule.exports = formlyUtil;\n\n\t// @ngInject\n\tfunction formlyUtil() {\n\t return utils;\n\t}\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\n\tmodule.exports = formlyWarn;\n\n\t// @ngInject\n\tfunction formlyWarn(formlyConfig, formlyErrorAndWarningsUrlPrefix, $log) {\n\t return function warn() {\n\t if (!formlyConfig.disableWarnings) {\n\t var args = Array.prototype.slice.call(arguments);\n\t var warnInfoSlug = args.shift();\n\t args.unshift(\"Formly Warning:\");\n\t args.push(\"\" + formlyErrorAndWarningsUrlPrefix + \"\" + warnInfoSlug);\n\t $log.warn.apply($log, _toConsumableArray(args));\n\t }\n\t };\n\t}\n\tformlyWarn.$inject = [\"formlyConfig\", \"formlyErrorAndWarningsUrlPrefix\", \"$log\"];\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyCustomValidation;\n\n\t// @ngInject\n\tfunction formlyCustomValidation(formlyUtil, $q) {\n\t return {\n\t restrict: \"A\",\n\t require: \"ngModel\",\n\t link: function formlyCustomValidationLink(scope, el, attrs, ctrl) {\n\t var opts = scope.options;\n\t if (opts.validators) {\n\t checkValidators(opts.validators);\n\t }\n\t opts.validation.messages = opts.validation.messages || {};\n\t angular.forEach(opts.validation.messages, function (message, key) {\n\t opts.validation.messages[key] = function () {\n\t return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t };\n\t });\n\n\t var useNewValidatorsApi = ctrl.hasOwnProperty(\"$validators\") && !attrs.hasOwnProperty(\"useParsers\");\n\t angular.forEach(opts.validators, function addValidatorToPipeline(validator, name) {\n\t var message = validator.message;\n\t if (message) {\n\t opts.validation.messages[name] = function () {\n\t return formlyUtil.formlyEval(scope, message, ctrl.$modelValue, ctrl.$viewValue);\n\t };\n\t }\n\t validator = angular.isObject(validator) ? validator.expression : validator;\n\t var isPossiblyAsync = !angular.isString(validator);\n\t if (useNewValidatorsApi) {\n\t setupWithValidators();\n\t } else {\n\t setupWithParsers();\n\t }\n\n\t function setupWithValidators() {\n\t var validatorCollection = isPossiblyAsync ? \"$asyncValidators\" : \"$validators\";\n\t ctrl[validatorCollection][name] = function evalValidity(modelValue, viewValue) {\n\t var value = formlyUtil.formlyEval(scope, validator, modelValue, viewValue);\n\t if (isPossiblyAsync) {\n\t return isPromiseLike(value) ? value : value ? $q.when(value) : $q.reject(value);\n\t } else {\n\t return value;\n\t }\n\t };\n\t }\n\n\t function setupWithParsers() {\n\t var inFlightValidator = undefined;\n\t ctrl.$parsers.unshift(function evalValidityOfParser(viewValue) {\n\t var isValid = formlyUtil.formlyEval(scope, validator, ctrl.$modelValue, viewValue);\n\t if (isPromiseLike(isValid)) {\n\t ctrl.$pending = ctrl.$pending || {};\n\t ctrl.$pending[name] = true;\n\t inFlightValidator = isValid;\n\t isValid.then(function () {\n\t if (inFlightValidator === isValid) {\n\t ctrl.$setValidity(name, true);\n\t }\n\t })[\"catch\"](function () {\n\t if (inFlightValidator === isValid) {\n\t ctrl.$setValidity(name, false);\n\t }\n\t })[\"finally\"](function () {\n\t if (Object.keys(ctrl.$pending).length === 1) {\n\t delete ctrl.$pending;\n\t } else {\n\t delete ctrl.$pending[name];\n\t }\n\t });\n\t } else {\n\t ctrl.$setValidity(name, isValid);\n\t }\n\t return viewValue;\n\t });\n\t }\n\t });\n\t }\n\t };\n\n\t function isPromiseLike(obj) {\n\t return obj && angular.isFunction(obj.then);\n\t }\n\n\t function checkValidators(validators) {\n\t var allowedProperties = [\"expression\", \"message\"];\n\t var validatorsWithExtraProps = {};\n\t angular.forEach(validators, function (validator, name) {\n\t if (angular.isString(validator)) {\n\t return;\n\t }\n\t var extraProps = [];\n\t angular.forEach(validator, function (v, key) {\n\t if (allowedProperties.indexOf(key) === -1) {\n\t extraProps.push(key);\n\t }\n\t });\n\t if (extraProps.length) {\n\t validatorsWithExtraProps[name] = extraProps;\n\t }\n\t });\n\t if (Object.keys(validatorsWithExtraProps).length) {\n\t throw new Error([\"Validators are only allowed to be functions or objects that have \" + allowedProperties.join(\", \") + \".\", \"You provided some extra properties: \" + JSON.stringify(validatorsWithExtraProps)].join(\" \"));\n\t }\n\t }\n\t}\n\tformlyCustomValidation.$inject = [\"formlyUtil\", \"$q\"];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyField;\n\n\t/**\n\t * @ngdoc directive\n\t * @name formlyField\n\t * @restrict AE\n\t */\n\t// @ngInject\n\tfunction formlyField($http, $q, $compile, $templateCache, formlyConfig, formlyValidationMessages, formlyApiCheck, formlyUtil, formlyUsability, formlyWarn) {\n\t var arrayify = formlyUtil.arrayify;\n\n\t FormlyFieldController.$inject = [\"$scope\", \"$timeout\", \"$parse\", \"$controller\"];\n\t return {\n\t restrict: \"AE\",\n\t transclude: true,\n\t scope: {\n\t options: \"=\",\n\t model: \"=\",\n\t formId: \"@\", // TODO remove formId in a breaking release\n\t index: \"=?\",\n\t fields: \"=?\",\n\t formState: \"=?\",\n\t form: \"=?\" // TODO require form in a breaking release\n\t },\n\t controller: FormlyFieldController,\n\t link: fieldLink\n\t };\n\n\t // @ngInject\n\t function FormlyFieldController($scope, $timeout, $parse, $controller) {\n\t /* jshint maxstatements:31 */\n\t if ($scope.options.fieldGroup) {\n\t setupFieldGroup();\n\t return;\n\t }\n\n\t var fieldType = getFieldType($scope.options);\n\t simplifyLife($scope.options);\n\t mergeFieldOptionsWithTypeDefaults($scope.options, fieldType);\n\t extendOptionsWithDefaults($scope.options, $scope.index);\n\t checkApi($scope.options);\n\t // set field id to link labels and fields\n\n\t // initalization\n\t setFieldId();\n\t setDefaultValue();\n\t setInitialValue();\n\t runExpressions();\n\t addModelWatcher($scope, $scope.options);\n\t addValidationMessages($scope.options);\n\t invokeControllers($scope, $scope.options, fieldType);\n\n\t // function definitions\n\t function runExpressions() {\n\t // must run on next tick to make sure that the current value is correct.\n\t $timeout(function runExpressionsOnNextTick() {\n\t var field = $scope.options;\n\t var currentValue = valueGetterSetter();\n\t angular.forEach(field.expressionProperties, function runExpression(expression, prop) {\n\t var setter = $parse(prop).assign;\n\t var promise = $q.when(formlyUtil.formlyEval($scope, expression, currentValue));\n\t promise.then(function setFieldValue(value) {\n\t setter(field, value);\n\t });\n\t });\n\t });\n\t }\n\n\t function valueGetterSetter(newVal) {\n\t if (!$scope.model || !$scope.options.key) {\n\t return;\n\t }\n\t if (angular.isDefined(newVal)) {\n\t $scope.model[$scope.options.key] = newVal;\n\t }\n\t return $scope.model[$scope.options.key];\n\t }\n\n\t function simplifyLife(options) {\n\t // add a few empty objects (if they don't already exist) so you don't have to undefined check everywhere\n\t formlyUtil.reverseDeepMerge(options, {\n\t data: {},\n\t templateOptions: {},\n\t validation: {}\n\t });\n\t // create $scope.to so template authors can reference to instead of $scope.options.templateOptions\n\t $scope.to = $scope.options.templateOptions;\n\t }\n\n\t function setFieldId() {\n\t if (angular.isFunction(formlyConfig.extras.getFieldId)) {\n\t $scope.id = formlyConfig.extras.getFieldId($scope.options, $scope.model, $scope);\n\t } else {\n\t var formName = $scope.form && $scope.form.$name || $scope.formId;\n\t $scope.id = formlyUtil.getFieldId(formName, $scope.options, $scope.index);\n\t }\n\t $scope.options.id = $scope.id;\n\t }\n\n\t function setDefaultValue() {\n\t if (angular.isDefined($scope.options.defaultValue) && !angular.isDefined($scope.model[$scope.options.key])) {\n\t $scope.model[$scope.options.key] = $scope.options.defaultValue;\n\t }\n\t }\n\n\t function setInitialValue() {\n\t $scope.options.initialValue = $scope.model && $scope.model[$scope.options.key];\n\t }\n\n\t function mergeFieldOptionsWithTypeDefaults(options, type) {\n\t if (type) {\n\t mergeOptions(options, type.defaultOptions);\n\t }\n\t var properOrder = arrayify(options.optionsTypes).reverse(); // so the right things are overridden\n\t angular.forEach(properOrder, function (typeName) {\n\t mergeOptions(options, formlyConfig.getType(typeName, true, options).defaultOptions);\n\t });\n\t }\n\n\t function mergeOptions(options, extraOptions) {\n\t if (extraOptions) {\n\t if (angular.isFunction(extraOptions)) {\n\t extraOptions = extraOptions(options);\n\t }\n\t formlyUtil.reverseDeepMerge(options, extraOptions);\n\t }\n\t }\n\n\t function extendOptionsWithDefaults(options, index) {\n\t var key = options.key || index || 0;\n\t angular.extend(options, {\n\t // attach the key in case the formly-field directive is used directly\n\t key: key,\n\t value: valueGetterSetter,\n\t runExpressions: runExpressions,\n\t resetModel: resetModel,\n\t updateInitialValue: updateInitialValue\n\t });\n\t }\n\n\t // initialization functions\n\t function addModelWatcher(scope, options) {\n\t if (options.model) {\n\t scope.$watch(\"options.model\", runExpressions, true);\n\t }\n\t }\n\n\t function resetModel() {\n\t $scope.model[$scope.options.key] = $scope.options.initialValue;\n\t if ($scope.options.formControl) {\n\t $scope.options.formControl.$setViewValue($scope.model[$scope.options.key]);\n\t $scope.options.formControl.$render();\n\t $scope.options.formControl.$setUntouched();\n\t $scope.options.formControl.$setPristine();\n\t }\n\t }\n\n\t function updateInitialValue() {\n\t $scope.options.initialValue = $scope.model[$scope.options.key];\n\t }\n\n\t function addValidationMessages(options) {\n\t options.validation.messages = options.validation.messages || {};\n\t angular.forEach(formlyValidationMessages.messages, function createFunctionForMessage(expression, name) {\n\t if (!options.validation.messages[name]) {\n\t options.validation.messages[name] = function evaluateMessage(viewValue, modelValue, scope) {\n\t return formlyUtil.formlyEval(scope, expression, modelValue, viewValue);\n\t };\n\t }\n\t });\n\t }\n\n\t function invokeControllers(scope) {\n\t var options = arguments[1] === undefined ? {} : arguments[1];\n\t var type = arguments[2] === undefined ? {} : arguments[2];\n\n\t angular.forEach([type.controller, options.controller], function (controller) {\n\t if (controller) {\n\t $controller(controller, { $scope: scope });\n\t }\n\t });\n\t }\n\n\t function setupFieldGroup() {\n\t $scope.options.options = $scope.options.options || {};\n\t $scope.options.options.formState = $scope.formState;\n\t }\n\t }\n\n\t // link function\n\t function fieldLink(scope, el) {\n\t if (scope.options.fieldGroup) {\n\t setFieldGroupTemplate();\n\t return;\n\t }\n\n\t addAttributes();\n\t addClasses();\n\n\t var type = getFieldType(scope.options);\n\t var args = arguments;\n\t var thusly = this;\n\t getFieldTemplate(scope.options).then(runManipulators(formlyConfig.templateManipulators.preWrapper)).then(transcludeInWrappers(scope.options)).then(runManipulators(formlyConfig.templateManipulators.postWrapper)).then(setElementTemplate).then(watchFormControl).then(callLinkFunctions)[\"catch\"](function (error) {\n\t formlyWarn(\"there-was-a-problem-setting-the-template-for-this-field\", \"There was a problem setting the template for this field \", scope.options, error);\n\t });\n\n\t function setFieldGroupTemplate() {\n\t checkFieldGroupApi(scope.options);\n\t el.addClass(\"formly-field-group\");\n\t var extraAttributes = \"\";\n\t if (scope.options.elementAttributes) {\n\t extraAttributes = Object.keys(scope.options.elementAttributes).map(function (key) {\n\t return \"\" + key + \"=\\\"\" + scope.options.elementAttributes[key] + \"\\\"\";\n\t }).join(\" \");\n\t }\n\t setElementTemplate(\"\\n \\n \\n \");\n\t }\n\n\t function addAttributes() {\n\t if (scope.options.elementAttributes) {\n\t el.attr(scope.options.elementAttributes);\n\t }\n\t }\n\n\t function addClasses() {\n\t if (scope.options.className) {\n\t el.addClass(scope.options.className);\n\t }\n\t if (scope.options.type) {\n\t el.addClass(\"formly-field-\" + scope.options.type);\n\t }\n\t }\n\n\t function setElementTemplate(templateString) {\n\t el.html(asHtml(templateString));\n\t $compile(el.contents())(scope);\n\t return templateString;\n\t }\n\n\t function watchFormControl(templateString) {\n\t var stopWatchingField = angular.noop;\n\t var stopWatchingShowError = angular.noop;\n\t if (scope.options.noFormControl) {\n\t return;\n\t }\n\t var templateEl = angular.element(\"
    \" + templateString + \"
    \");\n\t var ngModelNode = templateEl[0].querySelector(\"[ng-model],[data-ng-model]\");\n\t if (ngModelNode && ngModelNode.getAttribute(\"name\")) {\n\t watchFieldNameOrExistence(ngModelNode.getAttribute(\"name\"));\n\t }\n\n\t function watchFieldNameOrExistence(name) {\n\t var nameExpressionRegex = /\\{\\{(.*?)}}/;\n\t var nameExpression = nameExpressionRegex.exec(name);\n\t if (nameExpression) {\n\t watchFieldName(nameExpression[1]);\n\t } else {\n\t watchFieldExistence(name);\n\t }\n\t }\n\n\t function watchFieldName(expression) {\n\t scope.$watch(expression, function oneFieldNameChange(name) {\n\t if (name) {\n\t stopWatchingField();\n\t watchFieldExistence(name);\n\t }\n\t });\n\t }\n\n\t function watchFieldExistence(name) {\n\t stopWatchingField = scope.$watch(\"form[\\\"\" + name + \"\\\"]\", function formControlChange(formControl) {\n\t if (formControl) {\n\t scope.fc = formControl; // shortcut for template authors\n\t scope.options.formControl = formControl;\n\t stopWatchingShowError();\n\t addShowMessagesWatcher();\n\t }\n\t });\n\t }\n\n\t function addShowMessagesWatcher() {\n\t stopWatchingShowError = scope.$watch(function watchShowValidationChange() {\n\t var customExpression = formlyConfig.extras.errorExistsAndShouldBeVisibleExpression;\n\t var options = scope.options;\n\t var fc = scope.fc;\n\n\t if (!fc.$invalid) {\n\t return false;\n\t } else if (typeof options.validation.show === \"boolean\") {\n\t return options.validation.show;\n\t } else if (customExpression) {\n\t return formlyUtil.formlyEval(scope, customExpression, fc.$modelValue, fc.$viewValue);\n\t } else {\n\t var noTouchedButDirty = angular.isUndefined(fc.$touched) && fc.$dirty;\n\t return scope.fc.$touched || noTouchedButDirty;\n\t }\n\t }, function onShowValidationChange(show) {\n\t scope.options.validation.errorExistsAndShouldBeVisible = show;\n\t scope.showError = show; // shortcut for template authors\n\t });\n\t }\n\t }\n\n\t function callLinkFunctions() {\n\t if (type && type.link) {\n\t type.link.apply(thusly, args);\n\t }\n\t if (scope.options.link) {\n\t scope.options.link.apply(thusly, args);\n\t }\n\t }\n\n\t function runManipulators(manipulators) {\n\t return function runManipulatorsOnTemplate(template) {\n\t var chain = $q.when(template);\n\t angular.forEach(manipulators, function (manipulator) {\n\t chain = chain.then(function (template) {\n\t return $q.when(manipulator(template, scope.options, scope)).then(function (newTemplate) {\n\t return angular.isString(newTemplate) ? newTemplate : asHtml(newTemplate);\n\t });\n\t });\n\t });\n\t return chain;\n\t };\n\t }\n\t }\n\n\t // stateless util functions\n\t function asHtml(el) {\n\t var wrapper = angular.element(\"\");\n\t return wrapper.append(el).html();\n\t }\n\n\t function getFieldType(options) {\n\t return options.type && formlyConfig.getType(options.type);\n\t }\n\n\t function getFieldTemplate(options) {\n\t function fromOptionsOrType(key, type) {\n\t if (angular.isDefined(options[key])) {\n\t return options[key];\n\t } else if (type && angular.isDefined(type[key])) {\n\t return type[key];\n\t }\n\t }\n\n\t var type = formlyConfig.getType(options.type, true, options);\n\t var template = fromOptionsOrType(\"template\", type);\n\t var templateUrl = fromOptionsOrType(\"templateUrl\", type);\n\t if (angular.isUndefined(template) && !templateUrl) {\n\t throw formlyUsability.getFieldError(\"type-type-has-no-template\", \"Type '\" + options.type + \"' has not template. On element:\", options);\n\t }\n\n\t return getTemplate(templateUrl || template, angular.isUndefined(template), options);\n\t }\n\n\t function getTemplate(template, isUrl, options) {\n\t var templatePromise = undefined;\n\t if (angular.isFunction(template)) {\n\t templatePromise = $q.when(template(options));\n\t } else {\n\t templatePromise = $q.when(template);\n\t }\n\n\t if (!isUrl) {\n\t return templatePromise;\n\t } else {\n\t var _ret = (function () {\n\t var httpOptions = { cache: $templateCache };\n\t return {\n\t v: templatePromise.then(function (url) {\n\t return $http.get(url, httpOptions);\n\t }).then(function (response) {\n\t return response.data;\n\t })[\"catch\"](function handleErrorGettingATemplate(error) {\n\t formlyWarn(\"problem-loading-template-for-templateurl\", \"Problem loading template for \" + template, error);\n\t })\n\t };\n\t })();\n\n\t if (typeof _ret === \"object\") {\n\t return _ret.v;\n\t }\n\t }\n\t }\n\n\t function transcludeInWrappers(options) {\n\t var wrapper = getWrapperOption(options);\n\n\t return function transcludeTemplate(template) {\n\t if (!wrapper.length) {\n\t return $q.when(template);\n\t }\n\n\t wrapper.forEach(function (wrapper) {\n\t formlyUsability.checkWrapper(wrapper, options);\n\t wrapper.validateOptions && wrapper.validateOptions(options);\n\t runApiCheck(wrapper, options);\n\t });\n\t var promises = wrapper.map(function (w) {\n\t return getTemplate(w.template || w.templateUrl, !w.template);\n\t });\n\t return $q.all(promises).then(function (wrappersTemplates) {\n\t wrappersTemplates.forEach(function (wrapperTemplate, index) {\n\t formlyUsability.checkWrapperTemplate(wrapperTemplate, wrapper[index]);\n\t });\n\t wrappersTemplates.reverse(); // wrapper 0 is wrapped in wrapper 1 and so on...\n\t var totalWrapper = wrappersTemplates.shift();\n\t wrappersTemplates.forEach(function (wrapperTemplate) {\n\t totalWrapper = doTransclusion(totalWrapper, wrapperTemplate);\n\t });\n\t return doTransclusion(totalWrapper, template);\n\t });\n\t };\n\t }\n\n\t function doTransclusion(wrapper, template) {\n\t var superWrapper = angular.element(\"\"); // this allows people not have to have a single root in wrappers\n\t superWrapper.append(wrapper);\n\t var transcludeEl = superWrapper.find(\"formly-transclude\");\n\t if (!transcludeEl.length) {\n\t //try it using our custom find function\n\t transcludeEl = formlyUtil.findByNodeName(superWrapper, \"formly-transclude\");\n\t }\n\t transcludeEl.replaceWith(template);\n\t return superWrapper.html();\n\t }\n\n\t function getWrapperOption(options) {\n\t var wrapper = options.wrapper;\n\t // explicit null means no wrapper\n\t if (wrapper === null) {\n\t return [];\n\t }\n\n\t // nothing specified means use the default wrapper for the type\n\t if (!wrapper) {\n\t // get all wrappers that specify they apply to this type\n\t wrapper = arrayify(formlyConfig.getWrapperByType(options.type));\n\t } else {\n\t wrapper = arrayify(wrapper).map(formlyConfig.getWrapper);\n\t }\n\n\t // get all wrappers for that this type specified that it uses.\n\t var type = formlyConfig.getType(options.type, true, options);\n\t if (type && type.wrapper) {\n\t var typeWrappers = arrayify(type.wrapper).map(formlyConfig.getWrapper);\n\t wrapper = wrapper.concat(typeWrappers);\n\t }\n\n\t // add the default wrapper last\n\t var defaultWrapper = formlyConfig.getWrapper();\n\t if (defaultWrapper) {\n\t wrapper.push(defaultWrapper);\n\t }\n\t return wrapper;\n\t }\n\n\t function checkApi(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.formlyFieldOptions, options, {\n\t prefix: \"formly-field directive\",\n\t url: \"formly-field-directive-validation-failed\"\n\t });\n\t // validate with the type\n\t var type = options.type && formlyConfig.getType(options.type);\n\t if (type) {\n\t if (type.validateOptions) {\n\t type.validateOptions(options);\n\t }\n\t runApiCheck(type, options);\n\t }\n\t }\n\n\t function checkFieldGroupApi(options) {\n\t formlyApiCheck[\"throw\"](formlyApiCheck.fieldGroup, options, {\n\t prefix: \"formly-field directive\",\n\t url: \"formly-field-directive-validation-failed\"\n\t });\n\t }\n\n\t function runApiCheck(_ref, options) {\n\t var apiCheck = _ref.apiCheck;\n\t var apiCheckInstance = _ref.apiCheckInstance;\n\t var apiCheckFunction = _ref.apiCheckFunction;\n\t var apiCheckOptions = _ref.apiCheckOptions;\n\n\t if (!apiCheck) {\n\t return;\n\t }\n\t var instance = apiCheckInstance || formlyApiCheck;\n\t var fn = apiCheckFunction || \"warn\";\n\t var shape = instance.shape(apiCheck);\n\t instance[fn](shape, options, apiCheckOptions || {\n\t prefix: \"formly-field \" + name,\n\t url: formlyApiCheck.config.output.docsBaseUrl + \"formly-field-type-apicheck-failed\"\n\t });\n\t }\n\t}\n\tformlyField.$inject = [\"$http\", \"$q\", \"$compile\", \"$templateCache\", \"formlyConfig\", \"formlyValidationMessages\", \"formlyApiCheck\", \"formlyUtil\", \"formlyUsability\", \"formlyWarn\"];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = formlyFocus;\n\n\t// @ngInject\n\tfunction formlyFocus($timeout, $document) {\n\t /* jshint -W052 */\n\t return {\n\t restrict: \"A\",\n\t link: function formlyFocusLink(scope, element, attrs) {\n\t var previousEl = null;\n\t var el = element[0];\n\t var doc = $document[0];\n\t attrs.$observe(\"formlyFocus\", function respondToFocusExpressionChange(value) {\n\t if (value === \"true\") {\n\t $timeout(function setElementFocus() {\n\t previousEl = doc.activeElement;\n\t el.focus();\n\t }, ~ ~attrs.focusWait);\n\t } else if (value === \"false\") {\n\t if (doc.activeElement === el) {\n\t el.blur();\n\t if (attrs.hasOwnProperty(\"refocus\") && previousEl) {\n\t previousEl.focus();\n\t }\n\t }\n\t }\n\t });\n\t }\n\t };\n\t}\n\tformlyFocus.$inject = [\"$timeout\", \"$document\"];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar _toConsumableArray = function (arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } };\n\n\tvar _slice = Array.prototype.slice;\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = formlyForm;\n\n\t/**\n\t * @ngdoc directive\n\t * @name formlyForm\n\t * @restrict E\n\t */\n\t// @ngInject\n\tfunction formlyForm(formlyUsability, $parse, formlyApiCheck, formlyConfig) {\n\t var currentFormId = 1;\n\t return {\n\t restrict: \"E\",\n\t template: function formlyFormGetTemplate(el, attrs) {\n\t /* jshint -W033 */ // this because jshint is broken I guess...\n\t var rootEl = getRootEl();\n\t var fieldRootEl = getFieldRootEl();\n\t var formId = \"formly_\" + currentFormId++;\n\t var parentFormAttributes = \"\";\n\t if (attrs.hasOwnProperty(\"isFieldGroup\") && el.parent().parent().hasClass(\"formly\")) {\n\t parentFormAttributes = copyAttributes(el.parent().parent()[0].attributes);\n\t }\n\t return \"\\n <\" + rootEl + \" class=\\\"formly\\\"\\n name=\\\"\" + getFormName() + \"\\\"\\n role=\\\"form\\\" \" + parentFormAttributes + \">\\n <\" + fieldRootEl + \" formly-field\\n ng-repeat=\\\"field in fields \" + getTrackBy() + \"\\\"\\n \" + getHideDirective() + \"=\\\"!field.hide\\\"\\n class=\\\"formly-field\\\"\\n options=\\\"field\\\"\\n model=\\\"field.model || model\\\"\\n fields=\\\"fields\\\"\\n form=\\\"theFormlyForm\\\"\\n form-id=\\\"\" + getFormName() + \"\\\"\\n form-state=\\\"options.formState\\\"\\n index=\\\"$index\\\">\\n \\n
    \\n \\n \";\n\n\t function getRootEl() {\n\t return attrs.rootEl || \"ng-form\";\n\t }\n\n\t function getFieldRootEl() {\n\t return attrs.fieldRootEl || \"div\";\n\t }\n\n\t function getHideDirective() {\n\t return attrs.hideDirective || formlyConfig.extras.defaultHideDirective || \"ng-if\";\n\t }\n\n\t function getTrackBy() {\n\t if (!attrs.trackBy) {\n\t return \"\";\n\t } else {\n\t return \"track by \" + attrs.trackBy;\n\t }\n\t }\n\n\t function getFormName() {\n\t var formName = formId;\n\t var bindName = attrs.bindName;\n\t if (bindName) {\n\t if (angular.version.minor < 3) {\n\t throw formlyUsability.getFormlyError(\"bind-name attribute on formly-form not allowed in > angular 1.3\");\n\t }\n\t // we can do a one-time binding here because we know we're in 1.3.x territory\n\t formName = \"{{::'formly_' + \" + bindName + \"}}\";\n\t }\n\t return formName;\n\t }\n\n\t function copyAttributes(attributes) {\n\t var excluded = [\"model\", \"form\", \"fields\", \"options\", \"name\", \"role\", \"class\"];\n\t var arrayAttrs = [];\n\t angular.forEach(attributes, function (_ref) {\n\t var nodeName = _ref.nodeName;\n\t var nodeValue = _ref.nodeValue;\n\n\t if (nodeName !== \"undefined\" && excluded.indexOf(nodeName) === -1) {\n\t arrayAttrs.push(\"\" + toKebabCase(nodeName) + \"=\\\"\" + nodeValue + \"\\\"\");\n\t }\n\t });\n\t return arrayAttrs.join(\" \");\n\t }\n\n\t function toKebabCase(string) {\n\t if (string) {\n\t return string.replace(/([A-Z])/g, function ($1) {\n\t return \"-\" + $1.toLowerCase();\n\t });\n\t } else {\n\t return \"\";\n\t }\n\t }\n\t },\n\t replace: true,\n\t transclude: true,\n\t scope: {\n\t fields: \"=\",\n\t model: \"=\",\n\t form: \"=?\",\n\t options: \"=?\"\n\t },\n\t controller: /* @ngInject */[\"$scope\", \"formlyUtil\", function FormlyFormController($scope, formlyUtil) {\n\t setupOptions();\n\t $scope.model = $scope.model || {};\n\t $scope.fields = $scope.fields || [];\n\n\t angular.forEach($scope.fields, initModel); // initializes the model property if set to 'formState'\n\t angular.forEach($scope.fields, attachKey); // attaches a key based on the index if a key isn't specified\n\t angular.forEach($scope.fields, setupWatchers); // setup watchers for all fields\n\n\t // watch the model and evaluate watch expressions that depend on it.\n\t $scope.$watch(\"model\", onModelOrFormStateChange, true);\n\t if ($scope.options.formState) {\n\t $scope.$watch(\"options.formState\", onModelOrFormStateChange, true);\n\t }\n\n\t function onModelOrFormStateChange() {\n\t angular.forEach($scope.fields, function runFieldExpressionProperties(field, index) {\n\t /*jshint -W030 */\n\t var model = field.model || $scope.model;\n\t field.runExpressions && field.runExpressions(model);\n\t if (field.hideExpression) {\n\t // can't use hide with expressionProperties reliably\n\t var val = model[field.key];\n\t // this makes it closer to what a regular expressionProperty would be\n\t var extraLocals = {\n\t options: field,\n\t index: index,\n\t formState: $scope.options.formState,\n\t formId: $scope.formId\n\t };\n\t field.hide = formlyUtil.formlyEval($scope, field.hideExpression, val, val, extraLocals);\n\t }\n\t });\n\t }\n\n\t function setupOptions() {\n\t formlyApiCheck[\"throw\"]([formlyApiCheck.formOptionsApi.optional], [$scope.options], { prefix: \"formly-form options check\" });\n\t $scope.options = $scope.options || {};\n\t $scope.options.formState = $scope.options.formState || {};\n\n\t angular.extend($scope.options, {\n\t updateInitialValue: updateInitialValue,\n\t resetModel: resetModel\n\t });\n\t }\n\n\t function updateInitialValue() {\n\t angular.forEach($scope.fields, function (field) {\n\t if (isFieldGroup(field)) {\n\t field.options.updateInitialValue();\n\t } else {\n\t field.updateInitialValue();\n\t }\n\t });\n\t }\n\n\t function resetModel() {\n\t angular.forEach($scope.fields, function (field) {\n\t if (isFieldGroup(field)) {\n\t field.options.resetModel();\n\t } else {\n\t field.resetModel();\n\t }\n\t });\n\t }\n\n\t function initModel(field) {\n\t if (field.model && field.model === \"formState\") {\n\t field.model = $scope.options.formState;\n\t }\n\t }\n\n\t function attachKey(field, index) {\n\t if (!isFieldGroup(field)) {\n\t field.key = field.key || index || 0;\n\t }\n\t }\n\n\t function setupWatchers(field, index) {\n\t if (isFieldGroup(field) || !angular.isDefined(field.watcher)) {\n\t return;\n\t }\n\t var watchers = field.watcher;\n\t if (!angular.isArray(watchers)) {\n\t watchers = [watchers];\n\t }\n\t angular.forEach(watchers, function setupWatcher(watcher) {\n\t if (!angular.isDefined(watcher.listener)) {\n\t throw formlyUsability.getFieldError(\"all-field-watchers-must-have-a-listener\", \"All field watchers must have a listener\", field);\n\t }\n\t var watchExpression = getWatchExpression(watcher, field, index);\n\t var watchListener = getWatchListener(watcher, field, index);\n\n\t var type = watcher.type || \"$watch\";\n\t watcher.stopWatching = $scope[type](watchExpression, watchListener, watcher.watchDeep);\n\t });\n\t }\n\n\t function getWatchExpression(watcher, field, index) {\n\t var watchExpression = watcher.expression || \"model['\" + field.key + \"']\";\n\t if (angular.isFunction(watchExpression)) {\n\t // wrap the field's watch expression so we can call it with the field as the first arg\n\t // and the stop function as the last arg as a helper\n\t var originalExpression = watchExpression;\n\t watchExpression = function formlyWatchExpression() {\n\t var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t return originalExpression.apply(undefined, _toConsumableArray(args));\n\t };\n\t watchExpression.displayName = \"Formly Watch Expression for field for \" + field.key;\n\t }\n\t return watchExpression;\n\t }\n\n\t function getWatchListener(watcher, field, index) {\n\t var watchListener = watcher.listener;\n\t if (angular.isFunction(watchListener)) {\n\t // wrap the field's watch listener so we can call it with the field as the first arg\n\t // and the stop function as the last arg as a helper\n\t var originalListener = watchListener;\n\t watchListener = function formlyWatchListener() {\n\t var args = modifyArgs.apply(undefined, [watcher, index].concat(_slice.call(arguments)));\n\t return originalListener.apply(undefined, _toConsumableArray(args));\n\t };\n\t watchListener.displayName = \"Formly Watch Listener for field for \" + field.key;\n\t }\n\t return watchListener;\n\t }\n\n\t function modifyArgs(watcher, index) {\n\t for (var _len = arguments.length, originalArgs = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n\t originalArgs[_key - 2] = arguments[_key];\n\t }\n\n\t return [$scope.fields[index]].concat(originalArgs, [watcher.stopWatching]);\n\t }\n\n\t function isFieldGroup(field) {\n\t return field && !!field.fieldGroup;\n\t }\n\t }],\n\t link: function link(scope, el, attrs) {\n\t var formId = attrs.name;\n\t scope.formId = formId;\n\t scope.theFormlyForm = scope[formId];\n\t if (attrs.form) {\n\t $parse(attrs.form).assign(scope.$parent, scope[formId]);\n\t }\n\n\t // chrome autocomplete lameness\n\t // see https://code.google.com/p/chromium/issues/detail?id=468153#c14\n\t // ლ(ಠ益ಠლ) (╯°□°)╯︵ ┻━┻ (◞‸◟;)\n\t var global = formlyConfig.extras.removeChromeAutoComplete === true;\n\t var offInstance = scope.options && scope.options.removeChromeAutoComplete === false;\n\t var onInstance = scope.options && scope.options.removeChromeAutoComplete === true;\n\t if (global && !offInstance || onInstance) {\n\t var input = document.createElement(\"input\");\n\t input.setAttribute(\"autocomplete\", \"address-level4\");\n\t input.setAttribute(\"hidden\", true);\n\t el[0].appendChild(input);\n\t }\n\t }\n\t };\n\t}\n\tformlyForm.$inject = [\"formlyUsability\", \"$parse\", \"formlyApiCheck\", \"formlyConfig\"];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = addFormlyNgModelAttrsManipulator;\n\n\t// @ngInject\n\tfunction addFormlyNgModelAttrsManipulator(formlyConfig) {\n\t if (formlyConfig.extras.disableNgModelAttrsManipulator) {\n\t return;\n\t }\n\t formlyConfig.templateManipulators.preWrapper.push(ngModelAttrsManipulator);\n\n\t function ngModelAttrsManipulator(template, options, scope) {\n\t /* jshint maxcomplexity:6 */\n\t var el = document.createElement(\"div\");\n\t var data = options.data;\n\t if (data.skipNgModelAttrsManipulator === true) {\n\t return template;\n\t }\n\t el.innerHTML = template;\n\t var modelNodes = el.querySelectorAll(\"[ng-model], [data-ng-model]\");\n\t if (!modelNodes || !modelNodes.length) {\n\t return template;\n\t }\n\n\t addIfNotPresent(modelNodes, \"id\", scope.id);\n\t addIfNotPresent(modelNodes, \"name\", scope.id);\n\n\t addValidation();\n\t addModelOptions();\n\t addTemplateOptionsAttrs();\n\n\t return el.innerHTML;\n\n\t function addValidation() {\n\t if (angular.isDefined(options.validators) || angular.isDefined(options.validation.messages)) {\n\t addIfNotPresent(modelNodes, \"formly-custom-validation\", \"\");\n\t }\n\t }\n\n\t function addModelOptions() {\n\t if (angular.isDefined(options.modelOptions)) {\n\t addIfNotPresent(modelNodes, \"ng-model-options\", \"options.modelOptions\");\n\t if (options.modelOptions.getterSetter) {\n\t angular.forEach(modelNodes, function (node) {\n\t node.setAttribute(\"ng-model\", \"options.value\");\n\t });\n\t }\n\t }\n\t }\n\n\t function addTemplateOptionsAttrs() {\n\t if (!options.templateOptions && !options.expressionProperties) {\n\t // no need to run these if there are no templateOptions or expressionProperties\n\t return;\n\t }\n\t var to = options.templateOptions || {};\n\t var ep = options.expressionProperties || {};\n\n\t var ngModelAttributes = getBuiltInAttributes();\n\n\t // extend with the user's specifications winning\n\t angular.extend(ngModelAttributes, options.ngModelAttrs);\n\n\t // Feel free to make this more simple :-)\n\t angular.forEach(ngModelAttributes, function (val, name) {\n\t /* jshint maxcomplexity:14 */\n\t var attrVal = undefined;\n\t var attrName = undefined;\n\t var ref = \"options.templateOptions['\" + name + \"']\";\n\t var toVal = to[name];\n\t var epVal = getEpValue(ep, name);\n\n\t var inTo = angular.isDefined(toVal);\n\t var inEp = angular.isDefined(epVal);\n\t if (val.value) {\n\t // I realize this looks backwards, but it's right, trust me...\n\t attrName = val.value;\n\t attrVal = name;\n\t } else if (val.expression && inTo) {\n\t attrName = val.expression;\n\t if (angular.isString(to[name])) {\n\t attrVal = \"$eval(\" + ref + \")\";\n\t } else if (angular.isFunction(to[name])) {\n\t attrVal = \"\" + ref + \"(model[options.key], options, this, $event)\";\n\t } else {\n\t throw new Error(\"options.templateOptions.\" + name + \" must be a string or function: \" + JSON.stringify(options));\n\t }\n\t } else if (val.bound && inEp) {\n\t attrName = val.bound;\n\t attrVal = ref;\n\t } else if ((val.attribute || val.boolean) && inEp) {\n\t attrName = val.attribute || val.boolean;\n\t attrVal = \"{{\" + ref + \"}}\";\n\t } else if (val.attribute && inTo) {\n\t attrName = val.attribute;\n\t attrVal = toVal;\n\t } else if (val.boolean) {\n\t if (inTo && !inEp && toVal) {\n\t attrName = val.boolean;\n\t attrVal = true;\n\t } else {}\n\t } else if (val.bound && inTo) {\n\t attrName = val.bound;\n\t attrVal = ref;\n\t }\n\n\t if (angular.isDefined(attrName) && angular.isDefined(attrVal)) {\n\t addIfNotPresent(modelNodes, attrName, attrVal);\n\t }\n\t });\n\t }\n\t }\n\n\t // Utility functions\n\t function getBuiltInAttributes() {\n\t var ngModelAttributes = {\n\t focus: {\n\t attribute: \"formly-focus\"\n\t }\n\t };\n\t var boundOnly = [];\n\t var bothBooleanAndBound = [\"required\", \"disabled\"];\n\t var bothAttributeAndBound = [\"pattern\", \"minlength\"];\n\t var expressionOnly = [\"change\", \"keydown\", \"keyup\", \"keypress\", \"click\", \"focus\", \"blur\"];\n\t var attributeOnly = [\"placeholder\", \"min\", \"max\", \"tabindex\", \"type\"];\n\t if (formlyConfig.extras.ngModelAttrsManipulatorPreferUnbound) {\n\t bothAttributeAndBound.push(\"maxlength\");\n\t } else {\n\t boundOnly.push(\"maxlength\");\n\t }\n\n\t angular.forEach(boundOnly, function (item) {\n\t ngModelAttributes[item] = { bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(bothBooleanAndBound, function (item) {\n\t ngModelAttributes[item] = { boolean: item, bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(bothAttributeAndBound, function (item) {\n\t ngModelAttributes[item] = { attribute: item, bound: \"ng-\" + item };\n\t });\n\n\t angular.forEach(expressionOnly, function (item) {\n\t var propName = \"on\" + item.substr(0, 1).toUpperCase() + item.substr(1);\n\t ngModelAttributes[propName] = { expression: \"ng-\" + item };\n\t });\n\n\t angular.forEach(attributeOnly, function (item) {\n\t ngModelAttributes[item] = { attribute: item };\n\t });\n\t return ngModelAttributes;\n\t }\n\n\t function getEpValue(ep, name) {\n\t return ep[\"templateOptions.\" + name] || ep[\"templateOptions['\" + name + \"']\"] || ep[\"templateOptions[\\\"\" + name + \"\\\"]\"];\n\t }\n\n\t function addIfNotPresent(nodes, attr, val) {\n\t angular.forEach(nodes, function (node) {\n\t if (!node.getAttribute(attr)) {\n\t node.setAttribute(attr, val);\n\t }\n\t });\n\t }\n\t}\n\taddFormlyNgModelAttrsManipulator.$inject = [\"formlyConfig\"];\n\n\t// jshint -W035\n\t// empty to illustrate that a boolean will not be added via val.bound\n\t// if you want it added via val.bound, then put it in expressionProperties\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tmodule.exports = addCustomTags;\n\n\t// @ngInject\n\tfunction addCustomTags($document) {\n\t if ($document && $document.get) {\n\t (function () {\n\t //IE8 check ->\n\t // http://stackoverflow.com/questions/10964966/detect-ie-version-prior-to-v9-in-javascript/10965203#10965203\n\t var document = $document.get(0);\n\t var div = document.createElement(\"div\");\n\t div.innerHTML = \"\";\n\t var isIeLessThan9 = div.getElementsByTagName(\"i\").length === 1;\n\n\t if (isIeLessThan9) {\n\t //add the custom elements that we need for formly\n\t var customElements = [\"formly-field\", \"formly-form\", \"formly-custom-validation\", \"formly-focus\", \"formly-transpose\"];\n\t angular.forEach(customElements, function (el) {\n\t document.createElement(el);\n\t });\n\t }\n\t })();\n\t }\n\t}\n\taddCustomTags.$inject = [\"$document\"];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\n\tvar angular = _interopRequire(__webpack_require__(17));\n\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_16__;\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_17__;\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\n\tvar _interopRequire = function (obj) { return obj && obj.__esModule ? obj[\"default\"] : obj; };\n\n\tvar angular = _interopRequire(__webpack_require__(15));\n\n\tmodule.exports = { formlyEval: formlyEval, getFieldId: getFieldId, reverseDeepMerge: reverseDeepMerge, findByNodeName: findByNodeName, arrayify: arrayify, extendFunction: extendFunction };\n\n\tfunction formlyEval(scope, expression, $modelValue, $viewValue, extraLocals) {\n\t if (angular.isFunction(expression)) {\n\t return expression($viewValue, $modelValue, scope, extraLocals);\n\t } else {\n\t return scope.$eval(expression, angular.extend({ $viewValue: $viewValue, $modelValue: $modelValue }, extraLocals));\n\t }\n\t}\n\n\tfunction getFieldId(formId, options, index) {\n\t if (options.id) {\n\t return options.id;\n\t }\n\t var type = options.type;\n\t if (!type && options.template) {\n\t type = \"template\";\n\t } else if (!type && options.templateUrl) {\n\t type = \"templateUrl\";\n\t }\n\n\t return [formId, type, options.key, index].join(\"_\");\n\t}\n\n\tfunction reverseDeepMerge(dest) {\n\t angular.forEach(arguments, function (src, index) {\n\t if (!index) {\n\t return;\n\t }\n\t angular.forEach(src, function (val, prop) {\n\t if (!angular.isDefined(dest[prop])) {\n\t dest[prop] = angular.copy(val);\n\t } else if (objAndSameType(dest[prop], val)) {\n\t reverseDeepMerge(dest[prop], val);\n\t }\n\t });\n\t });\n\t}\n\n\tfunction objAndSameType(obj1, obj2) {\n\t return angular.isObject(obj1) && angular.isObject(obj2) && Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2);\n\t}\n\n\t//recurse down a node tree to find a node with matching nodeName, for custom tags jQuery.find doesn't work in IE8\n\tfunction findByNodeName(el, nodeName) {\n\t if (!el.prop) {\n\t // not a jQuery or jqLite object -> wrap it\n\t el = angular.element(el);\n\t }\n\n\t if (el.prop(\"nodeName\") === nodeName.toUpperCase()) {\n\t return el;\n\t }\n\n\t var c = el.children();\n\t for (var i = 0; c && i < c.length; i++) {\n\t var node = findByNodeName(c[i], nodeName);\n\t if (node) {\n\t return node;\n\t }\n\t }\n\t}\n\n\tfunction arrayify(obj) {\n\t if (obj && !angular.isArray(obj)) {\n\t obj = [obj];\n\t } else if (!obj) {\n\t obj = [];\n\t }\n\t return obj;\n\t}\n\n\tfunction extendFunction() {\n\t for (var _len = arguments.length, fns = Array(_len), _key = 0; _key < _len; _key++) {\n\t fns[_key] = arguments[_key];\n\t }\n\n\t return function extendedFunction() {\n\t var args = arguments;\n\t fns.forEach(function (fn) {\n\t return fn.apply(null, args);\n\t });\n\t };\n\t}\n\n/***/ }\n/******/ ])\n});\n;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FuZ3VsYXItZm9ybWx5L2Rpc3QvZm9ybWx5LmpzPzUxZmEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7O0FBRUY7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUY7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsaUJBQWlCO0FBQ3BELG1DQUFtQyxpQkFBaUI7QUFDcEQ7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1Rjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSwwQ0FBMEMsMEJBQTBCLDBDQUEwQyxnQkFBZ0IsdUJBQXVCLGFBQWEsRUFBRSxPQUFPLHdCQUF3QixFQUFFOztBQUVyTTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaLFVBQVU7QUFDVixRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQiw0QkFBNEI7QUFDNUI7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0VBQWtFO0FBQ2xFO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjs7QUFFQTtBQUNBLG9EQUFvRDtBQUNwRCxpREFBaUQ7O0FBRWpEO0FBQ0E7QUFDQSxvQ0FBb0MsZ0JBQWdCO0FBQ3BEO0FBQ0EsUUFBUTtBQUNSOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0MsRUFBRSxPQUFPO0FBQy9DO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0Esa0NBQWtDO0FBQ2xDLFVBQVU7QUFDVjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFlBQVk7QUFDWjtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQSxRQUFRO0FBQ1I7QUFDQTs7QUFFQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsdUNBQXVDLHFEQUFxRDs7QUFFNUYsMENBQTBDLDBCQUEwQiwwQ0FBMEMsZ0JBQWdCLHVCQUF1QixhQUFhLEVBQUUsT0FBTyx3QkFBd0IsRUFBRTs7QUFFck07O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZ0NBQWdDO0FBQ3pEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1osVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpREFBaUQ7QUFDakQsaURBQWlEO0FBQ2pELHFEQUFxRDs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0EsOEZBQThGLHNDQUFzQztBQUNwSTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtR0FBbUcsYUFBYTtBQUNoSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLHdCQUF3QixhQUFhO0FBQ3JDLFVBQVU7QUFDVjtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixVQUFVO0FBQ1Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBLGtDQUFrQztBQUNsQyxNQUFNOztBQUVOO0FBQ0Esa0NBQWtDO0FBQ2xDLE1BQU07O0FBRU47QUFDQSxrQ0FBa0M7QUFDbEMsTUFBTTs7QUFFTjtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDLE1BQU07O0FBRU47QUFDQSxrQ0FBa0M7QUFDbEMsTUFBTTtBQUNOO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQSx1Q0FBdUMscURBQXFEOztBQUU1RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBLHVDQUF1QyxxREFBcUQ7O0FBRTVGOztBQUVBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLG9EQUFvRCxtREFBbUQ7QUFDdkc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsTUFBTTtBQUNOLElBQUk7QUFDSjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixtQkFBbUI7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlFQUFpRSxhQUFhO0FBQzlFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEIiwiZmlsZSI6IjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBhbmd1bGFyLWZvcm1seSB2ZXJzaW9uIDYuOC4yIGJ1aWx0IHdpdGgg4pmlIGJ5IEFzdHJpc20gPGFzdHJpc21zQGdtYWlsLmNvbT4sIEtlbnQgQy4gRG9kZHMgPGtlbnRAZG9kZHNmYW1pbHkudXM+ICjDsyDDrF/DrSk9w7PDsj0ow6xfw60gw7IpXG5cbihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiYXBpLWNoZWNrXCIsIFwiYW5ndWxhclwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJuZ0Zvcm1seVwiXSA9IGZhY3RvcnkocmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm5nRm9ybWx5XCJdID0gZmFjdG9yeShyb290W1wiYXBpQ2hlY2tcIl0sIHJvb3RbXCJhbmd1bGFyXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTZfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xN19fKSB7XG5yZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbi8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbi8qKioqKiovIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcblxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge30sXG4vKioqKioqLyBcdFx0XHRpZDogbW9kdWxlSWQsXG4vKioqKioqLyBcdFx0XHRsb2FkZWQ6IGZhbHNlXG4vKioqKioqLyBcdFx0fTtcblxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cblxuXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbi8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdHZhciBfaW50ZXJvcFJlcXVpcmUgPSBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmpbXCJkZWZhdWx0XCJdIDogb2JqOyB9O1xuXG5cdHZhciBpbmRleCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGluZGV4O1xuXG4vKioqLyB9LFxuLyogMSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdHZhciBmb3JtbHlBcGlDaGVjayA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDIpKTtcblxuXHR2YXIgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDMpKTtcblxuXHR2YXIgZm9ybWx5VXNhYmlsaXR5ID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oNCkpO1xuXG5cdHZhciBmb3JtbHlDb25maWcgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXyg1KSk7XG5cblx0dmFyIGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKTtcblxuXHR2YXIgZm9ybWx5VXRpbCA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDcpKTtcblxuXHR2YXIgZm9ybWx5V2FybiA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDgpKTtcblxuXHR2YXIgZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbiA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDkpKTtcblxuXHR2YXIgZm9ybWx5RmllbGQgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxMCkpO1xuXG5cdHZhciBmb3JtbHlGb2N1cyA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDExKSk7XG5cblx0dmFyIGZvcm1seUZvcm0gPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxMikpO1xuXG5cdHZhciBmb3JtbHlOZ01vZGVsQXR0cnNNYW5pcHVsYXRvciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKSk7XG5cblx0dmFyIGZvcm1seUN1c3RvbVRhZ3MgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNCkpO1xuXG5cdHZhciBuZ01vZHVsZU5hbWUgPSBcImZvcm1seVwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gbmdNb2R1bGVOYW1lO1xuXG5cdHZhciBuZ01vZHVsZSA9IGFuZ3VsYXIubW9kdWxlKG5nTW9kdWxlTmFtZSwgW10pO1xuXG5cdG5nTW9kdWxlLmNvbnN0YW50KFwiZm9ybWx5QXBpQ2hlY2tcIiwgZm9ybWx5QXBpQ2hlY2spO1xuXHRuZ01vZHVsZS5jb25zdGFudChcImZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXhcIiwgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCk7XG5cdG5nTW9kdWxlLmNvbnN0YW50KFwiZm9ybWx5VmVyc2lvblwiLCAoXCI2LjguMlwiKSk7IC8vIDwtLSB3ZWJwYWNrIHZhcmlhYmxlXG5cblx0bmdNb2R1bGUucHJvdmlkZXIoXCJmb3JtbHlVc2FiaWxpdHlcIiwgZm9ybWx5VXNhYmlsaXR5KTtcblx0bmdNb2R1bGUucHJvdmlkZXIoXCJmb3JtbHlDb25maWdcIiwgZm9ybWx5Q29uZmlnKTtcblxuXHRuZ01vZHVsZS5mYWN0b3J5KFwiZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzXCIsIGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcyk7XG5cdG5nTW9kdWxlLmZhY3RvcnkoXCJmb3JtbHlVdGlsXCIsIGZvcm1seVV0aWwpO1xuXHRuZ01vZHVsZS5mYWN0b3J5KFwiZm9ybWx5V2FyblwiLCBmb3JtbHlXYXJuKTtcblxuXHRuZ01vZHVsZS5kaXJlY3RpdmUoXCJmb3JtbHlDdXN0b21WYWxpZGF0aW9uXCIsIGZvcm1seUN1c3RvbVZhbGlkYXRpb24pO1xuXHRuZ01vZHVsZS5kaXJlY3RpdmUoXCJmb3JtbHlGaWVsZFwiLCBmb3JtbHlGaWVsZCk7XG5cdG5nTW9kdWxlLmRpcmVjdGl2ZShcImZvcm1seUZvY3VzXCIsIGZvcm1seUZvY3VzKTtcblx0bmdNb2R1bGUuZGlyZWN0aXZlKFwiZm9ybWx5Rm9ybVwiLCBmb3JtbHlGb3JtKTtcblxuXHRuZ01vZHVsZS5ydW4oZm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3IpO1xuXHRuZ01vZHVsZS5ydW4oZm9ybWx5Q3VzdG9tVGFncyk7XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYXBpQ2hlY2tGYWN0b3J5ID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTYpKTtcblxuXHR2YXIgYXBpQ2hlY2sgPSBhcGlDaGVja0ZhY3Rvcnkoe1xuXHQgIG91dHB1dDoge1xuXHQgICAgcHJlZml4OiBcImFuZ3VsYXItZm9ybWx5OlwiLFxuXHQgICAgZG9jc0Jhc2VVcmw6IF9fd2VicGFja19yZXF1aXJlX18oMylcblx0ICB9XG5cdH0pO1xuXG5cdGZ1bmN0aW9uIHNoYXBlUmVxdWlyZWRJZk5vdChvdGhlclByb3BzLCBwcm9wQ2hlY2tlcikge1xuXHQgIGlmICghYW5ndWxhci5pc0FycmF5KG90aGVyUHJvcHMpKSB7XG5cdCAgICBvdGhlclByb3BzID0gW290aGVyUHJvcHNdO1xuXHQgIH1cblx0ICB2YXIgdHlwZSA9IFwic3BlY2lmaWVkIGlmIHRoZXNlIGFyZSBub3Qgc3BlY2lmaWVkOiBgXCIgKyBvdGhlclByb3BzLmpvaW4oXCIsIFwiKSArIFwiYCAob3RoZXJ3aXNlIGl0J3Mgb3B0aW9uYWwpXCI7XG5cdCAgZnVuY3Rpb24gc2hhcGVSZXF1aXJlZElmTm90RGVmaW5pdGlvbihwcm9wLCBwcm9wTmFtZSwgbG9jYXRpb24sIG9iaikge1xuXHQgICAgdmFyIHByb3BFeGlzdHMgPSBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KHByb3BOYW1lKTtcblx0ICAgIHZhciBvdGhlclByb3BzRXhpc3QgPSBvdGhlclByb3BzLnNvbWUoZnVuY3Rpb24gKG90aGVyUHJvcCkge1xuXHQgICAgICByZXR1cm4gb2JqICYmIG9iai5oYXNPd25Qcm9wZXJ0eShvdGhlclByb3ApO1xuXHQgICAgfSk7XG5cdCAgICBpZiAoIW90aGVyUHJvcHNFeGlzdCAmJiAhcHJvcEV4aXN0cykge1xuXHQgICAgICByZXR1cm4gYXBpQ2hlY2sudXRpbHMuZ2V0RXJyb3IocHJvcE5hbWUsIGxvY2F0aW9uLCB0eXBlKTtcblx0ICAgIH0gZWxzZSBpZiAocHJvcEV4aXN0cykge1xuXHQgICAgICByZXR1cm4gcHJvcENoZWNrZXIocHJvcCwgcHJvcE5hbWUsIGxvY2F0aW9uLCBvYmopO1xuXHQgICAgfVxuXHQgIH1cblx0ICBzaGFwZVJlcXVpcmVkSWZOb3REZWZpbml0aW9uLnR5cGUgPSB0eXBlO1xuXHQgIHJldHVybiBhcGlDaGVjay51dGlscy5jaGVja2VySGVscGVycy5zZXR1cENoZWNrZXIoc2hhcGVSZXF1aXJlZElmTm90RGVmaW5pdGlvbik7XG5cdH1cblxuXHR2YXIgZm9ybWx5RXhwcmVzc2lvbiA9IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSk7XG5cdHZhciBzcGVjaWZ5V3JhcHBlclR5cGUgPSBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLm9uZU9mKFtudWxsXSksIGFwaUNoZWNrLnR5cGVPckFycmF5T2YoYXBpQ2hlY2suc3RyaW5nKV0pO1xuXG5cdHZhciBhcGlDaGVja1Byb3BlcnR5ID0gYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suZnVuYyk7XG5cblx0dmFyIGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eSA9IGFwaUNoZWNrLnNoYXBlLm9ubHlJZihcImFwaUNoZWNrXCIsIGFwaUNoZWNrLmZ1bmMud2l0aFByb3BlcnRpZXMoe1xuXHQgIHdhcm46IGFwaUNoZWNrLmZ1bmMsXG5cdCAgXCJ0aHJvd1wiOiBhcGlDaGVjay5mdW5jLFxuXHQgIHNoYXBlOiBhcGlDaGVjay5mdW5jXG5cdH0pKTtcblxuXHR2YXIgYXBpQ2hlY2tGdW5jdGlvblByb3BlcnR5ID0gYXBpQ2hlY2suc2hhcGUub25seUlmKFwiYXBpQ2hlY2tcIiwgYXBpQ2hlY2sub25lT2YoW1widGhyb3dcIiwgXCJ3YXJuXCJdKSk7XG5cblx0dmFyIGZvcm1seVdyYXBwZXJUeXBlID0gYXBpQ2hlY2suc2hhcGUoe1xuXHQgIG5hbWU6IHNoYXBlUmVxdWlyZWRJZk5vdChcInR5cGVzXCIsIGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFwidGVtcGxhdGVVcmxcIiwgYXBpQ2hlY2suc3RyaW5nKS5vcHRpb25hbCxcblx0ICB0ZW1wbGF0ZVVybDogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJ0ZW1wbGF0ZVwiLCBhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIHR5cGVzOiBhcGlDaGVjay50eXBlT3JBcnJheU9mKGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgb3ZlcndyaXRlT2s6IGFwaUNoZWNrLmJvb2wub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGVPcHRpb25zOiBhcGlDaGVjay5mdW5jLm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrOiBhcGlDaGVja1Byb3BlcnR5Lm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrSW5zdGFuY2U6IGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eS5vcHRpb25hbCxcblx0ICBhcGlDaGVja0Z1bmN0aW9uOiBhcGlDaGVja0Z1bmN0aW9uUHJvcGVydHkub3B0aW9uYWwsXG5cdCAgYXBpQ2hlY2tPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWxcblx0fSkuc3RyaWN0O1xuXG5cdHZhciBleHByZXNzaW9uUHJvcGVydGllcyA9IGFwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RXhwcmVzc2lvbiwgYXBpQ2hlY2suc2hhcGUoe1xuXHQgIGV4cHJlc3Npb246IGZvcm1seUV4cHJlc3Npb24sXG5cdCAgbWVzc2FnZTogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbFxuXHR9KS5zdHJpY3RdKSk7XG5cblx0dmFyIG1vZGVsQ2hlY2tlciA9IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2sub25lT2YoW1wiZm9ybVN0YXRlXCJdKSwgYXBpQ2hlY2sub2JqZWN0XSk7XG5cblx0dmFyIGZpZWxkT3B0aW9uc0FwaVNoYXBlID0ge1xuXHQgICQkaGFzaEtleTogYXBpQ2hlY2suYW55Lm9wdGlvbmFsLFxuXHQgIHR5cGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInRlbXBsYXRlXCIsIFwidGVtcGxhdGVVcmxcIl0sIGFwaUNoZWNrLnN0cmluZykub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGU6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInR5cGVcIiwgXCJ0ZW1wbGF0ZVVybFwiXSwgYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmNdKSkub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGVVcmw6IGFwaUNoZWNrLnNoYXBlLmlmTm90KFtcInR5cGVcIiwgXCJ0ZW1wbGF0ZVwiXSwgYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmNdKSkub3B0aW9uYWwsXG5cdCAga2V5OiBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLnN0cmluZywgYXBpQ2hlY2subnVtYmVyXSkub3B0aW9uYWwsXG5cdCAgbW9kZWw6IG1vZGVsQ2hlY2tlci5vcHRpb25hbCxcblx0ICBjbGFzc05hbWU6IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbCxcblx0ICBpZDogYXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgIGV4cHJlc3Npb25Qcm9wZXJ0aWVzOiBleHByZXNzaW9uUHJvcGVydGllcy5vcHRpb25hbCxcblx0ICBkYXRhOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdGVtcGxhdGVPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgd3JhcHBlcjogc3BlY2lmeVdyYXBwZXJUeXBlLm9wdGlvbmFsLFxuXHQgIG1vZGVsT3B0aW9uczogYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgdXBkYXRlT246IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbCxcblx0ICAgIGRlYm91bmNlOiBhcGlDaGVjay5vbmVPZlR5cGUoW2FwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm51bWJlciksIGFwaUNoZWNrLm51bWJlcl0pLm9wdGlvbmFsLFxuXHQgICAgYWxsb3dJbnZhbGlkOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgICAgZ2V0dGVyU2V0dGVyOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgICAgdGltZXpvbmU6IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbFxuXHQgIH0pLm9wdGlvbmFsLFxuXHQgIHdhdGNoZXI6IGFwaUNoZWNrLnR5cGVPckFycmF5T2YoYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbCxcblx0ICAgIGxpc3RlbmVyOiBmb3JtbHlFeHByZXNzaW9uXG5cdCAgfSkpLm9wdGlvbmFsLFxuXHQgIHZhbGlkYXRvcnM6IGFwaUNoZWNrLm9iamVjdE9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RXhwcmVzc2lvbiwgYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbixcblx0ICAgIG1lc3NhZ2U6IGZvcm1seUV4cHJlc3Npb24ub3B0aW9uYWxcblx0ICB9KS5zdHJpY3RdKSkub3B0aW9uYWwsXG5cdCAgbm9Gb3JtQ29udHJvbDogYXBpQ2hlY2suYm9vbC5vcHRpb25hbCxcblx0ICBoaWRlOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsLFxuXHQgIGhpZGVFeHByZXNzaW9uOiBmb3JtbHlFeHByZXNzaW9uLm9wdGlvbmFsLFxuXHQgIG5nTW9kZWxBdHRyczogYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgZXhwcmVzc2lvbjogYXBpQ2hlY2suc2hhcGUuaWZOb3QoW1widmFsdWVcIiwgXCJhdHRyaWJ1dGVcIiwgXCJib3VuZFwiXSwgYXBpQ2hlY2suYW55KS5vcHRpb25hbCxcblx0ICAgIHZhbHVlOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcImV4cHJlc3Npb25cIiwgYXBpQ2hlY2suYW55KS5vcHRpb25hbCxcblx0ICAgIGF0dHJpYnV0ZTogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJleHByZXNzaW9uXCIsIGFwaUNoZWNrLmFueSkub3B0aW9uYWwsXG5cdCAgICBib3VuZDogYXBpQ2hlY2suc2hhcGUuaWZOb3QoXCJleHByZXNzaW9uXCIsIGFwaUNoZWNrLmFueSkub3B0aW9uYWxcblx0ICB9KS5zdHJpY3QpLm9wdGlvbmFsLFxuXHQgIGVsZW1lbnRBdHRyaWJ1dGVzOiBhcGlDaGVjay5vYmplY3RPZihhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIG9wdGlvbnNUeXBlczogYXBpQ2hlY2sudHlwZU9yQXJyYXlPZihhcGlDaGVjay5zdHJpbmcpLm9wdGlvbmFsLFxuXHQgIGxpbms6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgY29udHJvbGxlcjogYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5zdHJpbmcsIGFwaUNoZWNrLmZ1bmMsIGFwaUNoZWNrLmFycmF5XSkub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGlvbjogYXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgc2hvdzogYXBpQ2hlY2sub25lT2ZUeXBlKFthcGlDaGVjay5ib29sLCBhcGlDaGVjay5vbmVPZihbbnVsbF0pXSkub3B0aW9uYWwsXG5cdCAgICBtZXNzYWdlczogYXBpQ2hlY2sub2JqZWN0T2YoZm9ybWx5RXhwcmVzc2lvbikub3B0aW9uYWwsXG5cdCAgICBlcnJvckV4aXN0c0FuZFNob3VsZEJlVmlzaWJsZTogYXBpQ2hlY2suYm9vbC5vcHRpb25hbFxuXHQgIH0pLm9wdGlvbmFsLFxuXHQgIGZvcm1Db250cm9sOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcnVuRXhwcmVzc2lvbnM6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcmVzZXRNb2RlbDogYXBpQ2hlY2suZnVuYy5vcHRpb25hbCxcblx0ICB1cGRhdGVJbml0aWFsVmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgaW5pdGlhbFZhbHVlOiBhcGlDaGVjay5hbnkub3B0aW9uYWwsXG5cdCAgZGVmYXVsdFZhbHVlOiBhcGlDaGVjay5hbnkub3B0aW9uYWxcblx0fTtcblxuXHR2YXIgZm9ybWx5RmllbGRPcHRpb25zID0gYXBpQ2hlY2suc2hhcGUoZmllbGRPcHRpb25zQXBpU2hhcGUpLnN0cmljdDtcblxuXHR2YXIgZm9ybU9wdGlvbnNBcGkgPSBhcGlDaGVjay5zaGFwZSh7XG5cdCAgZm9ybVN0YXRlOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgcmVzZXRNb2RlbDogYXBpQ2hlY2suZnVuYy5vcHRpb25hbCxcblx0ICB1cGRhdGVJbml0aWFsVmFsdWU6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgcmVtb3ZlQ2hyb21lQXV0b0NvbXBsZXRlOiBhcGlDaGVjay5ib29sLm9wdGlvbmFsXG5cdH0pLnN0cmljdDtcblxuXHR2YXIgZmllbGRHcm91cCA9IGFwaUNoZWNrLnNoYXBlKHtcblx0ICAkJGhhc2hLZXk6IGFwaUNoZWNrLmFueS5vcHRpb25hbCxcblx0ICAvLyBkYW5nZXIuIE5lc3RlZCBmaWVsZCBncm91cHMgd29udCBnZXQgYXBpLWNoZWNrZWQuLi5cblx0ICBmaWVsZEdyb3VwOiBhcGlDaGVjay5hcnJheU9mKGFwaUNoZWNrLm9uZU9mVHlwZShbZm9ybWx5RmllbGRPcHRpb25zLCBhcGlDaGVjay5vYmplY3RdKSksXG5cdCAgY2xhc3NOYW1lOiBhcGlDaGVjay5zdHJpbmcub3B0aW9uYWwsXG5cdCAgb3B0aW9uczogZm9ybU9wdGlvbnNBcGkub3B0aW9uYWwsXG5cdCAgaGlkZTogYXBpQ2hlY2suYm9vbC5vcHRpb25hbCxcblx0ICBoaWRlRXhwcmVzc2lvbjogZm9ybWx5RXhwcmVzc2lvbi5vcHRpb25hbCxcblx0ICBtb2RlbDogbW9kZWxDaGVja2VyLm9wdGlvbmFsLFxuXHQgIGZvcm06IGFwaUNoZWNrLm9iamVjdC5vcHRpb25hbCxcblx0ICBlbGVtZW50QXR0cmlidXRlczogYXBpQ2hlY2sub2JqZWN0T2YoYXBpQ2hlY2suc3RyaW5nKS5vcHRpb25hbFxuXHR9KS5zdHJpY3Q7XG5cblx0dmFyIHR5cGVPcHRpb25zRGVmYXVsdE9wdGlvbnMgPSBhbmd1bGFyLmNvcHkoZmllbGRPcHRpb25zQXBpU2hhcGUpO1xuXHR0eXBlT3B0aW9uc0RlZmF1bHRPcHRpb25zLmtleSA9IGFwaUNoZWNrLnN0cmluZy5vcHRpb25hbDtcblxuXHR2YXIgZm9ybWx5VHlwZU9wdGlvbnMgPSBhcGlDaGVjay5zaGFwZSh7XG5cdCAgbmFtZTogYXBpQ2hlY2suc3RyaW5nLFxuXHQgIHRlbXBsYXRlOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcInRlbXBsYXRlVXJsXCIsIGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSkpLm9wdGlvbmFsLFxuXHQgIHRlbXBsYXRlVXJsOiBhcGlDaGVjay5zaGFwZS5pZk5vdChcInRlbXBsYXRlXCIsIGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5mdW5jXSkpLm9wdGlvbmFsLFxuXHQgIGNvbnRyb2xsZXI6IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suZnVuYywgYXBpQ2hlY2suc3RyaW5nLCBhcGlDaGVjay5hcnJheV0pLm9wdGlvbmFsLFxuXHQgIGxpbms6IGFwaUNoZWNrLmZ1bmMub3B0aW9uYWwsXG5cdCAgZGVmYXVsdE9wdGlvbnM6IGFwaUNoZWNrLm9uZU9mVHlwZShbYXBpQ2hlY2suZnVuYywgYXBpQ2hlY2suc2hhcGUodHlwZU9wdGlvbnNEZWZhdWx0T3B0aW9ucyldKS5vcHRpb25hbCxcblx0ICBcImV4dGVuZHNcIjogYXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgIHdyYXBwZXI6IHNwZWNpZnlXcmFwcGVyVHlwZS5vcHRpb25hbCxcblx0ICBkYXRhOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgdmFsaWRhdGVPcHRpb25zOiBhcGlDaGVjay5mdW5jLm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrOiBhcGlDaGVja1Byb3BlcnR5Lm9wdGlvbmFsLFxuXHQgIGFwaUNoZWNrSW5zdGFuY2U6IGFwaUNoZWNrSW5zdGFuY2VQcm9wZXJ0eS5vcHRpb25hbCxcblx0ICBhcGlDaGVja0Z1bmN0aW9uOiBhcGlDaGVja0Z1bmN0aW9uUHJvcGVydHkub3B0aW9uYWwsXG5cdCAgYXBpQ2hlY2tPcHRpb25zOiBhcGlDaGVjay5vYmplY3Qub3B0aW9uYWwsXG5cdCAgb3ZlcndyaXRlT2s6IGFwaUNoZWNrLmJvb2wub3B0aW9uYWxcblx0fSkuc3RyaWN0O1xuXHRhbmd1bGFyLmV4dGVuZChhcGlDaGVjaywge1xuXHQgIGZvcm1seVR5cGVPcHRpb25zOiBmb3JtbHlUeXBlT3B0aW9ucywgZm9ybWx5RmllbGRPcHRpb25zOiBmb3JtbHlGaWVsZE9wdGlvbnMsIGZvcm1seUV4cHJlc3Npb246IGZvcm1seUV4cHJlc3Npb24sIGZvcm1seVdyYXBwZXJUeXBlOiBmb3JtbHlXcmFwcGVyVHlwZSwgZmllbGRHcm91cDogZmllbGRHcm91cCwgZm9ybU9wdGlvbnNBcGk6IGZvcm1PcHRpb25zQXBpXG5cdH0pO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gYXBpQ2hlY2s7XG5cbi8qKiovIH0sXG4vKiAzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiaHR0cHM6Ly9naXRodWIuY29tL2Zvcm1seS1qcy9hbmd1bGFyLWZvcm1seS9ibG9iL1wiICsgKFwiNi44LjJcIikgKyBcIi9vdGhlci9FUlJPUlNfQU5EX1dBUk5JTkdTLm1kI1wiO1xuXG4vKioqLyB9LFxuLyogNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5VXNhYmlsaXR5O1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBmb3JtbHlVc2FiaWxpdHkoZm9ybWx5QXBpQ2hlY2ssIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXgpIHtcblx0ICB2YXIgX3RoaXMgPSB0aGlzO1xuXG5cdCAgYW5ndWxhci5leHRlbmQodGhpcywge1xuXHQgICAgZ2V0Rm9ybWx5RXJyb3I6IGdldEZvcm1seUVycm9yLFxuXHQgICAgZ2V0RmllbGRFcnJvcjogZ2V0RmllbGRFcnJvcixcblx0ICAgIGNoZWNrV3JhcHBlcjogY2hlY2tXcmFwcGVyLFxuXHQgICAgY2hlY2tXcmFwcGVyVGVtcGxhdGU6IGNoZWNrV3JhcHBlclRlbXBsYXRlLFxuXHQgICAgJGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gX3RoaXM7XG5cdCAgICB9XG5cdCAgfSk7XG5cblx0ICBmdW5jdGlvbiBnZXRGaWVsZEVycm9yKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UsIGZpZWxkKSB7XG5cdCAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDMpIHtcblx0ICAgICAgZmllbGQgPSBtZXNzYWdlO1xuXHQgICAgICBtZXNzYWdlID0gZXJyb3JJbmZvU2x1Zztcblx0ICAgICAgZXJyb3JJbmZvU2x1ZyA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gbmV3IEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvckluZm9TbHVnLCBtZXNzYWdlKSArIChcIiBGaWVsZCBkZWZpbml0aW9uOiBcIiArIGFuZ3VsYXIudG9Kc29uKGZpZWxkKSkpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEZvcm1seUVycm9yKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UpIHtcblx0ICAgIGlmICghbWVzc2FnZSkge1xuXHQgICAgICBtZXNzYWdlID0gZXJyb3JJbmZvU2x1Zztcblx0ICAgICAgZXJyb3JJbmZvU2x1ZyA9IG51bGw7XG5cdCAgICB9XG5cdCAgICByZXR1cm4gbmV3IEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvckluZm9TbHVnLCBtZXNzYWdlKSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0RXJyb3JNZXNzYWdlKGVycm9ySW5mb1NsdWcsIG1lc3NhZ2UpIHtcblx0ICAgIHZhciB1cmwgPSBcIlwiO1xuXHQgICAgaWYgKGVycm9ySW5mb1NsdWcgIT09IG51bGwpIHtcblx0ICAgICAgdXJsID0gXCJcIiArIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXggKyBcIlwiICsgZXJyb3JJbmZvU2x1Zztcblx0ICAgIH1cblx0ICAgIHJldHVybiBcIkZvcm1seSBFcnJvcjogXCIgKyBtZXNzYWdlICsgXCIuIFwiICsgdXJsO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrV3JhcHBlcih3cmFwcGVyKSB7XG5cdCAgICBmb3JtbHlBcGlDaGVja1tcInRocm93XCJdKGZvcm1seUFwaUNoZWNrLmZvcm1seVdyYXBwZXJUeXBlLCB3cmFwcGVyLCB7XG5cdCAgICAgIHByZWZpeDogXCJmb3JtbHlDb25maWcuc2V0V3JhcHBlclwiLFxuXHQgICAgICB1cmxTdWZmaXg6IFwic2V0d3JhcHBlci12YWxpZGF0aW9uLWZhaWxlZFwiXG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBjaGVja1dyYXBwZXJUZW1wbGF0ZSh0ZW1wbGF0ZSwgYWRkaXRpb25hbEluZm8pIHtcblx0ICAgIHZhciBmb3JtbHlUcmFuc2NsdWRlID0gXCI8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT5cIjtcblx0ICAgIGlmICh0ZW1wbGF0ZS5pbmRleE9mKGZvcm1seVRyYW5zY2x1ZGUpID09PSAtMSkge1xuXHQgICAgICB0aHJvdyBnZXRGb3JtbHlFcnJvcihcIlRlbXBsYXRlIHdyYXBwZXIgdGVtcGxhdGVzIG11c3QgdXNlIFxcXCJcIiArIGZvcm1seVRyYW5zY2x1ZGUgKyBcIlxcXCIgc29tZXdoZXJlIGluIHRoZW0uIFwiICsgKFwiVGhpcyBvbmUgZG9lcyBub3QgaGF2ZSBcXFwiPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxcIiBpbiBpdDogXCIgKyB0ZW1wbGF0ZSkgKyBcIlxcblwiICsgKFwiQWRkaXRpb25hbCBpbmZvcm1hdGlvbjogXCIgKyBKU09OLnN0cmluZ2lmeShhZGRpdGlvbmFsSW5mbykpKTtcblx0ICAgIH1cblx0ICB9XG5cdH1cblx0Zm9ybWx5VXNhYmlsaXR5LiRpbmplY3QgPSBbXCJmb3JtbHlBcGlDaGVja1wiLCBcImZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXhcIl07XG5cbi8qKiovIH0sXG4vKiA1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYW5ndWxhciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSk7XG5cblx0dmFyIHV0aWxzID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTgpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seUNvbmZpZztcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Q29uZmlnKGZvcm1seVVzYWJpbGl0eVByb3ZpZGVyLCBmb3JtbHlBcGlDaGVjaykge1xuXHQgIHZhciBfdGhpczIgPSB0aGlzO1xuXG5cdCAgdmFyIHR5cGVNYXAgPSB7fTtcblx0ICB2YXIgdGVtcGxhdGVXcmFwcGVyc01hcCA9IHt9O1xuXHQgIHZhciBkZWZhdWx0V3JhcHBlck5hbWUgPSBcImRlZmF1bHRcIjtcblx0ICB2YXIgX3RoaXMgPSB0aGlzO1xuXHQgIHZhciBnZXRFcnJvciA9IGZvcm1seVVzYWJpbGl0eVByb3ZpZGVyLmdldEZvcm1seUVycm9yO1xuXG5cdCAgYW5ndWxhci5leHRlbmQodGhpcywge1xuXHQgICAgc2V0VHlwZTogc2V0VHlwZSxcblx0ICAgIGdldFR5cGU6IGdldFR5cGUsXG5cdCAgICBzZXRXcmFwcGVyOiBzZXRXcmFwcGVyLFxuXHQgICAgZ2V0V3JhcHBlcjogZ2V0V3JhcHBlcixcblx0ICAgIGdldFdyYXBwZXJCeVR5cGU6IGdldFdyYXBwZXJCeVR5cGUsXG5cdCAgICByZW1vdmVXcmFwcGVyQnlOYW1lOiByZW1vdmVXcmFwcGVyQnlOYW1lLFxuXHQgICAgcmVtb3ZlV3JhcHBlcnNGb3JUeXBlOiByZW1vdmVXcmFwcGVyc0ZvclR5cGUsXG5cdCAgICBkaXNhYmxlV2FybmluZ3M6IGZhbHNlLFxuXHQgICAgZXh0cmFzOiB7XG5cdCAgICAgIGRpc2FibGVOZ01vZGVsQXR0cnNNYW5pcHVsYXRvcjogZmFsc2UsXG5cdCAgICAgIG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yUHJlZmVyVW5ib3VuZDogZmFsc2UsXG5cdCAgICAgIHJlbW92ZUNocm9tZUF1dG9Db21wbGV0ZTogZmFsc2UsXG5cdCAgICAgIGRlZmF1bHRIaWRlRGlyZWN0aXZlOiBcIm5nLWlmXCIsXG5cdCAgICAgIGdldEZpZWxkSWQ6IG51bGxcblx0ICAgIH0sXG5cdCAgICB0ZW1wbGF0ZU1hbmlwdWxhdG9yczoge1xuXHQgICAgICBwcmVXcmFwcGVyOiBbXSxcblx0ICAgICAgcG9zdFdyYXBwZXI6IFtdXG5cdCAgICB9LFxuXHQgICAgJGdldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICByZXR1cm4gX3RoaXMyO1xuXHQgICAgfVxuXHQgIH0pO1xuXG5cdCAgZnVuY3Rpb24gc2V0VHlwZShvcHRpb25zKSB7XG5cdCAgICBpZiAoYW5ndWxhci5pc0FycmF5KG9wdGlvbnMpKSB7XG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaChvcHRpb25zLCBzZXRUeXBlKTtcblx0ICAgIH0gZWxzZSBpZiAoYW5ndWxhci5pc09iamVjdChvcHRpb25zKSkge1xuXHQgICAgICBjaGVja1R5cGUob3B0aW9ucyk7XG5cdCAgICAgIGlmIChvcHRpb25zW1wiZXh0ZW5kc1wiXSkge1xuXHQgICAgICAgIGV4dGVuZFR5cGVPcHRpb25zKG9wdGlvbnMpO1xuXHQgICAgICB9XG5cdCAgICAgIHR5cGVNYXBbb3B0aW9ucy5uYW1lXSA9IG9wdGlvbnM7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0aHJvdyBnZXRFcnJvcihcIllvdSBtdXN0IHByb3ZpZGUgYW4gb2JqZWN0IG9yIGFycmF5IGZvciBzZXRUeXBlLiBZb3UgcHJvdmlkZWQ6IFwiICsgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnRzKSk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tUeXBlKG9wdGlvbnMpIHtcblx0ICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oZm9ybWx5QXBpQ2hlY2suZm9ybWx5VHlwZU9wdGlvbnMsIG9wdGlvbnMsIHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seUNvbmZpZy5zZXRUeXBlXCIsXG5cdCAgICAgIHVybDogXCJzZXR0eXBlLXZhbGlkYXRpb24tZmFpbGVkXCJcblx0ICAgIH0pO1xuXHQgICAgaWYgKCFvcHRpb25zLm92ZXJ3cml0ZU9rKSB7XG5cdCAgICAgIGNoZWNrT3ZlcndyaXRlKG9wdGlvbnMubmFtZSwgdHlwZU1hcCwgb3B0aW9ucywgXCJ0eXBlc1wiKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMub3ZlcndyaXRlT2sgPSB1bmRlZmluZWQ7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZXh0ZW5kVHlwZU9wdGlvbnMob3B0aW9ucykge1xuXHQgICAgdmFyIGV4dGVuZHNUeXBlID0gZ2V0VHlwZShvcHRpb25zW1wiZXh0ZW5kc1wiXSwgdHJ1ZSwgb3B0aW9ucyk7XG5cdCAgICBleHRlbmRUeXBlQ29udHJvbGxlckZ1bmN0aW9uKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFR5cGVMaW5rRnVuY3Rpb24ob3B0aW9ucywgZXh0ZW5kc1R5cGUpO1xuXHQgICAgZXh0ZW5kVHlwZVZhbGlkYXRlT3B0aW9uc0Z1bmN0aW9uKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFR5cGVEZWZhdWx0T3B0aW9ucyhvcHRpb25zLCBleHRlbmRzVHlwZSk7XG5cdCAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICAgIGV4dGVuZFRlbXBsYXRlKG9wdGlvbnMsIGV4dGVuZHNUeXBlKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBleHRlbmRUZW1wbGF0ZShvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgaWYgKG9wdGlvbnMudGVtcGxhdGUgJiYgZXh0ZW5kc1R5cGUudGVtcGxhdGVVcmwpIHtcblx0ICAgICAgZGVsZXRlIG9wdGlvbnMudGVtcGxhdGVVcmw7XG5cdCAgICB9IGVsc2UgaWYgKG9wdGlvbnMudGVtcGxhdGVVcmwgJiYgZXh0ZW5kc1R5cGUudGVtcGxhdGUpIHtcblx0ICAgICAgZGVsZXRlIG9wdGlvbnMudGVtcGxhdGU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZXh0ZW5kVHlwZUNvbnRyb2xsZXJGdW5jdGlvbihvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNDdHJsID0gZXh0ZW5kc1R5cGUuY29udHJvbGxlcjtcblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZXh0ZW5kc0N0cmwpKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zQ3RybCA9IG9wdGlvbnMuY29udHJvbGxlcjtcblx0ICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zQ3RybCkpIHtcblx0ICAgICAgb3B0aW9ucy5jb250cm9sbGVyID0gZnVuY3Rpb24gKCRzY29wZSwgJGNvbnRyb2xsZXIpIHtcblx0ICAgICAgICAkY29udHJvbGxlcihleHRlbmRzQ3RybCwgeyAkc2NvcGU6ICRzY29wZSB9KTtcblx0ICAgICAgICAkY29udHJvbGxlcihvcHRpb25zQ3RybCwgeyAkc2NvcGU6ICRzY29wZSB9KTtcblx0ICAgICAgfTtcblx0ICAgICAgb3B0aW9ucy5jb250cm9sbGVyLiRpbmplY3QgPSBbXCIkc2NvcGVcIiwgXCIkY29udHJvbGxlclwiXTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMuY29udHJvbGxlciA9IGV4dGVuZHNDdHJsO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVMaW5rRnVuY3Rpb24ob3B0aW9ucywgZXh0ZW5kc1R5cGUpIHtcblx0ICAgIHZhciBleHRlbmRzRm4gPSBleHRlbmRzVHlwZS5saW5rO1xuXHQgICAgaWYgKCFhbmd1bGFyLmlzRGVmaW5lZChleHRlbmRzRm4pKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zRm4gPSBvcHRpb25zLmxpbms7XG5cdCAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9uc0ZuKSkge1xuXHQgICAgICBvcHRpb25zLmxpbmsgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZXh0ZW5kc0ZuLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcblx0ICAgICAgICBvcHRpb25zRm4uYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuXHQgICAgICB9O1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgb3B0aW9ucy5saW5rID0gZXh0ZW5kc0ZuO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVWYWxpZGF0ZU9wdGlvbnNGdW5jdGlvbihvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNGbiA9IGV4dGVuZHNUeXBlLnZhbGlkYXRlT3B0aW9ucztcblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZXh0ZW5kc0ZuKSkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICB2YXIgb3B0aW9uc0ZuID0gb3B0aW9ucy52YWxpZGF0ZU9wdGlvbnM7XG5cdCAgICB2YXIgb3JpZ2luYWxEZWZhdWx0T3B0aW9ucyA9IG9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG5cdCAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9uc0ZuKSkge1xuXHQgICAgICBvcHRpb25zLnZhbGlkYXRlT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG5cdCAgICAgICAgb3B0aW9uc0ZuKG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBtZXJnZWRPcHRpb25zID0gYW5ndWxhci5jb3B5KG9wdGlvbnMpO1xuXHQgICAgICAgIHZhciBkZWZhdWx0T3B0aW9ucyA9IG9yaWdpbmFsRGVmYXVsdE9wdGlvbnM7XG5cdCAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25zKSB7XG5cdCAgICAgICAgICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGRlZmF1bHRPcHRpb25zKSkge1xuXHQgICAgICAgICAgICBkZWZhdWx0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKG1lcmdlZE9wdGlvbnMpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdXRpbHMucmV2ZXJzZURlZXBNZXJnZShtZXJnZWRPcHRpb25zLCBkZWZhdWx0T3B0aW9ucyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGV4dGVuZHNGbihtZXJnZWRPcHRpb25zKTtcblx0ICAgICAgfTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIG9wdGlvbnMudmFsaWRhdGVPcHRpb25zID0gZXh0ZW5kc0ZuO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGV4dGVuZFR5cGVEZWZhdWx0T3B0aW9ucyhvcHRpb25zLCBleHRlbmRzVHlwZSkge1xuXHQgICAgdmFyIGV4dGVuZHNETyA9IGV4dGVuZHNUeXBlLmRlZmF1bHRPcHRpb25zO1xuXHQgICAgaWYgKCFhbmd1bGFyLmlzRGVmaW5lZChleHRlbmRzRE8pKSB7XG5cdCAgICAgIHJldHVybjtcblx0ICAgIH1cblx0ICAgIHZhciBvcHRpb25zRE8gPSBvcHRpb25zLmRlZmF1bHRPcHRpb25zO1xuXHQgICAgdmFyIG9wdGlvbnNET0lzRm4gPSBhbmd1bGFyLmlzRnVuY3Rpb24ob3B0aW9uc0RPKTtcblx0ICAgIHZhciBleHRlbmRzRE9Jc0ZuID0gYW5ndWxhci5pc0Z1bmN0aW9uKGV4dGVuZHNETyk7XG5cdCAgICBpZiAoZXh0ZW5kc0RPSXNGbikge1xuXHQgICAgICBvcHRpb25zLmRlZmF1bHRPcHRpb25zID0gZnVuY3Rpb24gZGVmYXVsdE9wdGlvbnMob3B0aW9ucykge1xuXHQgICAgICAgIHZhciBleHRlbmRzRGVmYXVsdE9wdGlvbnMgPSBleHRlbmRzRE8ob3B0aW9ucyk7XG5cdCAgICAgICAgdmFyIG1lcmdlZERlZmF1bHRPcHRpb25zID0ge307XG5cdCAgICAgICAgdXRpbHMucmV2ZXJzZURlZXBNZXJnZShtZXJnZWREZWZhdWx0T3B0aW9ucywgb3B0aW9ucywgZXh0ZW5kc0RlZmF1bHRPcHRpb25zKTtcblx0ICAgICAgICB2YXIgZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMgPSBvcHRpb25zRE87XG5cdCAgICAgICAgaWYgKG9wdGlvbnNET0lzRm4pIHtcblx0ICAgICAgICAgIGV4dGVuZGVyT3B0aW9uc0RlZmF1bHRPcHRpb25zID0gZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMobWVyZ2VkRGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICAgIH1cblx0ICAgICAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKGV4dGVuZHNEZWZhdWx0T3B0aW9ucywgZXh0ZW5kZXJPcHRpb25zRGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICAgIHJldHVybiBleHRlbmRzRGVmYXVsdE9wdGlvbnM7XG5cdCAgICAgIH07XG5cdCAgICB9IGVsc2UgaWYgKG9wdGlvbnNET0lzRm4pIHtcblx0ICAgICAgb3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA9IGZ1bmN0aW9uIGRlZmF1bHRPcHRpb25zKG9wdGlvbnMpIHtcblx0ICAgICAgICB2YXIgbmV3RGVmYXVsdE9wdGlvbnMgPSB7fTtcblx0ICAgICAgICB1dGlscy5yZXZlcnNlRGVlcE1lcmdlKG5ld0RlZmF1bHRPcHRpb25zLCBvcHRpb25zLCBleHRlbmRzRE8pO1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zRE8obmV3RGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICB9O1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFR5cGUobmFtZSwgdGhyb3dFcnJvciwgZXJyb3JDb250ZXh0KSB7XG5cdCAgICBpZiAoIW5hbWUpIHtcblx0ICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcblx0ICAgIH1cblx0ICAgIHZhciB0eXBlID0gdHlwZU1hcFtuYW1lXTtcblx0ICAgIGlmICghdHlwZSAmJiB0aHJvd0Vycm9yID09PSB0cnVlKSB7XG5cdCAgICAgIHRocm93IGdldEVycm9yKFwiVGhlcmUgaXMgbm8gdHlwZSBieSB0aGUgbmFtZSBvZiBcXFwiXCIgKyBuYW1lICsgXCJcXFwiOiBcIiArIEpTT04uc3RyaW5naWZ5KGVycm9yQ29udGV4dCkpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIHR5cGU7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gc2V0V3JhcHBlcihfeCwgX3gyKSB7XG5cdCAgICB2YXIgX2FnYWluID0gdHJ1ZTtcblxuXHQgICAgX2Z1bmN0aW9uOiB3aGlsZSAoX2FnYWluKSB7XG5cdCAgICAgIF9hZ2FpbiA9IGZhbHNlO1xuXHQgICAgICB2YXIgb3B0aW9ucyA9IF94LFxuXHQgICAgICAgICAgbmFtZSA9IF94MjtcblxuXHQgICAgICBpZiAoYW5ndWxhci5pc0FycmF5KG9wdGlvbnMpKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKGZ1bmN0aW9uICh3cmFwcGVyT3B0aW9ucykge1xuXHQgICAgICAgICAgcmV0dXJuIHNldFdyYXBwZXIod3JhcHBlck9wdGlvbnMpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNPYmplY3Qob3B0aW9ucykpIHtcblx0ICAgICAgICBvcHRpb25zLnR5cGVzID0gZ2V0T3B0aW9uc1R5cGVzKG9wdGlvbnMpO1xuXHQgICAgICAgIG9wdGlvbnMubmFtZSA9IGdldE9wdGlvbnNOYW1lKG9wdGlvbnMsIG5hbWUpO1xuXHQgICAgICAgIGNoZWNrV3JhcHBlckFQSShvcHRpb25zKTtcblx0ICAgICAgICB0ZW1wbGF0ZVdyYXBwZXJzTWFwW29wdGlvbnMubmFtZV0gPSBvcHRpb25zO1xuXHQgICAgICAgIHJldHVybiBvcHRpb25zO1xuXHQgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNTdHJpbmcob3B0aW9ucykpIHtcblx0ICAgICAgICBfeCA9IHtcblx0ICAgICAgICAgIHRlbXBsYXRlOiBvcHRpb25zLFxuXHQgICAgICAgICAgbmFtZTogbmFtZVxuXHQgICAgICAgIH07XG5cdCAgICAgICAgX2FnYWluID0gdHJ1ZTtcblx0ICAgICAgICBjb250aW51ZSBfZnVuY3Rpb247XG5cdCAgICAgIH1cblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRPcHRpb25zVHlwZXMob3B0aW9ucykge1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcob3B0aW9ucy50eXBlcykpIHtcblx0ICAgICAgcmV0dXJuIFtvcHRpb25zLnR5cGVzXTtcblx0ICAgIH1cblx0ICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy50eXBlcykpIHtcblx0ICAgICAgcmV0dXJuIFtdO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgcmV0dXJuIG9wdGlvbnMudHlwZXM7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0T3B0aW9uc05hbWUob3B0aW9ucywgbmFtZSkge1xuXHQgICAgcmV0dXJuIG9wdGlvbnMubmFtZSB8fCBuYW1lIHx8IG9wdGlvbnMudHlwZXMuam9pbihcIiBcIikgfHwgZGVmYXVsdFdyYXBwZXJOYW1lO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrV3JhcHBlckFQSShvcHRpb25zKSB7XG5cdCAgICBmb3JtbHlVc2FiaWxpdHlQcm92aWRlci5jaGVja1dyYXBwZXIob3B0aW9ucyk7XG5cdCAgICBpZiAob3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgICBmb3JtbHlVc2FiaWxpdHlQcm92aWRlci5jaGVja1dyYXBwZXJUZW1wbGF0ZShvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zKTtcblx0ICAgIH1cblx0ICAgIGlmICghb3B0aW9ucy5vdmVyd3JpdGVPaykge1xuXHQgICAgICBjaGVja092ZXJ3cml0ZShvcHRpb25zLm5hbWUsIHRlbXBsYXRlV3JhcHBlcnNNYXAsIG9wdGlvbnMsIFwidGVtcGxhdGVXcmFwcGVyc1wiKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICAgIGRlbGV0ZSBvcHRpb25zLm92ZXJ3cml0ZU9rO1xuXHQgICAgfVxuXHQgICAgY2hlY2tXcmFwcGVyVHlwZXMob3B0aW9ucyk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tXcmFwcGVyVHlwZXMob3B0aW9ucykge1xuXHQgICAgdmFyIHNob3VsZFRocm93ID0gIWFuZ3VsYXIuaXNBcnJheShvcHRpb25zLnR5cGVzKSB8fCAhb3B0aW9ucy50eXBlcy5ldmVyeShhbmd1bGFyLmlzU3RyaW5nKTtcblx0ICAgIGlmIChzaG91bGRUaHJvdykge1xuXHQgICAgICB0aHJvdyBnZXRFcnJvcihcIkF0dGVtcHRlZCB0byBjcmVhdGUgYSB0ZW1wbGF0ZSB3cmFwcGVyIHdpdGggdHlwZXMgdGhhdCBpcyBub3QgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5nc1wiKTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICBmdW5jdGlvbiBjaGVja092ZXJ3cml0ZShwcm9wZXJ0eSwgb2JqZWN0LCBuZXdWYWx1ZSwgb2JqZWN0TmFtZSkge1xuXHQgICAgaWYgKG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0ICAgICAgd2FybihbXCJBdHRlbXB0aW5nIHRvIG92ZXJ3cml0ZSBcIiArIHByb3BlcnR5ICsgXCIgb24gXCIgKyBvYmplY3ROYW1lICsgXCIgd2hpY2ggaXMgY3VycmVudGx5XCIsIFwiXCIgKyBKU09OLnN0cmluZ2lmeShvYmplY3RbcHJvcGVydHldKSArIFwiIHdpdGggXCIgKyBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSksIFwiVG8gc3VwcmVzcyB0aGlzIHdhcm5pbmcsIHNwZWNpZnkgdGhlIHByb3BlcnR5IFxcXCJvdmVyd3JpdGVPazogdHJ1ZVxcXCJcIl0uam9pbihcIiBcIikpO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFdyYXBwZXIobmFtZSkge1xuXHQgICAgcmV0dXJuIHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZSB8fCBkZWZhdWx0V3JhcHBlck5hbWVdO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldFdyYXBwZXJCeVR5cGUodHlwZSkge1xuXHQgICAgLyoganNoaW50IG1heGNvbXBsZXhpdHk6NiAqL1xuXHQgICAgdmFyIHdyYXBwZXJzID0gW107XG5cdCAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRlV3JhcHBlcnNNYXApIHtcblx0ICAgICAgaWYgKHRlbXBsYXRlV3JhcHBlcnNNYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcblx0ICAgICAgICBpZiAodGVtcGxhdGVXcmFwcGVyc01hcFtuYW1lXS50eXBlcyAmJiB0ZW1wbGF0ZVdyYXBwZXJzTWFwW25hbWVdLnR5cGVzLmluZGV4T2YodHlwZSkgIT09IC0xKSB7XG5cdCAgICAgICAgICB3cmFwcGVycy5wdXNoKHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZV0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXHQgICAgcmV0dXJuIHdyYXBwZXJzO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIHJlbW92ZVdyYXBwZXJCeU5hbWUobmFtZSkge1xuXHQgICAgdmFyIHdyYXBwZXIgPSB0ZW1wbGF0ZVdyYXBwZXJzTWFwW25hbWVdO1xuXHQgICAgZGVsZXRlIHRlbXBsYXRlV3JhcHBlcnNNYXBbbmFtZV07XG5cdCAgICByZXR1cm4gd3JhcHBlcjtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiByZW1vdmVXcmFwcGVyc0ZvclR5cGUodHlwZSkge1xuXHQgICAgdmFyIHdyYXBwZXJzID0gZ2V0V3JhcHBlckJ5VHlwZSh0eXBlKTtcblx0ICAgIGlmICghd3JhcHBlcnMpIHtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXHQgICAgaWYgKCFhbmd1bGFyLmlzQXJyYXkod3JhcHBlcnMpKSB7XG5cdCAgICAgIHJldHVybiByZW1vdmVXcmFwcGVyQnlOYW1lKHdyYXBwZXJzLm5hbWUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgd3JhcHBlcnMuZm9yRWFjaChmdW5jdGlvbiAod3JhcHBlcikge1xuXHQgICAgICAgIHJldHVybiByZW1vdmVXcmFwcGVyQnlOYW1lKHdyYXBwZXIubmFtZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gd3JhcHBlcnM7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gd2FybigpIHtcblx0ICAgIGlmICghX3RoaXMuZGlzYWJsZVdhcm5pbmdzKSB7XG5cdCAgICAgIGNvbnNvbGUud2Fybi5hcHBseShjb25zb2xlLCBhcmd1bWVudHMpO1xuXHQgICAgfVxuXHQgIH1cblx0fVxuXHRmb3JtbHlDb25maWcuJGluamVjdCA9IFtcImZvcm1seVVzYWJpbGl0eVByb3ZpZGVyXCIsIFwiZm9ybWx5QXBpQ2hlY2tcIl07XG5cbi8qKiovIH0sXG4vKiA2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seVZhbGlkYXRpb25NZXNzYWdlcztcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzKCkge1xuXG5cdCAgdmFyIHZhbGlkYXRpb25NZXNzYWdlcyA9IHtcblx0ICAgIGFkZFRlbXBsYXRlT3B0aW9uVmFsdWVNZXNzYWdlOiBhZGRUZW1wbGF0ZU9wdGlvblZhbHVlTWVzc2FnZSxcblx0ICAgIGFkZFN0cmluZ01lc3NhZ2U6IGFkZFN0cmluZ01lc3NhZ2UsXG5cdCAgICBtZXNzYWdlczoge31cblx0ICB9O1xuXG5cdCAgcmV0dXJuIHZhbGlkYXRpb25NZXNzYWdlcztcblxuXHQgIGZ1bmN0aW9uIGFkZFRlbXBsYXRlT3B0aW9uVmFsdWVNZXNzYWdlKG5hbWUsIHByb3AsIHByZWZpeCwgc3VmZml4LCBhbHRlcm5hdGUpIHtcblx0ICAgIHZhbGlkYXRpb25NZXNzYWdlcy5tZXNzYWdlc1tuYW1lXSA9IHRlbXBsYXRlT3B0aW9uVmFsdWUocHJvcCwgcHJlZml4LCBzdWZmaXgsIGFsdGVybmF0ZSk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gYWRkU3RyaW5nTWVzc2FnZShuYW1lLCBzdHJpbmcpIHtcblx0ICAgIHZhbGlkYXRpb25NZXNzYWdlcy5tZXNzYWdlc1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgcmV0dXJuIHN0cmluZztcblx0ICAgIH07XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gdGVtcGxhdGVPcHRpb25WYWx1ZShwcm9wLCBwcmVmaXgsIHN1ZmZpeCwgYWx0ZXJuYXRlKSB7XG5cdCAgICByZXR1cm4gZnVuY3Rpb24gZ2V0VmFsaWRhdGlvbk1lc3NhZ2Uodmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0pIHtcblx0ICAgICAgICByZXR1cm4gXCJcIiArIHByZWZpeCArIFwiIFwiICsgc2NvcGUub3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnNbcHJvcF0gKyBcIiBcIiArIHN1ZmZpeDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuXHQgICAgICB9XG5cdCAgICB9O1xuXHQgIH1cblx0fVxuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIHV0aWxzID0gX2ludGVyb3BSZXF1aXJlKF9fd2VicGFja19yZXF1aXJlX18oMTgpKTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZvcm1seVV0aWw7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGZvcm1seVV0aWwoKSB7XG5cdCAgcmV0dXJuIHV0aWxzO1xuXHR9XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX3RvQ29uc3VtYWJsZUFycmF5ID0gZnVuY3Rpb24gKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmb3JtbHlXYXJuO1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBmb3JtbHlXYXJuKGZvcm1seUNvbmZpZywgZm9ybWx5RXJyb3JBbmRXYXJuaW5nc1VybFByZWZpeCwgJGxvZykge1xuXHQgIHJldHVybiBmdW5jdGlvbiB3YXJuKCkge1xuXHQgICAgaWYgKCFmb3JtbHlDb25maWcuZGlzYWJsZVdhcm5pbmdzKSB7XG5cdCAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcblx0ICAgICAgdmFyIHdhcm5JbmZvU2x1ZyA9IGFyZ3Muc2hpZnQoKTtcblx0ICAgICAgYXJncy51bnNoaWZ0KFwiRm9ybWx5IFdhcm5pbmc6XCIpO1xuXHQgICAgICBhcmdzLnB1c2goXCJcIiArIGZvcm1seUVycm9yQW5kV2FybmluZ3NVcmxQcmVmaXggKyBcIlwiICsgd2FybkluZm9TbHVnKTtcblx0ICAgICAgJGxvZy53YXJuLmFwcGx5KCRsb2csIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICB9XG5cdCAgfTtcblx0fVxuXHRmb3JtbHlXYXJuLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdcIiwgXCJmb3JtbHlFcnJvckFuZFdhcm5pbmdzVXJsUHJlZml4XCIsIFwiJGxvZ1wiXTtcblxuLyoqKi8gfSxcbi8qIDkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbjtcblxuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Q3VzdG9tVmFsaWRhdGlvbihmb3JtbHlVdGlsLCAkcSkge1xuXHQgIHJldHVybiB7XG5cdCAgICByZXN0cmljdDogXCJBXCIsXG5cdCAgICByZXF1aXJlOiBcIm5nTW9kZWxcIixcblx0ICAgIGxpbms6IGZ1bmN0aW9uIGZvcm1seUN1c3RvbVZhbGlkYXRpb25MaW5rKHNjb3BlLCBlbCwgYXR0cnMsIGN0cmwpIHtcblx0ICAgICAgdmFyIG9wdHMgPSBzY29wZS5vcHRpb25zO1xuXHQgICAgICBpZiAob3B0cy52YWxpZGF0b3JzKSB7XG5cdCAgICAgICAgY2hlY2tWYWxpZGF0b3JzKG9wdHMudmFsaWRhdG9ycyk7XG5cdCAgICAgIH1cblx0ICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzID0gb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzIHx8IHt9O1xuXHQgICAgICBhbmd1bGFyLmZvckVhY2gob3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzLCBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzW2tleV0gPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBtZXNzYWdlLCBjdHJsLiRtb2RlbFZhbHVlLCBjdHJsLiR2aWV3VmFsdWUpO1xuXHQgICAgICAgIH07XG5cdCAgICAgIH0pO1xuXG5cdCAgICAgIHZhciB1c2VOZXdWYWxpZGF0b3JzQXBpID0gY3RybC5oYXNPd25Qcm9wZXJ0eShcIiR2YWxpZGF0b3JzXCIpICYmICFhdHRycy5oYXNPd25Qcm9wZXJ0eShcInVzZVBhcnNlcnNcIik7XG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaChvcHRzLnZhbGlkYXRvcnMsIGZ1bmN0aW9uIGFkZFZhbGlkYXRvclRvUGlwZWxpbmUodmFsaWRhdG9yLCBuYW1lKSB7XG5cdCAgICAgICAgdmFyIG1lc3NhZ2UgPSB2YWxpZGF0b3IubWVzc2FnZTtcblx0ICAgICAgICBpZiAobWVzc2FnZSkge1xuXHQgICAgICAgICAgb3B0cy52YWxpZGF0aW9uLm1lc3NhZ2VzW25hbWVdID0gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBtZXNzYWdlLCBjdHJsLiRtb2RlbFZhbHVlLCBjdHJsLiR2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgdmFsaWRhdG9yID0gYW5ndWxhci5pc09iamVjdCh2YWxpZGF0b3IpID8gdmFsaWRhdG9yLmV4cHJlc3Npb24gOiB2YWxpZGF0b3I7XG5cdCAgICAgICAgdmFyIGlzUG9zc2libHlBc3luYyA9ICFhbmd1bGFyLmlzU3RyaW5nKHZhbGlkYXRvcik7XG5cdCAgICAgICAgaWYgKHVzZU5ld1ZhbGlkYXRvcnNBcGkpIHtcblx0ICAgICAgICAgIHNldHVwV2l0aFZhbGlkYXRvcnMoKTtcblx0ICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgc2V0dXBXaXRoUGFyc2VycygpO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIGZ1bmN0aW9uIHNldHVwV2l0aFZhbGlkYXRvcnMoKSB7XG5cdCAgICAgICAgICB2YXIgdmFsaWRhdG9yQ29sbGVjdGlvbiA9IGlzUG9zc2libHlBc3luYyA/IFwiJGFzeW5jVmFsaWRhdG9yc1wiIDogXCIkdmFsaWRhdG9yc1wiO1xuXHQgICAgICAgICAgY3RybFt2YWxpZGF0b3JDb2xsZWN0aW9uXVtuYW1lXSA9IGZ1bmN0aW9uIGV2YWxWYWxpZGl0eShtb2RlbFZhbHVlLCB2aWV3VmFsdWUpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbHVlID0gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCB2YWxpZGF0b3IsIG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSk7XG5cdCAgICAgICAgICAgIGlmIChpc1Bvc3NpYmx5QXN5bmMpIHtcblx0ICAgICAgICAgICAgICByZXR1cm4gaXNQcm9taXNlTGlrZSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gJHEud2hlbih2YWx1ZSkgOiAkcS5yZWplY3QodmFsdWUpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBzZXR1cFdpdGhQYXJzZXJzKCkge1xuXHQgICAgICAgICAgdmFyIGluRmxpZ2h0VmFsaWRhdG9yID0gdW5kZWZpbmVkO1xuXHQgICAgICAgICAgY3RybC4kcGFyc2Vycy51bnNoaWZ0KGZ1bmN0aW9uIGV2YWxWYWxpZGl0eU9mUGFyc2VyKHZpZXdWYWx1ZSkge1xuXHQgICAgICAgICAgICB2YXIgaXNWYWxpZCA9IGZvcm1seVV0aWwuZm9ybWx5RXZhbChzY29wZSwgdmFsaWRhdG9yLCBjdHJsLiRtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgICBpZiAoaXNQcm9taXNlTGlrZShpc1ZhbGlkKSkge1xuXHQgICAgICAgICAgICAgIGN0cmwuJHBlbmRpbmcgPSBjdHJsLiRwZW5kaW5nIHx8IHt9O1xuXHQgICAgICAgICAgICAgIGN0cmwuJHBlbmRpbmdbbmFtZV0gPSB0cnVlO1xuXHQgICAgICAgICAgICAgIGluRmxpZ2h0VmFsaWRhdG9yID0gaXNWYWxpZDtcblx0ICAgICAgICAgICAgICBpc1ZhbGlkLnRoZW4oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGluRmxpZ2h0VmFsaWRhdG9yID09PSBpc1ZhbGlkKSB7XG5cdCAgICAgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIHRydWUpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKGluRmxpZ2h0VmFsaWRhdG9yID09PSBpc1ZhbGlkKSB7XG5cdCAgICAgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIGZhbHNlKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICB9KVtcImZpbmFsbHlcIl0oZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGN0cmwuJHBlbmRpbmcpLmxlbmd0aCA9PT0gMSkge1xuXHQgICAgICAgICAgICAgICAgICBkZWxldGUgY3RybC4kcGVuZGluZztcblx0ICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjdHJsLiRwZW5kaW5nW25hbWVdO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgIGN0cmwuJHNldFZhbGlkaXR5KG5hbWUsIGlzVmFsaWQpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIHJldHVybiB2aWV3VmFsdWU7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH07XG5cblx0ICBmdW5jdGlvbiBpc1Byb21pc2VMaWtlKG9iaikge1xuXHQgICAgcmV0dXJuIG9iaiAmJiBhbmd1bGFyLmlzRnVuY3Rpb24ob2JqLnRoZW4pO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGNoZWNrVmFsaWRhdG9ycyh2YWxpZGF0b3JzKSB7XG5cdCAgICB2YXIgYWxsb3dlZFByb3BlcnRpZXMgPSBbXCJleHByZXNzaW9uXCIsIFwibWVzc2FnZVwiXTtcblx0ICAgIHZhciB2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHMgPSB7fTtcblx0ICAgIGFuZ3VsYXIuZm9yRWFjaCh2YWxpZGF0b3JzLCBmdW5jdGlvbiAodmFsaWRhdG9yLCBuYW1lKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzU3RyaW5nKHZhbGlkYXRvcikpIHtcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIGV4dHJhUHJvcHMgPSBbXTtcblx0ICAgICAgYW5ndWxhci5mb3JFYWNoKHZhbGlkYXRvciwgZnVuY3Rpb24gKHYsIGtleSkge1xuXHQgICAgICAgIGlmIChhbGxvd2VkUHJvcGVydGllcy5pbmRleE9mKGtleSkgPT09IC0xKSB7XG5cdCAgICAgICAgICBleHRyYVByb3BzLnB1c2goa2V5KTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgICBpZiAoZXh0cmFQcm9wcy5sZW5ndGgpIHtcblx0ICAgICAgICB2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHNbbmFtZV0gPSBleHRyYVByb3BzO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICAgIGlmIChPYmplY3Qua2V5cyh2YWxpZGF0b3JzV2l0aEV4dHJhUHJvcHMpLmxlbmd0aCkge1xuXHQgICAgICB0aHJvdyBuZXcgRXJyb3IoW1wiVmFsaWRhdG9ycyBhcmUgb25seSBhbGxvd2VkIHRvIGJlIGZ1bmN0aW9ucyBvciBvYmplY3RzIHRoYXQgaGF2ZSBcIiArIGFsbG93ZWRQcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKSArIFwiLlwiLCBcIllvdSBwcm92aWRlZCBzb21lIGV4dHJhIHByb3BlcnRpZXM6IFwiICsgSlNPTi5zdHJpbmdpZnkodmFsaWRhdG9yc1dpdGhFeHRyYVByb3BzKV0uam9pbihcIiBcIikpO1xuXHQgICAgfVxuXHQgIH1cblx0fVxuXHRmb3JtbHlDdXN0b21WYWxpZGF0aW9uLiRpbmplY3QgPSBbXCJmb3JtbHlVdGlsXCIsIFwiJHFcIl07XG5cbi8qKiovIH0sXG4vKiAxMCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5RmllbGQ7XG5cblx0LyoqXG5cdCAqIEBuZ2RvYyBkaXJlY3RpdmVcblx0ICogQG5hbWUgZm9ybWx5RmllbGRcblx0ICogQHJlc3RyaWN0IEFFXG5cdCAqL1xuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5RmllbGQoJGh0dHAsICRxLCAkY29tcGlsZSwgJHRlbXBsYXRlQ2FjaGUsIGZvcm1seUNvbmZpZywgZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzLCBmb3JtbHlBcGlDaGVjaywgZm9ybWx5VXRpbCwgZm9ybWx5VXNhYmlsaXR5LCBmb3JtbHlXYXJuKSB7XG5cdCAgdmFyIGFycmF5aWZ5ID0gZm9ybWx5VXRpbC5hcnJheWlmeTtcblxuXHQgIEZvcm1seUZpZWxkQ29udHJvbGxlci4kaW5qZWN0ID0gW1wiJHNjb3BlXCIsIFwiJHRpbWVvdXRcIiwgXCIkcGFyc2VcIiwgXCIkY29udHJvbGxlclwiXTtcblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiQUVcIixcblx0ICAgIHRyYW5zY2x1ZGU6IHRydWUsXG5cdCAgICBzY29wZToge1xuXHQgICAgICBvcHRpb25zOiBcIj1cIixcblx0ICAgICAgbW9kZWw6IFwiPVwiLFxuXHQgICAgICBmb3JtSWQ6IFwiQFwiLCAvLyBUT0RPIHJlbW92ZSBmb3JtSWQgaW4gYSBicmVha2luZyByZWxlYXNlXG5cdCAgICAgIGluZGV4OiBcIj0/XCIsXG5cdCAgICAgIGZpZWxkczogXCI9P1wiLFxuXHQgICAgICBmb3JtU3RhdGU6IFwiPT9cIixcblx0ICAgICAgZm9ybTogXCI9P1wiIC8vIFRPRE8gcmVxdWlyZSBmb3JtIGluIGEgYnJlYWtpbmcgcmVsZWFzZVxuXHQgICAgfSxcblx0ICAgIGNvbnRyb2xsZXI6IEZvcm1seUZpZWxkQ29udHJvbGxlcixcblx0ICAgIGxpbms6IGZpZWxkTGlua1xuXHQgIH07XG5cblx0ICAvLyBAbmdJbmplY3Rcblx0ICBmdW5jdGlvbiBGb3JtbHlGaWVsZENvbnRyb2xsZXIoJHNjb3BlLCAkdGltZW91dCwgJHBhcnNlLCAkY29udHJvbGxlcikge1xuXHQgICAgLyoganNoaW50IG1heHN0YXRlbWVudHM6MzEgKi9cblx0ICAgIGlmICgkc2NvcGUub3B0aW9ucy5maWVsZEdyb3VwKSB7XG5cdCAgICAgIHNldHVwRmllbGRHcm91cCgpO1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cblx0ICAgIHZhciBmaWVsZFR5cGUgPSBnZXRGaWVsZFR5cGUoJHNjb3BlLm9wdGlvbnMpO1xuXHQgICAgc2ltcGxpZnlMaWZlKCRzY29wZS5vcHRpb25zKTtcblx0ICAgIG1lcmdlRmllbGRPcHRpb25zV2l0aFR5cGVEZWZhdWx0cygkc2NvcGUub3B0aW9ucywgZmllbGRUeXBlKTtcblx0ICAgIGV4dGVuZE9wdGlvbnNXaXRoRGVmYXVsdHMoJHNjb3BlLm9wdGlvbnMsICRzY29wZS5pbmRleCk7XG5cdCAgICBjaGVja0FwaSgkc2NvcGUub3B0aW9ucyk7XG5cdCAgICAvLyBzZXQgZmllbGQgaWQgdG8gbGluayBsYWJlbHMgYW5kIGZpZWxkc1xuXG5cdCAgICAvLyBpbml0YWxpemF0aW9uXG5cdCAgICBzZXRGaWVsZElkKCk7XG5cdCAgICBzZXREZWZhdWx0VmFsdWUoKTtcblx0ICAgIHNldEluaXRpYWxWYWx1ZSgpO1xuXHQgICAgcnVuRXhwcmVzc2lvbnMoKTtcblx0ICAgIGFkZE1vZGVsV2F0Y2hlcigkc2NvcGUsICRzY29wZS5vcHRpb25zKTtcblx0ICAgIGFkZFZhbGlkYXRpb25NZXNzYWdlcygkc2NvcGUub3B0aW9ucyk7XG5cdCAgICBpbnZva2VDb250cm9sbGVycygkc2NvcGUsICRzY29wZS5vcHRpb25zLCBmaWVsZFR5cGUpO1xuXG5cdCAgICAvLyBmdW5jdGlvbiBkZWZpbml0aW9uc1xuXHQgICAgZnVuY3Rpb24gcnVuRXhwcmVzc2lvbnMoKSB7XG5cdCAgICAgIC8vIG11c3QgcnVuIG9uIG5leHQgdGljayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgY3VycmVudCB2YWx1ZSBpcyBjb3JyZWN0LlxuXHQgICAgICAkdGltZW91dChmdW5jdGlvbiBydW5FeHByZXNzaW9uc09uTmV4dFRpY2soKSB7XG5cdCAgICAgICAgdmFyIGZpZWxkID0gJHNjb3BlLm9wdGlvbnM7XG5cdCAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlR2V0dGVyU2V0dGVyKCk7XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLCBmdW5jdGlvbiBydW5FeHByZXNzaW9uKGV4cHJlc3Npb24sIHByb3ApIHtcblx0ICAgICAgICAgIHZhciBzZXR0ZXIgPSAkcGFyc2UocHJvcCkuYXNzaWduO1xuXHQgICAgICAgICAgdmFyIHByb21pc2UgPSAkcS53aGVuKGZvcm1seVV0aWwuZm9ybWx5RXZhbCgkc2NvcGUsIGV4cHJlc3Npb24sIGN1cnJlbnRWYWx1ZSkpO1xuXHQgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uIHNldEZpZWxkVmFsdWUodmFsdWUpIHtcblx0ICAgICAgICAgICAgc2V0dGVyKGZpZWxkLCB2YWx1ZSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHZhbHVlR2V0dGVyU2V0dGVyKG5ld1ZhbCkge1xuXHQgICAgICBpZiAoISRzY29wZS5tb2RlbCB8fCAhJHNjb3BlLm9wdGlvbnMua2V5KSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChuZXdWYWwpKSB7XG5cdCAgICAgICAgJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0gPSBuZXdWYWw7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuICRzY29wZS5tb2RlbFskc2NvcGUub3B0aW9ucy5rZXldO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzaW1wbGlmeUxpZmUob3B0aW9ucykge1xuXHQgICAgICAvLyBhZGQgYSBmZXcgZW1wdHkgb2JqZWN0cyAoaWYgdGhleSBkb24ndCBhbHJlYWR5IGV4aXN0KSBzbyB5b3UgZG9uJ3QgaGF2ZSB0byB1bmRlZmluZWQgY2hlY2sgZXZlcnl3aGVyZVxuXHQgICAgICBmb3JtbHlVdGlsLnJldmVyc2VEZWVwTWVyZ2Uob3B0aW9ucywge1xuXHQgICAgICAgIGRhdGE6IHt9LFxuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge30sXG5cdCAgICAgICAgdmFsaWRhdGlvbjoge31cblx0ICAgICAgfSk7XG5cdCAgICAgIC8vIGNyZWF0ZSAkc2NvcGUudG8gc28gdGVtcGxhdGUgYXV0aG9ycyBjYW4gcmVmZXJlbmNlIHRvIGluc3RlYWQgb2YgJHNjb3BlLm9wdGlvbnMudGVtcGxhdGVPcHRpb25zXG5cdCAgICAgICRzY29wZS50byA9ICRzY29wZS5vcHRpb25zLnRlbXBsYXRlT3B0aW9ucztcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gc2V0RmllbGRJZCgpIHtcblx0ICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihmb3JtbHlDb25maWcuZXh0cmFzLmdldEZpZWxkSWQpKSB7XG5cdCAgICAgICAgJHNjb3BlLmlkID0gZm9ybWx5Q29uZmlnLmV4dHJhcy5nZXRGaWVsZElkKCRzY29wZS5vcHRpb25zLCAkc2NvcGUubW9kZWwsICRzY29wZSk7XG5cdCAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgdmFyIGZvcm1OYW1lID0gJHNjb3BlLmZvcm0gJiYgJHNjb3BlLmZvcm0uJG5hbWUgfHwgJHNjb3BlLmZvcm1JZDtcblx0ICAgICAgICAkc2NvcGUuaWQgPSBmb3JtbHlVdGlsLmdldEZpZWxkSWQoZm9ybU5hbWUsICRzY29wZS5vcHRpb25zLCAkc2NvcGUuaW5kZXgpO1xuXHQgICAgICB9XG5cdCAgICAgICRzY29wZS5vcHRpb25zLmlkID0gJHNjb3BlLmlkO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWUoKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZCgkc2NvcGUub3B0aW9ucy5kZWZhdWx0VmFsdWUpICYmICFhbmd1bGFyLmlzRGVmaW5lZCgkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XSkpIHtcblx0ICAgICAgICAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XSA9ICRzY29wZS5vcHRpb25zLmRlZmF1bHRWYWx1ZTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXRJbml0aWFsVmFsdWUoKSB7XG5cdCAgICAgICRzY29wZS5vcHRpb25zLmluaXRpYWxWYWx1ZSA9ICRzY29wZS5tb2RlbCAmJiAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gbWVyZ2VGaWVsZE9wdGlvbnNXaXRoVHlwZURlZmF1bHRzKG9wdGlvbnMsIHR5cGUpIHtcblx0ICAgICAgaWYgKHR5cGUpIHtcblx0ICAgICAgICBtZXJnZU9wdGlvbnMob3B0aW9ucywgdHlwZS5kZWZhdWx0T3B0aW9ucyk7XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHByb3Blck9yZGVyID0gYXJyYXlpZnkob3B0aW9ucy5vcHRpb25zVHlwZXMpLnJldmVyc2UoKTsgLy8gc28gdGhlIHJpZ2h0IHRoaW5ncyBhcmUgb3ZlcnJpZGRlblxuXHQgICAgICBhbmd1bGFyLmZvckVhY2gocHJvcGVyT3JkZXIsIGZ1bmN0aW9uICh0eXBlTmFtZSkge1xuXHQgICAgICAgIG1lcmdlT3B0aW9ucyhvcHRpb25zLCBmb3JtbHlDb25maWcuZ2V0VHlwZSh0eXBlTmFtZSwgdHJ1ZSwgb3B0aW9ucykuZGVmYXVsdE9wdGlvbnMpO1xuXHQgICAgICB9KTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gbWVyZ2VPcHRpb25zKG9wdGlvbnMsIGV4dHJhT3B0aW9ucykge1xuXHQgICAgICBpZiAoZXh0cmFPcHRpb25zKSB7XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbihleHRyYU9wdGlvbnMpKSB7XG5cdCAgICAgICAgICBleHRyYU9wdGlvbnMgPSBleHRyYU9wdGlvbnMob3B0aW9ucyk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGZvcm1seVV0aWwucmV2ZXJzZURlZXBNZXJnZShvcHRpb25zLCBleHRyYU9wdGlvbnMpO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGV4dGVuZE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucywgaW5kZXgpIHtcblx0ICAgICAgdmFyIGtleSA9IG9wdGlvbnMua2V5IHx8IGluZGV4IHx8IDA7XG5cdCAgICAgIGFuZ3VsYXIuZXh0ZW5kKG9wdGlvbnMsIHtcblx0ICAgICAgICAvLyBhdHRhY2ggdGhlIGtleSBpbiBjYXNlIHRoZSBmb3JtbHktZmllbGQgZGlyZWN0aXZlIGlzIHVzZWQgZGlyZWN0bHlcblx0ICAgICAgICBrZXk6IGtleSxcblx0ICAgICAgICB2YWx1ZTogdmFsdWVHZXR0ZXJTZXR0ZXIsXG5cdCAgICAgICAgcnVuRXhwcmVzc2lvbnM6IHJ1bkV4cHJlc3Npb25zLFxuXHQgICAgICAgIHJlc2V0TW9kZWw6IHJlc2V0TW9kZWwsXG5cdCAgICAgICAgdXBkYXRlSW5pdGlhbFZhbHVlOiB1cGRhdGVJbml0aWFsVmFsdWVcblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIC8vIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uc1xuXHQgICAgZnVuY3Rpb24gYWRkTW9kZWxXYXRjaGVyKHNjb3BlLCBvcHRpb25zKSB7XG5cdCAgICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG5cdCAgICAgICAgc2NvcGUuJHdhdGNoKFwib3B0aW9ucy5tb2RlbFwiLCBydW5FeHByZXNzaW9ucywgdHJ1ZSk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcmVzZXRNb2RlbCgpIHtcblx0ICAgICAgJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0gPSAkc2NvcGUub3B0aW9ucy5pbml0aWFsVmFsdWU7XG5cdCAgICAgIGlmICgkc2NvcGUub3B0aW9ucy5mb3JtQ29udHJvbCkge1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zLmZvcm1Db250cm9sLiRzZXRWaWV3VmFsdWUoJHNjb3BlLm1vZGVsWyRzY29wZS5vcHRpb25zLmtleV0pO1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zLmZvcm1Db250cm9sLiRyZW5kZXIoKTtcblx0ICAgICAgICAkc2NvcGUub3B0aW9ucy5mb3JtQ29udHJvbC4kc2V0VW50b3VjaGVkKCk7XG5cdCAgICAgICAgJHNjb3BlLm9wdGlvbnMuZm9ybUNvbnRyb2wuJHNldFByaXN0aW5lKCk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gdXBkYXRlSW5pdGlhbFZhbHVlKCkge1xuXHQgICAgICAkc2NvcGUub3B0aW9ucy5pbml0aWFsVmFsdWUgPSAkc2NvcGUubW9kZWxbJHNjb3BlLm9wdGlvbnMua2V5XTtcblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gYWRkVmFsaWRhdGlvbk1lc3NhZ2VzKG9wdGlvbnMpIHtcblx0ICAgICAgb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzID0gb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzIHx8IHt9O1xuXHQgICAgICBhbmd1bGFyLmZvckVhY2goZm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VzLm1lc3NhZ2VzLCBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbkZvck1lc3NhZ2UoZXhwcmVzc2lvbiwgbmFtZSkge1xuXHQgICAgICAgIGlmICghb3B0aW9ucy52YWxpZGF0aW9uLm1lc3NhZ2VzW25hbWVdKSB7XG5cdCAgICAgICAgICBvcHRpb25zLnZhbGlkYXRpb24ubWVzc2FnZXNbbmFtZV0gPSBmdW5jdGlvbiBldmFsdWF0ZU1lc3NhZ2Uodmlld1ZhbHVlLCBtb2RlbFZhbHVlLCBzY29wZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBleHByZXNzaW9uLCBtb2RlbFZhbHVlLCB2aWV3VmFsdWUpO1xuXHQgICAgICAgICAgfTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBpbnZva2VDb250cm9sbGVycyhzY29wZSkge1xuXHQgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG5cdCAgICAgIHZhciB0eXBlID0gYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1syXTtcblxuXHQgICAgICBhbmd1bGFyLmZvckVhY2goW3R5cGUuY29udHJvbGxlciwgb3B0aW9ucy5jb250cm9sbGVyXSwgZnVuY3Rpb24gKGNvbnRyb2xsZXIpIHtcblx0ICAgICAgICBpZiAoY29udHJvbGxlcikge1xuXHQgICAgICAgICAgJGNvbnRyb2xsZXIoY29udHJvbGxlciwgeyAkc2NvcGU6IHNjb3BlIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHNldHVwRmllbGRHcm91cCgpIHtcblx0ICAgICAgJHNjb3BlLm9wdGlvbnMub3B0aW9ucyA9ICRzY29wZS5vcHRpb25zLm9wdGlvbnMgfHwge307XG5cdCAgICAgICRzY29wZS5vcHRpb25zLm9wdGlvbnMuZm9ybVN0YXRlID0gJHNjb3BlLmZvcm1TdGF0ZTtcblx0ICAgIH1cblx0ICB9XG5cblx0ICAvLyBsaW5rIGZ1bmN0aW9uXG5cdCAgZnVuY3Rpb24gZmllbGRMaW5rKHNjb3BlLCBlbCkge1xuXHQgICAgaWYgKHNjb3BlLm9wdGlvbnMuZmllbGRHcm91cCkge1xuXHQgICAgICBzZXRGaWVsZEdyb3VwVGVtcGxhdGUoKTtcblx0ICAgICAgcmV0dXJuO1xuXHQgICAgfVxuXG5cdCAgICBhZGRBdHRyaWJ1dGVzKCk7XG5cdCAgICBhZGRDbGFzc2VzKCk7XG5cblx0ICAgIHZhciB0eXBlID0gZ2V0RmllbGRUeXBlKHNjb3BlLm9wdGlvbnMpO1xuXHQgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG5cdCAgICB2YXIgdGh1c2x5ID0gdGhpcztcblx0ICAgIGdldEZpZWxkVGVtcGxhdGUoc2NvcGUub3B0aW9ucykudGhlbihydW5NYW5pcHVsYXRvcnMoZm9ybWx5Q29uZmlnLnRlbXBsYXRlTWFuaXB1bGF0b3JzLnByZVdyYXBwZXIpKS50aGVuKHRyYW5zY2x1ZGVJbldyYXBwZXJzKHNjb3BlLm9wdGlvbnMpKS50aGVuKHJ1bk1hbmlwdWxhdG9ycyhmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucG9zdFdyYXBwZXIpKS50aGVuKHNldEVsZW1lbnRUZW1wbGF0ZSkudGhlbih3YXRjaEZvcm1Db250cm9sKS50aGVuKGNhbGxMaW5rRnVuY3Rpb25zKVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnJvcikge1xuXHQgICAgICBmb3JtbHlXYXJuKFwidGhlcmUtd2FzLWEtcHJvYmxlbS1zZXR0aW5nLXRoZS10ZW1wbGF0ZS1mb3ItdGhpcy1maWVsZFwiLCBcIlRoZXJlIHdhcyBhIHByb2JsZW0gc2V0dGluZyB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgZmllbGQgXCIsIHNjb3BlLm9wdGlvbnMsIGVycm9yKTtcblx0ICAgIH0pO1xuXG5cdCAgICBmdW5jdGlvbiBzZXRGaWVsZEdyb3VwVGVtcGxhdGUoKSB7XG5cdCAgICAgIGNoZWNrRmllbGRHcm91cEFwaShzY29wZS5vcHRpb25zKTtcblx0ICAgICAgZWwuYWRkQ2xhc3MoXCJmb3JtbHktZmllbGQtZ3JvdXBcIik7XG5cdCAgICAgIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBcIlwiO1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5lbGVtZW50QXR0cmlidXRlcykge1xuXHQgICAgICAgIGV4dHJhQXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKHNjb3BlLm9wdGlvbnMuZWxlbWVudEF0dHJpYnV0ZXMpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdCAgICAgICAgICByZXR1cm4gXCJcIiArIGtleSArIFwiPVxcXCJcIiArIHNjb3BlLm9wdGlvbnMuZWxlbWVudEF0dHJpYnV0ZXNba2V5XSArIFwiXFxcIlwiO1xuXHQgICAgICAgIH0pLmpvaW4oXCIgXCIpO1xuXHQgICAgICB9XG5cdCAgICAgIHNldEVsZW1lbnRUZW1wbGF0ZShcIlxcbiAgICAgICAgICA8Zm9ybWx5LWZvcm0gbW9kZWw9XFxcIm1vZGVsXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzPVxcXCJvcHRpb25zLmZpZWxkR3JvdXBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPVxcXCJvcHRpb25zLm9wdGlvbnNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBmb3JtPVxcXCJvcHRpb25zLmZvcm1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiXCIgKyBzY29wZS5vcHRpb25zLmNsYXNzTmFtZSArIFwiXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgXCIgKyBleHRyYUF0dHJpYnV0ZXMgKyBcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgaXMtZmllbGQtZ3JvdXA+XFxuICAgICAgICAgIDwvZm9ybWx5LWZvcm0+XFxuICAgICAgICBcIik7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGFkZEF0dHJpYnV0ZXMoKSB7XG5cdCAgICAgIGlmIChzY29wZS5vcHRpb25zLmVsZW1lbnRBdHRyaWJ1dGVzKSB7XG5cdCAgICAgICAgZWwuYXR0cihzY29wZS5vcHRpb25zLmVsZW1lbnRBdHRyaWJ1dGVzKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBhZGRDbGFzc2VzKCkge1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5jbGFzc05hbWUpIHtcblx0ICAgICAgICBlbC5hZGRDbGFzcyhzY29wZS5vcHRpb25zLmNsYXNzTmFtZSk7XG5cdCAgICAgIH1cblx0ICAgICAgaWYgKHNjb3BlLm9wdGlvbnMudHlwZSkge1xuXHQgICAgICAgIGVsLmFkZENsYXNzKFwiZm9ybWx5LWZpZWxkLVwiICsgc2NvcGUub3B0aW9ucy50eXBlKTtcblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBzZXRFbGVtZW50VGVtcGxhdGUodGVtcGxhdGVTdHJpbmcpIHtcblx0ICAgICAgZWwuaHRtbChhc0h0bWwodGVtcGxhdGVTdHJpbmcpKTtcblx0ICAgICAgJGNvbXBpbGUoZWwuY29udGVudHMoKSkoc2NvcGUpO1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGVTdHJpbmc7XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIHdhdGNoRm9ybUNvbnRyb2wodGVtcGxhdGVTdHJpbmcpIHtcblx0ICAgICAgdmFyIHN0b3BXYXRjaGluZ0ZpZWxkID0gYW5ndWxhci5ub29wO1xuXHQgICAgICB2YXIgc3RvcFdhdGNoaW5nU2hvd0Vycm9yID0gYW5ndWxhci5ub29wO1xuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5ub0Zvcm1Db250cm9sKSB7XG5cdCAgICAgICAgcmV0dXJuO1xuXHQgICAgICB9XG5cdCAgICAgIHZhciB0ZW1wbGF0ZUVsID0gYW5ndWxhci5lbGVtZW50KFwiPGRpdj5cIiArIHRlbXBsYXRlU3RyaW5nICsgXCI8L2Rpdj5cIik7XG5cdCAgICAgIHZhciBuZ01vZGVsTm9kZSA9IHRlbXBsYXRlRWxbMF0ucXVlcnlTZWxlY3RvcihcIltuZy1tb2RlbF0sW2RhdGEtbmctbW9kZWxdXCIpO1xuXHQgICAgICBpZiAobmdNb2RlbE5vZGUgJiYgbmdNb2RlbE5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSkge1xuXHQgICAgICAgIHdhdGNoRmllbGROYW1lT3JFeGlzdGVuY2UobmdNb2RlbE5vZGUuZ2V0QXR0cmlidXRlKFwibmFtZVwiKSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiB3YXRjaEZpZWxkTmFtZU9yRXhpc3RlbmNlKG5hbWUpIHtcblx0ICAgICAgICB2YXIgbmFtZUV4cHJlc3Npb25SZWdleCA9IC9cXHtcXHsoLio/KX19Lztcblx0ICAgICAgICB2YXIgbmFtZUV4cHJlc3Npb24gPSBuYW1lRXhwcmVzc2lvblJlZ2V4LmV4ZWMobmFtZSk7XG5cdCAgICAgICAgaWYgKG5hbWVFeHByZXNzaW9uKSB7XG5cdCAgICAgICAgICB3YXRjaEZpZWxkTmFtZShuYW1lRXhwcmVzc2lvblsxXSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHdhdGNoRmllbGRFeGlzdGVuY2UobmFtZSk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gd2F0Y2hGaWVsZE5hbWUoZXhwcmVzc2lvbikge1xuXHQgICAgICAgIHNjb3BlLiR3YXRjaChleHByZXNzaW9uLCBmdW5jdGlvbiBvbmVGaWVsZE5hbWVDaGFuZ2UobmFtZSkge1xuXHQgICAgICAgICAgaWYgKG5hbWUpIHtcblx0ICAgICAgICAgICAgc3RvcFdhdGNoaW5nRmllbGQoKTtcblx0ICAgICAgICAgICAgd2F0Y2hGaWVsZEV4aXN0ZW5jZShuYW1lKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHdhdGNoRmllbGRFeGlzdGVuY2UobmFtZSkge1xuXHQgICAgICAgIHN0b3BXYXRjaGluZ0ZpZWxkID0gc2NvcGUuJHdhdGNoKFwiZm9ybVtcXFwiXCIgKyBuYW1lICsgXCJcXFwiXVwiLCBmdW5jdGlvbiBmb3JtQ29udHJvbENoYW5nZShmb3JtQ29udHJvbCkge1xuXHQgICAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG5cdCAgICAgICAgICAgIHNjb3BlLmZjID0gZm9ybUNvbnRyb2w7IC8vIHNob3J0Y3V0IGZvciB0ZW1wbGF0ZSBhdXRob3JzXG5cdCAgICAgICAgICAgIHNjb3BlLm9wdGlvbnMuZm9ybUNvbnRyb2wgPSBmb3JtQ29udHJvbDtcblx0ICAgICAgICAgICAgc3RvcFdhdGNoaW5nU2hvd0Vycm9yKCk7XG5cdCAgICAgICAgICAgIGFkZFNob3dNZXNzYWdlc1dhdGNoZXIoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGFkZFNob3dNZXNzYWdlc1dhdGNoZXIoKSB7XG5cdCAgICAgICAgc3RvcFdhdGNoaW5nU2hvd0Vycm9yID0gc2NvcGUuJHdhdGNoKGZ1bmN0aW9uIHdhdGNoU2hvd1ZhbGlkYXRpb25DaGFuZ2UoKSB7XG5cdCAgICAgICAgICB2YXIgY3VzdG9tRXhwcmVzc2lvbiA9IGZvcm1seUNvbmZpZy5leHRyYXMuZXJyb3JFeGlzdHNBbmRTaG91bGRCZVZpc2libGVFeHByZXNzaW9uO1xuXHQgICAgICAgICAgdmFyIG9wdGlvbnMgPSBzY29wZS5vcHRpb25zO1xuXHQgICAgICAgICAgdmFyIGZjID0gc2NvcGUuZmM7XG5cblx0ICAgICAgICAgIGlmICghZmMuJGludmFsaWQpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucy52YWxpZGF0aW9uLnNob3cgPT09IFwiYm9vbGVhblwiKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnZhbGlkYXRpb24uc2hvdztcblx0ICAgICAgICAgIH0gZWxzZSBpZiAoY3VzdG9tRXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICByZXR1cm4gZm9ybWx5VXRpbC5mb3JtbHlFdmFsKHNjb3BlLCBjdXN0b21FeHByZXNzaW9uLCBmYy4kbW9kZWxWYWx1ZSwgZmMuJHZpZXdWYWx1ZSk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICB2YXIgbm9Ub3VjaGVkQnV0RGlydHkgPSBhbmd1bGFyLmlzVW5kZWZpbmVkKGZjLiR0b3VjaGVkKSAmJiBmYy4kZGlydHk7XG5cdCAgICAgICAgICAgIHJldHVybiBzY29wZS5mYy4kdG91Y2hlZCB8fCBub1RvdWNoZWRCdXREaXJ0eTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9LCBmdW5jdGlvbiBvblNob3dWYWxpZGF0aW9uQ2hhbmdlKHNob3cpIHtcblx0ICAgICAgICAgIHNjb3BlLm9wdGlvbnMudmFsaWRhdGlvbi5lcnJvckV4aXN0c0FuZFNob3VsZEJlVmlzaWJsZSA9IHNob3c7XG5cdCAgICAgICAgICBzY29wZS5zaG93RXJyb3IgPSBzaG93OyAvLyBzaG9ydGN1dCBmb3IgdGVtcGxhdGUgYXV0aG9yc1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIGZ1bmN0aW9uIGNhbGxMaW5rRnVuY3Rpb25zKCkge1xuXHQgICAgICBpZiAodHlwZSAmJiB0eXBlLmxpbmspIHtcblx0ICAgICAgICB0eXBlLmxpbmsuYXBwbHkodGh1c2x5LCBhcmdzKTtcblx0ICAgICAgfVxuXHQgICAgICBpZiAoc2NvcGUub3B0aW9ucy5saW5rKSB7XG5cdCAgICAgICAgc2NvcGUub3B0aW9ucy5saW5rLmFwcGx5KHRodXNseSwgYXJncyk7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gcnVuTWFuaXB1bGF0b3JzKG1hbmlwdWxhdG9ycykge1xuXHQgICAgICByZXR1cm4gZnVuY3Rpb24gcnVuTWFuaXB1bGF0b3JzT25UZW1wbGF0ZSh0ZW1wbGF0ZSkge1xuXHQgICAgICAgIHZhciBjaGFpbiA9ICRxLndoZW4odGVtcGxhdGUpO1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChtYW5pcHVsYXRvcnMsIGZ1bmN0aW9uIChtYW5pcHVsYXRvcikge1xuXHQgICAgICAgICAgY2hhaW4gPSBjaGFpbi50aGVuKGZ1bmN0aW9uICh0ZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICByZXR1cm4gJHEud2hlbihtYW5pcHVsYXRvcih0ZW1wbGF0ZSwgc2NvcGUub3B0aW9ucywgc2NvcGUpKS50aGVuKGZ1bmN0aW9uIChuZXdUZW1wbGF0ZSkge1xuXHQgICAgICAgICAgICAgIHJldHVybiBhbmd1bGFyLmlzU3RyaW5nKG5ld1RlbXBsYXRlKSA/IG5ld1RlbXBsYXRlIDogYXNIdG1sKG5ld1RlbXBsYXRlKTtcblx0ICAgICAgICAgICAgfSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gY2hhaW47XG5cdCAgICAgIH07XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgLy8gc3RhdGVsZXNzIHV0aWwgZnVuY3Rpb25zXG5cdCAgZnVuY3Rpb24gYXNIdG1sKGVsKSB7XG5cdCAgICB2YXIgd3JhcHBlciA9IGFuZ3VsYXIuZWxlbWVudChcIjxhPjwvYT5cIik7XG5cdCAgICByZXR1cm4gd3JhcHBlci5hcHBlbmQoZWwpLmh0bWwoKTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBnZXRGaWVsZFR5cGUob3B0aW9ucykge1xuXHQgICAgcmV0dXJuIG9wdGlvbnMudHlwZSAmJiBmb3JtbHlDb25maWcuZ2V0VHlwZShvcHRpb25zLnR5cGUpO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEZpZWxkVGVtcGxhdGUob3B0aW9ucykge1xuXHQgICAgZnVuY3Rpb24gZnJvbU9wdGlvbnNPclR5cGUoa2V5LCB0eXBlKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zW2tleV0pKSB7XG5cdCAgICAgICAgcmV0dXJuIG9wdGlvbnNba2V5XTtcblx0ICAgICAgfSBlbHNlIGlmICh0eXBlICYmIGFuZ3VsYXIuaXNEZWZpbmVkKHR5cGVba2V5XSkpIHtcblx0ICAgICAgICByZXR1cm4gdHlwZVtrZXldO1xuXHQgICAgICB9XG5cdCAgICB9XG5cblx0ICAgIHZhciB0eXBlID0gZm9ybWx5Q29uZmlnLmdldFR5cGUob3B0aW9ucy50eXBlLCB0cnVlLCBvcHRpb25zKTtcblx0ICAgIHZhciB0ZW1wbGF0ZSA9IGZyb21PcHRpb25zT3JUeXBlKFwidGVtcGxhdGVcIiwgdHlwZSk7XG5cdCAgICB2YXIgdGVtcGxhdGVVcmwgPSBmcm9tT3B0aW9uc09yVHlwZShcInRlbXBsYXRlVXJsXCIsIHR5cGUpO1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNVbmRlZmluZWQodGVtcGxhdGUpICYmICF0ZW1wbGF0ZVVybCkge1xuXHQgICAgICB0aHJvdyBmb3JtbHlVc2FiaWxpdHkuZ2V0RmllbGRFcnJvcihcInR5cGUtdHlwZS1oYXMtbm8tdGVtcGxhdGVcIiwgXCJUeXBlICdcIiArIG9wdGlvbnMudHlwZSArIFwiJyBoYXMgbm90IHRlbXBsYXRlLiBPbiBlbGVtZW50OlwiLCBvcHRpb25zKTtcblx0ICAgIH1cblxuXHQgICAgcmV0dXJuIGdldFRlbXBsYXRlKHRlbXBsYXRlVXJsIHx8IHRlbXBsYXRlLCBhbmd1bGFyLmlzVW5kZWZpbmVkKHRlbXBsYXRlKSwgb3B0aW9ucyk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0VGVtcGxhdGUodGVtcGxhdGUsIGlzVXJsLCBvcHRpb25zKSB7XG5cdCAgICB2YXIgdGVtcGxhdGVQcm9taXNlID0gdW5kZWZpbmVkO1xuXHQgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih0ZW1wbGF0ZSkpIHtcblx0ICAgICAgdGVtcGxhdGVQcm9taXNlID0gJHEud2hlbih0ZW1wbGF0ZShvcHRpb25zKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB0ZW1wbGF0ZVByb21pc2UgPSAkcS53aGVuKHRlbXBsYXRlKTtcblx0ICAgIH1cblxuXHQgICAgaWYgKCFpc1VybCkge1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGVQcm9taXNlO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgdmFyIF9yZXQgPSAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIHZhciBodHRwT3B0aW9ucyA9IHsgY2FjaGU6ICR0ZW1wbGF0ZUNhY2hlIH07XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIHY6IHRlbXBsYXRlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICh1cmwpIHtcblx0ICAgICAgICAgICAgcmV0dXJuICRodHRwLmdldCh1cmwsIGh0dHBPcHRpb25zKTtcblx0ICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cdCAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuXHQgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiBoYW5kbGVFcnJvckdldHRpbmdBVGVtcGxhdGUoZXJyb3IpIHtcblx0ICAgICAgICAgICAgZm9ybWx5V2FybihcInByb2JsZW0tbG9hZGluZy10ZW1wbGF0ZS1mb3ItdGVtcGxhdGV1cmxcIiwgXCJQcm9ibGVtIGxvYWRpbmcgdGVtcGxhdGUgZm9yIFwiICsgdGVtcGxhdGUsIGVycm9yKTtcblx0ICAgICAgICAgIH0pXG5cdCAgICAgICAgfTtcblx0ICAgICAgfSkoKTtcblxuXHQgICAgICBpZiAodHlwZW9mIF9yZXQgPT09IFwib2JqZWN0XCIpIHtcblx0ICAgICAgICByZXR1cm4gX3JldC52O1xuXHQgICAgICB9XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gdHJhbnNjbHVkZUluV3JhcHBlcnMob3B0aW9ucykge1xuXHQgICAgdmFyIHdyYXBwZXIgPSBnZXRXcmFwcGVyT3B0aW9uKG9wdGlvbnMpO1xuXG5cdCAgICByZXR1cm4gZnVuY3Rpb24gdHJhbnNjbHVkZVRlbXBsYXRlKHRlbXBsYXRlKSB7XG5cdCAgICAgIGlmICghd3JhcHBlci5sZW5ndGgpIHtcblx0ICAgICAgICByZXR1cm4gJHEud2hlbih0ZW1wbGF0ZSk7XG5cdCAgICAgIH1cblxuXHQgICAgICB3cmFwcGVyLmZvckVhY2goZnVuY3Rpb24gKHdyYXBwZXIpIHtcblx0ICAgICAgICBmb3JtbHlVc2FiaWxpdHkuY2hlY2tXcmFwcGVyKHdyYXBwZXIsIG9wdGlvbnMpO1xuXHQgICAgICAgIHdyYXBwZXIudmFsaWRhdGVPcHRpb25zICYmIHdyYXBwZXIudmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuXHQgICAgICAgIHJ1bkFwaUNoZWNrKHdyYXBwZXIsIG9wdGlvbnMpO1xuXHQgICAgICB9KTtcblx0ICAgICAgdmFyIHByb21pc2VzID0gd3JhcHBlci5tYXAoZnVuY3Rpb24gKHcpIHtcblx0ICAgICAgICByZXR1cm4gZ2V0VGVtcGxhdGUody50ZW1wbGF0ZSB8fCB3LnRlbXBsYXRlVXJsLCAhdy50ZW1wbGF0ZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgICByZXR1cm4gJHEuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICh3cmFwcGVyc1RlbXBsYXRlcykge1xuXHQgICAgICAgIHdyYXBwZXJzVGVtcGxhdGVzLmZvckVhY2goZnVuY3Rpb24gKHdyYXBwZXJUZW1wbGF0ZSwgaW5kZXgpIHtcblx0ICAgICAgICAgIGZvcm1seVVzYWJpbGl0eS5jaGVja1dyYXBwZXJUZW1wbGF0ZSh3cmFwcGVyVGVtcGxhdGUsIHdyYXBwZXJbaW5kZXhdKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICB3cmFwcGVyc1RlbXBsYXRlcy5yZXZlcnNlKCk7IC8vIHdyYXBwZXIgMCBpcyB3cmFwcGVkIGluIHdyYXBwZXIgMSBhbmQgc28gb24uLi5cblx0ICAgICAgICB2YXIgdG90YWxXcmFwcGVyID0gd3JhcHBlcnNUZW1wbGF0ZXMuc2hpZnQoKTtcblx0ICAgICAgICB3cmFwcGVyc1RlbXBsYXRlcy5mb3JFYWNoKGZ1bmN0aW9uICh3cmFwcGVyVGVtcGxhdGUpIHtcblx0ICAgICAgICAgIHRvdGFsV3JhcHBlciA9IGRvVHJhbnNjbHVzaW9uKHRvdGFsV3JhcHBlciwgd3JhcHBlclRlbXBsYXRlKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgICByZXR1cm4gZG9UcmFuc2NsdXNpb24odG90YWxXcmFwcGVyLCB0ZW1wbGF0ZSk7XG5cdCAgICAgIH0pO1xuXHQgICAgfTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBkb1RyYW5zY2x1c2lvbih3cmFwcGVyLCB0ZW1wbGF0ZSkge1xuXHQgICAgdmFyIHN1cGVyV3JhcHBlciA9IGFuZ3VsYXIuZWxlbWVudChcIjxhPjwvYT5cIik7IC8vIHRoaXMgYWxsb3dzIHBlb3BsZSBub3QgaGF2ZSB0byBoYXZlIGEgc2luZ2xlIHJvb3QgaW4gd3JhcHBlcnNcblx0ICAgIHN1cGVyV3JhcHBlci5hcHBlbmQod3JhcHBlcik7XG5cdCAgICB2YXIgdHJhbnNjbHVkZUVsID0gc3VwZXJXcmFwcGVyLmZpbmQoXCJmb3JtbHktdHJhbnNjbHVkZVwiKTtcblx0ICAgIGlmICghdHJhbnNjbHVkZUVsLmxlbmd0aCkge1xuXHQgICAgICAvL3RyeSBpdCB1c2luZyBvdXIgY3VzdG9tIGZpbmQgZnVuY3Rpb25cblx0ICAgICAgdHJhbnNjbHVkZUVsID0gZm9ybWx5VXRpbC5maW5kQnlOb2RlTmFtZShzdXBlcldyYXBwZXIsIFwiZm9ybWx5LXRyYW5zY2x1ZGVcIik7XG5cdCAgICB9XG5cdCAgICB0cmFuc2NsdWRlRWwucmVwbGFjZVdpdGgodGVtcGxhdGUpO1xuXHQgICAgcmV0dXJuIHN1cGVyV3JhcHBlci5odG1sKCk7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gZ2V0V3JhcHBlck9wdGlvbihvcHRpb25zKSB7XG5cdCAgICB2YXIgd3JhcHBlciA9IG9wdGlvbnMud3JhcHBlcjtcblx0ICAgIC8vIGV4cGxpY2l0IG51bGwgbWVhbnMgbm8gd3JhcHBlclxuXHQgICAgaWYgKHdyYXBwZXIgPT09IG51bGwpIHtcblx0ICAgICAgcmV0dXJuIFtdO1xuXHQgICAgfVxuXG5cdCAgICAvLyBub3RoaW5nIHNwZWNpZmllZCBtZWFucyB1c2UgdGhlIGRlZmF1bHQgd3JhcHBlciBmb3IgdGhlIHR5cGVcblx0ICAgIGlmICghd3JhcHBlcikge1xuXHQgICAgICAvLyBnZXQgYWxsIHdyYXBwZXJzIHRoYXQgc3BlY2lmeSB0aGV5IGFwcGx5IHRvIHRoaXMgdHlwZVxuXHQgICAgICB3cmFwcGVyID0gYXJyYXlpZnkoZm9ybWx5Q29uZmlnLmdldFdyYXBwZXJCeVR5cGUob3B0aW9ucy50eXBlKSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgICB3cmFwcGVyID0gYXJyYXlpZnkod3JhcHBlcikubWFwKGZvcm1seUNvbmZpZy5nZXRXcmFwcGVyKTtcblx0ICAgIH1cblxuXHQgICAgLy8gZ2V0IGFsbCB3cmFwcGVycyBmb3IgdGhhdCB0aGlzIHR5cGUgc3BlY2lmaWVkIHRoYXQgaXQgdXNlcy5cblx0ICAgIHZhciB0eXBlID0gZm9ybWx5Q29uZmlnLmdldFR5cGUob3B0aW9ucy50eXBlLCB0cnVlLCBvcHRpb25zKTtcblx0ICAgIGlmICh0eXBlICYmIHR5cGUud3JhcHBlcikge1xuXHQgICAgICB2YXIgdHlwZVdyYXBwZXJzID0gYXJyYXlpZnkodHlwZS53cmFwcGVyKS5tYXAoZm9ybWx5Q29uZmlnLmdldFdyYXBwZXIpO1xuXHQgICAgICB3cmFwcGVyID0gd3JhcHBlci5jb25jYXQodHlwZVdyYXBwZXJzKTtcblx0ICAgIH1cblxuXHQgICAgLy8gYWRkIHRoZSBkZWZhdWx0IHdyYXBwZXIgbGFzdFxuXHQgICAgdmFyIGRlZmF1bHRXcmFwcGVyID0gZm9ybWx5Q29uZmlnLmdldFdyYXBwZXIoKTtcblx0ICAgIGlmIChkZWZhdWx0V3JhcHBlcikge1xuXHQgICAgICB3cmFwcGVyLnB1c2goZGVmYXVsdFdyYXBwZXIpO1xuXHQgICAgfVxuXHQgICAgcmV0dXJuIHdyYXBwZXI7XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tBcGkob3B0aW9ucykge1xuXHQgICAgZm9ybWx5QXBpQ2hlY2tbXCJ0aHJvd1wiXShmb3JtbHlBcGlDaGVjay5mb3JtbHlGaWVsZE9wdGlvbnMsIG9wdGlvbnMsIHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seS1maWVsZCBkaXJlY3RpdmVcIixcblx0ICAgICAgdXJsOiBcImZvcm1seS1maWVsZC1kaXJlY3RpdmUtdmFsaWRhdGlvbi1mYWlsZWRcIlxuXHQgICAgfSk7XG5cdCAgICAvLyB2YWxpZGF0ZSB3aXRoIHRoZSB0eXBlXG5cdCAgICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZSAmJiBmb3JtbHlDb25maWcuZ2V0VHlwZShvcHRpb25zLnR5cGUpO1xuXHQgICAgaWYgKHR5cGUpIHtcblx0ICAgICAgaWYgKHR5cGUudmFsaWRhdGVPcHRpb25zKSB7XG5cdCAgICAgICAgdHlwZS52YWxpZGF0ZU9wdGlvbnMob3B0aW9ucyk7XG5cdCAgICAgIH1cblx0ICAgICAgcnVuQXBpQ2hlY2sodHlwZSwgb3B0aW9ucyk7XG5cdCAgICB9XG5cdCAgfVxuXG5cdCAgZnVuY3Rpb24gY2hlY2tGaWVsZEdyb3VwQXBpKG9wdGlvbnMpIHtcblx0ICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oZm9ybWx5QXBpQ2hlY2suZmllbGRHcm91cCwgb3B0aW9ucywge1xuXHQgICAgICBwcmVmaXg6IFwiZm9ybWx5LWZpZWxkIGRpcmVjdGl2ZVwiLFxuXHQgICAgICB1cmw6IFwiZm9ybWx5LWZpZWxkLWRpcmVjdGl2ZS12YWxpZGF0aW9uLWZhaWxlZFwiXG5cdCAgICB9KTtcblx0ICB9XG5cblx0ICBmdW5jdGlvbiBydW5BcGlDaGVjayhfcmVmLCBvcHRpb25zKSB7XG5cdCAgICB2YXIgYXBpQ2hlY2sgPSBfcmVmLmFwaUNoZWNrO1xuXHQgICAgdmFyIGFwaUNoZWNrSW5zdGFuY2UgPSBfcmVmLmFwaUNoZWNrSW5zdGFuY2U7XG5cdCAgICB2YXIgYXBpQ2hlY2tGdW5jdGlvbiA9IF9yZWYuYXBpQ2hlY2tGdW5jdGlvbjtcblx0ICAgIHZhciBhcGlDaGVja09wdGlvbnMgPSBfcmVmLmFwaUNoZWNrT3B0aW9ucztcblxuXHQgICAgaWYgKCFhcGlDaGVjaykge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICB2YXIgaW5zdGFuY2UgPSBhcGlDaGVja0luc3RhbmNlIHx8IGZvcm1seUFwaUNoZWNrO1xuXHQgICAgdmFyIGZuID0gYXBpQ2hlY2tGdW5jdGlvbiB8fCBcIndhcm5cIjtcblx0ICAgIHZhciBzaGFwZSA9IGluc3RhbmNlLnNoYXBlKGFwaUNoZWNrKTtcblx0ICAgIGluc3RhbmNlW2ZuXShzaGFwZSwgb3B0aW9ucywgYXBpQ2hlY2tPcHRpb25zIHx8IHtcblx0ICAgICAgcHJlZml4OiBcImZvcm1seS1maWVsZCBcIiArIG5hbWUsXG5cdCAgICAgIHVybDogZm9ybWx5QXBpQ2hlY2suY29uZmlnLm91dHB1dC5kb2NzQmFzZVVybCArIFwiZm9ybWx5LWZpZWxkLXR5cGUtYXBpY2hlY2stZmFpbGVkXCJcblx0ICAgIH0pO1xuXHQgIH1cblx0fVxuXHRmb3JtbHlGaWVsZC4kaW5qZWN0ID0gW1wiJGh0dHBcIiwgXCIkcVwiLCBcIiRjb21waWxlXCIsIFwiJHRlbXBsYXRlQ2FjaGVcIiwgXCJmb3JtbHlDb25maWdcIiwgXCJmb3JtbHlWYWxpZGF0aW9uTWVzc2FnZXNcIiwgXCJmb3JtbHlBcGlDaGVja1wiLCBcImZvcm1seVV0aWxcIiwgXCJmb3JtbHlVc2FiaWxpdHlcIiwgXCJmb3JtbHlXYXJuXCJdO1xuXG4vKioqLyB9LFxuLyogMTEgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Rm9jdXM7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGZvcm1seUZvY3VzKCR0aW1lb3V0LCAkZG9jdW1lbnQpIHtcblx0ICAvKiBqc2hpbnQgLVcwNTIgKi9cblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiQVwiLFxuXHQgICAgbGluazogZnVuY3Rpb24gZm9ybWx5Rm9jdXNMaW5rKHNjb3BlLCBlbGVtZW50LCBhdHRycykge1xuXHQgICAgICB2YXIgcHJldmlvdXNFbCA9IG51bGw7XG5cdCAgICAgIHZhciBlbCA9IGVsZW1lbnRbMF07XG5cdCAgICAgIHZhciBkb2MgPSAkZG9jdW1lbnRbMF07XG5cdCAgICAgIGF0dHJzLiRvYnNlcnZlKFwiZm9ybWx5Rm9jdXNcIiwgZnVuY3Rpb24gcmVzcG9uZFRvRm9jdXNFeHByZXNzaW9uQ2hhbmdlKHZhbHVlKSB7XG5cdCAgICAgICAgaWYgKHZhbHVlID09PSBcInRydWVcIikge1xuXHQgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24gc2V0RWxlbWVudEZvY3VzKCkge1xuXHQgICAgICAgICAgICBwcmV2aW91c0VsID0gZG9jLmFjdGl2ZUVsZW1lbnQ7XG5cdCAgICAgICAgICAgIGVsLmZvY3VzKCk7XG5cdCAgICAgICAgICB9LCB+IH5hdHRycy5mb2N1c1dhaXQpO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge1xuXHQgICAgICAgICAgaWYgKGRvYy5hY3RpdmVFbGVtZW50ID09PSBlbCkge1xuXHQgICAgICAgICAgICBlbC5ibHVyKCk7XG5cdCAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShcInJlZm9jdXNcIikgJiYgcHJldmlvdXNFbCkge1xuXHQgICAgICAgICAgICAgIHByZXZpb3VzRWwuZm9jdXMoKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH1cblx0ICAgICAgfSk7XG5cdCAgICB9XG5cdCAgfTtcblx0fVxuXHRmb3JtbHlGb2N1cy4kaW5qZWN0ID0gW1wiJHRpbWVvdXRcIiwgXCIkZG9jdW1lbnRcIl07XG5cbi8qKiovIH0sXG4vKiAxMiAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIF90b0NvbnN1bWFibGVBcnJheSA9IGZ1bmN0aW9uIChhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9O1xuXG5cdHZhciBfc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZm9ybWx5Rm9ybTtcblxuXHQvKipcblx0ICogQG5nZG9jIGRpcmVjdGl2ZVxuXHQgKiBAbmFtZSBmb3JtbHlGb3JtXG5cdCAqIEByZXN0cmljdCBFXG5cdCAqL1xuXHQvLyBAbmdJbmplY3Rcblx0ZnVuY3Rpb24gZm9ybWx5Rm9ybShmb3JtbHlVc2FiaWxpdHksICRwYXJzZSwgZm9ybWx5QXBpQ2hlY2ssIGZvcm1seUNvbmZpZykge1xuXHQgIHZhciBjdXJyZW50Rm9ybUlkID0gMTtcblx0ICByZXR1cm4ge1xuXHQgICAgcmVzdHJpY3Q6IFwiRVwiLFxuXHQgICAgdGVtcGxhdGU6IGZ1bmN0aW9uIGZvcm1seUZvcm1HZXRUZW1wbGF0ZShlbCwgYXR0cnMpIHtcblx0ICAgICAgLyoganNoaW50IC1XMDMzICovIC8vIHRoaXMgYmVjYXVzZSBqc2hpbnQgaXMgYnJva2VuIEkgZ3Vlc3MuLi5cblx0ICAgICAgdmFyIHJvb3RFbCA9IGdldFJvb3RFbCgpO1xuXHQgICAgICB2YXIgZmllbGRSb290RWwgPSBnZXRGaWVsZFJvb3RFbCgpO1xuXHQgICAgICB2YXIgZm9ybUlkID0gXCJmb3JtbHlfXCIgKyBjdXJyZW50Rm9ybUlkKys7XG5cdCAgICAgIHZhciBwYXJlbnRGb3JtQXR0cmlidXRlcyA9IFwiXCI7XG5cdCAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShcImlzRmllbGRHcm91cFwiKSAmJiBlbC5wYXJlbnQoKS5wYXJlbnQoKS5oYXNDbGFzcyhcImZvcm1seVwiKSkge1xuXHQgICAgICAgIHBhcmVudEZvcm1BdHRyaWJ1dGVzID0gY29weUF0dHJpYnV0ZXMoZWwucGFyZW50KCkucGFyZW50KClbMF0uYXR0cmlidXRlcyk7XG5cdCAgICAgIH1cblx0ICAgICAgcmV0dXJuIFwiXFxuICAgICAgICA8XCIgKyByb290RWwgKyBcIiBjbGFzcz1cXFwiZm9ybWx5XFxcIlxcbiAgICAgICAgICAgICAgICAgbmFtZT1cXFwiXCIgKyBnZXRGb3JtTmFtZSgpICsgXCJcXFwiXFxuICAgICAgICAgICAgICAgICByb2xlPVxcXCJmb3JtXFxcIiBcIiArIHBhcmVudEZvcm1BdHRyaWJ1dGVzICsgXCI+XFxuICAgICAgICAgIDxcIiArIGZpZWxkUm9vdEVsICsgXCIgZm9ybWx5LWZpZWxkXFxuICAgICAgICAgICAgICAgbmctcmVwZWF0PVxcXCJmaWVsZCBpbiBmaWVsZHMgXCIgKyBnZXRUcmFja0J5KCkgKyBcIlxcXCJcXG4gICAgICAgICAgICAgICBcIiArIGdldEhpZGVEaXJlY3RpdmUoKSArIFwiPVxcXCIhZmllbGQuaGlkZVxcXCJcXG4gICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybWx5LWZpZWxkXFxcIlxcbiAgICAgICAgICAgICAgIG9wdGlvbnM9XFxcImZpZWxkXFxcIlxcbiAgICAgICAgICAgICAgIG1vZGVsPVxcXCJmaWVsZC5tb2RlbCB8fCBtb2RlbFxcXCJcXG4gICAgICAgICAgICAgICBmaWVsZHM9XFxcImZpZWxkc1xcXCJcXG4gICAgICAgICAgICAgICBmb3JtPVxcXCJ0aGVGb3JtbHlGb3JtXFxcIlxcbiAgICAgICAgICAgICAgIGZvcm0taWQ9XFxcIlwiICsgZ2V0Rm9ybU5hbWUoKSArIFwiXFxcIlxcbiAgICAgICAgICAgICAgIGZvcm0tc3RhdGU9XFxcIm9wdGlvbnMuZm9ybVN0YXRlXFxcIlxcbiAgICAgICAgICAgICAgIGluZGV4PVxcXCIkaW5kZXhcXFwiPlxcbiAgICAgICAgICA8L1wiICsgZmllbGRSb290RWwgKyBcIj5cXG4gICAgICAgICAgPGRpdiBuZy10cmFuc2NsdWRlPjwvZGl2PlxcbiAgICAgICAgPC9cIiArIHJvb3RFbCArIFwiPlxcbiAgICAgIFwiO1xuXG5cdCAgICAgIGZ1bmN0aW9uIGdldFJvb3RFbCgpIHtcblx0ICAgICAgICByZXR1cm4gYXR0cnMucm9vdEVsIHx8IFwibmctZm9ybVwiO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0RmllbGRSb290RWwoKSB7XG5cdCAgICAgICAgcmV0dXJuIGF0dHJzLmZpZWxkUm9vdEVsIHx8IFwiZGl2XCI7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiBnZXRIaWRlRGlyZWN0aXZlKCkge1xuXHQgICAgICAgIHJldHVybiBhdHRycy5oaWRlRGlyZWN0aXZlIHx8IGZvcm1seUNvbmZpZy5leHRyYXMuZGVmYXVsdEhpZGVEaXJlY3RpdmUgfHwgXCJuZy1pZlwiO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0VHJhY2tCeSgpIHtcblx0ICAgICAgICBpZiAoIWF0dHJzLnRyYWNrQnkpIHtcblx0ICAgICAgICAgIHJldHVybiBcIlwiO1xuXHQgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICByZXR1cm4gXCJ0cmFjayBieSBcIiArIGF0dHJzLnRyYWNrQnk7XG5cdCAgICAgICAgfVxuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0Rm9ybU5hbWUoKSB7XG5cdCAgICAgICAgdmFyIGZvcm1OYW1lID0gZm9ybUlkO1xuXHQgICAgICAgIHZhciBiaW5kTmFtZSA9IGF0dHJzLmJpbmROYW1lO1xuXHQgICAgICAgIGlmIChiaW5kTmFtZSkge1xuXHQgICAgICAgICAgaWYgKGFuZ3VsYXIudmVyc2lvbi5taW5vciA8IDMpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZm9ybWx5VXNhYmlsaXR5LmdldEZvcm1seUVycm9yKFwiYmluZC1uYW1lIGF0dHJpYnV0ZSBvbiBmb3JtbHktZm9ybSBub3QgYWxsb3dlZCBpbiA+IGFuZ3VsYXIgMS4zXCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgLy8gd2UgY2FuIGRvIGEgb25lLXRpbWUgYmluZGluZyBoZXJlIGJlY2F1c2Ugd2Uga25vdyB3ZSdyZSBpbiAxLjMueCB0ZXJyaXRvcnlcblx0ICAgICAgICAgIGZvcm1OYW1lID0gXCJ7ezo6J2Zvcm1seV8nICsgXCIgKyBiaW5kTmFtZSArIFwifX1cIjtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGZvcm1OYW1lO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gY29weUF0dHJpYnV0ZXMoYXR0cmlidXRlcykge1xuXHQgICAgICAgIHZhciBleGNsdWRlZCA9IFtcIm1vZGVsXCIsIFwiZm9ybVwiLCBcImZpZWxkc1wiLCBcIm9wdGlvbnNcIiwgXCJuYW1lXCIsIFwicm9sZVwiLCBcImNsYXNzXCJdO1xuXHQgICAgICAgIHZhciBhcnJheUF0dHJzID0gW107XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG5cdCAgICAgICAgICB2YXIgbm9kZU5hbWUgPSBfcmVmLm5vZGVOYW1lO1xuXHQgICAgICAgICAgdmFyIG5vZGVWYWx1ZSA9IF9yZWYubm9kZVZhbHVlO1xuXG5cdCAgICAgICAgICBpZiAobm9kZU5hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZXhjbHVkZWQuaW5kZXhPZihub2RlTmFtZSkgPT09IC0xKSB7XG5cdCAgICAgICAgICAgIGFycmF5QXR0cnMucHVzaChcIlwiICsgdG9LZWJhYkNhc2Uobm9kZU5hbWUpICsgXCI9XFxcIlwiICsgbm9kZVZhbHVlICsgXCJcXFwiXCIpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICAgIHJldHVybiBhcnJheUF0dHJzLmpvaW4oXCIgXCIpO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gdG9LZWJhYkNhc2Uoc3RyaW5nKSB7XG5cdCAgICAgICAgaWYgKHN0cmluZykge1xuXHQgICAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW0EtWl0pL2csIGZ1bmN0aW9uICgkMSkge1xuXHQgICAgICAgICAgICByZXR1cm4gXCItXCIgKyAkMS50b0xvd2VyQ2FzZSgpO1xuXHQgICAgICAgICAgfSk7XG5cdCAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgIHJldHVybiBcIlwiO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfSxcblx0ICAgIHJlcGxhY2U6IHRydWUsXG5cdCAgICB0cmFuc2NsdWRlOiB0cnVlLFxuXHQgICAgc2NvcGU6IHtcblx0ICAgICAgZmllbGRzOiBcIj1cIixcblx0ICAgICAgbW9kZWw6IFwiPVwiLFxuXHQgICAgICBmb3JtOiBcIj0/XCIsXG5cdCAgICAgIG9wdGlvbnM6IFwiPT9cIlxuXHQgICAgfSxcblx0ICAgIGNvbnRyb2xsZXI6IC8qIEBuZ0luamVjdCAqL1tcIiRzY29wZVwiLCBcImZvcm1seVV0aWxcIiwgZnVuY3Rpb24gRm9ybWx5Rm9ybUNvbnRyb2xsZXIoJHNjb3BlLCBmb3JtbHlVdGlsKSB7XG5cdCAgICAgIHNldHVwT3B0aW9ucygpO1xuXHQgICAgICAkc2NvcGUubW9kZWwgPSAkc2NvcGUubW9kZWwgfHwge307XG5cdCAgICAgICRzY29wZS5maWVsZHMgPSAkc2NvcGUuZmllbGRzIHx8IFtdO1xuXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBpbml0TW9kZWwpOyAvLyBpbml0aWFsaXplcyB0aGUgbW9kZWwgcHJvcGVydHkgaWYgc2V0IHRvICdmb3JtU3RhdGUnXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBhdHRhY2hLZXkpOyAvLyBhdHRhY2hlcyBhIGtleSBiYXNlZCBvbiB0aGUgaW5kZXggaWYgYSBrZXkgaXNuJ3Qgc3BlY2lmaWVkXG5cdCAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBzZXR1cFdhdGNoZXJzKTsgLy8gc2V0dXAgd2F0Y2hlcnMgZm9yIGFsbCBmaWVsZHNcblxuXHQgICAgICAvLyB3YXRjaCB0aGUgbW9kZWwgYW5kIGV2YWx1YXRlIHdhdGNoIGV4cHJlc3Npb25zIHRoYXQgZGVwZW5kIG9uIGl0LlxuXHQgICAgICAkc2NvcGUuJHdhdGNoKFwibW9kZWxcIiwgb25Nb2RlbE9yRm9ybVN0YXRlQ2hhbmdlLCB0cnVlKTtcblx0ICAgICAgaWYgKCRzY29wZS5vcHRpb25zLmZvcm1TdGF0ZSkge1xuXHQgICAgICAgICRzY29wZS4kd2F0Y2goXCJvcHRpb25zLmZvcm1TdGF0ZVwiLCBvbk1vZGVsT3JGb3JtU3RhdGVDaGFuZ2UsIHRydWUpO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gb25Nb2RlbE9yRm9ybVN0YXRlQ2hhbmdlKCkge1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBmdW5jdGlvbiBydW5GaWVsZEV4cHJlc3Npb25Qcm9wZXJ0aWVzKGZpZWxkLCBpbmRleCkge1xuXHQgICAgICAgICAgLypqc2hpbnQgLVcwMzAgKi9cblx0ICAgICAgICAgIHZhciBtb2RlbCA9IGZpZWxkLm1vZGVsIHx8ICRzY29wZS5tb2RlbDtcblx0ICAgICAgICAgIGZpZWxkLnJ1bkV4cHJlc3Npb25zICYmIGZpZWxkLnJ1bkV4cHJlc3Npb25zKG1vZGVsKTtcblx0ICAgICAgICAgIGlmIChmaWVsZC5oaWRlRXhwcmVzc2lvbikge1xuXHQgICAgICAgICAgICAvLyBjYW4ndCB1c2UgaGlkZSB3aXRoIGV4cHJlc3Npb25Qcm9wZXJ0aWVzIHJlbGlhYmx5XG5cdCAgICAgICAgICAgIHZhciB2YWwgPSBtb2RlbFtmaWVsZC5rZXldO1xuXHQgICAgICAgICAgICAvLyB0aGlzIG1ha2VzIGl0IGNsb3NlciB0byB3aGF0IGEgcmVndWxhciBleHByZXNzaW9uUHJvcGVydHkgd291bGQgYmVcblx0ICAgICAgICAgICAgdmFyIGV4dHJhTG9jYWxzID0ge1xuXHQgICAgICAgICAgICAgIG9wdGlvbnM6IGZpZWxkLFxuXHQgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcblx0ICAgICAgICAgICAgICBmb3JtU3RhdGU6ICRzY29wZS5vcHRpb25zLmZvcm1TdGF0ZSxcblx0ICAgICAgICAgICAgICBmb3JtSWQ6ICRzY29wZS5mb3JtSWRcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICAgICAgZmllbGQuaGlkZSA9IGZvcm1seVV0aWwuZm9ybWx5RXZhbCgkc2NvcGUsIGZpZWxkLmhpZGVFeHByZXNzaW9uLCB2YWwsIHZhbCwgZXh0cmFMb2NhbHMpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gc2V0dXBPcHRpb25zKCkge1xuXHQgICAgICAgIGZvcm1seUFwaUNoZWNrW1widGhyb3dcIl0oW2Zvcm1seUFwaUNoZWNrLmZvcm1PcHRpb25zQXBpLm9wdGlvbmFsXSwgWyRzY29wZS5vcHRpb25zXSwgeyBwcmVmaXg6IFwiZm9ybWx5LWZvcm0gb3B0aW9ucyBjaGVja1wiIH0pO1xuXHQgICAgICAgICRzY29wZS5vcHRpb25zID0gJHNjb3BlLm9wdGlvbnMgfHwge307XG5cdCAgICAgICAgJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlID0gJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlIHx8IHt9O1xuXG5cdCAgICAgICAgYW5ndWxhci5leHRlbmQoJHNjb3BlLm9wdGlvbnMsIHtcblx0ICAgICAgICAgIHVwZGF0ZUluaXRpYWxWYWx1ZTogdXBkYXRlSW5pdGlhbFZhbHVlLFxuXHQgICAgICAgICAgcmVzZXRNb2RlbDogcmVzZXRNb2RlbFxuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gdXBkYXRlSW5pdGlhbFZhbHVlKCkge1xuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCgkc2NvcGUuZmllbGRzLCBmdW5jdGlvbiAoZmllbGQpIHtcblx0ICAgICAgICAgIGlmIChpc0ZpZWxkR3JvdXAoZmllbGQpKSB7XG5cdCAgICAgICAgICAgIGZpZWxkLm9wdGlvbnMudXBkYXRlSW5pdGlhbFZhbHVlKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmaWVsZC51cGRhdGVJbml0aWFsVmFsdWUoKTtcblx0ICAgICAgICAgIH1cblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHJlc2V0TW9kZWwoKSB7XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5maWVsZHMsIGZ1bmN0aW9uIChmaWVsZCkge1xuXHQgICAgICAgICAgaWYgKGlzRmllbGRHcm91cChmaWVsZCkpIHtcblx0ICAgICAgICAgICAgZmllbGQub3B0aW9ucy5yZXNldE1vZGVsKCk7XG5cdCAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICBmaWVsZC5yZXNldE1vZGVsKCk7XG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfSk7XG5cdCAgICAgIH1cblxuXHQgICAgICBmdW5jdGlvbiBpbml0TW9kZWwoZmllbGQpIHtcblx0ICAgICAgICBpZiAoZmllbGQubW9kZWwgJiYgZmllbGQubW9kZWwgPT09IFwiZm9ybVN0YXRlXCIpIHtcblx0ICAgICAgICAgIGZpZWxkLm1vZGVsID0gJHNjb3BlLm9wdGlvbnMuZm9ybVN0YXRlO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGF0dGFjaEtleShmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICBpZiAoIWlzRmllbGRHcm91cChmaWVsZCkpIHtcblx0ICAgICAgICAgIGZpZWxkLmtleSA9IGZpZWxkLmtleSB8fCBpbmRleCB8fCAwO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIHNldHVwV2F0Y2hlcnMoZmllbGQsIGluZGV4KSB7XG5cdCAgICAgICAgaWYgKGlzRmllbGRHcm91cChmaWVsZCkgfHwgIWFuZ3VsYXIuaXNEZWZpbmVkKGZpZWxkLndhdGNoZXIpKSB7XG5cdCAgICAgICAgICByZXR1cm47XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHZhciB3YXRjaGVycyA9IGZpZWxkLndhdGNoZXI7XG5cdCAgICAgICAgaWYgKCFhbmd1bGFyLmlzQXJyYXkod2F0Y2hlcnMpKSB7XG5cdCAgICAgICAgICB3YXRjaGVycyA9IFt3YXRjaGVyc107XG5cdCAgICAgICAgfVxuXHQgICAgICAgIGFuZ3VsYXIuZm9yRWFjaCh3YXRjaGVycywgZnVuY3Rpb24gc2V0dXBXYXRjaGVyKHdhdGNoZXIpIHtcblx0ICAgICAgICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQod2F0Y2hlci5saXN0ZW5lcikpIHtcblx0ICAgICAgICAgICAgdGhyb3cgZm9ybWx5VXNhYmlsaXR5LmdldEZpZWxkRXJyb3IoXCJhbGwtZmllbGQtd2F0Y2hlcnMtbXVzdC1oYXZlLWEtbGlzdGVuZXJcIiwgXCJBbGwgZmllbGQgd2F0Y2hlcnMgbXVzdCBoYXZlIGEgbGlzdGVuZXJcIiwgZmllbGQpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgICAgdmFyIHdhdGNoRXhwcmVzc2lvbiA9IGdldFdhdGNoRXhwcmVzc2lvbih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpO1xuXHQgICAgICAgICAgdmFyIHdhdGNoTGlzdGVuZXIgPSBnZXRXYXRjaExpc3RlbmVyKHdhdGNoZXIsIGZpZWxkLCBpbmRleCk7XG5cblx0ICAgICAgICAgIHZhciB0eXBlID0gd2F0Y2hlci50eXBlIHx8IFwiJHdhdGNoXCI7XG5cdCAgICAgICAgICB3YXRjaGVyLnN0b3BXYXRjaGluZyA9ICRzY29wZVt0eXBlXSh3YXRjaEV4cHJlc3Npb24sIHdhdGNoTGlzdGVuZXIsIHdhdGNoZXIud2F0Y2hEZWVwKTtcblx0ICAgICAgICB9KTtcblx0ICAgICAgfVxuXG5cdCAgICAgIGZ1bmN0aW9uIGdldFdhdGNoRXhwcmVzc2lvbih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICB2YXIgd2F0Y2hFeHByZXNzaW9uID0gd2F0Y2hlci5leHByZXNzaW9uIHx8IFwibW9kZWxbJ1wiICsgZmllbGQua2V5ICsgXCInXVwiO1xuXHQgICAgICAgIGlmIChhbmd1bGFyLmlzRnVuY3Rpb24od2F0Y2hFeHByZXNzaW9uKSkge1xuXHQgICAgICAgICAgLy8gd3JhcCB0aGUgZmllbGQncyB3YXRjaCBleHByZXNzaW9uIHNvIHdlIGNhbiBjYWxsIGl0IHdpdGggdGhlIGZpZWxkIGFzIHRoZSBmaXJzdCBhcmdcblx0ICAgICAgICAgIC8vIGFuZCB0aGUgc3RvcCBmdW5jdGlvbiBhcyB0aGUgbGFzdCBhcmcgYXMgYSBoZWxwZXJcblx0ICAgICAgICAgIHZhciBvcmlnaW5hbEV4cHJlc3Npb24gPSB3YXRjaEV4cHJlc3Npb247XG5cdCAgICAgICAgICB3YXRjaEV4cHJlc3Npb24gPSBmdW5jdGlvbiBmb3JtbHlXYXRjaEV4cHJlc3Npb24oKSB7XG5cdCAgICAgICAgICAgIHZhciBhcmdzID0gbW9kaWZ5QXJncy5hcHBseSh1bmRlZmluZWQsIFt3YXRjaGVyLCBpbmRleF0uY29uY2F0KF9zbGljZS5jYWxsKGFyZ3VtZW50cykpKTtcblx0ICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsRXhwcmVzc2lvbi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgd2F0Y2hFeHByZXNzaW9uLmRpc3BsYXlOYW1lID0gXCJGb3JtbHkgV2F0Y2ggRXhwcmVzc2lvbiBmb3IgZmllbGQgZm9yIFwiICsgZmllbGQua2V5O1xuXHQgICAgICAgIH1cblx0ICAgICAgICByZXR1cm4gd2F0Y2hFeHByZXNzaW9uO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gZ2V0V2F0Y2hMaXN0ZW5lcih3YXRjaGVyLCBmaWVsZCwgaW5kZXgpIHtcblx0ICAgICAgICB2YXIgd2F0Y2hMaXN0ZW5lciA9IHdhdGNoZXIubGlzdGVuZXI7XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih3YXRjaExpc3RlbmVyKSkge1xuXHQgICAgICAgICAgLy8gd3JhcCB0aGUgZmllbGQncyB3YXRjaCBsaXN0ZW5lciBzbyB3ZSBjYW4gY2FsbCBpdCB3aXRoIHRoZSBmaWVsZCBhcyB0aGUgZmlyc3QgYXJnXG5cdCAgICAgICAgICAvLyBhbmQgdGhlIHN0b3AgZnVuY3Rpb24gYXMgdGhlIGxhc3QgYXJnIGFzIGEgaGVscGVyXG5cdCAgICAgICAgICB2YXIgb3JpZ2luYWxMaXN0ZW5lciA9IHdhdGNoTGlzdGVuZXI7XG5cdCAgICAgICAgICB3YXRjaExpc3RlbmVyID0gZnVuY3Rpb24gZm9ybWx5V2F0Y2hMaXN0ZW5lcigpIHtcblx0ICAgICAgICAgICAgdmFyIGFyZ3MgPSBtb2RpZnlBcmdzLmFwcGx5KHVuZGVmaW5lZCwgW3dhdGNoZXIsIGluZGV4XS5jb25jYXQoX3NsaWNlLmNhbGwoYXJndW1lbnRzKSkpO1xuXHQgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxMaXN0ZW5lci5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG5cdCAgICAgICAgICB9O1xuXHQgICAgICAgICAgd2F0Y2hMaXN0ZW5lci5kaXNwbGF5TmFtZSA9IFwiRm9ybWx5IFdhdGNoIExpc3RlbmVyIGZvciBmaWVsZCBmb3IgXCIgKyBmaWVsZC5rZXk7XG5cdCAgICAgICAgfVxuXHQgICAgICAgIHJldHVybiB3YXRjaExpc3RlbmVyO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gbW9kaWZ5QXJncyh3YXRjaGVyLCBpbmRleCkge1xuXHQgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBvcmlnaW5hbEFyZ3MgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICAgICAgICBvcmlnaW5hbEFyZ3NbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHJldHVybiBbJHNjb3BlLmZpZWxkc1tpbmRleF1dLmNvbmNhdChvcmlnaW5hbEFyZ3MsIFt3YXRjaGVyLnN0b3BXYXRjaGluZ10pO1xuXHQgICAgICB9XG5cblx0ICAgICAgZnVuY3Rpb24gaXNGaWVsZEdyb3VwKGZpZWxkKSB7XG5cdCAgICAgICAgcmV0dXJuIGZpZWxkICYmICEhZmllbGQuZmllbGRHcm91cDtcblx0ICAgICAgfVxuXHQgICAgfV0sXG5cdCAgICBsaW5rOiBmdW5jdGlvbiBsaW5rKHNjb3BlLCBlbCwgYXR0cnMpIHtcblx0ICAgICAgdmFyIGZvcm1JZCA9IGF0dHJzLm5hbWU7XG5cdCAgICAgIHNjb3BlLmZvcm1JZCA9IGZvcm1JZDtcblx0ICAgICAgc2NvcGUudGhlRm9ybWx5Rm9ybSA9IHNjb3BlW2Zvcm1JZF07XG5cdCAgICAgIGlmIChhdHRycy5mb3JtKSB7XG5cdCAgICAgICAgJHBhcnNlKGF0dHJzLmZvcm0pLmFzc2lnbihzY29wZS4kcGFyZW50LCBzY29wZVtmb3JtSWRdKTtcblx0ICAgICAgfVxuXG5cdCAgICAgIC8vIGNocm9tZSBhdXRvY29tcGxldGUgbGFtZW5lc3Ncblx0ICAgICAgLy8gc2VlIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NjgxNTMjYzE0XG5cdCAgICAgIC8vIOGDmijgsqDnm4rgsqDhg5opICAgKOKVr8Kw4pahwrAp4pWv77i1IOKUu+KUgeKUuyAgICAo4pee4oC44pef77ybKVxuXHQgICAgICB2YXIgZ2xvYmFsID0gZm9ybWx5Q29uZmlnLmV4dHJhcy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IHRydWU7XG5cdCAgICAgIHZhciBvZmZJbnN0YW5jZSA9IHNjb3BlLm9wdGlvbnMgJiYgc2NvcGUub3B0aW9ucy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IGZhbHNlO1xuXHQgICAgICB2YXIgb25JbnN0YW5jZSA9IHNjb3BlLm9wdGlvbnMgJiYgc2NvcGUub3B0aW9ucy5yZW1vdmVDaHJvbWVBdXRvQ29tcGxldGUgPT09IHRydWU7XG5cdCAgICAgIGlmIChnbG9iYWwgJiYgIW9mZkluc3RhbmNlIHx8IG9uSW5zdGFuY2UpIHtcblx0ICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG5cdCAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYXV0b2NvbXBsZXRlXCIsIFwiYWRkcmVzcy1sZXZlbDRcIik7XG5cdCAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsIHRydWUpO1xuXHQgICAgICAgIGVsWzBdLmFwcGVuZENoaWxkKGlucHV0KTtcblx0ICAgICAgfVxuXHQgICAgfVxuXHQgIH07XG5cdH1cblx0Zm9ybWx5Rm9ybS4kaW5qZWN0ID0gW1wiZm9ybWx5VXNhYmlsaXR5XCIsIFwiJHBhcnNlXCIsIFwiZm9ybWx5QXBpQ2hlY2tcIiwgXCJmb3JtbHlDb25maWdcIl07XG5cbi8qKiovIH0sXG4vKiAxMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNSkpO1xuXG5cdG1vZHVsZS5leHBvcnRzID0gYWRkRm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3I7XG5cblx0Ly8gQG5nSW5qZWN0XG5cdGZ1bmN0aW9uIGFkZEZvcm1seU5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKGZvcm1seUNvbmZpZykge1xuXHQgIGlmIChmb3JtbHlDb25maWcuZXh0cmFzLmRpc2FibGVOZ01vZGVsQXR0cnNNYW5pcHVsYXRvcikge1xuXHQgICAgcmV0dXJuO1xuXHQgIH1cblx0ICBmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucHJlV3JhcHBlci5wdXNoKG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKTtcblxuXHQgIGZ1bmN0aW9uIG5nTW9kZWxBdHRyc01hbmlwdWxhdG9yKHRlbXBsYXRlLCBvcHRpb25zLCBzY29wZSkge1xuXHQgICAgLyoganNoaW50IG1heGNvbXBsZXhpdHk6NiAqL1xuXHQgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblx0ICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXHQgICAgaWYgKGRhdGEuc2tpcE5nTW9kZWxBdHRyc01hbmlwdWxhdG9yID09PSB0cnVlKSB7XG5cdCAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblx0ICAgIH1cblx0ICAgIGVsLmlubmVySFRNTCA9IHRlbXBsYXRlO1xuXHQgICAgdmFyIG1vZGVsTm9kZXMgPSBlbC5xdWVyeVNlbGVjdG9yQWxsKFwiW25nLW1vZGVsXSwgW2RhdGEtbmctbW9kZWxdXCIpO1xuXHQgICAgaWYgKCFtb2RlbE5vZGVzIHx8ICFtb2RlbE5vZGVzLmxlbmd0aCkge1xuXHQgICAgICByZXR1cm4gdGVtcGxhdGU7XG5cdCAgICB9XG5cblx0ICAgIGFkZElmTm90UHJlc2VudChtb2RlbE5vZGVzLCBcImlkXCIsIHNjb3BlLmlkKTtcblx0ICAgIGFkZElmTm90UHJlc2VudChtb2RlbE5vZGVzLCBcIm5hbWVcIiwgc2NvcGUuaWQpO1xuXG5cdCAgICBhZGRWYWxpZGF0aW9uKCk7XG5cdCAgICBhZGRNb2RlbE9wdGlvbnMoKTtcblx0ICAgIGFkZFRlbXBsYXRlT3B0aW9uc0F0dHJzKCk7XG5cblx0ICAgIHJldHVybiBlbC5pbm5lckhUTUw7XG5cblx0ICAgIGZ1bmN0aW9uIGFkZFZhbGlkYXRpb24oKSB7XG5cdCAgICAgIGlmIChhbmd1bGFyLmlzRGVmaW5lZChvcHRpb25zLnZhbGlkYXRvcnMpIHx8IGFuZ3VsYXIuaXNEZWZpbmVkKG9wdGlvbnMudmFsaWRhdGlvbi5tZXNzYWdlcykpIHtcblx0ICAgICAgICBhZGRJZk5vdFByZXNlbnQobW9kZWxOb2RlcywgXCJmb3JtbHktY3VzdG9tLXZhbGlkYXRpb25cIiwgXCJcIik7XG5cdCAgICAgIH1cblx0ICAgIH1cblxuXHQgICAgZnVuY3Rpb24gYWRkTW9kZWxPcHRpb25zKCkge1xuXHQgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy5tb2RlbE9wdGlvbnMpKSB7XG5cdCAgICAgICAgYWRkSWZOb3RQcmVzZW50KG1vZGVsTm9kZXMsIFwibmctbW9kZWwtb3B0aW9uc1wiLCBcIm9wdGlvbnMubW9kZWxPcHRpb25zXCIpO1xuXHQgICAgICAgIGlmIChvcHRpb25zLm1vZGVsT3B0aW9ucy5nZXR0ZXJTZXR0ZXIpIHtcblx0ICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChtb2RlbE5vZGVzLCBmdW5jdGlvbiAobm9kZSkge1xuXHQgICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShcIm5nLW1vZGVsXCIsIFwib3B0aW9ucy52YWx1ZVwiKTtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfVxuXHQgICAgfVxuXG5cdCAgICBmdW5jdGlvbiBhZGRUZW1wbGF0ZU9wdGlvbnNBdHRycygpIHtcblx0ICAgICAgaWYgKCFvcHRpb25zLnRlbXBsYXRlT3B0aW9ucyAmJiAhb3B0aW9ucy5leHByZXNzaW9uUHJvcGVydGllcykge1xuXHQgICAgICAgIC8vIG5vIG5lZWQgdG8gcnVuIHRoZXNlIGlmIHRoZXJlIGFyZSBubyB0ZW1wbGF0ZU9wdGlvbnMgb3IgZXhwcmVzc2lvblByb3BlcnRpZXNcblx0ICAgICAgICByZXR1cm47XG5cdCAgICAgIH1cblx0ICAgICAgdmFyIHRvID0gb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMgfHwge307XG5cdCAgICAgIHZhciBlcCA9IG9wdGlvbnMuZXhwcmVzc2lvblByb3BlcnRpZXMgfHwge307XG5cblx0ICAgICAgdmFyIG5nTW9kZWxBdHRyaWJ1dGVzID0gZ2V0QnVpbHRJbkF0dHJpYnV0ZXMoKTtcblxuXHQgICAgICAvLyBleHRlbmQgd2l0aCB0aGUgdXNlcidzIHNwZWNpZmljYXRpb25zIHdpbm5pbmdcblx0ICAgICAgYW5ndWxhci5leHRlbmQobmdNb2RlbEF0dHJpYnV0ZXMsIG9wdGlvbnMubmdNb2RlbEF0dHJzKTtcblxuXHQgICAgICAvLyBGZWVsIGZyZWUgdG8gbWFrZSB0aGlzIG1vcmUgc2ltcGxlIDotKVxuXHQgICAgICBhbmd1bGFyLmZvckVhY2gobmdNb2RlbEF0dHJpYnV0ZXMsIGZ1bmN0aW9uICh2YWwsIG5hbWUpIHtcblx0ICAgICAgICAvKiBqc2hpbnQgbWF4Y29tcGxleGl0eToxNCAqL1xuXHQgICAgICAgIHZhciBhdHRyVmFsID0gdW5kZWZpbmVkO1xuXHQgICAgICAgIHZhciBhdHRyTmFtZSA9IHVuZGVmaW5lZDtcblx0ICAgICAgICB2YXIgcmVmID0gXCJvcHRpb25zLnRlbXBsYXRlT3B0aW9uc1snXCIgKyBuYW1lICsgXCInXVwiO1xuXHQgICAgICAgIHZhciB0b1ZhbCA9IHRvW25hbWVdO1xuXHQgICAgICAgIHZhciBlcFZhbCA9IGdldEVwVmFsdWUoZXAsIG5hbWUpO1xuXG5cdCAgICAgICAgdmFyIGluVG8gPSBhbmd1bGFyLmlzRGVmaW5lZCh0b1ZhbCk7XG5cdCAgICAgICAgdmFyIGluRXAgPSBhbmd1bGFyLmlzRGVmaW5lZChlcFZhbCk7XG5cdCAgICAgICAgaWYgKHZhbC52YWx1ZSkge1xuXHQgICAgICAgICAgLy8gSSByZWFsaXplIHRoaXMgbG9va3MgYmFja3dhcmRzLCBidXQgaXQncyByaWdodCwgdHJ1c3QgbWUuLi5cblx0ICAgICAgICAgIGF0dHJOYW1lID0gdmFsLnZhbHVlO1xuXHQgICAgICAgICAgYXR0clZhbCA9IG5hbWU7XG5cdCAgICAgICAgfSBlbHNlIGlmICh2YWwuZXhwcmVzc2lvbiAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5leHByZXNzaW9uO1xuXHQgICAgICAgICAgaWYgKGFuZ3VsYXIuaXNTdHJpbmcodG9bbmFtZV0pKSB7XG5cdCAgICAgICAgICAgIGF0dHJWYWwgPSBcIiRldmFsKFwiICsgcmVmICsgXCIpXCI7XG5cdCAgICAgICAgICB9IGVsc2UgaWYgKGFuZ3VsYXIuaXNGdW5jdGlvbih0b1tuYW1lXSkpIHtcblx0ICAgICAgICAgICAgYXR0clZhbCA9IFwiXCIgKyByZWYgKyBcIihtb2RlbFtvcHRpb25zLmtleV0sIG9wdGlvbnMsIHRoaXMsICRldmVudClcIjtcblx0ICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm9wdGlvbnMudGVtcGxhdGVPcHRpb25zLlwiICsgbmFtZSArIFwiIG11c3QgYmUgYSBzdHJpbmcgb3IgZnVuY3Rpb246IFwiICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuXHQgICAgICAgICAgfVxuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsLmJvdW5kICYmIGluRXApIHtcblx0ICAgICAgICAgIGF0dHJOYW1lID0gdmFsLmJvdW5kO1xuXHQgICAgICAgICAgYXR0clZhbCA9IHJlZjtcblx0ICAgICAgICB9IGVsc2UgaWYgKCh2YWwuYXR0cmlidXRlIHx8IHZhbC5ib29sZWFuKSAmJiBpbkVwKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5hdHRyaWJ1dGUgfHwgdmFsLmJvb2xlYW47XG5cdCAgICAgICAgICBhdHRyVmFsID0gXCJ7e1wiICsgcmVmICsgXCJ9fVwiO1xuXHQgICAgICAgIH0gZWxzZSBpZiAodmFsLmF0dHJpYnV0ZSAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5hdHRyaWJ1dGU7XG5cdCAgICAgICAgICBhdHRyVmFsID0gdG9WYWw7XG5cdCAgICAgICAgfSBlbHNlIGlmICh2YWwuYm9vbGVhbikge1xuXHQgICAgICAgICAgaWYgKGluVG8gJiYgIWluRXAgJiYgdG9WYWwpIHtcblx0ICAgICAgICAgICAgYXR0ck5hbWUgPSB2YWwuYm9vbGVhbjtcblx0ICAgICAgICAgICAgYXR0clZhbCA9IHRydWU7XG5cdCAgICAgICAgICB9IGVsc2Uge31cblx0ICAgICAgICB9IGVsc2UgaWYgKHZhbC5ib3VuZCAmJiBpblRvKSB7XG5cdCAgICAgICAgICBhdHRyTmFtZSA9IHZhbC5ib3VuZDtcblx0ICAgICAgICAgIGF0dHJWYWwgPSByZWY7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNEZWZpbmVkKGF0dHJOYW1lKSAmJiBhbmd1bGFyLmlzRGVmaW5lZChhdHRyVmFsKSkge1xuXHQgICAgICAgICAgYWRkSWZOb3RQcmVzZW50KG1vZGVsTm9kZXMsIGF0dHJOYW1lLCBhdHRyVmFsKTtcblx0ICAgICAgICB9XG5cdCAgICAgIH0pO1xuXHQgICAgfVxuXHQgIH1cblxuXHQgIC8vIFV0aWxpdHkgZnVuY3Rpb25zXG5cdCAgZnVuY3Rpb24gZ2V0QnVpbHRJbkF0dHJpYnV0ZXMoKSB7XG5cdCAgICB2YXIgbmdNb2RlbEF0dHJpYnV0ZXMgPSB7XG5cdCAgICAgIGZvY3VzOiB7XG5cdCAgICAgICAgYXR0cmlidXRlOiBcImZvcm1seS1mb2N1c1wiXG5cdCAgICAgIH1cblx0ICAgIH07XG5cdCAgICB2YXIgYm91bmRPbmx5ID0gW107XG5cdCAgICB2YXIgYm90aEJvb2xlYW5BbmRCb3VuZCA9IFtcInJlcXVpcmVkXCIsIFwiZGlzYWJsZWRcIl07XG5cdCAgICB2YXIgYm90aEF0dHJpYnV0ZUFuZEJvdW5kID0gW1wicGF0dGVyblwiLCBcIm1pbmxlbmd0aFwiXTtcblx0ICAgIHZhciBleHByZXNzaW9uT25seSA9IFtcImNoYW5nZVwiLCBcImtleWRvd25cIiwgXCJrZXl1cFwiLCBcImtleXByZXNzXCIsIFwiY2xpY2tcIiwgXCJmb2N1c1wiLCBcImJsdXJcIl07XG5cdCAgICB2YXIgYXR0cmlidXRlT25seSA9IFtcInBsYWNlaG9sZGVyXCIsIFwibWluXCIsIFwibWF4XCIsIFwidGFiaW5kZXhcIiwgXCJ0eXBlXCJdO1xuXHQgICAgaWYgKGZvcm1seUNvbmZpZy5leHRyYXMubmdNb2RlbEF0dHJzTWFuaXB1bGF0b3JQcmVmZXJVbmJvdW5kKSB7XG5cdCAgICAgIGJvdGhBdHRyaWJ1dGVBbmRCb3VuZC5wdXNoKFwibWF4bGVuZ3RoXCIpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgICAgYm91bmRPbmx5LnB1c2goXCJtYXhsZW5ndGhcIik7XG5cdCAgICB9XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChib3VuZE9ubHksIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBib3VuZDogXCJuZy1cIiArIGl0ZW0gfTtcblx0ICAgIH0pO1xuXG5cdCAgICBhbmd1bGFyLmZvckVhY2goYm90aEJvb2xlYW5BbmRCb3VuZCwgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgbmdNb2RlbEF0dHJpYnV0ZXNbaXRlbV0gPSB7IGJvb2xlYW46IGl0ZW0sIGJvdW5kOiBcIm5nLVwiICsgaXRlbSB9O1xuXHQgICAgfSk7XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChib3RoQXR0cmlidXRlQW5kQm91bmQsIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBhdHRyaWJ1dGU6IGl0ZW0sIGJvdW5kOiBcIm5nLVwiICsgaXRlbSB9O1xuXHQgICAgfSk7XG5cblx0ICAgIGFuZ3VsYXIuZm9yRWFjaChleHByZXNzaW9uT25seSwgZnVuY3Rpb24gKGl0ZW0pIHtcblx0ICAgICAgdmFyIHByb3BOYW1lID0gXCJvblwiICsgaXRlbS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSArIGl0ZW0uc3Vic3RyKDEpO1xuXHQgICAgICBuZ01vZGVsQXR0cmlidXRlc1twcm9wTmFtZV0gPSB7IGV4cHJlc3Npb246IFwibmctXCIgKyBpdGVtIH07XG5cdCAgICB9KTtcblxuXHQgICAgYW5ndWxhci5mb3JFYWNoKGF0dHJpYnV0ZU9ubHksIGZ1bmN0aW9uIChpdGVtKSB7XG5cdCAgICAgIG5nTW9kZWxBdHRyaWJ1dGVzW2l0ZW1dID0geyBhdHRyaWJ1dGU6IGl0ZW0gfTtcblx0ICAgIH0pO1xuXHQgICAgcmV0dXJuIG5nTW9kZWxBdHRyaWJ1dGVzO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGdldEVwVmFsdWUoZXAsIG5hbWUpIHtcblx0ICAgIHJldHVybiBlcFtcInRlbXBsYXRlT3B0aW9ucy5cIiArIG5hbWVdIHx8IGVwW1widGVtcGxhdGVPcHRpb25zWydcIiArIG5hbWUgKyBcIiddXCJdIHx8IGVwW1widGVtcGxhdGVPcHRpb25zW1xcXCJcIiArIG5hbWUgKyBcIlxcXCJdXCJdO1xuXHQgIH1cblxuXHQgIGZ1bmN0aW9uIGFkZElmTm90UHJlc2VudChub2RlcywgYXR0ciwgdmFsKSB7XG5cdCAgICBhbmd1bGFyLmZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG5cdCAgICAgIGlmICghbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cikpIHtcblx0ICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyLCB2YWwpO1xuXHQgICAgICB9XG5cdCAgICB9KTtcblx0ICB9XG5cdH1cblx0YWRkRm9ybWx5TmdNb2RlbEF0dHJzTWFuaXB1bGF0b3IuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1wiXTtcblxuXHQvLyBqc2hpbnQgLVcwMzVcblx0Ly8gZW1wdHkgdG8gaWxsdXN0cmF0ZSB0aGF0IGEgYm9vbGVhbiB3aWxsIG5vdCBiZSBhZGRlZCB2aWEgdmFsLmJvdW5kXG5cdC8vIGlmIHlvdSB3YW50IGl0IGFkZGVkIHZpYSB2YWwuYm91bmQsIHRoZW4gcHV0IGl0IGluIGV4cHJlc3Npb25Qcm9wZXJ0aWVzXG5cbi8qKiovIH0sXG4vKiAxNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBhZGRDdXN0b21UYWdzO1xuXG5cdC8vIEBuZ0luamVjdFxuXHRmdW5jdGlvbiBhZGRDdXN0b21UYWdzKCRkb2N1bWVudCkge1xuXHQgIGlmICgkZG9jdW1lbnQgJiYgJGRvY3VtZW50LmdldCkge1xuXHQgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgLy9JRTggY2hlY2sgLT5cblx0ICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDk2NDk2Ni9kZXRlY3QtaWUtdmVyc2lvbi1wcmlvci10by12OS1pbi1qYXZhc2NyaXB0LzEwOTY1MjAzIzEwOTY1MjAzXG5cdCAgICAgIHZhciBkb2N1bWVudCA9ICRkb2N1bWVudC5nZXQoMCk7XG5cdCAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXHQgICAgICBkaXYuaW5uZXJIVE1MID0gXCI8IS0tW2lmIGx0IElFIDldPjxpPjwvaT48IVtlbmRpZl0tLT5cIjtcblx0ICAgICAgdmFyIGlzSWVMZXNzVGhhbjkgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpXCIpLmxlbmd0aCA9PT0gMTtcblxuXHQgICAgICBpZiAoaXNJZUxlc3NUaGFuOSkge1xuXHQgICAgICAgIC8vYWRkIHRoZSBjdXN0b20gZWxlbWVudHMgdGhhdCB3ZSBuZWVkIGZvciBmb3JtbHlcblx0ICAgICAgICB2YXIgY3VzdG9tRWxlbWVudHMgPSBbXCJmb3JtbHktZmllbGRcIiwgXCJmb3JtbHktZm9ybVwiLCBcImZvcm1seS1jdXN0b20tdmFsaWRhdGlvblwiLCBcImZvcm1seS1mb2N1c1wiLCBcImZvcm1seS10cmFuc3Bvc2VcIl07XG5cdCAgICAgICAgYW5ndWxhci5mb3JFYWNoKGN1c3RvbUVsZW1lbnRzLCBmdW5jdGlvbiAoZWwpIHtcblx0ICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWwpO1xuXHQgICAgICAgIH0pO1xuXHQgICAgICB9XG5cdCAgICB9KSgpO1xuXHQgIH1cblx0fVxuXHRhZGRDdXN0b21UYWdzLiRpbmplY3QgPSBbXCIkZG9jdW1lbnRcIl07XG5cbi8qKiovIH0sXG4vKiAxNSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0dmFyIF9pbnRlcm9wUmVxdWlyZSA9IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9ialtcImRlZmF1bHRcIl0gOiBvYmo7IH07XG5cblx0Ly8gc29tZSB2ZXJzaW9ucyBvZiBhbmd1bGFyIGRvbid0IGV4cG9ydCB0aGUgYW5ndWxhciBtb2R1bGUgcHJvcGVybHksXG5cdC8vIHNvIHdlIGdldCBpdCBmcm9tIHdpbmRvdyBpbiB0aGlzIGNhc2UuXG5cblx0dmFyIGFuZ3VsYXIgPSBfaW50ZXJvcFJlcXVpcmUoX193ZWJwYWNrX3JlcXVpcmVfXygxNykpO1xuXG5cdGlmICghYW5ndWxhci52ZXJzaW9uKSB7XG5cdCAgYW5ndWxhciA9IHdpbmRvdy5hbmd1bGFyO1xuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0gYW5ndWxhcjtcblxuLyoqKi8gfSxcbi8qIDE2ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTZfXztcblxuLyoqKi8gfSxcbi8qIDE3ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMTdfXztcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHR2YXIgX2ludGVyb3BSZXF1aXJlID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqW1wiZGVmYXVsdFwiXSA6IG9iajsgfTtcblxuXHR2YXIgYW5ndWxhciA9IF9pbnRlcm9wUmVxdWlyZShfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KSk7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSB7IGZvcm1seUV2YWw6IGZvcm1seUV2YWwsIGdldEZpZWxkSWQ6IGdldEZpZWxkSWQsIHJldmVyc2VEZWVwTWVyZ2U6IHJldmVyc2VEZWVwTWVyZ2UsIGZpbmRCeU5vZGVOYW1lOiBmaW5kQnlOb2RlTmFtZSwgYXJyYXlpZnk6IGFycmF5aWZ5LCBleHRlbmRGdW5jdGlvbjogZXh0ZW5kRnVuY3Rpb24gfTtcblxuXHRmdW5jdGlvbiBmb3JtbHlFdmFsKHNjb3BlLCBleHByZXNzaW9uLCAkbW9kZWxWYWx1ZSwgJHZpZXdWYWx1ZSwgZXh0cmFMb2NhbHMpIHtcblx0ICBpZiAoYW5ndWxhci5pc0Z1bmN0aW9uKGV4cHJlc3Npb24pKSB7XG5cdCAgICByZXR1cm4gZXhwcmVzc2lvbigkdmlld1ZhbHVlLCAkbW9kZWxWYWx1ZSwgc2NvcGUsIGV4dHJhTG9jYWxzKTtcblx0ICB9IGVsc2Uge1xuXHQgICAgcmV0dXJuIHNjb3BlLiRldmFsKGV4cHJlc3Npb24sIGFuZ3VsYXIuZXh0ZW5kKHsgJHZpZXdWYWx1ZTogJHZpZXdWYWx1ZSwgJG1vZGVsVmFsdWU6ICRtb2RlbFZhbHVlIH0sIGV4dHJhTG9jYWxzKSk7XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0RmllbGRJZChmb3JtSWQsIG9wdGlvbnMsIGluZGV4KSB7XG5cdCAgaWYgKG9wdGlvbnMuaWQpIHtcblx0ICAgIHJldHVybiBvcHRpb25zLmlkO1xuXHQgIH1cblx0ICB2YXIgdHlwZSA9IG9wdGlvbnMudHlwZTtcblx0ICBpZiAoIXR5cGUgJiYgb3B0aW9ucy50ZW1wbGF0ZSkge1xuXHQgICAgdHlwZSA9IFwidGVtcGxhdGVcIjtcblx0ICB9IGVsc2UgaWYgKCF0eXBlICYmIG9wdGlvbnMudGVtcGxhdGVVcmwpIHtcblx0ICAgIHR5cGUgPSBcInRlbXBsYXRlVXJsXCI7XG5cdCAgfVxuXG5cdCAgcmV0dXJuIFtmb3JtSWQsIHR5cGUsIG9wdGlvbnMua2V5LCBpbmRleF0uam9pbihcIl9cIik7XG5cdH1cblxuXHRmdW5jdGlvbiByZXZlcnNlRGVlcE1lcmdlKGRlc3QpIHtcblx0ICBhbmd1bGFyLmZvckVhY2goYXJndW1lbnRzLCBmdW5jdGlvbiAoc3JjLCBpbmRleCkge1xuXHQgICAgaWYgKCFpbmRleCkge1xuXHQgICAgICByZXR1cm47XG5cdCAgICB9XG5cdCAgICBhbmd1bGFyLmZvckVhY2goc3JjLCBmdW5jdGlvbiAodmFsLCBwcm9wKSB7XG5cdCAgICAgIGlmICghYW5ndWxhci5pc0RlZmluZWQoZGVzdFtwcm9wXSkpIHtcblx0ICAgICAgICBkZXN0W3Byb3BdID0gYW5ndWxhci5jb3B5KHZhbCk7XG5cdCAgICAgIH0gZWxzZSBpZiAob2JqQW5kU2FtZVR5cGUoZGVzdFtwcm9wXSwgdmFsKSkge1xuXHQgICAgICAgIHJldmVyc2VEZWVwTWVyZ2UoZGVzdFtwcm9wXSwgdmFsKTtcblx0ICAgICAgfVxuXHQgICAgfSk7XG5cdCAgfSk7XG5cdH1cblxuXHRmdW5jdGlvbiBvYmpBbmRTYW1lVHlwZShvYmoxLCBvYmoyKSB7XG5cdCAgcmV0dXJuIGFuZ3VsYXIuaXNPYmplY3Qob2JqMSkgJiYgYW5ndWxhci5pc09iamVjdChvYmoyKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqMSkgPT09IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmoyKTtcblx0fVxuXG5cdC8vcmVjdXJzZSBkb3duIGEgbm9kZSB0cmVlIHRvIGZpbmQgYSBub2RlIHdpdGggbWF0Y2hpbmcgbm9kZU5hbWUsIGZvciBjdXN0b20gdGFncyBqUXVlcnkuZmluZCBkb2Vzbid0IHdvcmsgaW4gSUU4XG5cdGZ1bmN0aW9uIGZpbmRCeU5vZGVOYW1lKGVsLCBub2RlTmFtZSkge1xuXHQgIGlmICghZWwucHJvcCkge1xuXHQgICAgLy8gbm90IGEgalF1ZXJ5IG9yIGpxTGl0ZSBvYmplY3QgLT4gd3JhcCBpdFxuXHQgICAgZWwgPSBhbmd1bGFyLmVsZW1lbnQoZWwpO1xuXHQgIH1cblxuXHQgIGlmIChlbC5wcm9wKFwibm9kZU5hbWVcIikgPT09IG5vZGVOYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0ICAgIHJldHVybiBlbDtcblx0ICB9XG5cblx0ICB2YXIgYyA9IGVsLmNoaWxkcmVuKCk7XG5cdCAgZm9yICh2YXIgaSA9IDA7IGMgJiYgaSA8IGMubGVuZ3RoOyBpKyspIHtcblx0ICAgIHZhciBub2RlID0gZmluZEJ5Tm9kZU5hbWUoY1tpXSwgbm9kZU5hbWUpO1xuXHQgICAgaWYgKG5vZGUpIHtcblx0ICAgICAgcmV0dXJuIG5vZGU7XG5cdCAgICB9XG5cdCAgfVxuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlpZnkob2JqKSB7XG5cdCAgaWYgKG9iaiAmJiAhYW5ndWxhci5pc0FycmF5KG9iaikpIHtcblx0ICAgIG9iaiA9IFtvYmpdO1xuXHQgIH0gZWxzZSBpZiAoIW9iaikge1xuXHQgICAgb2JqID0gW107XG5cdCAgfVxuXHQgIHJldHVybiBvYmo7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmRGdW5jdGlvbigpIHtcblx0ICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZm5zID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG5cdCAgICBmbnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG5cdCAgfVxuXG5cdCAgcmV0dXJuIGZ1bmN0aW9uIGV4dGVuZGVkRnVuY3Rpb24oKSB7XG5cdCAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcblx0ICAgIGZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuXHQgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG5cdCAgICB9KTtcblx0ICB9O1xuXHR9XG5cbi8qKiovIH1cbi8qKioqKiovIF0pXG59KTtcbjtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYW5ndWxhci1mb3JtbHkvZGlzdC9mb3JtbHkuanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 4 */ +/***/ function(module, exports) { + + eval("module.exports = angular;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJhbmd1bGFyXCI/MTFkMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiI0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBhbmd1bGFyO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiYW5ndWxhclwiXG4vLyBtb2R1bGUgaWQgPSA0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 5 */ +/***/ function(module, exports, __webpack_require__) { + + eval("// angular-formly-templates-bootstrap version 4.3.2 built with ♥ by Astrism , Kent C. Dodds (ó ì_í)=óò=(ì_í ò)\n\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(3), __webpack_require__(2), __webpack_require__(4));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"angular-formly\", \"api-check\", \"angular\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ngFormlyTemplatesBootstrap\"] = factory(require(\"angular-formly\"), require(\"api-check\"), require(\"angular\"));\n\telse\n\t\troot[\"ngFormlyTemplatesBootstrap\"] = factory(root[\"ngFormly\"], root[\"apiCheck\"], root[\"angular\"]);\n})(this, function(__WEBPACK_EXTERNAL_MODULE_2__, __WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_8__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n/* 1 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'multiCheckbox',\n\t template: __webpack_require__(21),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional\n\t })\n\t },\n\t defaultOptions: {\n\t noFormControl: false,\n\t ngModelAttrs: {\n\t required: {\n\t attribute: '',\n\t bound: ''\n\t }\n\t }\n\t },\n\t apiCheckInstance: c,\n\t controller: /* @ngInject */[\"$scope\", function controller($scope) {\n\t var to = $scope.to;\n\t var opts = $scope.options;\n\t $scope.multiCheckbox = {\n\t checked: [],\n\t change: setModel\n\t };\n\t\n\t // initialize the checkboxes check property\n\t var modelValue = $scope.model[opts.key];\n\t if (angular.isArray(modelValue)) {\n\t (function () {\n\t var valueProp = to.valueProp || 'value';\n\t angular.forEach(to.options, function (v, index) {\n\t $scope.multiCheckbox.checked[index] = modelValue.indexOf(v[valueProp]) !== -1;\n\t });\n\t })();\n\t }\n\t\n\t function checkValidity(expressionValue) {\n\t var valid = angular.isArray($scope.model[opts.key]) && $scope.model[opts.key].length > 0 && expressionValue;\n\t\n\t $scope.fc.$setValidity('required', valid);\n\t }\n\t\n\t function setModel() {\n\t $scope.model[opts.key] = [];\n\t angular.forEach($scope.multiCheckbox.checked, function (checkbox, index) {\n\t if (checkbox) {\n\t $scope.model[opts.key].push(to.options[index][to.valueProp || 'value']);\n\t }\n\t });\n\t\n\t // Must make sure we mark as touched because only the last checkbox due to a bug in angular.\n\t $scope.fc.$setTouched();\n\t checkValidity(true);\n\t }\n\t\n\t if (opts.expressionProperties && opts.expressionProperties.required) {\n\t $scope.$watch($scope.options.expressionProperties.required, function (newValue) {\n\t checkValidity(newValue);\n\t });\n\t }\n\t\n\t if ($scope.to.required) {\n\t var unwatchFormControl = $scope.$watch('fc', function (newValue) {\n\t if (!newValue) {\n\t return;\n\t }\n\t checkValidity(true);\n\t unwatchFormControl;\n\t });\n\t }\n\t }]\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 2 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_2__;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// some versions of angular don't export the angular module properly,\n\t// so we get it from window in this case.\n\t'use strict';\n\t\n\tvar angular = __webpack_require__(8);\n\tif (!angular.version) {\n\t angular = window.angular;\n\t}\n\tmodule.exports = angular;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addWrappers);\n\t\n\t function addWrappers(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setWrapper([{\n\t name: 'bootstrapLabel',\n\t template: __webpack_require__(17),\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t label: c.string,\n\t required: c.bool.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t }, { name: 'bootstrapHasError', template: __webpack_require__(18) }]);\n\t }\n\t addWrappers.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t __webpack_require__(10)(ngModule);\n\t __webpack_require__(1)(ngModule);\n\t __webpack_require__(12)(ngModule);\n\t __webpack_require__(9)(ngModule);\n\t __webpack_require__(13)(ngModule);\n\t __webpack_require__(14)(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 7 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\t\n\tvar _addons = __webpack_require__(15);\n\t\n\tvar _addons2 = _interopRequireDefault(_addons);\n\t\n\tvar _description = __webpack_require__(16);\n\t\n\tvar _description2 = _interopRequireDefault(_description);\n\t\n\texports['default'] = function (ngModule) {\n\t (0, _addons2['default'])(ngModule);\n\t (0, _description2['default'])(ngModule);\n\t};\n\t\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __WEBPACK_EXTERNAL_MODULE_8__;\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addRadioType);\n\t\n\t function addRadioType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'radio',\n\t template: __webpack_require__(19),\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t noFormControl: false\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addRadioType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 10 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addCheckboxType);\n\t\n\t function addCheckboxType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'checkbox',\n\t template: __webpack_require__(20),\n\t wrapper: ['bootstrapHasError'],\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t label: c.string\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addCheckboxType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\tvar ngModuleName = 'formlyBootstrap';\n\tvar angular = __webpack_require__(4);\n\tvar ngModule = angular.module(ngModuleName, [__webpack_require__(2)]);\n\tngModule.constant('formlyBootstrapApiCheck', __webpack_require__(3)({\n\t output: {\n\t prefix: 'angular-formly-bootstrap'\n\t }\n\t}));\n\tngModule.constant('formlyBootstrapVersion', (\"4.3.2\"));\n\t\n\t__webpack_require__(5)(ngModule);\n\t__webpack_require__(6)(ngModule);\n\t__webpack_require__(7)(ngModule);\n\t\n\texports['default'] = ngModuleName;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addInputType);\n\t\n\t function addInputType(formlyConfigProvider) {\n\t formlyConfigProvider.setType({\n\t name: 'input',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError']\n\t });\n\t }\n\t addInputType.$inject = [\"formlyConfigProvider\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\tfunction _defineProperty(obj, key, value) { return Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); }\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addSelectType);\n\t\n\t var template = '';\n\t\n\t function addSelectType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'select',\n\t template: template,\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: function defaultOptions(options) {\n\t /* jshint maxlen:195 */\n\t var ngOptions = options.templateOptions.ngOptions || 'option[to.valueProp || \\'value\\'] as option[to.labelProp || \\'name\\'] group by option[to.groupProp || \\'group\\'] for option in to.options';\n\t return {\n\t ngModelAttrs: _defineProperty({}, ngOptions, {\n\t value: 'ng-options'\n\t })\n\t };\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t options: c.arrayOf(c.object),\n\t labelProp: c.string.optional,\n\t valueProp: c.string.optional,\n\t groupProp: c.string.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addSelectType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.config(addTextareaType);\n\t\n\t function addTextareaType(formlyConfigProvider, formlyBootstrapApiCheck) {\n\t var c = formlyBootstrapApiCheck;\n\t formlyConfigProvider.setType({\n\t name: 'textarea',\n\t template: '',\n\t wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n\t defaultOptions: {\n\t ngModelAttrs: {\n\t rows: { attribute: 'rows' },\n\t cols: { attribute: 'cols' }\n\t }\n\t },\n\t apiCheck: {\n\t templateOptions: c.shape({\n\t rows: c.number.optional,\n\t cols: c.number.optional\n\t })\n\t },\n\t apiCheckInstance: c\n\t });\n\t }\n\t addTextareaType.$inject = [\"formlyConfigProvider\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addAddonsManipulator);\n\t\n\t function addAddonsManipulator(formlyConfig, formlyBootstrapApiCheck) {\n\t var addonTemplate = __webpack_require__(22);\n\t var addonChecker = formlyBootstrapApiCheck.shape({\n\t 'class': formlyBootstrapApiCheck.string.optional,\n\t text: formlyBootstrapApiCheck.string.optional,\n\t onClick: formlyBootstrapApiCheck.func.optional\n\t }).strict.optional;\n\t var api = formlyBootstrapApiCheck.shape({\n\t templateOptions: formlyBootstrapApiCheck.shape({\n\t addonLeft: addonChecker,\n\t addonRight: addonChecker\n\t })\n\t });\n\t formlyConfig.templateManipulators.preWrapper.push(function (template, options) {\n\t if (!options.templateOptions.addonLeft && !options.templateOptions.addonRight) {\n\t return template;\n\t }\n\t formlyBootstrapApiCheck.warn([api], [options]);\n\t return addonTemplate.replace('', template);\n\t });\n\t }\n\t addAddonsManipulator.$inject = [\"formlyConfig\", \"formlyBootstrapApiCheck\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 16 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', {\n\t value: true\n\t});\n\t\n\texports['default'] = function (ngModule) {\n\t ngModule.run(addDescriptionManipulator);\n\t\n\t function addDescriptionManipulator(formlyConfig) {\n\t formlyConfig.templateManipulators.preWrapper.push(function ariaDescribedBy(template, options, scope) {\n\t if (angular.isDefined(options.templateOptions.description)) {\n\t var el = document.createElement('div');\n\t el.appendChild(angular.element(template)[0]);\n\t el.appendChild(angular.element('

    ' + '{{to.description}}' + '

    ')[0]);\n\t var modelEls = angular.element(el.querySelectorAll('[ng-model]'));\n\t if (modelEls) {\n\t modelEls.attr('aria-describedby', scope.id + '_description');\n\t }\n\t return el.innerHTML;\n\t } else {\n\t return template;\n\t }\n\t });\n\t }\n\t addDescriptionManipulator.$inject = [\"formlyConfig\"];\n\t};\n\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 17 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n \\n \\n
    \\n\"\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n \\n
    \\n\"\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n
    \\n \\n
    \\n
    \\n\"\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n\\t\\n
    \\n\"\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n
    \\n \\n
    \\n
    \\n\"\n\n/***/ },\n/* 22 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = \"
    \\n
    \\n \\n {{to.addonLeft.text}}\\n
    \\n \\n
    \\n \\n {{to.addonRight.text}}\\n
    \\n
    \\n\"\n\n/***/ }\n/******/ ])\n});\n;\n//# sourceMappingURL=angular-formly-templates-bootstrap.js.map//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9+L2FuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAvZGlzdC9hbmd1bGFyLWZvcm1seS10ZW1wbGF0ZXMtYm9vdHN0cmFwLmpzP2Y1YjUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZCxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsTUFBTSxHQUFHLCtEQUErRDtBQUN4RTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRix1Q0FBdUMsdUNBQXVDLGtCQUFrQjs7QUFFaEc7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsUUFBUTtBQUNSO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRiw0Q0FBNEMseUNBQXlDLHFFQUFxRSxFQUFFOztBQUU1SjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixRQUFRO0FBQ1I7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxFQUFFOztBQUVGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixvQkFBb0I7QUFDdEMsa0JBQWtCO0FBQ2xCO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1IsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJLGdCQUFnQjtBQUN2SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBOztBQUVBOztBQUVBLE9BQU87QUFDUDtBQUNBOztBQUVBLDJDQUEyQyxJQUFJLG1DQUFtQyxVQUFVLFFBQVEsd0JBQXdCOztBQUU1SCxPQUFPO0FBQ1A7QUFDQTs7QUFFQSx5REFBeUQsdUJBQXVCOztBQUVoRixPQUFPO0FBQ1A7QUFDQTs7QUFFQSxpTEFBaUwsa0JBQWtCLG1KQUFtSixnQ0FBZ0M7O0FBRXRYLE9BQU87QUFDUDtBQUNBOztBQUVBLHFMQUFxTCxVQUFVLFFBQVEsd0JBQXdCOztBQUUvTixPQUFPO0FBQ1A7QUFDQTs7QUFFQSx1TEFBdUwsa0JBQWtCLHlIQUF5SCxnQ0FBZ0M7O0FBRWxXLE9BQU87QUFDUDtBQUNBOztBQUVBLG9DQUFvQyw2Q0FBNkMsaUdBQWlHLHFEQUFxRCxxRkFBcUYsb0JBQW9CLGtGQUFrRixtQkFBbUIsK0pBQStKLHNEQUFzRCxzRkFBc0YscUJBQXFCLG9GQUFvRixvQkFBb0I7O0FBRTcxQjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EiLCJmaWxlIjoiNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGFuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAgdmVyc2lvbiA0LjMuMiBidWlsdCB3aXRoIOKZpSBieSBBc3RyaXNtIDxhc3RyaXNtc0BnbWFpbC5jb20+LCBLZW50IEMuIERvZGRzIDxrZW50QGRvZGRzZmFtaWx5LnVzPiAow7Mgw6xfw60pPcOzw7I9KMOsX8OtIMOyKVxuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJhbmd1bGFyLWZvcm1seVwiKSwgcmVxdWlyZShcImFwaS1jaGVja1wiKSwgcmVxdWlyZShcImFuZ3VsYXJcIikpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoW1wiYW5ndWxhci1mb3JtbHlcIiwgXCJhcGktY2hlY2tcIiwgXCJhbmd1bGFyXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIm5nRm9ybWx5VGVtcGxhdGVzQm9vdHN0cmFwXCJdID0gZmFjdG9yeShyZXF1aXJlKFwiYW5ndWxhci1mb3JtbHlcIiksIHJlcXVpcmUoXCJhcGktY2hlY2tcIiksIHJlcXVpcmUoXCJhbmd1bGFyXCIpKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJuZ0Zvcm1seVRlbXBsYXRlc0Jvb3RzdHJhcFwiXSA9IGZhY3Rvcnkocm9vdFtcIm5nRm9ybWx5XCJdLCByb290W1wiYXBpQ2hlY2tcIl0sIHJvb3RbXCJhbmd1bGFyXCJdKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzNfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV84X18pIHtcbnJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbi8qKioqKiovIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4vKioqKioqLyBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fSxcbi8qKioqKiovIFx0XHRcdGlkOiBtb2R1bGVJZCxcbi8qKioqKiovIFx0XHRcdGxvYWRlZDogZmFsc2Vcbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcbi8qKioqKiovXG4vKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuLyoqKioqKi8gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuLyoqKioqKi9cbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi9cbi8qKioqKiovXG4vKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4vKioqKioqLyBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4vKioqKioqL1xuLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuLyoqKioqKi9cbi8qKioqKiovIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbi8qKioqKiovIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcbi8qKioqKiovXG4vKioqKioqLyBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLyoqKioqKi8gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcbi8qKioqKiovIH0pXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gKFtcbi8qIDAgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XG5cbi8qKiovIH0sXG4vKiAxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkQ2hlY2tib3hUeXBlKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkQ2hlY2tib3hUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnbXVsdGlDaGVja2JveCcsXG5cdCAgICAgIHRlbXBsYXRlOiBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKSxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddLFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBvcHRpb25zOiBjLmFycmF5T2YoYy5vYmplY3QpLFxuXHQgICAgICAgICAgbGFiZWxQcm9wOiBjLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgICAgIHZhbHVlUHJvcDogYy5zdHJpbmcub3B0aW9uYWxcblx0ICAgICAgICB9KVxuXHQgICAgICB9LFxuXHQgICAgICBkZWZhdWx0T3B0aW9uczoge1xuXHQgICAgICAgIG5vRm9ybUNvbnRyb2w6IGZhbHNlLFxuXHQgICAgICAgIG5nTW9kZWxBdHRyczoge1xuXHQgICAgICAgICAgcmVxdWlyZWQ6IHtcblx0ICAgICAgICAgICAgYXR0cmlidXRlOiAnJyxcblx0ICAgICAgICAgICAgYm91bmQ6ICcnXG5cdCAgICAgICAgICB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVja0luc3RhbmNlOiBjLFxuXHQgICAgICBjb250cm9sbGVyOiAvKiBAbmdJbmplY3QgKi9bXCIkc2NvcGVcIiwgZnVuY3Rpb24gY29udHJvbGxlcigkc2NvcGUpIHtcblx0ICAgICAgICB2YXIgdG8gPSAkc2NvcGUudG87XG5cdCAgICAgICAgdmFyIG9wdHMgPSAkc2NvcGUub3B0aW9ucztcblx0ICAgICAgICAkc2NvcGUubXVsdGlDaGVja2JveCA9IHtcblx0ICAgICAgICAgIGNoZWNrZWQ6IFtdLFxuXHQgICAgICAgICAgY2hhbmdlOiBzZXRNb2RlbFxuXHQgICAgICAgIH07XG5cdFxuXHQgICAgICAgIC8vIGluaXRpYWxpemUgdGhlIGNoZWNrYm94ZXMgY2hlY2sgcHJvcGVydHlcblx0ICAgICAgICB2YXIgbW9kZWxWYWx1ZSA9ICRzY29wZS5tb2RlbFtvcHRzLmtleV07XG5cdCAgICAgICAgaWYgKGFuZ3VsYXIuaXNBcnJheShtb2RlbFZhbHVlKSkge1xuXHQgICAgICAgICAgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIHZhbHVlUHJvcCA9IHRvLnZhbHVlUHJvcCB8fCAndmFsdWUnO1xuXHQgICAgICAgICAgICBhbmd1bGFyLmZvckVhY2godG8ub3B0aW9ucywgZnVuY3Rpb24gKHYsIGluZGV4KSB7XG5cdCAgICAgICAgICAgICAgJHNjb3BlLm11bHRpQ2hlY2tib3guY2hlY2tlZFtpbmRleF0gPSBtb2RlbFZhbHVlLmluZGV4T2Yodlt2YWx1ZVByb3BdKSAhPT0gLTE7XG5cdCAgICAgICAgICAgIH0pO1xuXHQgICAgICAgICAgfSkoKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGZ1bmN0aW9uIGNoZWNrVmFsaWRpdHkoZXhwcmVzc2lvblZhbHVlKSB7XG5cdCAgICAgICAgICB2YXIgdmFsaWQgPSBhbmd1bGFyLmlzQXJyYXkoJHNjb3BlLm1vZGVsW29wdHMua2V5XSkgJiYgJHNjb3BlLm1vZGVsW29wdHMua2V5XS5sZW5ndGggPiAwICYmIGV4cHJlc3Npb25WYWx1ZTtcblx0XG5cdCAgICAgICAgICAkc2NvcGUuZmMuJHNldFZhbGlkaXR5KCdyZXF1aXJlZCcsIHZhbGlkKTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGZ1bmN0aW9uIHNldE1vZGVsKCkge1xuXHQgICAgICAgICAgJHNjb3BlLm1vZGVsW29wdHMua2V5XSA9IFtdO1xuXHQgICAgICAgICAgYW5ndWxhci5mb3JFYWNoKCRzY29wZS5tdWx0aUNoZWNrYm94LmNoZWNrZWQsIGZ1bmN0aW9uIChjaGVja2JveCwgaW5kZXgpIHtcblx0ICAgICAgICAgICAgaWYgKGNoZWNrYm94KSB7XG5cdCAgICAgICAgICAgICAgJHNjb3BlLm1vZGVsW29wdHMua2V5XS5wdXNoKHRvLm9wdGlvbnNbaW5kZXhdW3RvLnZhbHVlUHJvcCB8fCAndmFsdWUnXSk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgIH0pO1xuXHRcblx0ICAgICAgICAgIC8vIE11c3QgbWFrZSBzdXJlIHdlIG1hcmsgYXMgdG91Y2hlZCBiZWNhdXNlIG9ubHkgdGhlIGxhc3QgY2hlY2tib3ggZHVlIHRvIGEgYnVnIGluIGFuZ3VsYXIuXG5cdCAgICAgICAgICAkc2NvcGUuZmMuJHNldFRvdWNoZWQoKTtcblx0ICAgICAgICAgIGNoZWNrVmFsaWRpdHkodHJ1ZSk7XG5cdCAgICAgICAgfVxuXHRcblx0ICAgICAgICBpZiAob3B0cy5leHByZXNzaW9uUHJvcGVydGllcyAmJiBvcHRzLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLnJlcXVpcmVkKSB7XG5cdCAgICAgICAgICAkc2NvcGUuJHdhdGNoKCRzY29wZS5vcHRpb25zLmV4cHJlc3Npb25Qcm9wZXJ0aWVzLnJlcXVpcmVkLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcblx0ICAgICAgICAgICAgY2hlY2tWYWxpZGl0eShuZXdWYWx1ZSk7XG5cdCAgICAgICAgICB9KTtcblx0ICAgICAgICB9XG5cdFxuXHQgICAgICAgIGlmICgkc2NvcGUudG8ucmVxdWlyZWQpIHtcblx0ICAgICAgICAgIHZhciB1bndhdGNoRm9ybUNvbnRyb2wgPSAkc2NvcGUuJHdhdGNoKCdmYycsIGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuXHQgICAgICAgICAgICBpZiAoIW5ld1ZhbHVlKSB7XG5cdCAgICAgICAgICAgICAgcmV0dXJuO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIGNoZWNrVmFsaWRpdHkodHJ1ZSk7XG5cdCAgICAgICAgICAgIHVud2F0Y2hGb3JtQ29udHJvbDtcblx0ICAgICAgICAgIH0pO1xuXHQgICAgICAgIH1cblx0ICAgICAgfV1cblx0ICAgIH0pO1xuXHQgIH1cblx0ICBhZGRDaGVja2JveFR5cGUuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1Byb3ZpZGVyXCIsIFwiZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2tcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG4vKioqLyB9LFxuLyogMyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzNfXztcblxuLyoqKi8gfSxcbi8qIDQgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdC8vIHNvbWUgdmVyc2lvbnMgb2YgYW5ndWxhciBkb24ndCBleHBvcnQgdGhlIGFuZ3VsYXIgbW9kdWxlIHByb3Blcmx5LFxuXHQvLyBzbyB3ZSBnZXQgaXQgZnJvbSB3aW5kb3cgaW4gdGhpcyBjYXNlLlxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHR2YXIgYW5ndWxhciA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XG5cdGlmICghYW5ndWxhci52ZXJzaW9uKSB7XG5cdCAgYW5ndWxhciA9IHdpbmRvdy5hbmd1bGFyO1xuXHR9XG5cdG1vZHVsZS5leHBvcnRzID0gYW5ndWxhcjtcblxuLyoqKi8gfSxcbi8qIDUgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLmNvbmZpZyhhZGRXcmFwcGVycyk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFdyYXBwZXJzKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFdyYXBwZXIoW3tcblx0ICAgICAgbmFtZTogJ2Jvb3RzdHJhcExhYmVsJyxcblx0ICAgICAgdGVtcGxhdGU6IF9fd2VicGFja19yZXF1aXJlX18oMTcpLFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBsYWJlbDogYy5zdHJpbmcsXG5cdCAgICAgICAgICByZXF1aXJlZDogYy5ib29sLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSwgeyBuYW1lOiAnYm9vdHN0cmFwSGFzRXJyb3InLCB0ZW1wbGF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygxOCkgfV0pO1xuXHQgIH1cblx0ICBhZGRXcmFwcGVycy4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTApKG5nTW9kdWxlKTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKG5nTW9kdWxlKTtcblx0ICBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKShuZ01vZHVsZSk7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXyg5KShuZ01vZHVsZSk7XG5cdCAgX193ZWJwYWNrX3JlcXVpcmVfXygxMykobmdNb2R1bGUpO1xuXHQgIF9fd2VicGFja19yZXF1aXJlX18oMTQpKG5nTW9kdWxlKTtcblx0fTtcblx0XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXHRcblx0dmFyIF9hZGRvbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcblx0XG5cdHZhciBfYWRkb25zMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2FkZG9ucyk7XG5cdFxuXHR2YXIgX2Rlc2NyaXB0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XG5cdFxuXHR2YXIgX2Rlc2NyaXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2Rlc2NyaXB0aW9uKTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgICgwLCBfYWRkb25zMlsnZGVmYXVsdCddKShuZ01vZHVsZSk7XG5cdCAgKDAsIF9kZXNjcmlwdGlvbjJbJ2RlZmF1bHQnXSkobmdNb2R1bGUpO1xuXHR9O1xuXHRcblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiA4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfOF9fO1xuXG4vKioqLyB9LFxuLyogOSAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKG5nTW9kdWxlKSB7XG5cdCAgbmdNb2R1bGUuY29uZmlnKGFkZFJhZGlvVHlwZSk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFJhZGlvVHlwZShmb3JtbHlDb25maWdQcm92aWRlciwgZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2spIHtcblx0ICAgIHZhciBjID0gZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2s7XG5cdCAgICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcblx0ICAgICAgbmFtZTogJ3JhZGlvJyxcblx0ICAgICAgdGVtcGxhdGU6IF9fd2VicGFja19yZXF1aXJlX18oMTkpLFxuXHQgICAgICB3cmFwcGVyOiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ10sXG5cdCAgICAgIGRlZmF1bHRPcHRpb25zOiB7XG5cdCAgICAgICAgbm9Gb3JtQ29udHJvbDogZmFsc2Vcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2s6IHtcblx0ICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IGMuc2hhcGUoe1xuXHQgICAgICAgICAgb3B0aW9uczogYy5hcnJheU9mKGMub2JqZWN0KSxcblx0ICAgICAgICAgIGxhYmVsUHJvcDogYy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgICAgICB2YWx1ZVByb3A6IGMuc3RyaW5nLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFJhZGlvVHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkQ2hlY2tib3hUeXBlKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkQ2hlY2tib3hUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnY2hlY2tib3gnLFxuXHQgICAgICB0ZW1wbGF0ZTogX193ZWJwYWNrX3JlcXVpcmVfXygyMCksXG5cdCAgICAgIHdyYXBwZXI6IFsnYm9vdHN0cmFwSGFzRXJyb3InXSxcblx0ICAgICAgYXBpQ2hlY2s6IHtcblx0ICAgICAgICB0ZW1wbGF0ZU9wdGlvbnM6IGMuc2hhcGUoe1xuXHQgICAgICAgICAgbGFiZWw6IGMuc3RyaW5nXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZENoZWNrYm94VHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDExICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdHZhciBuZ01vZHVsZU5hbWUgPSAnZm9ybWx5Qm9vdHN0cmFwJztcblx0dmFyIGFuZ3VsYXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xuXHR2YXIgbmdNb2R1bGUgPSBhbmd1bGFyLm1vZHVsZShuZ01vZHVsZU5hbWUsIFtfX3dlYnBhY2tfcmVxdWlyZV9fKDIpXSk7XG5cdG5nTW9kdWxlLmNvbnN0YW50KCdmb3JtbHlCb290c3RyYXBBcGlDaGVjaycsIF9fd2VicGFja19yZXF1aXJlX18oMykoe1xuXHQgIG91dHB1dDoge1xuXHQgICAgcHJlZml4OiAnYW5ndWxhci1mb3JtbHktYm9vdHN0cmFwJ1xuXHQgIH1cblx0fSkpO1xuXHRuZ01vZHVsZS5jb25zdGFudCgnZm9ybWx5Qm9vdHN0cmFwVmVyc2lvbicsIChcIjQuMy4yXCIpKTtcblx0XG5cdF9fd2VicGFja19yZXF1aXJlX18oNSkobmdNb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fKDYpKG5nTW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXyg3KShuZ01vZHVsZSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBuZ01vZHVsZU5hbWU7XG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMTIgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLmNvbmZpZyhhZGRJbnB1dFR5cGUpO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRJbnB1dFR5cGUoZm9ybWx5Q29uZmlnUHJvdmlkZXIpIHtcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnaW5wdXQnLFxuXHQgICAgICB0ZW1wbGF0ZTogJzxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5nLW1vZGVsPVwibW9kZWxbb3B0aW9ucy5rZXldXCI+Jyxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddXG5cdCAgICB9KTtcblx0ICB9XG5cdCAgYWRkSW5wdXRUeXBlLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdQcm92aWRlclwiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDEzICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5jb25maWcoYWRkU2VsZWN0VHlwZSk7XG5cdFxuXHQgIHZhciB0ZW1wbGF0ZSA9ICc8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmctbW9kZWw9XCJtb2RlbFtvcHRpb25zLmtleV1cIj48L3NlbGVjdD4nO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRTZWxlY3RUeXBlKGZvcm1seUNvbmZpZ1Byb3ZpZGVyLCBmb3JtbHlCb290c3RyYXBBcGlDaGVjaykge1xuXHQgICAgdmFyIGMgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjaztcblx0ICAgIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuXHQgICAgICBuYW1lOiAnc2VsZWN0Jyxcblx0ICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuXHQgICAgICB3cmFwcGVyOiBbJ2Jvb3RzdHJhcExhYmVsJywgJ2Jvb3RzdHJhcEhhc0Vycm9yJ10sXG5cdCAgICAgIGRlZmF1bHRPcHRpb25zOiBmdW5jdGlvbiBkZWZhdWx0T3B0aW9ucyhvcHRpb25zKSB7XG5cdCAgICAgICAgLyoganNoaW50IG1heGxlbjoxOTUgKi9cblx0ICAgICAgICB2YXIgbmdPcHRpb25zID0gb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMubmdPcHRpb25zIHx8ICdvcHRpb25bdG8udmFsdWVQcm9wIHx8IFxcJ3ZhbHVlXFwnXSBhcyBvcHRpb25bdG8ubGFiZWxQcm9wIHx8IFxcJ25hbWVcXCddIGdyb3VwIGJ5IG9wdGlvblt0by5ncm91cFByb3AgfHwgXFwnZ3JvdXBcXCddIGZvciBvcHRpb24gaW4gdG8ub3B0aW9ucyc7XG5cdCAgICAgICAgcmV0dXJuIHtcblx0ICAgICAgICAgIG5nTW9kZWxBdHRyczogX2RlZmluZVByb3BlcnR5KHt9LCBuZ09wdGlvbnMsIHtcblx0ICAgICAgICAgICAgdmFsdWU6ICduZy1vcHRpb25zJ1xuXHQgICAgICAgICAgfSlcblx0ICAgICAgICB9O1xuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICBvcHRpb25zOiBjLmFycmF5T2YoYy5vYmplY3QpLFxuXHQgICAgICAgICAgbGFiZWxQcm9wOiBjLnN0cmluZy5vcHRpb25hbCxcblx0ICAgICAgICAgIHZhbHVlUHJvcDogYy5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgICAgICBncm91cFByb3A6IGMuc3RyaW5nLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFNlbGVjdFR5cGUuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1Byb3ZpZGVyXCIsIFwiZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2tcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAxNCAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0J3VzZSBzdHJpY3QnO1xuXHRcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywge1xuXHQgIHZhbHVlOiB0cnVlXG5cdH0pO1xuXHRcblx0ZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKG5nTW9kdWxlKSB7XG5cdCAgbmdNb2R1bGUuY29uZmlnKGFkZFRleHRhcmVhVHlwZSk7XG5cdFxuXHQgIGZ1bmN0aW9uIGFkZFRleHRhcmVhVHlwZShmb3JtbHlDb25maWdQcm92aWRlciwgZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2spIHtcblx0ICAgIHZhciBjID0gZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2s7XG5cdCAgICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcblx0ICAgICAgbmFtZTogJ3RleHRhcmVhJyxcblx0ICAgICAgdGVtcGxhdGU6ICc8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5XVwiPjwvdGV4dGFyZWE+Jyxcblx0ICAgICAgd3JhcHBlcjogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddLFxuXHQgICAgICBkZWZhdWx0T3B0aW9uczoge1xuXHQgICAgICAgIG5nTW9kZWxBdHRyczoge1xuXHQgICAgICAgICAgcm93czogeyBhdHRyaWJ1dGU6ICdyb3dzJyB9LFxuXHQgICAgICAgICAgY29sczogeyBhdHRyaWJ1dGU6ICdjb2xzJyB9XG5cdCAgICAgICAgfVxuXHQgICAgICB9LFxuXHQgICAgICBhcGlDaGVjazoge1xuXHQgICAgICAgIHRlbXBsYXRlT3B0aW9uczogYy5zaGFwZSh7XG5cdCAgICAgICAgICByb3dzOiBjLm51bWJlci5vcHRpb25hbCxcblx0ICAgICAgICAgIGNvbHM6IGMubnVtYmVyLm9wdGlvbmFsXG5cdCAgICAgICAgfSlcblx0ICAgICAgfSxcblx0ICAgICAgYXBpQ2hlY2tJbnN0YW5jZTogY1xuXHQgICAgfSk7XG5cdCAgfVxuXHQgIGFkZFRleHRhcmVhVHlwZS4kaW5qZWN0ID0gW1wiZm9ybWx5Q29uZmlnUHJvdmlkZXJcIiwgXCJmb3JtbHlCb290c3RyYXBBcGlDaGVja1wiXTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcblxuLyoqKi8gfSxcbi8qIDE1ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHQndXNlIHN0cmljdCc7XG5cdFxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7XG5cdCAgdmFsdWU6IHRydWVcblx0fSk7XG5cdFxuXHRleHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAobmdNb2R1bGUpIHtcblx0ICBuZ01vZHVsZS5ydW4oYWRkQWRkb25zTWFuaXB1bGF0b3IpO1xuXHRcblx0ICBmdW5jdGlvbiBhZGRBZGRvbnNNYW5pcHVsYXRvcihmb3JtbHlDb25maWcsIGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrKSB7XG5cdCAgICB2YXIgYWRkb25UZW1wbGF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oMjIpO1xuXHQgICAgdmFyIGFkZG9uQ2hlY2tlciA9IGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrLnNoYXBlKHtcblx0ICAgICAgJ2NsYXNzJzogZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2suc3RyaW5nLm9wdGlvbmFsLFxuXHQgICAgICB0ZXh0OiBmb3JtbHlCb290c3RyYXBBcGlDaGVjay5zdHJpbmcub3B0aW9uYWwsXG5cdCAgICAgIG9uQ2xpY2s6IGZvcm1seUJvb3RzdHJhcEFwaUNoZWNrLmZ1bmMub3B0aW9uYWxcblx0ICAgIH0pLnN0cmljdC5vcHRpb25hbDtcblx0ICAgIHZhciBhcGkgPSBmb3JtbHlCb290c3RyYXBBcGlDaGVjay5zaGFwZSh7XG5cdCAgICAgIHRlbXBsYXRlT3B0aW9uczogZm9ybWx5Qm9vdHN0cmFwQXBpQ2hlY2suc2hhcGUoe1xuXHQgICAgICAgIGFkZG9uTGVmdDogYWRkb25DaGVja2VyLFxuXHQgICAgICAgIGFkZG9uUmlnaHQ6IGFkZG9uQ2hlY2tlclxuXHQgICAgICB9KVxuXHQgICAgfSk7XG5cdCAgICBmb3JtbHlDb25maWcudGVtcGxhdGVNYW5pcHVsYXRvcnMucHJlV3JhcHBlci5wdXNoKGZ1bmN0aW9uICh0ZW1wbGF0ZSwgb3B0aW9ucykge1xuXHQgICAgICBpZiAoIW9wdGlvbnMudGVtcGxhdGVPcHRpb25zLmFkZG9uTGVmdCAmJiAhb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuYWRkb25SaWdodCkge1xuXHQgICAgICAgIHJldHVybiB0ZW1wbGF0ZTtcblx0ICAgICAgfVxuXHQgICAgICBmb3JtbHlCb290c3RyYXBBcGlDaGVjay53YXJuKFthcGldLCBbb3B0aW9uc10pO1xuXHQgICAgICByZXR1cm4gYWRkb25UZW1wbGF0ZS5yZXBsYWNlKCc8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT4nLCB0ZW1wbGF0ZSk7XG5cdCAgICB9KTtcblx0ICB9XG5cdCAgYWRkQWRkb25zTWFuaXB1bGF0b3IuJGluamVjdCA9IFtcImZvcm1seUNvbmZpZ1wiLCBcImZvcm1seUJvb3RzdHJhcEFwaUNoZWNrXCJdO1xuXHR9O1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuXG4vKioqLyB9LFxuLyogMTYgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdCd1c2Ugc3RyaWN0Jztcblx0XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHtcblx0ICB2YWx1ZTogdHJ1ZVxuXHR9KTtcblx0XG5cdGV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChuZ01vZHVsZSkge1xuXHQgIG5nTW9kdWxlLnJ1bihhZGREZXNjcmlwdGlvbk1hbmlwdWxhdG9yKTtcblx0XG5cdCAgZnVuY3Rpb24gYWRkRGVzY3JpcHRpb25NYW5pcHVsYXRvcihmb3JtbHlDb25maWcpIHtcblx0ICAgIGZvcm1seUNvbmZpZy50ZW1wbGF0ZU1hbmlwdWxhdG9ycy5wcmVXcmFwcGVyLnB1c2goZnVuY3Rpb24gYXJpYURlc2NyaWJlZEJ5KHRlbXBsYXRlLCBvcHRpb25zLCBzY29wZSkge1xuXHQgICAgICBpZiAoYW5ndWxhci5pc0RlZmluZWQob3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24pKSB7XG5cdCAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cdCAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYW5ndWxhci5lbGVtZW50KHRlbXBsYXRlKVswXSk7XG5cdCAgICAgICAgZWwuYXBwZW5kQ2hpbGQoYW5ndWxhci5lbGVtZW50KCc8cCBpZD1cIicgKyBzY29wZS5pZCArICdfZGVzY3JpcHRpb25cIicgKyAnY2xhc3M9XCJoZWxwLWJsb2NrXCInICsgJ25nLWlmPVwidG8uZGVzY3JpcHRpb25cIj4nICsgJ3t7dG8uZGVzY3JpcHRpb259fScgKyAnPC9wPicpWzBdKTtcblx0ICAgICAgICB2YXIgbW9kZWxFbHMgPSBhbmd1bGFyLmVsZW1lbnQoZWwucXVlcnlTZWxlY3RvckFsbCgnW25nLW1vZGVsXScpKTtcblx0ICAgICAgICBpZiAobW9kZWxFbHMpIHtcblx0ICAgICAgICAgIG1vZGVsRWxzLmF0dHIoJ2FyaWEtZGVzY3JpYmVkYnknLCBzY29wZS5pZCArICdfZGVzY3JpcHRpb24nKTtcblx0ICAgICAgICB9XG5cdCAgICAgICAgcmV0dXJuIGVsLmlubmVySFRNTDtcblx0ICAgICAgfSBlbHNlIHtcblx0ICAgICAgICByZXR1cm4gdGVtcGxhdGU7XG5cdCAgICAgIH1cblx0ICAgIH0pO1xuXHQgIH1cblx0ICBhZGREZXNjcmlwdGlvbk1hbmlwdWxhdG9yLiRpbmplY3QgPSBbXCJmb3JtbHlDb25maWdcIl07XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG5cbi8qKiovIH0sXG4vKiAxNyAqL1xuLyoqKi8gZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBcIjxkaXY+XFxuICA8bGFiZWwgZm9yPVxcXCJ7e2lkfX1cXFwiIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsXFxcIj5cXG4gICAge3t0by5sYWJlbH19XFxuICAgIHt7dG8ucmVxdWlyZWQgPyAnKicgOiAnJ319XFxuICA8L2xhYmVsPlxcbiAgPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDE4ICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCIgbmctY2xhc3M9XFxcInsnaGFzLWVycm9yJzogc2hvd0Vycm9yfVxcXCI+XFxuICA8Zm9ybWx5LXRyYW5zY2x1ZGU+PC9mb3JtbHktdHJhbnNjbHVkZT5cXG48L2Rpdj5cXG5cIlxuXG4vKioqLyB9LFxuLyogMTkgKi9cbi8qKiovIGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJyYWRpby1ncm91cFxcXCI+XFxuICA8ZGl2IG5nLXJlcGVhdD1cXFwiKGtleSwgb3B0aW9uKSBpbiB0by5vcHRpb25zXFxcIiBjbGFzcz1cXFwicmFkaW9cXFwiPlxcbiAgICA8bGFiZWw+XFxuICAgICAgPGlucHV0IHR5cGU9XFxcInJhZGlvXFxcIlxcbiAgICAgICAgICAgICBpZD1cXFwie3tpZCArICdfJysgJGluZGV4fX1cXFwiXFxuICAgICAgICAgICAgIHRhYmluZGV4PVxcXCIwXFxcIlxcbiAgICAgICAgICAgICBuZy12YWx1ZT1cXFwib3B0aW9uW3RvLnZhbHVlUHJvcCB8fCAndmFsdWUnXVxcXCJcXG4gICAgICAgICAgICAgbmctbW9kZWw9XFxcIm1vZGVsW29wdGlvbnMua2V5XVxcXCI+XFxuICAgICAge3tvcHRpb25bdG8ubGFiZWxQcm9wIHx8ICduYW1lJ119fVxcbiAgICA8L2xhYmVsPlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIwICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwiY2hlY2tib3hcXFwiPlxcblxcdDxsYWJlbD5cXG5cXHRcXHQ8aW5wdXQgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxuICAgICAgICAgICBjbGFzcz1cXFwiZm9ybWx5LWZpZWxkLWNoZWNrYm94XFxcIlxcblxcdFxcdCAgICAgICBuZy1tb2RlbD1cXFwibW9kZWxbb3B0aW9ucy5rZXldXFxcIj5cXG5cXHRcXHR7e3RvLmxhYmVsfX1cXG5cXHRcXHR7e3RvLnJlcXVpcmVkID8gJyonIDogJyd9fVxcblxcdDwvbGFiZWw+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIxICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicmFkaW8tZ3JvdXBcXFwiPlxcbiAgPGRpdiBuZy1yZXBlYXQ9XFxcIihrZXksIG9wdGlvbikgaW4gdG8ub3B0aW9uc1xcXCIgY2xhc3M9XFxcImNoZWNrYm94XFxcIj5cXG4gICAgPGxhYmVsPlxcbiAgICAgIDxpbnB1dCB0eXBlPVxcXCJjaGVja2JveFxcXCJcXG4gICAgICAgICAgICAgaWQ9XFxcInt7aWQgKyAnXycrICRpbmRleH19XFxcIlxcbiAgICAgICAgICAgICBuZy1tb2RlbD1cXFwibXVsdGlDaGVja2JveC5jaGVja2VkWyRpbmRleF1cXFwiXFxuICAgICAgICAgICAgIG5nLWNoYW5nZT1cXFwibXVsdGlDaGVja2JveC5jaGFuZ2UoKVxcXCI+XFxuICAgICAge3tvcHRpb25bdG8ubGFiZWxQcm9wIHx8ICduYW1lJ119fVxcbiAgICA8L2xhYmVsPlxcbiAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfSxcbi8qIDIyICovXG4vKioqLyBmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBuZy1jbGFzcz1cXFwieydpbnB1dC1ncm91cCc6IHRvLmFkZG9uTGVmdCB8fCB0by5hZGRvblJpZ2h0fVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIlxcbiAgICAgICAgIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnRcXFwiXFxuICAgICAgICAgbmctc3R5bGU9XFxcIntjdXJzb3I6IHRvLmFkZG9uTGVmdC5vbkNsaWNrID8gJ3BvaW50ZXInIDogJ2luaGVyaXQnfVxcXCJcXG4gICAgICAgICBuZy1jbGljaz1cXFwidG8uYWRkb25MZWZ0Lm9uQ2xpY2sob3B0aW9ucywgdGhpcylcXFwiPlxcbiAgICAgICAgPGkgY2xhc3M9XFxcInt7dG8uYWRkb25MZWZ0LmNsYXNzfX1cXFwiIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnQuY2xhc3NcXFwiPjwvaT5cXG4gICAgICAgIDxzcGFuIG5nLWlmPVxcXCJ0by5hZGRvbkxlZnQudGV4dFxcXCI+e3t0by5hZGRvbkxlZnQudGV4dH19PC9zcGFuPlxcbiAgICA8L2Rpdj5cXG4gICAgPGZvcm1seS10cmFuc2NsdWRlPjwvZm9ybWx5LXRyYW5zY2x1ZGU+XFxuICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LWdyb3VwLWFkZG9uXFxcIlxcbiAgICAgICAgIG5nLWlmPVxcXCJ0by5hZGRvblJpZ2h0XFxcIlxcbiAgICAgICAgIG5nLXN0eWxlPVxcXCJ7Y3Vyc29yOiB0by5hZGRvblJpZ2h0Lm9uQ2xpY2sgPyAncG9pbnRlcicgOiAnaW5oZXJpdCd9XFxcIlxcbiAgICAgICAgIG5nLWNsaWNrPVxcXCJ0by5hZGRvblJpZ2h0Lm9uQ2xpY2sob3B0aW9ucywgdGhpcylcXFwiPlxcbiAgICAgICAgPGkgY2xhc3M9XFxcInt7dG8uYWRkb25SaWdodC5jbGFzc319XFxcIiBuZy1pZj1cXFwidG8uYWRkb25SaWdodC5jbGFzc1xcXCI+PC9pPlxcbiAgICAgICAgPHNwYW4gbmctaWY9XFxcInRvLmFkZG9uUmlnaHQudGV4dFxcXCI+e3t0by5hZGRvblJpZ2h0LnRleHR9fTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuLyoqKi8gfVxuLyoqKioqKi8gXSlcbn0pO1xuO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5ndWxhci1mb3JtbHktdGVtcGxhdGVzLWJvb3RzdHJhcC5qcy5tYXBcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYW5ndWxhci1mb3JtbHktdGVtcGxhdGVzLWJvb3RzdHJhcC9kaXN0L2FuZ3VsYXItZm9ybWx5LXRlbXBsYXRlcy1ib290c3RyYXAuanNcbi8vIG1vZHVsZSBpZCA9IDVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 6 */ +/***/ function(module, exports) { + + eval("// removed by extract-text-webpack-plugin//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L3N0eWxlL2RyYWdfYW5kX2Ryb3Auc2Nzcz9lZjNhIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyByZW1vdmVkIGJ5IGV4dHJhY3QtdGV4dC13ZWJwYWNrLXBsdWdpblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9zdHlsZS9kcmFnX2FuZF9kcm9wLnNjc3Ncbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 7 */, +/* 8 */, +/* 9 */, +/* 10 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaDragDropWayFormlyConfig = __webpack_require__(11);\n\nvar _edaDragDropWayFormlyConfig2 = _interopRequireDefault(_edaDragDropWayFormlyConfig);\n\nvar _edaDragDropWayDragDropConfig = __webpack_require__(12);\n\nvar _edaDragDropWayDragDropConfig2 = _interopRequireDefault(_edaDragDropWayDragDropConfig);\n\nvar _edaDragDropWayCore = __webpack_require__(14);\n\nvar _edaDragDropWayCore2 = _interopRequireDefault(_edaDragDropWayCore);\n\nvar _edaDragDropWayLeftPanel = __webpack_require__(15);\n\nvar _edaDragDropWayLeftPanel2 = _interopRequireDefault(_edaDragDropWayLeftPanel);\n\nvar _edaDragDropWayFormlyProxyFormFieldManage = __webpack_require__(49);\n\nvar _edaDragDropWayFormlyProxyFormFieldManage2 = _interopRequireDefault(_edaDragDropWayFormlyProxyFormFieldManage);\n\nvar _edaDragDropWayDragdrop = __webpack_require__(53);\n\nvar _edaDragDropWayDragdrop2 = _interopRequireDefault(_edaDragDropWayDragdrop);\n\nvar _edaDragDropWayRightClick = __webpack_require__(67);\n\nvar _edaDragDropWayRightClick2 = _interopRequireDefault(_edaDragDropWayRightClick);\n\nvar _edaDragDropWayConfigurationModelProxy = __webpack_require__(70);\n\nvar _edaDragDropWayConfigurationModelProxy2 = _interopRequireDefault(_edaDragDropWayConfigurationModelProxy);\n\nvar _dragAndDropList = __webpack_require__(72);\n\nvar _dragAndDropList2 = _interopRequireDefault(_dragAndDropList);\n\nvar _pageslide = __webpack_require__(75);\n\nvar _pageslide2 = _interopRequireDefault(_pageslide);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen = __webpack_require__(77);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen2 = _interopRequireDefault(_edaDragDropWayEdaDragdropWayEasyFormGen);\n\nvar _edaDragDropWayTrustThis = __webpack_require__(84);\n\nvar _edaDragDropWayTrustThis2 = _interopRequireDefault(_edaDragDropWayTrustThis);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAG_DROP_WAY_MODULE_NAME = 'eda.easyformGen.dragDropWay';\n\nvar DRAG_DROP_MODULES_INJECT = [_edaDragDropWayCore2.default.name, _edaDragDropWayConfigurationModelProxy2.default.name, _edaDragDropWayTrustThis2.default.name, _edaDragDropWayLeftPanel2.default.name, _edaDragDropWayFormlyProxyFormFieldManage2.default.name, _edaDragDropWayDragdrop2.default.name, _edaDragDropWayEdaDragdropWayEasyFormGen2.default.name, _edaDragDropWayRightClick2.default.name, _dragAndDropList2.default.name, _pageslide2.default.name];\n\nvar mainModule = angular.module(DRAG_DROP_WAY_MODULE_NAME, DRAG_DROP_MODULES_INJECT).config(_edaDragDropWayDragDropConfig2.default).config(_edaDragDropWayFormlyConfig2.default).value(_edaDragDropWayDragDropConfig.EASY_FORM_DD_VERSION_NAME, _edaDragDropWayDragDropConfig.EASY_FORM_DD_VERSION_VALUE);\n\nexports.default = mainModule;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L21haW4uanM/M2E3OCJdLCJuYW1lcyI6WyJEUkFHX0RST1BfV0FZX01PRFVMRV9OQU1FIiwiRFJBR19EUk9QX01PRFVMRVNfSU5KRUNUIiwibmFtZSIsIm1haW5Nb2R1bGUiLCJhbmd1bGFyIiwibW9kdWxlIiwiY29uZmlnIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFJQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFFQTs7OztBQUNBOzs7O0FBRUE7Ozs7QUFDQTs7Ozs7O0FBRUEsSUFBTUEsNEJBQTRCLDZCQUFsQzs7QUFFQSxJQUFNQywyQkFBMkIsQ0FDL0IsNkJBQVdDLElBRG9CLEVBRS9CLGdEQUFrQkEsSUFGYSxFQUcvQixrQ0FBc0JBLElBSFMsRUFJL0Isa0NBQWdCQSxJQUplLEVBSy9CLG1EQUFrQkEsSUFMYSxFQU0vQixpQ0FBZUEsSUFOZ0IsRUFPL0Isa0RBQXVCQSxJQVBRLEVBUS9CLG1DQUFpQkEsSUFSYyxFQVMvQiwwQkFBc0JBLElBVFMsRUFVL0Isb0JBQWdCQSxJQVZlLENBQWpDOztBQWFBLElBQU1DLGFBQWFDLFFBQ0FDLE1BREEsQ0FDT0wseUJBRFAsRUFDa0NDLHdCQURsQyxFQUVBSyxNQUZBLHlDQUdBQSxNQUhBLHVDQUlBQyxLQUpBLG1IQUFuQjs7a0JBTWVKLFUiLCJmaWxlIjoiMTAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZm9ybWx5Q29uZmlnRnVuY3QgICAgICAgIGZyb20gJy4vY29uZmlnL2VkYURyYWdEcm9wV2F5LmZvcm1seUNvbmZpZy5jb25maWcnO1xuaW1wb3J0IGRyYWdEcm9wQ29uZmlnRnVudCwge1xuICBFQVNZX0ZPUk1fRERfVkVSU0lPTl9OQU1FLFxuICBFQVNZX0ZPUk1fRERfVkVSU0lPTl9WQUxVRVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2NvbmZpZy9lZGFEcmFnRHJvcFdheS5kcmFnRHJvcENvbmZpZy5jb25maWcnO1xuaW1wb3J0IGNvcmVNb2R1bGUgICAgICAgICAgICAgICBmcm9tICcuL2NvcmUvZWRhRHJhZ0Ryb3BXYXkuY29yZS5tb2R1bGUnO1xuaW1wb3J0IGxlZnRQYW5lbE1vZHVsZSAgICAgICAgICBmcm9tICcuL2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5tb2R1bGUnO1xuaW1wb3J0IGZvcm1seVByb3h5TW9kdWxlICAgICAgICBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLm1vZHVsZSc7XG5pbXBvcnQgZHJhZ2Ryb3BNb2R1bGUgICAgICAgICAgIGZyb20gJy4vY29tcG9uZW50cy9kcmFnZHJvcC9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5tb2R1bGUnO1xuaW1wb3J0IHJpZ2h0Q2xpY2tNb2R1bGUgICAgICAgICBmcm9tICcuL2NvbXBvbmVudHMvY29tbW9uL3JpZ2h0Y2xpY2svZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5tb2R1bGUnO1xuaW1wb3J0IGNvbmZpZ1Byb3h5TW9kdWxlICAgICAgICBmcm9tICcuL2NvbXBvbmVudHMvY29uZmlndXJhdGlvbk1vZGVsUHJveHkvZWRhRHJhZ0Ryb3BXYXkuY29uZmlndXJhdGlvbk1vZGVsUHJveHkubW9kdWxlJztcblxuaW1wb3J0IGRyYWdBbmREcm9wTGlzdE1vZHVsZSAgICBmcm9tICcuL2NvbXBvbmVudHMvY29tbW9uL2RyYWdBbmREcm9wTGlzdC9kcmFnQW5kRHJvcExpc3QubW9kdWxlJztcbmltcG9ydCBwYWdlU2xpZGVNb2R1bGUgICAgICAgICAgZnJvbSAnLi9jb21wb25lbnRzL2NvbW1vbi9wYWdlc2xpZGUvcGFnZXNsaWRlLm1vZHVsZSc7XG5cbmltcG9ydCBlYXN5Rm9ybURyYWdEcm9wTW9kdWxlICAgZnJvbSAnLi9jb21wb25lbnRzL2VkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi5tb2R1bGUnO1xuaW1wb3J0IHRydXN0VGhpc0ZpbHRlck1vZHVsZSAgICBmcm9tICcuL2NvbXBvbmVudHMvY29tbW9uL2VkYVRydXN0VGhpc0ZpbHRlci9lZGFEcmFnRHJvcFdheS50cnVzdFRoaXMubW9kdWxlJztcblxuY29uc3QgRFJBR19EUk9QX1dBWV9NT0RVTEVfTkFNRSA9ICdlZGEuZWFzeWZvcm1HZW4uZHJhZ0Ryb3BXYXknO1xuXG5jb25zdCBEUkFHX0RST1BfTU9EVUxFU19JTkpFQ1QgPSBbXG4gIGNvcmVNb2R1bGUubmFtZSxcbiAgY29uZmlnUHJveHlNb2R1bGUubmFtZSxcbiAgdHJ1c3RUaGlzRmlsdGVyTW9kdWxlLm5hbWUsXG4gIGxlZnRQYW5lbE1vZHVsZS5uYW1lLFxuICBmb3JtbHlQcm94eU1vZHVsZS5uYW1lLFxuICBkcmFnZHJvcE1vZHVsZS5uYW1lLFxuICBlYXN5Rm9ybURyYWdEcm9wTW9kdWxlLm5hbWUsXG4gIHJpZ2h0Q2xpY2tNb2R1bGUubmFtZSxcbiAgZHJhZ0FuZERyb3BMaXN0TW9kdWxlLm5hbWUsXG4gIHBhZ2VTbGlkZU1vZHVsZS5uYW1lXG5dO1xuXG5jb25zdCBtYWluTW9kdWxlID0gYW5ndWxhclxuICAgICAgICAgICAgICAgICAgLm1vZHVsZShEUkFHX0RST1BfV0FZX01PRFVMRV9OQU1FLCBEUkFHX0RST1BfTU9EVUxFU19JTkpFQ1QpXG4gICAgICAgICAgICAgICAgICAuY29uZmlnKGRyYWdEcm9wQ29uZmlnRnVudClcbiAgICAgICAgICAgICAgICAgIC5jb25maWcoZm9ybWx5Q29uZmlnRnVuY3QpXG4gICAgICAgICAgICAgICAgICAudmFsdWUoRUFTWV9GT1JNX0REX1ZFUlNJT05fTkFNRSwgRUFTWV9GT1JNX0REX1ZFUlNJT05fVkFMVUUpO1xuXG5leHBvcnQgZGVmYXVsdCBtYWluTW9kdWxlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9tYWluLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 11 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nfunction formlyConfig(formlyConfigProvider, EasyFormGenFormlyBindingModelsProvider, easyFormDragWayConfigProvider) {\n\n formlyConfigProvider.setType({\n name: 'blank',\n template: '
    '\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'empty',\n name: 'no control',\n subtitle: 'no control',\n group: 'Blank',\n formlyType: 'blank',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '
    \\n
    \\n
    \\n
    \\n
    \\n
    ',\n control: 'empty',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'blank'\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Header',\n name: 'Header',\n subtitle: 'no control',\n group: 'Decoration',\n formlyType: 'header',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: ['
    \\n
    \\n
    \\n

    Header

    \\n
    \\n
    \\n
    \\n
    '].join(''),\n control: 'Header',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'headers'\n });\n\n var subTitleTemplate = '\\n
    \\n
    \\n

    {{options.templateOptions.placeholder}}

    \\n
    \\n

    \\n
    ';\n\n formlyConfigProvider.setType({\n name: 'subTitle',\n template: subTitleTemplate\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Subtitle',\n name: 'Subtitle',\n subtitle: 'no control',\n group: 'Decoration',\n formlyType: 'subTitle',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n 'label': '
    \\n
    \\n
    \\n

    SubTitle

    \\n
    \\n
    \\n
    \\n
    ',\n 'control': 'Subtitle',\n 'cssClass': 'col-xs-12'\n }, {\n addToGroupCtrl: 'headers'\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'TextInput',\n name: 'Text input',\n subtitle: 'Text input',\n group: 'input',\n formlyType: 'input',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n\n /**\n * drag and drop text input (basic) control template\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n 'label': '
    \\n
    \\n \\n
    \\n \\n

    Description

    \\n
    \\n
    \\n
    ',\n 'control': 'TextInput',\n 'cssClass': 'col-xs-12'\n }, {\n addToGroupCtrl: 'inputs'\n });\n\n /**\n * Add text input (Password)\n *\n * note : formly template already exists\n * no need to create a custom one\n *\n * just declare in EasyFormGenFormlyBindingModelsProvider\n */\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Password',\n name: 'Password',\n subtitle: 'Password',\n group: 'input',\n formlyType: 'input',\n formlySubtype: 'password',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop text input — password —control template\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n 'label': '
    \\n
    \\n \\n
    \\n \\n

    Description

    \\n
    \\n
    \\n
    ',\n 'control': 'Password',\n 'cssClass': 'col-xs-12'\n }, {\n addToGroupCtrl: 'inputs'\n });\n\n /**\n * Add angular UI date picker\n *\n * thx Kent C. Dodds for formly config template (since it was a huge config)\n */\n var attributes = ['date-disabled', 'custom-class', 'show-weeks', 'starting-day', 'init-date', 'min-mode', 'max-mode', 'format-day', 'format-month', 'format-year', 'format-day-header', 'format-day-title', 'format-month-title', 'year-range', 'shortcut-propagation', 'uib-datepicker-popup', 'show-button-bar', 'current-text', 'clear-text', 'close-text', 'close-on-date-selection', 'datepicker-append-to-body'];\n\n var bindings = ['datepicker-mode', 'min-date', 'max-date'];\n\n var ngModelAttrs = {};\n\n angular.forEach(attributes, function (attr) {\n return ngModelAttrs[camelize(attr)] = { attribute: attr };\n });\n angular.forEach(bindings, function (binding) {\n return ngModelAttrs[camelize(binding)] = { bound: binding };\n });\n\n function camelize(string) {\n string = string.replace(/[\\-_\\s]+(.)?/g, function (match, chr) {\n return chr ? chr.toUpperCase() : '';\n });\n // Ensure 1st char is always lowercase\n return string.replace(/^([A-Z])/, function (match, chr) {\n return chr ? chr.toLowerCase() : '';\n });\n }\n\n var angularUIDatePickerTemplate = '\\n ';\n\n formlyConfigProvider.setType({\n name: 'datepicker',\n template: angularUIDatePickerTemplate,\n wrapper: ['bootstrapLabel', 'bootstrapHasError'],\n controller: ['$scope', function ($scope) {\n $scope.open = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.opened = true;\n };\n }],\n defaultOptions: {\n ngModelAttrs: ngModelAttrs,\n templateOptions: {\n addonLeft: {\n class: 'glyphicon glyphicon-calendar',\n onClick: function onClick(options) {\n return options.templateOptions.isOpen = !options.templateOptions.isOpen;\n }\n },\n onFocus: function onFocus($viewValue, $modelValue, scope) {\n return scope.to.isOpen = !scope.to.isOpen;\n },\n datepickerOptions: {}\n }\n }\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Date',\n name: 'Date',\n subtitle: 'Date',\n group: 'input',\n formlyType: 'datepicker',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: [],\n datepickerPopup: 'dd-MMMM-yyyy'\n });\n /**\n * drag and drop text input — date — control template (using angular UI datepicker)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '\\n
    \\n
    \\n \\n
    \\n\\t\\t\\t\\t\\t
    \\n \\t\\t\\t\\t\\t\\n \\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t
    \\n

    description

    \\n
    \\n
    ',\n control: 'Date',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'inputs'\n });\n\n /**\n * Add textarea\n *\n * note : formly template already exists\n * no need to create a custom one\n *\n * just declare in EasyFormGenFormlyBindingModelsProvider\n */\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Texarea',\n name: 'Textarea',\n subtitle: 'Textarea',\n group: 'Textarea',\n formlyType: 'textarea',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop textarea control template\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n 'label': '\\n
    \\n
    \\n \\n
    \\n \\n

    description

    \\n
    \\n
    \\n
    ',\n 'control': 'Texarea',\n 'cssClass': 'col-xs-12'\n }, {\n addToGroupCtrl: 'textareas'\n });\n\n /**\n * Add rich text editor control (using textAngular)\n *\n */\n var richTexEditorTemplate = '\\n \\n ';\n\n formlyConfigProvider.setType({\n name: 'richEditor',\n template: richTexEditorTemplate\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'RichTextEditor',\n name: 'RichTextEditor',\n subtitle: 'RichTextEditor',\n group: 'Textarea',\n formlyType: 'richEditor',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop rich text editor control template (using textAngular)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '\\n
    \\n
    \\n \\n
    \\n \\n

    description

    \\n
    \\n
    \\n
    ',\n control: 'RichTextEditor',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'textareas'\n });\n\n /**\n * Add radio\n *\n * note : formly template already exists\n * no need to create a custom one\n *\n * just declare in EasyFormGenFormlyBindingModelsProvider\n */\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Radio',\n name: 'Radio',\n subtitle: 'Radio',\n options: [],\n group: 'Radio',\n formlyType: 'radio',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop radio control template (using textAngular)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n 'label': '\\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n
    \\n

    description

    \\n
    \\n
    \\n
    ',\n 'control': 'Radio',\n 'cssClass': 'col-xs-12'\n }, {\n addToGroupCtrl: 'radios'\n });\n\n /**\n * Add checkbox\n *\n * note : formly template already exists\n * no need to create a custom one\n *\n * just declare in EasyFormGenFormlyBindingModelsProvider\n */\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'Checkbox',\n name: 'Checkbox',\n subtitle: 'Checkbox',\n group: 'Checkbox',\n formlyType: 'checkbox',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop checkbox control template (using textAngular)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '\\n
    \\n
    \\n \\n
    \\n

    description

    \\n
    ',\n control: 'Checkbox',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'checkboxes'\n });\n\n /**\n * Add basic Select control\n *\n * using nya-bs-select\n */\n var basicSelectTemplate = '\\n
      \\n
    1. \\n {{option.name}}\\n
    2. \\n
    ';\n\n formlyConfigProvider.setType({\n name: 'basicSelect',\n template: basicSelectTemplate\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'BasicSelect',\n name: 'Basic select',\n subtitle: 'Basic select',\n options: [],\n group: 'Select',\n formlyType: 'basicSelect',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n\n /**\n * drag and drop basic select control template (using textAngular)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '\\n
    \\n
    \\n
    \\n\\n
      \\n\\n \\n\\n
    \\n
    ',\n control: 'BasicSelect',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'selects'\n });\n\n /**\n * Add Grouped Select control\n *\n * using nya-bs-select\n */\n var groupedSelectTemplate = '\\n
      \\n
    1. \\n {{$group}}\\n \\n {{option.name}}\\n \\n \\n
    2. \\n
    ';\n\n formlyConfigProvider.setType({\n name: 'groupedSelect',\n template: groupedSelectTemplate\n });\n\n EasyFormGenFormlyBindingModelsProvider.addEasyFormControlToList({\n id: 'GroupedSelect',\n name: 'Grouped Select',\n subtitle: 'Grouped Select',\n options: [],\n group: 'Select',\n formlyType: 'groupedSelect',\n formlySubtype: '',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyOptions: []\n });\n /**\n * drag and drop grouped select control template (using textAngular)\n *\n *\n * @PARAM 1 : control template object (drag an drop)\n * @PARAM 2 : object to indicates in which group of control it will be inserted\n * \t\t\t\t\t(related to _dragDropConfigModel.containerConfig.decoration in dragDropConfig provider)\n */\n easyFormDragWayConfigProvider.addControlToDragDropPresentationModel({\n label: '\\n
    \\n
    \\n
    \\n
      \\n \\n
    \\n
    ',\n control: 'GroupedSelect',\n cssClass: 'col-xs-12'\n }, {\n addToGroupCtrl: 'selects'\n });\n}\n\nformlyConfig.$inject = ['formlyConfigProvider', 'EasyFormGenFormlyBindingModelsProvider', 'easyFormDragWayConfigProvider'];\n\nexports.default = formlyConfig;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbmZpZy9lZGFEcmFnRHJvcFdheS5mb3JtbHlDb25maWcuY29uZmlnLmpzPzVmODIiXSwibmFtZXMiOlsiZm9ybWx5Q29uZmlnIiwiZm9ybWx5Q29uZmlnUHJvdmlkZXIiLCJFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlciIsImVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyIiwic2V0VHlwZSIsIm5hbWUiLCJ0ZW1wbGF0ZSIsImFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdCIsImlkIiwic3VidGl0bGUiLCJncm91cCIsImZvcm1seVR5cGUiLCJmb3JtbHlTdWJ0eXBlIiwiZm9ybWx5TGFiZWwiLCJmb3JtbHlSZXF1aXJlZCIsImZvcm1seURlc2NyaXB0aW9uIiwiZm9ybWx5T3B0aW9ucyIsImFkZENvbnRyb2xUb0RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwiLCJsYWJlbCIsImNvbnRyb2wiLCJjc3NDbGFzcyIsImFkZFRvR3JvdXBDdHJsIiwiam9pbiIsInN1YlRpdGxlVGVtcGxhdGUiLCJhdHRyaWJ1dGVzIiwiYmluZGluZ3MiLCJuZ01vZGVsQXR0cnMiLCJhbmd1bGFyIiwiZm9yRWFjaCIsImF0dHIiLCJjYW1lbGl6ZSIsImF0dHJpYnV0ZSIsImJpbmRpbmciLCJib3VuZCIsInN0cmluZyIsInJlcGxhY2UiLCJtYXRjaCIsImNociIsInRvVXBwZXJDYXNlIiwidG9Mb3dlckNhc2UiLCJhbmd1bGFyVUlEYXRlUGlja2VyVGVtcGxhdGUiLCJ3cmFwcGVyIiwiY29udHJvbGxlciIsIiRzY29wZSIsIm9wZW4iLCIkZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIm9wZW5lZCIsImRlZmF1bHRPcHRpb25zIiwidGVtcGxhdGVPcHRpb25zIiwiYWRkb25MZWZ0IiwiY2xhc3MiLCJvbkNsaWNrIiwib3B0aW9ucyIsImlzT3BlbiIsIm9uRm9jdXMiLCIkdmlld1ZhbHVlIiwiJG1vZGVsVmFsdWUiLCJzY29wZSIsInRvIiwiZGF0ZXBpY2tlck9wdGlvbnMiLCJkYXRlcGlja2VyUG9wdXAiLCJyaWNoVGV4RWRpdG9yVGVtcGxhdGUiLCJiYXNpY1NlbGVjdFRlbXBsYXRlIiwiZ3JvdXBlZFNlbGVjdFRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUFTQSxZQUFULENBQXNCQyxvQkFBdEIsRUFBNENDLHNDQUE1QyxFQUFvRkMsNkJBQXBGLEVBQW1IOztBQUVqSEYsdUJBQXFCRyxPQUFyQixDQUE2QjtBQUMzQkMsVUFBVSxPQURpQjtBQUUzQkMsY0FBWTtBQUZlLEdBQTdCOztBQUtBSix5Q0FBdUNLLHdCQUF2QyxDQUFnRTtBQUM5REMsUUFBYSxPQURpRDtBQUU5REgsVUFBYyxZQUZnRDtBQUc5REksY0FBZ0IsWUFIOEM7QUFJOURDLFdBQWMsT0FKZ0Q7QUFLOURDLGdCQUFpQixPQUw2QztBQU05REMsbUJBQWtCLEVBTjRDO0FBTzlEQyxpQkFBaUIsRUFQNkM7QUFROURDLG9CQUFtQixLQVIyQztBQVM5REMsdUJBQXFCLEVBVHlDO0FBVTlEQyxtQkFBa0I7QUFWNEMsR0FBaEU7O0FBYUFiLGdDQUE4QmMscUNBQTlCLENBQW9FO0FBQ2xFQyx3SkFEa0U7QUFRbEVDLGFBQVUsT0FSd0Q7QUFTbEVDLGNBQVU7QUFUd0QsR0FBcEUsRUFXRTtBQUNFQyxvQkFBaUI7QUFEbkIsR0FYRjs7QUFpQkFuQix5Q0FBdUNLLHdCQUF2QyxDQUFnRTtBQUM5REMsUUFBYSxRQURpRDtBQUU5REgsVUFBYyxRQUZnRDtBQUc5REksY0FBZ0IsWUFIOEM7QUFJOURDLFdBQWMsWUFKZ0Q7QUFLOURDLGdCQUFpQixRQUw2QztBQU05REMsbUJBQWtCLEVBTjRDO0FBTzlEQyxpQkFBaUIsRUFQNkM7QUFROURDLG9CQUFtQixLQVIyQztBQVM5REMsdUJBQXFCLEVBVHlDO0FBVTlEQyxtQkFBa0I7QUFWNEMsR0FBaEU7O0FBY0FiLGdDQUE4QmMscUNBQTlC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OURDLFFBQWEsZUFEaUQ7QUFFOURILFVBQWMsZ0JBRmdEO0FBRzlESSxjQUFnQixnQkFIOEM7QUFJOUQ2QyxhQUFlLEVBSitDO0FBSzlENUMsV0FBYyxRQUxnRDtBQU05REMsZ0JBQWlCLGVBTjZDO0FBTzlEQyxtQkFBa0IsRUFQNEM7QUFROURDLGlCQUFpQixFQVI2QztBQVM5REMsb0JBQW1CLEtBVDJDO0FBVTlEQyx1QkFBcUIsRUFWeUM7QUFXOURDLG1CQUFrQjtBQVg0QyxHQUFoRTtBQWFBOzs7Ozs7OztBQVFBYixnQ0FBOEJjLHFDQUE5QixDQUFvRTtBQUNsRUMsd3BCQURrRTtBQWdCbEVDLGFBQVUsZUFoQndEO0FBaUJsRUMsY0FBVTtBQWpCd0QsR0FBcEUsRUFtQkE7QUFDRUMsb0JBQWlCO0FBRG5CLEdBbkJBO0FBd0JEOztBQUVEckIsYUFBYWtFLE9BQWIsR0FBdUIsQ0FDckIsc0JBRHFCLEVBRXJCLHdDQUZxQixFQUdyQiwrQkFIcUIsQ0FBdkI7O2tCQU1lbEUsWSIsImZpbGUiOiIxMS5qcyIsInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIGZvcm1seUNvbmZpZyhmb3JtbHlDb25maWdQcm92aWRlciwgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXIsIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyKSB7XG5cbiAgZm9ybWx5Q29uZmlnUHJvdmlkZXIuc2V0VHlwZSh7XG4gICAgbmFtZSAgXHRcdDogJ2JsYW5rJyxcbiAgICB0ZW1wbGF0ZSBcdDogJzxkaXY+PC9kaXY+J1xuICB9KTtcblxuICBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlci5hZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3Qoe1xuICAgIGlkIFx0XHRcdFx0XHRcdFx0XHQ6ICdlbXB0eScsXG4gICAgbmFtZSBcdFx0XHRcdFx0XHRcdDogJ25vIGNvbnRyb2wnLFxuICAgIHN1YnRpdGxlIFx0XHRcdFx0XHQ6ICdubyBjb250cm9sJyxcbiAgICBncm91cCBcdFx0XHRcdFx0XHQ6ICdCbGFuaycsXG4gICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2JsYW5rJyxcbiAgICBmb3JtbHlTdWJ0eXBlIFx0XHQ6ICcnLFxuICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgZm9ybWx5RGVzY3JpcHRpb24gXHQ6ICcnLFxuICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW11cbiAgfSk7XG5cbiAgZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIuYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCh7XG4gICAgbGFiZWwgXHQ6XG4gICAgICBgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmAsXG4gICAgY29udHJvbCA6ICdlbXB0eScsXG4gICAgY3NzQ2xhc3M6ICdjb2wteHMtMTInXG4gICAgfSxcbiAgICB7XG4gICAgICBhZGRUb0dyb3VwQ3RybCA6ICdibGFuaydcbiAgICB9KTtcblxuXG5cbiAgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXIuYWRkRWFzeUZvcm1Db250cm9sVG9MaXN0KHtcbiAgICBpZCBcdFx0XHRcdFx0XHRcdFx0OiAnSGVhZGVyJyxcbiAgICBuYW1lIFx0XHRcdFx0XHRcdFx0OiAnSGVhZGVyJyxcbiAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnbm8gY29udHJvbCcsXG4gICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnRGVjb3JhdGlvbicsXG4gICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2hlYWRlcicsXG4gICAgZm9ybWx5U3VidHlwZSBcdFx0OiAnJyxcbiAgICBmb3JtbHlMYWJlbCBcdFx0XHQ6ICcnLFxuICAgIGZvcm1seVJlcXVpcmVkIFx0XHQ6IGZhbHNlLFxuICAgIGZvcm1seURlc2NyaXB0aW9uIFx0OiAnJyxcbiAgICBmb3JtbHlPcHRpb25zIFx0XHQ6IFtdXG4gIH0pO1xuXG5cbiAgZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIuYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCh7XG4gICAgbGFiZWwgXHQ6IFtcbiAgICAgIGA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgPGgyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5IZWFkZXI8L2gyPlxuICAgICAgICAgICAgICA8aHIvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gXG4gICAgICBdLmpvaW4oJycpLFxuICAgIGNvbnRyb2wgOiAnSGVhZGVyJyxcbiAgICBjc3NDbGFzczogJ2NvbC14cy0xMidcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZFRvR3JvdXBDdHJsIDogJ2hlYWRlcnMnXG4gICAgfSk7XG5cblxuICBjb25zdCBzdWJUaXRsZVRlbXBsYXRlID0gYFxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1jZW50ZXJcIj57e29wdGlvbnMudGVtcGxhdGVPcHRpb25zLnBsYWNlaG9sZGVyfX08aDQ+XG4gICAgICAgIDxoci8+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5gO1xuXG4gIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuICAgIG5hbWUgXHRcdFx0OiAnc3ViVGl0bGUnLFxuICAgIHRlbXBsYXRlIFx0OiBzdWJUaXRsZVRlbXBsYXRlXG4gIH0pO1xuXG4gIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyLmFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdCh7XG4gICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ1N1YnRpdGxlJyxcbiAgICBuYW1lIFx0XHRcdFx0XHRcdFx0OiAnU3VidGl0bGUnLFxuICAgIHN1YnRpdGxlIFx0XHRcdFx0XHQ6ICdubyBjb250cm9sJyxcbiAgICBncm91cCBcdFx0XHRcdFx0XHQ6ICdEZWNvcmF0aW9uJyxcbiAgICBmb3JtbHlUeXBlIFx0XHRcdFx0OiAnc3ViVGl0bGUnLFxuICAgIGZvcm1seVN1YnR5cGUgXHRcdDogJycsXG4gICAgZm9ybWx5TGFiZWwgXHRcdFx0OiAnJyxcbiAgICBmb3JtbHlSZXF1aXJlZCBcdFx0OiBmYWxzZSxcbiAgICBmb3JtbHlEZXNjcmlwdGlvbiBcdDogJycsXG4gICAgZm9ybWx5T3B0aW9ucyBcdFx0OiBbXVxuICB9KTtcblxuICBlYXN5Rm9ybURyYWdXYXlDb25maWdQcm92aWRlci5hZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsKHtcbiAgICAnbGFiZWwnIFx0OlxuICAgICAgYDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlN1YlRpdGxlPC9oND5cbiAgICAgICAgICAgICAgPGhyLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YCxcbiAgICAnY29udHJvbCdcdDogJ1N1YnRpdGxlJyxcbiAgICAnY3NzQ2xhc3MnOiAnY29sLXhzLTEyJ1xuICAgIH0sXG4gICAge1xuICAgICAgYWRkVG9Hcm91cEN0cmwgOiAnaGVhZGVycydcbiAgICB9KTtcblxuICBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlci5hZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3Qoe1xuICAgIGlkIFx0XHRcdFx0XHRcdFx0XHQ6ICdUZXh0SW5wdXQnLFxuICAgIG5hbWUgXHRcdFx0XHRcdFx0XHQ6ICdUZXh0IGlucHV0JyxcbiAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnVGV4dCBpbnB1dCcsXG4gICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnaW5wdXQnLFxuICAgIGZvcm1seVR5cGUgXHRcdFx0XHQ6ICdpbnB1dCcsXG4gICAgZm9ybWx5U3VidHlwZSBcdFx0OiAnJyxcbiAgICBmb3JtbHlMYWJlbCBcdFx0XHQ6ICcnLFxuICAgIGZvcm1seVJlcXVpcmVkIFx0XHQ6IGZhbHNlLFxuICAgIGZvcm1seURlc2NyaXB0aW9uIFx0OiAnJyxcbiAgICBmb3JtbHlPcHRpb25zIFx0XHQ6IFtdXG4gIH0pO1xuXG5cbiAgLyoqXG4gICAqIGRyYWcgYW5kIGRyb3AgdGV4dCBpbnB1dCAoYmFzaWMpIGNvbnRyb2wgdGVtcGxhdGVcbiAgICpcbiAgICAqXG4gICAgKiBAUEFSQU0gMSA6IGNvbnRyb2wgdGVtcGxhdGUgb2JqZWN0IChkcmFnIGFuIGRyb3ApXG4gICAgKiBAUEFSQU0gMiA6IG9iamVjdCB0byBpbmRpY2F0ZXMgaW4gd2hpY2ggZ3JvdXAgb2YgY29udHJvbCBpdCB3aWxsIGJlIGluc2VydGVkXG4gICAgKiAgXHRcdFx0XHRcdChyZWxhdGVkIHRvIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uIGluIGRyYWdEcm9wQ29uZmlnIHByb3ZpZGVyKVxuICAgICovXG4gIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyLmFkZENvbnRyb2xUb0RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwoe1xuICAgICAgJ2xhYmVsJyBcdDpcbiAgICAgICAgYDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0VGV4dFwiIGNsYXNzPVwiY29udHJvbC1sYWJlbCB0ZXh0Q29udHJvbExhYmVsIHB1bGwtbGVmdFwiPlxuICAgICAgICAgICAgICB0aXRsZSBmb3IgdGV4dCBpbnB1dDxzcGFuIGNsYXNzPVwidGV4dENvbnRyb2xMYWJlbCBuZy1zY29wZVwiPio8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBkaXNhYmxlZCBjbGFzcz1cImZvcm0tY29udHJvbCBmYWtlQ29udHJvbFwiIGlkPVwiaW5wdXRUZXh0XCIgcGxhY2Vob2xkZXI9XCJiYXNpYyBpbnB1dFwiPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlbHAtYmxvY2sgcHVsbC1sZWZ0XCI+RGVzY3JpcHRpb248L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YCxcbiAgICAgICdjb250cm9sJ1x0OiAnVGV4dElucHV0JyxcbiAgICAgICdjc3NDbGFzcyc6ICdjb2wteHMtMTInXG4gICAgfSxcbiAgICB7XG4gICAgICBhZGRUb0dyb3VwQ3RybCA6ICdpbnB1dHMnXG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgdGV4dCBpbnB1dCAoUGFzc3dvcmQpXG4gICAqXG4gICAgKiBub3RlIDogZm9ybWx5IHRlbXBsYXRlIGFscmVhZHkgZXhpc3RzXG4gICAgKiBubyBuZWVkIHRvIGNyZWF0ZSBhIGN1c3RvbSBvbmVcbiAgICAqXG4gICAgKiBqdXN0IGRlY2xhcmUgaW4gRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXJcbiAgICAqL1xuICBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlci5hZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3Qoe1xuICAgICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ1Bhc3N3b3JkJyxcbiAgICAgIG5hbWUgXHRcdFx0XHRcdFx0XHQ6ICdQYXNzd29yZCcsXG4gICAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnUGFzc3dvcmQnLFxuICAgICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnaW5wdXQnLFxuICAgICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2lucHV0JyxcbiAgICAgIGZvcm1seVN1YnR5cGUgXHRcdDogJ3Bhc3N3b3JkJyxcbiAgICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgICBmb3JtbHlSZXF1aXJlZCBcdFx0OiBmYWxzZSxcbiAgICAgIGZvcm1seURlc2NyaXB0aW9uIFx0OiAnJyxcbiAgICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW11cbiAgICB9XG4gICk7XG4gIC8qKlxuICAgKiBkcmFnIGFuZCBkcm9wIHRleHQgaW5wdXQg4oCUIHBhc3N3b3JkIOKAlGNvbnRyb2wgdGVtcGxhdGVcbiAgICpcbiAgICAqXG4gICAgKiBAUEFSQU0gMSA6IGNvbnRyb2wgdGVtcGxhdGUgb2JqZWN0IChkcmFnIGFuIGRyb3ApXG4gICAgKiBAUEFSQU0gMiA6IG9iamVjdCB0byBpbmRpY2F0ZXMgaW4gd2hpY2ggZ3JvdXAgb2YgY29udHJvbCBpdCB3aWxsIGJlIGluc2VydGVkXG4gICAgKiAgXHRcdFx0XHRcdChyZWxhdGVkIHRvIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uIGluIGRyYWdEcm9wQ29uZmlnIHByb3ZpZGVyKVxuICAgICovXG4gIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyLmFkZENvbnRyb2xUb0RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwoe1xuICAgICAgJ2xhYmVsJyBcdDpcbiAgICAgICAgYDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0UGFzc1wiIGNsYXNzPVwiY29udHJvbC1sYWJlbCB0ZXh0Q29udHJvbExhYmVsIG5nLWJpbmRpbmcgcHVsbC1sZWZ0XCI+XG4gICAgICAgICAgICB0aXRsZSBmb3IgcGFzc3dvcmQgaW5wdXQ8c3BhbiBjbGFzcz1cInRleHRDb250cm9sTGFiZWwgbmctc2NvcGVcIj4qPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJwYXNzd29yZFwiIGRpc2FibGVkIGNsYXNzPVwiZm9ybS1jb250cm9sIGZha2VDb250cm9sXCIgaWQ9XCJpbnB1dFBhc3NcIiBwbGFjZWhvbGRlcj1cInBhc3N3b3JkIGlucHV0XCI+XG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGVscC1ibG9jayBuZy1iaW5kaW5nIHB1bGwtbGVmdFwiPkRlc2NyaXB0aW9uPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PmAsXG4gICAgICAnY29udHJvbCdcdDogJ1Bhc3N3b3JkJyxcbiAgICAgICdjc3NDbGFzcyc6ICdjb2wteHMtMTInXG4gICAgfSxcbiAgICB7XG4gICAgICBhZGRUb0dyb3VwQ3RybCA6ICdpbnB1dHMnXG4gICAgfVxuICApO1xuXG4gIC8qKlxuICAgKiBBZGQgYW5ndWxhciBVSSBkYXRlIHBpY2tlclxuICAgKlxuICAgICogdGh4IEtlbnQgQy4gRG9kZHMgZm9yIGZvcm1seSBjb25maWcgdGVtcGxhdGUgKHNpbmNlIGl0IHdhcyBhIGh1Z2UgY29uZmlnKVxuICAgICovXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPVx0W1xuICAgICdkYXRlLWRpc2FibGVkJyxcbiAgICAnY3VzdG9tLWNsYXNzJyxcbiAgICAnc2hvdy13ZWVrcycsXG4gICAgJ3N0YXJ0aW5nLWRheScsXG4gICAgJ2luaXQtZGF0ZScsXG4gICAgJ21pbi1tb2RlJyxcbiAgICAnbWF4LW1vZGUnLFxuICAgICdmb3JtYXQtZGF5JyxcbiAgICAnZm9ybWF0LW1vbnRoJyxcbiAgICAnZm9ybWF0LXllYXInLFxuICAgICdmb3JtYXQtZGF5LWhlYWRlcicsXG4gICAgJ2Zvcm1hdC1kYXktdGl0bGUnLFxuICAgICdmb3JtYXQtbW9udGgtdGl0bGUnLFxuICAgICd5ZWFyLXJhbmdlJyxcbiAgICAnc2hvcnRjdXQtcHJvcGFnYXRpb24nLFxuICAgICd1aWItZGF0ZXBpY2tlci1wb3B1cCcsXG4gICAgJ3Nob3ctYnV0dG9uLWJhcicsXG4gICAgJ2N1cnJlbnQtdGV4dCcsXG4gICAgJ2NsZWFyLXRleHQnLFxuICAgICdjbG9zZS10ZXh0JyxcbiAgICAnY2xvc2Utb24tZGF0ZS1zZWxlY3Rpb24nLFxuICAgICdkYXRlcGlja2VyLWFwcGVuZC10by1ib2R5J1xuICBdO1xuXG4gIGNvbnN0IGJpbmRpbmdzID1cdFtcbiAgICAnZGF0ZXBpY2tlci1tb2RlJyxcbiAgICAnbWluLWRhdGUnLFxuICAgICdtYXgtZGF0ZSdcbiAgXTtcblxuICBsZXQgbmdNb2RlbEF0dHJzID0ge307XG5cbiAgYW5ndWxhci5mb3JFYWNoKGF0dHJpYnV0ZXMsIChhdHRyKSA9PiBuZ01vZGVsQXR0cnNbY2FtZWxpemUoYXR0cildID0ge2F0dHJpYnV0ZTogYXR0cn0pO1xuICBhbmd1bGFyLmZvckVhY2goYmluZGluZ3MsIChiaW5kaW5nKSA9PiBuZ01vZGVsQXR0cnNbY2FtZWxpemUoYmluZGluZyldID0ge2JvdW5kOiBiaW5kaW5nfSk7XG5cbiAgZnVuY3Rpb24gY2FtZWxpemUoc3RyaW5nKSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoL1tcXC1fXFxzXSsoLik/L2csIChtYXRjaCwgY2hyKSA9PiBjaHIgPyBjaHIudG9VcHBlckNhc2UoKSA6ICcnKTtcbiAgICAvLyBFbnN1cmUgMXN0IGNoYXIgaXMgYWx3YXlzIGxvd2VyY2FzZVxuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXihbQS1aXSkvLCAobWF0Y2gsIGNocikgPT4gY2hyID8gY2hyLnRvTG93ZXJDYXNlKCkgOiAnJyk7XG4gIH1cblxuICBjb25zdCBhbmd1bGFyVUlEYXRlUGlja2VyVGVtcGxhdGUgPVx0YFxuICAgIDxpbnB1dFxuICAgICAgaWQ9XCJ7e2lkfX1cIlxuICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgbmctY2xpY2s9XCJvcGVuKCRldmVudClcIlxuICAgICAgdWliLWRhdGVwaWNrZXItcG9wdXBcbiAgICAgIG5nLW1vZGVsPVwibW9kZWxbb3B0aW9ucy5rZXkgfHwgaW5kZXhdXCIgaXMtb3Blbj1cInRvLmlzT3BlblwiXG4gICAgICBuZy1jbGljaz1cInRvLmlzT3BlbiA9IHRydWVcIlxuICAgICAgZGF0ZXBpY2tlci1vcHRpb25zPVwidG8uZGF0ZXBpY2tlck9wdGlvbnNcIi8+YDtcblxuICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcbiAgICBuYW1lIFx0XHRcdFx0OiAnZGF0ZXBpY2tlcicsXG4gICAgdGVtcGxhdGUgXHRcdDogYW5ndWxhclVJRGF0ZVBpY2tlclRlbXBsYXRlLFxuICAgIHdyYXBwZXIgXHRcdDogWydib290c3RyYXBMYWJlbCcsICdib290c3RyYXBIYXNFcnJvciddLFxuICAgIGNvbnRyb2xsZXIgXHQ6IFtcdCckc2NvcGUnLCAoJHNjb3BlKSA9PiB7XG4gICAgICAgICAgJHNjb3BlLm9wZW4gPSAkZXZlbnQgPT4ge1xuICAgICAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkc2NvcGUub3BlbmVkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICBdLFxuICAgIGRlZmF1bHRPcHRpb25zIDoge1xuICAgICAgbmdNb2RlbEF0dHJzIFx0XHQ6IG5nTW9kZWxBdHRycyxcbiAgICAgIHRlbXBsYXRlT3B0aW9ucyA6IHtcbiAgICAgICAgYWRkb25MZWZ0OiB7XG4gICAgICAgICAgY2xhc3MgICA6ICdnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyJyxcbiAgICAgICAgICBvbkNsaWNrIDogKG9wdGlvbnMpID0+IG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLmlzT3BlbiA9ICFvcHRpb25zLnRlbXBsYXRlT3B0aW9ucy5pc09wZW5cbiAgICAgICAgfSxcbiAgICAgICAgb25Gb2N1cyAgIDogKCR2aWV3VmFsdWUsICRtb2RlbFZhbHVlLCBzY29wZSkgPT4gc2NvcGUudG8uaXNPcGVuID0gIXNjb3BlLnRvLmlzT3BlbixcbiAgICAgICAgZGF0ZXBpY2tlck9wdGlvbnM6IHt9XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlci5hZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3Qoe1xuICAgICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ0RhdGUnLFxuICAgICAgbmFtZSBcdFx0XHRcdFx0XHRcdDogJ0RhdGUnLFxuICAgICAgc3VidGl0bGUgXHRcdFx0XHRcdDogJ0RhdGUnLFxuICAgICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnaW5wdXQnLFxuICAgICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2RhdGVwaWNrZXInLFxuICAgICAgZm9ybWx5U3VidHlwZSBcdFx0OiAnJyxcbiAgICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgICBmb3JtbHlSZXF1aXJlZCBcdFx0OiBmYWxzZSxcbiAgICAgIGZvcm1seURlc2NyaXB0aW9uIFx0OiAnJyxcbiAgICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW10sXG4gICAgICBkYXRlcGlja2VyUG9wdXAgXHQ6ICdkZC1NTU1NLXl5eXknXG4gICAgfVxuICApO1xuICAvKipcbiAgICogZHJhZyBhbmQgZHJvcCB0ZXh0IGlucHV0IOKAlCBkYXRlIOKAlCBjb250cm9sIHRlbXBsYXRlICh1c2luZyBhbmd1bGFyIFVJIGRhdGVwaWNrZXIpXG4gICAqXG4gICAgKlxuICAgICogQFBBUkFNIDEgOiBjb250cm9sIHRlbXBsYXRlIG9iamVjdCAoZHJhZyBhbiBkcm9wKVxuICAgICogQFBBUkFNIDIgOiBvYmplY3QgdG8gaW5kaWNhdGVzIGluIHdoaWNoIGdyb3VwIG9mIGNvbnRyb2wgaXQgd2lsbCBiZSBpbnNlcnRlZFxuICAgICogIFx0XHRcdFx0XHQocmVsYXRlZCB0byBfZHJhZ0Ryb3BDb25maWdNb2RlbC5jb250YWluZXJDb25maWcuZGVjb3JhdGlvbiBpbiBkcmFnRHJvcENvbmZpZyBwcm92aWRlcilcbiAgICAqL1xuICBlYXN5Rm9ybURyYWdXYXlDb25maWdQcm92aWRlci5hZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsKHtcbiAgICBsYWJlbCBcdDpgXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgPGxhYmVsIGZvcj1cImlucHV0RGF0ZVwiIGNsYXNzPVwiY29udHJvbC1sYWJlbCB0ZXh0Q29udHJvbExhYmVsIG5nLWJpbmRpbmcgcHVsbC1sZWZ0XCI+XG4gICAgICAgICB0aXRsZSBmb3IgZGF0ZSBpbnB1dDxzcGFuIGNsYXNzPVwidGV4dENvbnRyb2xMYWJlbCBuZy1zY29wZVwiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTEyIGNvbC1tZC0xMiBkZW1vZGREYXRlcGlja2VyXCI+XG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gIFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLWFkZG9uXCI+PHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyXCI+PC9zcGFuPjwvc3Bhbj5cbiAgXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwidGV4dFwiIGRpc2FibGVkIGNsYXNzPVwiZm9ybS1jb250cm9sIGZha2VDb250cm9sXCI+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cImhlbHAtYmxvY2sgcHVsbC1sZWZ0XCI+ZGVzY3JpcHRpb248L3A+XG4gICAgICA8L2Rpdj5cbiAgICAgPC9kaXY+YCxcbiAgICBjb250cm9sXHQ6ICdEYXRlJyxcbiAgICBjc3NDbGFzczogJ2NvbC14cy0xMidcbiAgfSxcbiAge1xuICAgIGFkZFRvR3JvdXBDdHJsIDogJ2lucHV0cydcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFkZCB0ZXh0YXJlYVxuICAgKlxuICAgICogbm90ZSA6IGZvcm1seSB0ZW1wbGF0ZSBhbHJlYWR5IGV4aXN0c1xuICAgICogbm8gbmVlZCB0byBjcmVhdGUgYSBjdXN0b20gb25lXG4gICAgKlxuICAgICoganVzdCBkZWNsYXJlIGluIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyXG4gICAgKi9cbiAgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXIuYWRkRWFzeUZvcm1Db250cm9sVG9MaXN0KHtcbiAgICBpZCBcdFx0XHRcdFx0XHRcdFx0OiAnVGV4YXJlYScsXG4gICAgbmFtZSBcdFx0XHRcdFx0XHRcdDogJ1RleHRhcmVhJyxcbiAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnVGV4dGFyZWEnLFxuICAgIGdyb3VwIFx0XHRcdFx0XHRcdDogJ1RleHRhcmVhJyxcbiAgICBmb3JtbHlUeXBlIFx0XHRcdFx0OiAndGV4dGFyZWEnLFxuICAgIGZvcm1seVN1YnR5cGUgXHRcdDogJycsXG4gICAgZm9ybWx5TGFiZWwgXHRcdFx0OiAnJyxcbiAgICBmb3JtbHlSZXF1aXJlZCBcdFx0OiBmYWxzZSxcbiAgICBmb3JtbHlEZXNjcmlwdGlvbiBcdDogJycsXG4gICAgZm9ybWx5T3B0aW9ucyBcdFx0OiBbXVxuICB9KTtcbiAgLyoqXG4gICAqIGRyYWcgYW5kIGRyb3AgdGV4dGFyZWEgY29udHJvbCB0ZW1wbGF0ZVxuICAgKlxuICAgICpcbiAgICAqIEBQQVJBTSAxIDogY29udHJvbCB0ZW1wbGF0ZSBvYmplY3QgKGRyYWcgYW4gZHJvcClcbiAgICAqIEBQQVJBTSAyIDogb2JqZWN0IHRvIGluZGljYXRlcyBpbiB3aGljaCBncm91cCBvZiBjb250cm9sIGl0IHdpbGwgYmUgaW5zZXJ0ZWRcbiAgICAqICBcdFx0XHRcdFx0KHJlbGF0ZWQgdG8gX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24gaW4gZHJhZ0Ryb3BDb25maWcgcHJvdmlkZXIpXG4gICAgKi9cbiAgZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIuYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCh7XG4gICAgJ2xhYmVsJyBcdDogYFxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwidGV4dEFyZWFcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcbiAgICAgIFx0XHRcdFx0XHRcdFx0dGV4dENvbnRyb2xMYWJlbCBwdWxsLWxlZnRcIj50aXRsZSBmb3IgdGV4dGFyZWEgPHNwYW4gY2xhc3M9XCJ0ZXh0Q29udHJvbExhYmVsXCI+Kjwvc3Bhbj48L2xhYmVsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgZGlzYWJsZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHJhZ0l0ZW10ZXh0YXJlYSBmYWtlQ29udHJvbFwiIG5nLW1vZGVsPVwibW9kZWxbb3B0aW9ucy5rZXldXCIgcm93cz1cIjFcIiBpZD1cInRleHRBcmVhXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJoZWxwLWJsb2NrIHB1bGwtbGVmdFwiPmRlc2NyaXB0aW9uPC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gLFxuICAgICdjb250cm9sJ1x0OiAnVGV4YXJlYScsXG4gICAgJ2Nzc0NsYXNzJzogJ2NvbC14cy0xMidcbiAgfSxcbiAge1xuICAgIGFkZFRvR3JvdXBDdHJsIDogJ3RleHRhcmVhcydcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFkZCByaWNoIHRleHQgZWRpdG9yIGNvbnRyb2wgKHVzaW5nIHRleHRBbmd1bGFyKVxuICAgKlxuICAgKi9cbiAgbGV0IHJpY2hUZXhFZGl0b3JUZW1wbGF0ZSA9YFxuICAgIDx0ZXh0LWFuZ3VsYXIgbmFtZT1cInt7aWR9fVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJpY2hUZXh0QW5ndWxhclwiXG4gICAgICAgICAgICAgICAgICBuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5IHx8IGluZGV4XVwiPlxuICAgIDwvdGV4dC1hbmd1bGFyPmA7XG5cbiAgZm9ybWx5Q29uZmlnUHJvdmlkZXIuc2V0VHlwZSh7XG4gICAgbmFtZSAgICAgXHQ6ICdyaWNoRWRpdG9yJyxcbiAgICB0ZW1wbGF0ZSBcdDogcmljaFRleEVkaXRvclRlbXBsYXRlXG4gIH0pO1xuXG4gIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyLmFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdCh7XG4gICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ1JpY2hUZXh0RWRpdG9yJyxcbiAgICBuYW1lIFx0XHRcdFx0XHRcdFx0OiAnUmljaFRleHRFZGl0b3InLFxuICAgIHN1YnRpdGxlIFx0XHRcdFx0XHQ6ICdSaWNoVGV4dEVkaXRvcicsXG4gICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnVGV4dGFyZWEnLFxuICAgIGZvcm1seVR5cGUgXHRcdFx0XHQ6ICdyaWNoRWRpdG9yJyxcbiAgICBmb3JtbHlTdWJ0eXBlIFx0XHQ6ICcnLFxuICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgZm9ybWx5RGVzY3JpcHRpb24gXHQ6ICcnLFxuICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW11cbiAgfSk7XG4gIC8qKlxuICAgKiBkcmFnIGFuZCBkcm9wIHJpY2ggdGV4dCBlZGl0b3IgY29udHJvbCB0ZW1wbGF0ZSAodXNpbmcgdGV4dEFuZ3VsYXIpXG4gICAqXG4gICAgKlxuICAgICogQFBBUkFNIDEgOiBjb250cm9sIHRlbXBsYXRlIG9iamVjdCAoZHJhZyBhbiBkcm9wKVxuICAgICogQFBBUkFNIDIgOiBvYmplY3QgdG8gaW5kaWNhdGVzIGluIHdoaWNoIGdyb3VwIG9mIGNvbnRyb2wgaXQgd2lsbCBiZSBpbnNlcnRlZFxuICAgICogIFx0XHRcdFx0XHQocmVsYXRlZCB0byBfZHJhZ0Ryb3BDb25maWdNb2RlbC5jb250YWluZXJDb25maWcuZGVjb3JhdGlvbiBpbiBkcmFnRHJvcENvbmZpZyBwcm92aWRlcilcbiAgICAqL1xuICBlYXN5Rm9ybURyYWdXYXlDb25maWdQcm92aWRlci5hZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsKHtcbiAgICBsYWJlbCBcdDogYFxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICA8bGFiZWwgZm9yPVwidGV4dEFyZWFcIiBjbGFzcz1cImNvbnRyb2wtbGFiZWxcbiAgICAgIFx0XHRcdFx0XHRcdFx0dGV4dENvbnRyb2xMYWJlbCBwdWxsLWxlZnRcIj50aXRsZSBmb3IgcmljaCB0ZXh0IGVkaXRvciA8c3BhbiBjbGFzcz1cInRleHRDb250cm9sTGFiZWxcIj4qPC9zcGFuPjwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBkaXNhYmxlZCBjbGFzcz1cImZvcm0tY29udHJvbCBkcmFnSXRlbXRleHRhcmVhIGZha2VDb250cm9sXCIgbmctbW9kZWw9XCJtb2RlbFtvcHRpb25zLmtleV1cIiByb3dzPVwiMVwiIGlkPVwidGV4dEFyZWFcIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImhlbHAtYmxvY2tcIj5kZXNjcmlwdGlvbjwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+YCxcbiAgICBjb250cm9sXHQ6ICdSaWNoVGV4dEVkaXRvcicsXG4gICAgY3NzQ2xhc3M6ICdjb2wteHMtMTInXG4gIH0sXG4gIHtcbiAgICBhZGRUb0dyb3VwQ3RybCA6ICd0ZXh0YXJlYXMnXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBZGQgcmFkaW9cbiAgICpcbiAgICAqIG5vdGUgOiBmb3JtbHkgdGVtcGxhdGUgYWxyZWFkeSBleGlzdHNcbiAgICAqIG5vIG5lZWQgdG8gY3JlYXRlIGEgY3VzdG9tIG9uZVxuICAgICpcbiAgICAqIGp1c3QgZGVjbGFyZSBpbiBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHNQcm92aWRlclxuICAgICovXG4gIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyLmFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdCh7XG4gICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ1JhZGlvJyxcbiAgICBuYW1lIFx0XHRcdFx0XHRcdFx0OiAnUmFkaW8nLFxuICAgIHN1YnRpdGxlIFx0XHRcdFx0XHQ6ICdSYWRpbycsXG4gICAgb3B0aW9ucyBcdFx0XHRcdFx0OiBbXSxcbiAgICBncm91cCBcdFx0XHRcdFx0XHQ6ICdSYWRpbycsXG4gICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ3JhZGlvJyxcbiAgICBmb3JtbHlTdWJ0eXBlIFx0XHQ6ICcnLFxuICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgZm9ybWx5RGVzY3JpcHRpb24gXHQ6ICcnICxcbiAgICBmb3JtbHlPcHRpb25zIFx0XHQ6IFtdXG4gIH0pO1xuICAvKipcbiAgICogZHJhZyBhbmQgZHJvcCByYWRpbyBjb250cm9sIHRlbXBsYXRlICh1c2luZyB0ZXh0QW5ndWxhcilcbiAgICpcbiAgICAqXG4gICAgKiBAUEFSQU0gMSA6IGNvbnRyb2wgdGVtcGxhdGUgb2JqZWN0IChkcmFnIGFuIGRyb3ApXG4gICAgKiBAUEFSQU0gMiA6IG9iamVjdCB0byBpbmRpY2F0ZXMgaW4gd2hpY2ggZ3JvdXAgb2YgY29udHJvbCBpdCB3aWxsIGJlIGluc2VydGVkXG4gICAgKiAgXHRcdFx0XHRcdChyZWxhdGVkIHRvIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uIGluIGRyYWdEcm9wQ29uZmlnIHByb3ZpZGVyKVxuICAgICovXG4gIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyLmFkZENvbnRyb2xUb0RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwoe1xuICAgICdsYWJlbCcgXHQ6IGBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwidmVydFJhZGlvXCIgY2xhc3M9XCJjb250cm9sLWxhYmVsIHRleHRDb250cm9sTGFiZWwgcHVsbC1sZWZ0XCI+dGl0bGUgZm9yIHJhZGlvIDxzcGFuIGNsYXNzPVwidGV4dENvbnRyb2xMYWJlbFwiPio8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW50ZXJsaWduZVwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpb1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmYWtlQ2hlY2tcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgZGlzYWJsZWQgbmFtZT1cIm9wdGlvbnNSYWRpb3NcIiBjbGFzcz1cImZha2VDaGVja1wiIGlkPVwib3B0aW9uc1JhZGlvLTBcIiB2YWx1ZT1cInZlcnRpY2FsUmFkaW8wXCIgY2hlY2tlZD1cIlwiPlxuICAgICAgICAgICAgICAgIG9wdGlvbjFcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvXCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZha2VDaGVja1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBkaXNhYmxlZCBuYW1lPVwib3B0aW9uc1JhZGlvc1wiIGNsYXNzPVwiZmFrZUNoZWNrXCIgIGlkPVwib3B0aW9uc1JhZGlvLTFcIiB2YWx1ZT1cInZlcnRpY2FsUmFkaW8xXCIgY2hlY2tlZD1cIlwiPlxuICAgICAgICAgICAgICAgIG9wdGlvbjJcbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJoZWxwLWJsb2NrIHB1bGwtbGVmdFwiPmRlc2NyaXB0aW9uPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmAsXG4gICAgJ2NvbnRyb2wnXHQ6ICdSYWRpbycsXG4gICAgJ2Nzc0NsYXNzJzogJ2NvbC14cy0xMidcbiAgfSxcbiAge1xuICAgIGFkZFRvR3JvdXBDdHJsIDogJ3JhZGlvcydcbiAgfSk7XG5cbiAgLyoqXG4gICAqIEFkZCBjaGVja2JveFxuICAgKlxuICAgICogbm90ZSA6IGZvcm1seSB0ZW1wbGF0ZSBhbHJlYWR5IGV4aXN0c1xuICAgICogbm8gbmVlZCB0byBjcmVhdGUgYSBjdXN0b20gb25lXG4gICAgKlxuICAgICoganVzdCBkZWNsYXJlIGluIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyXG4gICAgKi9cbiAgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXIuYWRkRWFzeUZvcm1Db250cm9sVG9MaXN0KHtcbiAgICBpZCBcdFx0XHRcdFx0XHRcdFx0OiAnQ2hlY2tib3gnLFxuICAgIG5hbWUgXHRcdFx0XHRcdFx0XHQ6ICdDaGVja2JveCcsXG4gICAgc3VidGl0bGUgXHRcdFx0XHRcdDogJ0NoZWNrYm94JyxcbiAgICBncm91cCBcdFx0XHRcdFx0XHQ6ICdDaGVja2JveCcsXG4gICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2NoZWNrYm94JyxcbiAgICBmb3JtbHlTdWJ0eXBlIFx0XHQ6ICcnLFxuICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgZm9ybWx5RGVzY3JpcHRpb24gXHQ6ICcnLFxuICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW11cbiAgfSk7XG4gIC8qKlxuICAgKiBkcmFnIGFuZCBkcm9wIGNoZWNrYm94IGNvbnRyb2wgdGVtcGxhdGUgKHVzaW5nIHRleHRBbmd1bGFyKVxuICAgKlxuICAgICpcbiAgICAqIEBQQVJBTSAxIDogY29udHJvbCB0ZW1wbGF0ZSBvYmplY3QgKGRyYWcgYW4gZHJvcClcbiAgICAqIEBQQVJBTSAyIDogb2JqZWN0IHRvIGluZGljYXRlcyBpbiB3aGljaCBncm91cCBvZiBjb250cm9sIGl0IHdpbGwgYmUgaW5zZXJ0ZWRcbiAgICAqICBcdFx0XHRcdFx0KHJlbGF0ZWQgdG8gX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24gaW4gZHJhZ0Ryb3BDb25maWcgcHJvdmlkZXIpXG4gICAgKi9cbiAgZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIuYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCh7XG4gICAgbGFiZWwgXHQ6IGBcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmFrZUNoZWNrXCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRpc2FibGVkIGNsYXNzPVwiZmFrZUNoZWNrXCIgaWQ9XCJjaGVja0JveFwiPlxuICAgICAgXHRcdDxzcGFuIGNsYXNzPVwiYmxhY2tUZXh0IG5nLWJpbmRpbmdcIj5sYWJlbCBmb3IgY2hlY2tib3ggPC9zcGFuPlxuICAgICAgXHRcdDxzcGFuIGNsYXNzPVwidGV4dENvbnRyb2xMYWJlbCBuZy1zY29wZVwiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwIGNsYXNzPVwiaGVscC1ibG9jayBuZy1iaW5kaW5nXCI+ZGVzY3JpcHRpb248L3A+XG4gICAgPC9kaXY+YCxcbiAgICBjb250cm9sXHQ6ICdDaGVja2JveCcsXG4gICAgY3NzQ2xhc3M6ICdjb2wteHMtMTInXG4gIH0sXG4gIHtcbiAgICBhZGRUb0dyb3VwQ3RybCA6ICdjaGVja2JveGVzJ1xuICB9KTtcblxuICAvKipcbiAgICogQWRkIGJhc2ljIFNlbGVjdCBjb250cm9sXG4gICAqXG4gICAgKiB1c2luZyBueWEtYnMtc2VsZWN0XG4gICAgKi9cbiAgbGV0IGJhc2ljU2VsZWN0VGVtcGxhdGUgPVx0YFxuICAgPG9sIGNsYXNzPVwibnlhLWJzLXNlbGVjdCBjb2wtc20tMTIgY29sLXhzLTEyIGNvbC1tZC0xMiBjb2wtbGcxMlwiXG4gIFx0XHRuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5IHx8IGluZGV4XVwiXG4gIFx0XHRpZD1cInt7aWR9fVwiXG4gIFx0XHRkaXNhYmxlZD1cIm9wdGlvbnMudGVtcGxhdGVPcHRpb25zLm9wdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgIDxsaSBjbGFzcz1cIm55YS1icy1vcHRpb25cIiBueWEtYnMtb3B0aW9uPVwib3B0aW9uIGluIG9wdGlvbnMudGVtcGxhdGVPcHRpb25zLm9wdGlvbnNcIj5cbiAgICAgICA8YT57e29wdGlvbi5uYW1lfX08L2E+XG4gICAgIDwvbGk+XG4gICA8L29sPiBgO1xuXG4gIGZvcm1seUNvbmZpZ1Byb3ZpZGVyLnNldFR5cGUoe1xuICAgIG5hbWUgXHRcdFx0OiAnYmFzaWNTZWxlY3QnLFxuICAgIHRlbXBsYXRlIFx0OiBiYXNpY1NlbGVjdFRlbXBsYXRlXG4gIH0pO1xuXG4gIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVsc1Byb3ZpZGVyLmFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdCh7XG4gICAgaWQgXHRcdFx0XHRcdFx0XHRcdDogJ0Jhc2ljU2VsZWN0JyxcbiAgICBuYW1lIFx0XHRcdFx0XHRcdFx0OiAnQmFzaWMgc2VsZWN0JyxcbiAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnQmFzaWMgc2VsZWN0JyxcbiAgICBvcHRpb25zIFx0XHRcdFx0XHQ6IFtdLFxuICAgIGdyb3VwIFx0XHRcdFx0XHRcdDogJ1NlbGVjdCcsXG4gICAgZm9ybWx5VHlwZSBcdFx0XHRcdDogJ2Jhc2ljU2VsZWN0JyxcbiAgICBmb3JtbHlTdWJ0eXBlIFx0XHQ6ICcnLFxuICAgIGZvcm1seUxhYmVsIFx0XHRcdDogJycsXG4gICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgZm9ybWx5RGVzY3JpcHRpb24gXHQ6ICcnLFxuICAgIGZvcm1seU9wdGlvbnMgXHRcdDogW11cbiAgfSk7XG5cbiAgLyoqXG4gICAqIGRyYWcgYW5kIGRyb3AgYmFzaWMgc2VsZWN0IGNvbnRyb2wgdGVtcGxhdGUgKHVzaW5nIHRleHRBbmd1bGFyKVxuICAgKlxuICAgICpcbiAgICAqIEBQQVJBTSAxIDogY29udHJvbCB0ZW1wbGF0ZSBvYmplY3QgKGRyYWcgYW4gZHJvcClcbiAgICAqIEBQQVJBTSAyIDogb2JqZWN0IHRvIGluZGljYXRlcyBpbiB3aGljaCBncm91cCBvZiBjb250cm9sIGl0IHdpbGwgYmUgaW5zZXJ0ZWRcbiAgICAqICBcdFx0XHRcdFx0KHJlbGF0ZWQgdG8gX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24gaW4gZHJhZ0Ryb3BDb25maWcgcHJvdmlkZXIpXG4gICAgKi9cbiAgZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIuYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbChcbiAge1xuICAgIGxhYmVsIFx0OiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0xMiBjb2wtbWQtMTIgY29sLWxnLTEyIHNlbGVjdGZvcmRlbW9cIj5cblxuICAgICAgPG9sIGNsYXNzPVwibnlhLWJzLXNlbGVjdCBjb2wteHMtMTIgY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTIgbmctdmFsaWQgYnRuLWdyb3VwIG5nLWRpcnR5IG5nLXZhbGlkLXBhcnNlIG5nLXRvdWNoZWRcIlxuICAgICAgXHRuZy1tb2RlbD1cImZha2VNb2RlbE55YVNlbGVjdEJhc2ljXCJcbiAgICAgIFx0ZGF0YS1saXZlLXNlYXJjaD1cImZhbHNlXCI+XG5cbiAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgZHJvcGRvd24tdG9nZ2xlXCIgZGlzYWJsZWQgdHlwZT1cImJ1dHRvblwiPlxuICAgICAgXHRcdCA8c3BhbiBjbGFzcz1cInB1bGwtbGVmdCBmaWx0ZXItb3B0aW9uXCI+XG4gICAgICBcdFx0XHQgPHNwYW4gY2xhc3M9XCJuZy1iaW5kaW5nXCI+QmFzaWMgc2VsZWN0PC9zcGFuPlxuICAgICAgXHRcdDwvc3Bhbj5cbiAgICAgIFx0XHQmbmJzcDs8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5gLFxuICAgIGNvbnRyb2xcdDogJ0Jhc2ljU2VsZWN0JyxcbiAgICBjc3NDbGFzczogJ2NvbC14cy0xMidcbiAgfSxcbiAge1xuICAgIGFkZFRvR3JvdXBDdHJsIDogJ3NlbGVjdHMnXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBBZGQgR3JvdXBlZCBTZWxlY3QgY29udHJvbFxuICAgKlxuICAgICogdXNpbmcgbnlhLWJzLXNlbGVjdFxuICAgICovXG4gIGxldCBncm91cGVkU2VsZWN0VGVtcGxhdGUgPVx0YFxuICA8b2wgY2xhc3M9XCJueWEtYnMtc2VsZWN0IGNvbC1zbS0xMiBjb2wteHMtMTIgY29sLW1kLTEyIGNvbC1sZzEyXCJcblx0XHQgICBuZy1tb2RlbD1cIm1vZGVsW29wdGlvbnMua2V5IHx8IGluZGV4XVwiXG4gICAgICBkYXRhLWxpdmUtc2VhcmNoPVwidHJ1ZVwiXG4gICAgICBkaXNhYmxlZD1cIm9wdGlvbnMudGVtcGxhdGVPcHRpb25zLm9wdGlvbnMubGVuZ3RoID09PSAwXCI+XG4gICAgICA8bGkgbnlhLWJzLW9wdGlvbj1cIm9wdGlvbiBpbiAgb3B0aW9ucy50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyBncm91cCBieSBvcHRpb24uZ3JvdXBcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1oZWFkZXJcIj57eyRncm91cH19PC9zcGFuPlxuICAgICAgICA8YT5cbiAgICAgICAgICA8c3Bhbj57e29wdGlvbi5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnbHlwaGljb24gZ2x5cGhpY29uLW9rIGNoZWNrLW1hcmtcIj48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvbGk+XG4gIDwvb2w+YDtcblxuICBmb3JtbHlDb25maWdQcm92aWRlci5zZXRUeXBlKHtcbiAgICBuYW1lICAgXHRcdDogJ2dyb3VwZWRTZWxlY3QnLFxuICAgIHRlbXBsYXRlIFx0OiBncm91cGVkU2VsZWN0VGVtcGxhdGVcbiAgfSk7XG5cbiAgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXIuYWRkRWFzeUZvcm1Db250cm9sVG9MaXN0KHtcbiAgICBpZCBcdFx0XHRcdFx0XHRcdFx0OiAnR3JvdXBlZFNlbGVjdCcsXG4gICAgbmFtZSBcdFx0XHRcdFx0XHRcdDogJ0dyb3VwZWQgU2VsZWN0JyxcbiAgICBzdWJ0aXRsZSBcdFx0XHRcdFx0OiAnR3JvdXBlZCBTZWxlY3QnLFxuICAgIG9wdGlvbnMgXHRcdFx0XHRcdDogW10sXG4gICAgZ3JvdXAgXHRcdFx0XHRcdFx0OiAnU2VsZWN0JyxcbiAgICBmb3JtbHlUeXBlIFx0XHRcdFx0OiAnZ3JvdXBlZFNlbGVjdCcsXG4gICAgZm9ybWx5U3VidHlwZSBcdFx0OiAnJyxcbiAgICBmb3JtbHlMYWJlbCBcdFx0XHQ6ICcnLFxuICAgIGZvcm1seVJlcXVpcmVkIFx0XHQ6IGZhbHNlLFxuICAgIGZvcm1seURlc2NyaXB0aW9uIFx0OiAnJyxcbiAgICBmb3JtbHlPcHRpb25zIFx0XHQ6IFtdXG4gIH0pO1xuICAvKipcbiAgICogZHJhZyBhbmQgZHJvcCBncm91cGVkIHNlbGVjdCBjb250cm9sIHRlbXBsYXRlICh1c2luZyB0ZXh0QW5ndWxhcilcbiAgICpcbiAgICAqXG4gICAgKiBAUEFSQU0gMSA6IGNvbnRyb2wgdGVtcGxhdGUgb2JqZWN0IChkcmFnIGFuIGRyb3ApXG4gICAgKiBAUEFSQU0gMiA6IG9iamVjdCB0byBpbmRpY2F0ZXMgaW4gd2hpY2ggZ3JvdXAgb2YgY29udHJvbCBpdCB3aWxsIGJlIGluc2VydGVkXG4gICAgKiAgXHRcdFx0XHRcdChyZWxhdGVkIHRvIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uIGluIGRyYWdEcm9wQ29uZmlnIHByb3ZpZGVyKVxuICAgICovXG4gIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyLmFkZENvbnRyb2xUb0RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwoe1xuICAgIGxhYmVsIFx0OiBgXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTIgc2VsZWN0Zm9yZGVtb1wiPlxuICAgICAgPG9sIGNsYXNzPVwibnlhLWJzLXNlbGVjdCBjb2wteHMtMTIgY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTIgbmctdmFsaWQgYnRuLWdyb3VwIG5nLWRpcnR5IG5nLXZhbGlkLXBhcnNlIG5nLXRvdWNoZWRcIlxuICAgICAgXHRuZy1tb2RlbD1cImZha2VNb2RlbE55YVNlbGVjdEJhc2ljXCJcbiAgICAgIFx0ZGF0YS1saXZlLXNlYXJjaD1cImZhbHNlXCI+XG4gICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGRyb3Bkb3duLXRvZ2dsZVwiIGRpc2FibGVkIHR5cGU9XCJidXR0b25cIj5cbiAgICAgIFx0XHQgPHNwYW4gY2xhc3M9XCJwdWxsLWxlZnQgZmlsdGVyLW9wdGlvblwiPlxuICAgICAgXHRcdFx0IDxzcGFuIGNsYXNzPVwibmctYmluZGluZ1wiPkdyb3VwZWQgc2VsZWN0PC9zcGFuPlxuICAgICAgXHRcdDwvc3Bhbj5cbiAgICAgIFx0XHQmbmJzcDs8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmAsXG4gICAgY29udHJvbFx0OiAnR3JvdXBlZFNlbGVjdCcsXG4gICAgY3NzQ2xhc3M6ICdjb2wteHMtMTInXG4gIH0sXG4gIHtcbiAgICBhZGRUb0dyb3VwQ3RybCA6ICdzZWxlY3RzJ1xuICB9KTtcblxuXG59XG5cbmZvcm1seUNvbmZpZy4kaW5qZWN0ID0gW1xuICAnZm9ybWx5Q29uZmlnUHJvdmlkZXInLFxuICAnRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzUHJvdmlkZXInLFxuICAnZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXInXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtbHlDb25maWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbmZpZy9lZGFEcmFnRHJvcFdheS5mb3JtbHlDb25maWcuY29uZmlnLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 12 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.EASY_FORM_DD_VERSION_VALUE = exports.EASY_FORM_DD_VERSION_NAME = undefined;\n\nvar _easyFormConfig = __webpack_require__(13);\n\nvar _easyFormConfig2 = _interopRequireDefault(_easyFormConfig);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EASY_FORM_DD_VERSION_NAME = 'easyFormGenVersion';\nvar EASY_FORM_DD_VERSION_VALUE = _easyFormConfig2.default.dragdropway.version;\n\nfunction dragDropConfigFunct(easyFormDragWayConfigProvider) {\n easyFormDragWayConfigProvider.setItemsNotTocount({\n //placeholder : '',\n itemBeingDragged: 'dndDraggingSource'\n });\n}\n\ndragDropConfigFunct.$inject = ['easyFormDragWayConfigProvider'];\n\nexports.default = dragDropConfigFunct;\nexports.EASY_FORM_DD_VERSION_NAME = EASY_FORM_DD_VERSION_NAME;\nexports.EASY_FORM_DD_VERSION_VALUE = EASY_FORM_DD_VERSION_VALUE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbmZpZy9lZGFEcmFnRHJvcFdheS5kcmFnRHJvcENvbmZpZy5jb25maWcuanM/ZjU4NCJdLCJuYW1lcyI6WyJFQVNZX0ZPUk1fRERfVkVSU0lPTl9OQU1FIiwiRUFTWV9GT1JNX0REX1ZFUlNJT05fVkFMVUUiLCJkcmFnZHJvcHdheSIsInZlcnNpb24iLCJkcmFnRHJvcENvbmZpZ0Z1bmN0IiwiZWFzeUZvcm1EcmFnV2F5Q29uZmlnUHJvdmlkZXIiLCJzZXRJdGVtc05vdFRvY291bnQiLCJpdGVtQmVpbmdEcmFnZ2VkIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxJQUFNQSw0QkFBNkIsb0JBQW5DO0FBQ0EsSUFBTUMsNkJBQTZCLHlCQUFlQyxXQUFmLENBQTJCQyxPQUE5RDs7QUFFQSxTQUFTQyxtQkFBVCxDQUE2QkMsNkJBQTdCLEVBQTREO0FBQzFEQSxnQ0FBOEJDLGtCQUE5QixDQUFpRDtBQUMvQztBQUNBQyxzQkFBc0I7QUFGeUIsR0FBakQ7QUFJRDs7QUFFREgsb0JBQW9CSSxPQUFwQixHQUE4QixDQUM1QiwrQkFENEIsQ0FBOUI7O2tCQUllSixtQjtRQUdiSix5QixHQUFBQSx5QjtRQUNBQywwQixHQUFBQSwwQiIsImZpbGUiOiIxMi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlYXN5Rm9ybUNvbmZpZyAgIGZyb20gJy4uLy4uL2Vhc3lGb3JtQ29uZmlnLmpzb24nO1xuXG5jb25zdCBFQVNZX0ZPUk1fRERfVkVSU0lPTl9OQU1FICA9ICdlYXN5Rm9ybUdlblZlcnNpb24nO1xubGV0ICAgRUFTWV9GT1JNX0REX1ZFUlNJT05fVkFMVUUgPSBlYXN5Rm9ybUNvbmZpZy5kcmFnZHJvcHdheS52ZXJzaW9uO1xuXG5mdW5jdGlvbiBkcmFnRHJvcENvbmZpZ0Z1bmN0KGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyKSB7XG4gIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1Byb3ZpZGVyLnNldEl0ZW1zTm90VG9jb3VudCh7XG4gICAgLy9wbGFjZWhvbGRlciA6ICAgICAgICAgJycsXG4gICAgaXRlbUJlaW5nRHJhZ2dlZCA6ICAgICdkbmREcmFnZ2luZ1NvdXJjZScgICAgXG4gIH0pO1xufVxuXG5kcmFnRHJvcENvbmZpZ0Z1bmN0LiRpbmplY3QgPSBbXG4gICdlYXN5Rm9ybURyYWdXYXlDb25maWdQcm92aWRlcidcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWdEcm9wQ29uZmlnRnVuY3Q7IFxuXG5leHBvcnQge1xuICBFQVNZX0ZPUk1fRERfVkVSU0lPTl9OQU1FLCBcbiAgRUFTWV9GT1JNX0REX1ZFUlNJT05fVkFMVUVcbn07XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29uZmlnL2VkYURyYWdEcm9wV2F5LmRyYWdEcm9wQ29uZmlnLmNvbmZpZy5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 13 */ +/***/ function(module, exports) { + + eval("module.exports = {\n\t\"stepway\": {\n\t\t\"version\": \"2.1.4\"\n\t},\n\t\"dragdropway\": {\n\t\t\"version\": \"2.1.4\"\n\t},\n\t\"formviewer\": {\n\t\t\"version\": \"2.1.4\"\n\t}\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Vhc3lGb3JtQ29uZmlnLmpzb24/MzFjYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIxMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0ge1xuXHRcInN0ZXB3YXlcIjoge1xuXHRcdFwidmVyc2lvblwiOiBcIjIuMS40XCJcblx0fSxcblx0XCJkcmFnZHJvcHdheVwiOiB7XG5cdFx0XCJ2ZXJzaW9uXCI6IFwiMi4xLjRcIlxuXHR9LFxuXHRcImZvcm12aWV3ZXJcIjoge1xuXHRcdFwidmVyc2lvblwiOiBcIjIuMS40XCJcblx0fVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZWFzeUZvcm1Db25maWcuanNvblxuLy8gbW9kdWxlIGlkID0gMTNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 14 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar CORE_MODULES = ['textAngular', 'textAngularSetup', 'ngAnimate', 'toaster', 'formly', 'formlyBootstrap', 'ui.bootstrap', 'nya.bootstrap.select', 'mgcrea.ngStrap.affix'\n// 'pascalprecht.translate'\t\n];\n\nexports.default = angular.module('easyFormGen.dragDropWay.core', CORE_MODULES);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvcmUvZWRhRHJhZ0Ryb3BXYXkuY29yZS5tb2R1bGUuanM/OTY2YyJdLCJuYW1lcyI6WyJDT1JFX01PRFVMRVMiLCJhbmd1bGFyIiwibW9kdWxlIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQU1BLGVBQWUsQ0FDcEIsYUFEb0IsRUFFcEIsa0JBRm9CLEVBR3BCLFdBSG9CLEVBSXBCLFNBSm9CLEVBS3BCLFFBTG9CLEVBTXBCLGlCQU5vQixFQU9wQixjQVBvQixFQVFwQixzQkFSb0IsRUFTcEI7QUFDQTtBQVZvQixDQUFyQjs7a0JBYWVDLFFBQ05DLE1BRE0sQ0FDQyw4QkFERCxFQUNpQ0YsWUFEakMsQyIsImZpbGUiOiIxNC5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IENPUkVfTU9EVUxFUyA9IFtcdFxuXHQndGV4dEFuZ3VsYXInLFxuXHQndGV4dEFuZ3VsYXJTZXR1cCcsXG5cdCduZ0FuaW1hdGUnLFxuXHQndG9hc3RlcicsXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHQnZm9ybWx5JywgXG5cdCdmb3JtbHlCb290c3RyYXAnLFxuXHQndWkuYm9vdHN0cmFwJyxcblx0J255YS5ib290c3RyYXAuc2VsZWN0Jyxcblx0J21nY3JlYS5uZ1N0cmFwLmFmZml4J1xuXHQvLyAncGFzY2FscHJlY2h0LnRyYW5zbGF0ZSdcdFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuXHRcdFx0XHRcdFx0XHRcdC5tb2R1bGUoJ2Vhc3lGb3JtR2VuLmRyYWdEcm9wV2F5LmNvcmUnLCBDT1JFX01PRFVMRVMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb3JlL2VkYURyYWdEcm9wV2F5LmNvcmUubW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 15 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaDragDropWayLeftPanel = __webpack_require__(16);\n\nvar _edaDragDropWayLeftPanel2 = _interopRequireDefault(_edaDragDropWayLeftPanel);\n\nvar _edaDragDropWayLeftPanel3 = __webpack_require__(18);\n\nvar _edaDragDropWayLeftPanel4 = _interopRequireDefault(_edaDragDropWayLeftPanel3);\n\nvar _edaDragDropWayLeftPanelSelectOptionManage = __webpack_require__(20);\n\nvar _edaDragDropWayLeftPanelSelectOptionManage2 = _interopRequireDefault(_edaDragDropWayLeftPanelSelectOptionManage);\n\nvar _edaDragDropWayLeftPanelControllerModalProxy = __webpack_require__(22);\n\nvar _edaDragDropWayLeftPanelControllerModalProxy2 = _interopRequireDefault(_edaDragDropWayLeftPanelControllerModalProxy);\n\nvar _edaDragDropWayLeftpanelValidEditFooter = __webpack_require__(23);\n\nvar _edaDragDropWayLeftpanelValidEditFooter2 = _interopRequireDefault(_edaDragDropWayLeftpanelValidEditFooter);\n\nvar _edaDragDropWayLeftpanelTextInputControl = __webpack_require__(25);\n\nvar _edaDragDropWayLeftpanelTextInputControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelTextInputControl);\n\nvar _edaDragDropWayLeftpanelTextareaControl = __webpack_require__(27);\n\nvar _edaDragDropWayLeftpanelTextareaControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelTextareaControl);\n\nvar _edaDragDropWayLeftpanelSubtitleControl = __webpack_require__(29);\n\nvar _edaDragDropWayLeftpanelSubtitleControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelSubtitleControl);\n\nvar _edaDragDropWayLeftpanelRichTextEditorControl = __webpack_require__(31);\n\nvar _edaDragDropWayLeftpanelRichTextEditorControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelRichTextEditorControl);\n\nvar _edaDragDropWayLeftpanelRadioControl = __webpack_require__(33);\n\nvar _edaDragDropWayLeftpanelRadioControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelRadioControl);\n\nvar _edaDragDropWayLeftpanelPasswordControl = __webpack_require__(35);\n\nvar _edaDragDropWayLeftpanelPasswordControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelPasswordControl);\n\nvar _edaDragDropWayLeftpanelHeaderControl = __webpack_require__(37);\n\nvar _edaDragDropWayLeftpanelHeaderControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelHeaderControl);\n\nvar _edaDragDropWayLeftpanelGroupedSelectControl = __webpack_require__(39);\n\nvar _edaDragDropWayLeftpanelGroupedSelectControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelGroupedSelectControl);\n\nvar _edaDragDropWayLeftpanelDateControl = __webpack_require__(41);\n\nvar _edaDragDropWayLeftpanelDateControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelDateControl);\n\nvar _edaDragDropWayLeftpanelCheckBoxControl = __webpack_require__(43);\n\nvar _edaDragDropWayLeftpanelCheckBoxControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelCheckBoxControl);\n\nvar _edaDragDropWayLeftpanelBlankControl = __webpack_require__(45);\n\nvar _edaDragDropWayLeftpanelBlankControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelBlankControl);\n\nvar _edaDragDropWayLeftpanelBasicSelectControl = __webpack_require__(47);\n\nvar _edaDragDropWayLeftpanelBasicSelectControl2 = _interopRequireDefault(_edaDragDropWayLeftpanelBasicSelectControl);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_MODULE = 'edaDragDropWay.leftPanel.module'; /* global angular */\nexports.default = angular.module(LEFT_PANEL_MODULE, []).directive(_edaDragDropWayLeftPanel3.LEFT_PANEL_DIRECTIVE, _edaDragDropWayLeftPanel4.default).controller(_edaDragDropWayLeftPanel.LEFT_PANEL_CONTROLLER, _edaDragDropWayLeftPanel2.default).service(_edaDragDropWayLeftPanelSelectOptionManage.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE, _edaDragDropWayLeftPanelSelectOptionManage2.default).service(_edaDragDropWayLeftPanelControllerModalProxy.CONTROLLER_MODAL_PROXY, _edaDragDropWayLeftPanelControllerModalProxy2.default).directive(_edaDragDropWayLeftpanelValidEditFooter.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE, _edaDragDropWayLeftpanelValidEditFooter2.default).directive(_edaDragDropWayLeftpanelTextInputControl.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelTextInputControl2.default).directive(_edaDragDropWayLeftpanelTextareaControl.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelTextareaControl2.default).directive(_edaDragDropWayLeftpanelSubtitleControl.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelSubtitleControl2.default).directive(_edaDragDropWayLeftpanelRichTextEditorControl.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelRichTextEditorControl2.default).directive(_edaDragDropWayLeftpanelRadioControl.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelRadioControl2.default).directive(_edaDragDropWayLeftpanelPasswordControl.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelPasswordControl2.default).directive(_edaDragDropWayLeftpanelHeaderControl.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelHeaderControl2.default).directive(_edaDragDropWayLeftpanelGroupedSelectControl.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelGroupedSelectControl2.default).directive(_edaDragDropWayLeftpanelDateControl.LEFT_PANEL_DATE_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelDateControl2.default).directive(_edaDragDropWayLeftpanelCheckBoxControl.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelCheckBoxControl2.default).directive(_edaDragDropWayLeftpanelBlankControl.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelBlankControl2.default).directive(_edaDragDropWayLeftpanelBasicSelectControl.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE, _edaDragDropWayLeftpanelBasicSelectControl2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5tb2R1bGUuanM/NzA3OCJdLCJuYW1lcyI6WyJMRUZUX1BBTkVMX01PRFVMRSIsImFuZ3VsYXIiLCJtb2R1bGUiLCJkaXJlY3RpdmUiLCJjb250cm9sbGVyIiwic2VydmljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7Ozs7O0FBS0EsSUFBTUEsb0JBQW9CLGlDQUExQixDLENBdERBO2tCQXdEZUMsUUFDTkMsTUFETSxDQUNDRixpQkFERCxFQUNvQixFQURwQixFQUVORyxTQUZNLG9GQUdOQyxVQUhNLG9GQUlFQyxPQUpGLDBJQUtFQSxPQUxGLDZIQU1FRixTQU5GLG1JQU9FQSxTQVBGLHNJQVFFQSxTQVJGLGtJQVNFQSxTQVRGLGtJQVVFQSxTQVZGLHNKQVdFQSxTQVhGLHlIQVlFQSxTQVpGLGtJQWFFQSxTQWJGLDRIQWNFQSxTQWRGLGtKQWVFQSxTQWZGLHNIQWdCRUEsU0FoQkYsa0lBaUJFQSxTQWpCRix5SEFrQkVBLFNBbEJGLDJJIiwiZmlsZSI6IjE1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCBsZWZ0UGFuZWxDb250cm9sbGVyLCB7XG5cdExFRlRfUEFORUxfQ09OVFJPTExFUlxufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5jb250cm9sbGVyJztcbmltcG9ydCBsZWZ0UGFuZWwsIHtcblx0TEVGVF9QQU5FTF9ESVJFQ1RJVkVcbn1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuZGlyZWN0aXZlJztcbmltcG9ydCBzZWxlY3RPcHRpb25NYW5nZSwge1xuICBMRUZUX1BBTkVMX1NFTEVDVF9PUFRJT05fTUFOQUdFX1NFUlZJQ0Vcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5zZWxlY3RPcHRpb25NYW5hZ2Uuc2VydmljZSc7XG5pbXBvcnQgY29udHJvbGxlck1vZGFsUHJveHksIHtcbiAgQ09OVFJPTExFUl9NT0RBTF9QUk9YWVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdFBhbmVsLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNlcnZpY2UnO1xuaW1wb3J0IGxlZnRQYW5lbFZhbGlkRWRpdEZvb3Rlciwge1xuICBMRUZUX1BBTkVMX1ZBTElEX0VESVRfRk9PVEVSX0RJUkVDVElWRVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vdmFsaWRFZGl0Rm9vdGVyL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC52YWxpZEVkaXRGb290ZXIuZGlyZWN0aXZlJztcbmltcG9ydCBsZWZ0UGFuZWxUZXh0SW5wdXRDb250cm9sLCB7XG4gIExFRlRfUEFORUxfVEVYVF9JTlBVVF9DT05UUk9MX0RJUkVDVElWRVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vVGV4dElucHV0Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudGV4dElucHV0Q29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IGxlZnRQYW5lbFRleHRhcmVhQ29udHJvbCwge1xuICBMRUZUX1BBTkVMX1RFWFRBUkVBX0NPTlRST0xfRElSRUNUSVZFXG59ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi9UZXh0QXJlYUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRhcmVhQ29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IGxlZnRQYW5lbFN1YnRpdGxlQ29udHJvbCwge1xuICBMRUZUX1BBTkVMX1NVQlRJVExFX0NPTlRST0xfRElSRUNUSVZFXG59ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi9TdWJUaXRsZUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnN1YnRpdGxlQ29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IGxlZnRQYW5lbFJpY2hUZXh0RWRpdG9yQ29udHJvbCwge1xuICBMRUZUX1BBTkVMX1JJQ0hfVEVYVF9FRElUT1JfQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL1JpY2hUZXh0RWRpdG9yQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmljaFRleHRFZGl0b3JDb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsUmFkaW9Db250cm9sLCB7XG4gIExFRlRfUEFORUxfUkFESU9fQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL1JhZGlvQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmFkaW9Db250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsUGFzc3dvcmRDb250cm9sLCB7XG4gIExFRlRfUEFORUxfUEFTU1dPUkRfQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL1Bhc3N3b3JkQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucGFzc3dvcmRDb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsSGVhZGVyQ29udHJvbCwge1xuICBMRUZUX1BBTkVMX0hFQURFUl9DT05UUk9MX0RJUkVDVElWRVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vSGVhZGVyQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuaGVhZGVyQ29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IGxlZnRQYW5lbEdyb3VwZWRTZWxlY3RDb250cm9sLCB7XG4gIExFRlRfUEFORUxfR1JPVVBFRF9TRUxFQ1RfQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL0dyb3VwZWRTZWxlY3RDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5ncm91cGVkU2VsZWN0Q29udHJvbC5kaXJlY3RpdmUnO1xuaW1wb3J0IGxlZnRQYW5lbERhdGVDb250cm9sLCB7XG4gIExFRlRfUEFORUxfREFURV9DT05UUk9MX0RJUkVDVElWRVxufSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vRGF0ZUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmRhdGVDb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsQ2hlY2tCb3hDb250cm9sLCB7XG4gIExFRlRfUEFORUxfQ0hFQ0tCT1hfQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL0NoZWNrQm94Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuY2hlY2tCb3hDb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsQmxhbmtDb250cm9sLCB7XG4gIExFRlRfUEFORUxfQkxBTktfQ09OVFJPTF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL0JsYW5rQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmxhbmtDb250cm9sLmRpcmVjdGl2ZSc7XG5pbXBvcnQgbGVmdFBhbmVsQmFzaWNTZWxlY3RDb250cm9sLCB7XG4gIExFRlRfUEFORUxfQkFTSUNfU0VMRUNUX0NPTlRST0xfRElSRUNUSVZFXG59ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi9CYXNpY1NlbGVjdENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmJhc2ljU2VsZWN0Q29udHJvbC5kaXJlY3RpdmUnO1xuXG5cbmNvbnN0IExFRlRfUEFORUxfTU9EVUxFID0gJ2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5tb2R1bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBhbmd1bGFyXG5cdFx0XHRcdFx0XHRcdFx0Lm1vZHVsZShMRUZUX1BBTkVMX01PRFVMRSwgW10pXG5cdFx0XHRcdFx0XHRcdFx0LmRpcmVjdGl2ZShMRUZUX1BBTkVMX0RJUkVDVElWRSwgbGVmdFBhbmVsKVxuXHRcdFx0XHRcdFx0XHRcdC5jb250cm9sbGVyKExFRlRfUEFORUxfQ09OVFJPTExFUiwgbGVmdFBhbmVsQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAuc2VydmljZShMRUZUX1BBTkVMX1NFTEVDVF9PUFRJT05fTUFOQUdFX1NFUlZJQ0UsIHNlbGVjdE9wdGlvbk1hbmdlKVxuICAgICAgICAgICAgICAgIC5zZXJ2aWNlKENPTlRST0xMRVJfTU9EQUxfUFJPWFksIGNvbnRyb2xsZXJNb2RhbFByb3h5KVxuICAgICAgICAgICAgICAgIC5kaXJlY3RpdmUoTEVGVF9QQU5FTF9WQUxJRF9FRElUX0ZPT1RFUl9ESVJFQ1RJVkUsIGxlZnRQYW5lbFZhbGlkRWRpdEZvb3RlcilcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKExFRlRfUEFORUxfVEVYVF9JTlBVVF9DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsVGV4dElucHV0Q29udHJvbClcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKExFRlRfUEFORUxfVEVYVEFSRUFfQ09OVFJPTF9ESVJFQ1RJVkUsIGxlZnRQYW5lbFRleHRhcmVhQ29udHJvbClcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKExFRlRfUEFORUxfU1VCVElUTEVfQ09OVFJPTF9ESVJFQ1RJVkUsIGxlZnRQYW5lbFN1YnRpdGxlQ29udHJvbClcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKExFRlRfUEFORUxfUklDSF9URVhUX0VESVRPUl9DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sKVxuICAgICAgICAgICAgICAgIC5kaXJlY3RpdmUoTEVGVF9QQU5FTF9SQURJT19DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsUmFkaW9Db250cm9sKVxuICAgICAgICAgICAgICAgIC5kaXJlY3RpdmUoTEVGVF9QQU5FTF9QQVNTV09SRF9DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsUGFzc3dvcmRDb250cm9sKVxuICAgICAgICAgICAgICAgIC5kaXJlY3RpdmUoTEVGVF9QQU5FTF9IRUFERVJfQ09OVFJPTF9ESVJFQ1RJVkUsIGxlZnRQYW5lbEhlYWRlckNvbnRyb2wpXG4gICAgICAgICAgICAgICAgLmRpcmVjdGl2ZShMRUZUX1BBTkVMX0dST1VQRURfU0VMRUNUX0NPTlRST0xfRElSRUNUSVZFLCBsZWZ0UGFuZWxHcm91cGVkU2VsZWN0Q29udHJvbClcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKExFRlRfUEFORUxfREFURV9DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsRGF0ZUNvbnRyb2wpXG4gICAgICAgICAgICAgICAgLmRpcmVjdGl2ZShMRUZUX1BBTkVMX0NIRUNLQk9YX0NPTlRST0xfRElSRUNUSVZFLCBsZWZ0UGFuZWxDaGVja0JveENvbnRyb2wpXG4gICAgICAgICAgICAgICAgLmRpcmVjdGl2ZShMRUZUX1BBTkVMX0JMQU5LX0NPTlRST0xfRElSRUNUSVZFLCBsZWZ0UGFuZWxCbGFua0NvbnRyb2wpXG4gICAgICAgICAgICAgICAgLmRpcmVjdGl2ZShMRUZUX1BBTkVMX0JBU0lDX1NFTEVDVF9DT05UUk9MX0RJUkVDVElWRSwgbGVmdFBhbmVsQmFzaWNTZWxlY3RDb250cm9sKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvZWRhRHJhZ0Ryb3BXYXkubGVmdFBhbmVsLm1vZHVsZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 16 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.LEFT_PANEL_CONTROLLERAS = exports.LEFT_PANEL_CONTROLLER = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _edaDragDropWayLeftPanelController = __webpack_require__(17);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LEFT_PANEL_CONTROLLER = 'leftPanelController';\nvar LEFT_PANEL_CONTROLLERAS = 'leftPanelCtrl';\n\nvar leftPanelController = function () {\n\tfunction leftPanelController(toaster, $timeout, $selectOptionMange, controllerModalProxy) {\n\t\t_classCallCheck(this, leftPanelController);\n\n\t\tthis.toaster = toaster;\n\t\tthis.$timeout = $timeout;\n\t\tthis.$selectOptionMange = $selectOptionMange;\n\t\tthis.controllerModalProxy = controllerModalProxy;\n\n\t\tthis.init();\n\t}\n\n\t_createClass(leftPanelController, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tthis.proxyModel = this.controllerModalProxy.proxyModel;\n\t\t\tthis.proxyModel.selectedControl = this.proxyModel.temporyConfig.selectedControl;\n\t\t\tthis.basicSelectRowCollection = this.controllerModalProxy.basicSelectRowCollection;\n\t\t\tthis.newOptionBasicSelect = this.controllerModalProxy.newOptionBasicSelect;\n\n\t\t\tthis.groupedSelectRowCollection = this.controllerModalProxy.groupedSelectRowCollection;\n\t\t\tthis.newOptionGroupedSelect = this.controllerModalProxy.newOptionGroupedSelect;\n\t\t\tthis.GroupedSelectGroups = this.controllerModalProxy.GroupedSelectGroups;\n\t\t\tthis.newGroupGroupedSelect = this.controllerModalProxy.newGroupGroupedSelect;\n\t\t\tthis.groupSelectGroupClick = this.controllerModalProxy.groupSelectGroupClick;\n\n\t\t\tthis.radioRowCollection = this.controllerModalProxy.radioRowCollection;\n\t\t\tthis.newOptionRadio = this.controllerModalProxy.newOptionRadio;\n\n\t\t\tthis.demodt = {};\n\t\t\tthis.demodt.formats = _edaDragDropWayLeftPanelController.dateFormats;\n\t\t\tthis.dateOptions = this.getDateOptions();\n\n\t\t\t// this.controllerModalProxy.resetAllTemporyModels();\n\t\t\tthis.initNyaSelectConformingSelectedControl();\n\t\t}\n\t}, {\n\t\tkey: 'getDateOptions',\n\t\tvalue: function getDateOptions() {\n\t\t\tvar dateOptions = {\n\t\t\t\tformatYear: 'yy',\n\t\t\t\tstartingDay: 1,\n\t\t\t\tshowWeeks: true,\n\t\t\t\tinitDate: null\n\t\t\t};\n\t\t\treturn dateOptions;\n\t\t}\n\t}, {\n\t\tkey: 'initNyaSelectConformingSelectedControl',\n\t\tvalue: function initNyaSelectConformingSelectedControl() {\n\t\t\t//place proxyModel to selection if not none :\n\t\t\tif (this.proxyModel.temporyConfig.selectedControl !== 'none') {\n\t\t\t\tfor (var i = this.proxyModel.controls.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (this.proxyModel.controls[i].id === this.proxyModel.temporyConfig.selectedControl) this.modelproxyModel = this.proxyModel.controls[i];\n\t\t\t\t}\n\t\t\t\tif (this.proxyModel.temporyConfig.selectedControl === 'BasicSelect') this.controllerModalProxy.bindBasicSelectFromProxyModel(self.basicSelectRowCollection);\n\t\t\t\tif (this.proxyModel.temporyConfig.selectedControl === 'GroupedSelect') this.controllerModalProxy.bindGroupedSelectFromProxyModel(this.groupedSelectRowCollection, this.GroupedSelectGroups);\n\t\t\t\tif (this.proxyModel.temporyConfig.selectedControl === 'Radio') this.controllerModalProxy.bindRadioFromProxyModel(this.radioRowCollection);\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'updateSpecialControl',\n\t\tvalue: function updateSpecialControl() {\n\t\t\t//refresh service data for particular controls as selects and radio\n\t\t\tthis.proxyModel.basicSelectRowCollection = this.basicSelectRowCollection;\n\t\t\tthis.proxyModel.newOptionBasicSelect = this.newOptionBasicSelect;\n\t\t\tthis.proxyModel.groupedSelectRowCollection = this.groupedSelectRowCollection;\n\t\t\tthis.proxyModel.newOptionGroupedSelect = this.newOptionGroupedSelect;\n\t\t\tthis.proxyModel.GroupedSelectGroups = this.GroupedSelectGroups;\n\t\t\tthis.proxyModel.newGroupGroupedSelect = this.newGroupGroupedSelect;\n\t\t\tthis.proxyModel.groupSelectGroupClick = this.groupSelectGroupClick;\n\t\t\tthis.proxyModel.radioRowCollection = this.radioRowCollection;\n\t\t\tthis.proxyModel.newOptionRadio = this.newOptionRadio;\n\t\t\t//force apply update proxyModel\n\t\t\tthis.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel();\n\t\t\treturn true;\n\t\t}\n\t}, {\n\t\tkey: 'resetTemporyConfig',\n\t\tvalue: function resetTemporyConfig() {\n\t\t\tthis.proxyModel.temporyConfig = {\n\t\t\t\tformlyLabel: '',\n\t\t\t\tformlyRequired: false,\n\t\t\t\tformlyPlaceholder: '',\n\t\t\t\tformlyDescription: '',\n\t\t\t\tformlyOptions: []\n\t\t\t};\n\t\t}\n\t}, {\n\t\tkey: 'resetControl',\n\t\tvalue: function resetControl() {\n\t\t\tthis.proxyModel.temporyConfig.formlyLabel = '';\n\t\t\tthis.proxyModel.temporyConfig.formlyRequired = false;\n\t\t\tthis.proxyModel.temporyConfig.formlyPlaceholder = '';\n\t\t\tthis.proxyModel.temporyConfig.formlyDescription = '';\n\t\t\tthis.proxyModel.temporyConfig.formlyOptions = [];\n\t\t\tthis.proxyModel.temporyConfig.datepickerPopup = this.initDatePicker();\n\t\t}\n\t}, {\n\t\tkey: 'initDatePicker',\n\t\tvalue: function initDatePicker() {\n\t\t\tthis.proxyModel.temporyConfig.datepickerPopup = this.demodt.formats[0];\n\t\t}\n\t}, {\n\t\tkey: 'selectThisControl',\n\t\tvalue: function selectThisControl(controlName) {\n\t\t\tthis.proxyModel.selectedControl = 'none';\n\t\t\tthis.resetTemporyConfig();\n\t\t\tfor (var i = this.proxyModel.controls.length - 1; i >= 0; i--) {\n\t\t\t\tif (this.proxyModel.controls[i].id === controlName) {\n\t\t\t\t\tthis.proxyModel.selectedControl = this.proxyModel.controls[i].id;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.proxyModel.selectedControl === 'Date') this.initDatePicker();\n\t\t}\n\n\t\t/**\n \t* ==============================================================\n \t* specific controls management\n \t* (display, properties.... : ex : grouped Select)\n \t* ==============================================================\n \t*/\n\n\t}, {\n\t\tkey: 'addNewOptionRadio',\n\t\tvalue: function addNewOptionRadio() {\n\t\t\tvar result = this.$selectOptionMange.addNewOptionRadio(this.radioRowCollection, this.newOptionRadio.saisie);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: '\\'' + this.newOptionRadio.saisie + '\\' cannot be added.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t\t//reset input\n\t\t\tthis.newOptionRadio = { saisie: '' };\n\t\t}\n\t}, {\n\t\tkey: 'removeRadioRow',\n\t\tvalue: function removeRadioRow(index) {\n\t\t\tvar result = this.$selectOptionMange.removeOption(this.radioRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Delete was cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'upThisRadioRow',\n\t\tvalue: function upThisRadioRow(index) {\n\t\t\tvar result = this.$selectOptionMange.upthisOption(this.radioRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'downThisRadioRow',\n\t\tvalue: function downThisRadioRow(index) {\n\t\t\tvar result = this.$selectOptionMange.downthisOption(this.radioRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'addNewOptionBasicSelect',\n\t\tvalue: function addNewOptionBasicSelect() {\n\t\t\tvar result = this.$selectOptionMange.addNewOptionBasicSelect(this.basicSelectRowCollection, this.newOptionBasicSelect.saisie);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: '\\'' + this.newOptionBasicSelect.saisie + '\\' cannot be added.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.newOptionBasicSelect = { saisie: '' }; //reset input\n\t\t}\n\t}, {\n\t\tkey: 'removeRow',\n\t\tvalue: function removeRow(index) {\n\t\t\tvar result = this.$selectOptionMange.removeOption(this.basicSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Delete was cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'upThisRow',\n\t\tvalue: function upThisRow(index) {\n\t\t\tvar result = this.$selectOptionMange.upthisOption(this.basicSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'downThisRow',\n\t\tvalue: function downThisRow(index) {\n\t\t\tvar result = this.$selectOptionMange.downthisOption(this.basicSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'showGroupListToChoose',\n\t\tvalue: function showGroupListToChoose() {\n\t\t\tthis.groupSelectGroupClick.showList = !this.groupSelectGroupClick.showList;\n\t\t}\n\t}, {\n\t\tkey: 'addNewGroupToGroupedSelect',\n\t\tvalue: function addNewGroupToGroupedSelect() {\n\t\t\tif (this.newGroupGroupedSelect.saisie !== '') {\n\t\t\t\tfor (var i = this.GroupedSelectGroups.list.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (this.GroupedSelectGroups.list[i] === this.newGroupGroupedSelect.saisie) {\n\t\t\t\t\t\tthis.toaster.pop({\n\t\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\t\t\ttitle: 'Group already exists',\n\t\t\t\t\t\t\tbody: 'No group added.',\n\t\t\t\t\t\t\tshowCloseButton: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.GroupedSelectGroups.list.push(this.newGroupGroupedSelect.saisie);\n\t\t\t} else {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: 'Not a valid group to add',\n\t\t\t\t\tbody: 'No group added.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t\tthis.newGroupGroupedSelect.saisie = '';\n\t\t}\n\t}, {\n\t\tkey: 'addNewOptionGroupedSelect',\n\t\tvalue: function addNewOptionGroupedSelect() {\n\t\t\tvar result = this.$selectOptionMange.addNewOptionGroupedSelect(this.groupedSelectRowCollection, this.newOptionGroupedSelect.saisie, '');\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: '\\'' + this.newOptionGroupedSelect.saisie + '\\' cannot be added.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t\t//bind nya : dont bind here $apply is not done fast enough\n\t\t\t//bindGroupedSelectToNya();\n\t\t\t//reset input\n\t\t\tthis.newOptionGroupedSelect = { saisie: '' };\n\t\t}\n\t}, {\n\t\tkey: 'removeGroupedSelectRow',\n\t\tvalue: function removeGroupedSelectRow(index) {\n\t\t\tvar result = this.$selectOptionMange.removeOption(this.groupedSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Delete was cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'upThisGroupedSelectRow',\n\t\tvalue: function upThisGroupedSelectRow(index) {\n\t\t\tvar result = this.$selectOptionMange.upthisOption(this.groupedSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'downThisGroupedSelectRow',\n\t\tvalue: function downThisGroupedSelectRow(index) {\n\t\t\tvar result = this.$selectOptionMange.downthisOption(this.groupedSelectRowCollection, index);\n\t\t\tif (result.resultFlag === false) {\n\t\t\t\tthis.toaster.pop({\n\t\t\t\t\ttype: 'warning',\n\t\t\t\t\ttimeout: 2000,\n\t\t\t\t\ttitle: result.details,\n\t\t\t\t\tbody: 'Operation cancelled.',\n\t\t\t\t\tshowCloseButton: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'today',\n\t\tvalue: function today() {\n\t\t\t(0, _edaDragDropWayLeftPanelController.setToday)(this.demodt);\n\t\t}\n\t}, {\n\t\tkey: 'clear',\n\t\tvalue: function clear() {\n\t\t\t(0, _edaDragDropWayLeftPanelController.clearDateTime)(this.demodt);\n\t\t}\n\t}, {\n\t\tkey: 'open',\n\t\tvalue: function open($event) {\n\t\t\t$event.preventDefault();\n\t\t\t$event.stopPropagation();\n\t\t\tthis.demodt.opened = true;\n\t\t}\n\t}]);\n\n\treturn leftPanelController;\n}();\n\nleftPanelController.$inject = ['toaster', '$timeout', '$selectOptionMange', 'controllerModalProxy'];\n\nexports.default = leftPanelController;\nexports.LEFT_PANEL_CONTROLLER = LEFT_PANEL_CONTROLLER;\nexports.LEFT_PANEL_CONTROLLERAS = LEFT_PANEL_CONTROLLERAS;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5jb250cm9sbGVyLmpzPzNlZWQiXSwibmFtZXMiOlsiTEVGVF9QQU5FTF9DT05UUk9MTEVSIiwiTEVGVF9QQU5FTF9DT05UUk9MTEVSQVMiLCJsZWZ0UGFuZWxDb250cm9sbGVyIiwidG9hc3RlciIsIiR0aW1lb3V0IiwiJHNlbGVjdE9wdGlvbk1hbmdlIiwiY29udHJvbGxlck1vZGFsUHJveHkiLCJpbml0IiwicHJveHlNb2RlbCIsInNlbGVjdGVkQ29udHJvbCIsInRlbXBvcnlDb25maWciLCJiYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24iLCJuZXdPcHRpb25CYXNpY1NlbGVjdCIsImdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uIiwibmV3T3B0aW9uR3JvdXBlZFNlbGVjdCIsIkdyb3VwZWRTZWxlY3RHcm91cHMiLCJuZXdHcm91cEdyb3VwZWRTZWxlY3QiLCJncm91cFNlbGVjdEdyb3VwQ2xpY2siLCJyYWRpb1Jvd0NvbGxlY3Rpb24iLCJuZXdPcHRpb25SYWRpbyIsImRlbW9kdCIsImZvcm1hdHMiLCJkYXRlT3B0aW9ucyIsImdldERhdGVPcHRpb25zIiwiaW5pdE55YVNlbGVjdENvbmZvcm1pbmdTZWxlY3RlZENvbnRyb2wiLCJmb3JtYXRZZWFyIiwic3RhcnRpbmdEYXkiLCJzaG93V2Vla3MiLCJpbml0RGF0ZSIsImkiLCJjb250cm9scyIsImxlbmd0aCIsImlkIiwibW9kZWxwcm94eU1vZGVsIiwiYmluZEJhc2ljU2VsZWN0RnJvbVByb3h5TW9kZWwiLCJzZWxmIiwiYmluZEdyb3VwZWRTZWxlY3RGcm9tUHJveHlNb2RlbCIsImJpbmRSYWRpb0Zyb21Qcm94eU1vZGVsIiwiYmluZFNwZWNpYWxDdHJsVGVtcG9yeU1vZGVsc1RvUHJveHlNb2RlbCIsImZvcm1seUxhYmVsIiwiZm9ybWx5UmVxdWlyZWQiLCJmb3JtbHlQbGFjZWhvbGRlciIsImZvcm1seURlc2NyaXB0aW9uIiwiZm9ybWx5T3B0aW9ucyIsImRhdGVwaWNrZXJQb3B1cCIsImluaXREYXRlUGlja2VyIiwiY29udHJvbE5hbWUiLCJyZXNldFRlbXBvcnlDb25maWciLCJyZXN1bHQiLCJhZGROZXdPcHRpb25SYWRpbyIsInNhaXNpZSIsInJlc3VsdEZsYWciLCJwb3AiLCJ0eXBlIiwidGltZW91dCIsInRpdGxlIiwiZGV0YWlscyIsImJvZHkiLCJzaG93Q2xvc2VCdXR0b24iLCJpbmRleCIsInJlbW92ZU9wdGlvbiIsInVwdGhpc09wdGlvbiIsImRvd250aGlzT3B0aW9uIiwiYWRkTmV3T3B0aW9uQmFzaWNTZWxlY3QiLCJzaG93TGlzdCIsImxpc3QiLCJwdXNoIiwiYWRkTmV3T3B0aW9uR3JvdXBlZFNlbGVjdCIsIiRldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwib3BlbmVkIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFNQSxJQUFNQSx3QkFBeUIscUJBQS9CO0FBQ0EsSUFBTUMsMEJBQTBCLGVBQWhDOztJQUVNQyxtQjtBQUNMLDhCQUFZQyxPQUFaLEVBQ01DLFFBRE4sRUFFTUMsa0JBRk4sRUFHTUMsb0JBSE4sRUFHMkI7QUFBQTs7QUFFMUIsT0FBS0gsT0FBTCxHQUFzQkEsT0FBdEI7QUFDQSxPQUFLQyxRQUFMLEdBQXVCQSxRQUF2QjtBQUNBLE9BQUtDLGtCQUFMLEdBQTRCQSxrQkFBNUI7QUFDQSxPQUFLQyxvQkFBTCxHQUE0QkEsb0JBQTVCOztBQUVBLE9BQUtDLElBQUw7QUFDQTs7Ozt5QkFFTTtBQUNOLFFBQUtDLFVBQUwsR0FBMEIsS0FBS0Ysb0JBQUwsQ0FBMEJFLFVBQXBEO0FBQ0EsUUFBS0EsVUFBTCxDQUFnQkMsZUFBaEIsR0FBa0MsS0FBS0QsVUFBTCxDQUFnQkUsYUFBaEIsQ0FBOEJELGVBQWhFO0FBQ0EsUUFBS0Usd0JBQUwsR0FBaUMsS0FBS0wsb0JBQUwsQ0FB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d0JDLEssRUFBTTtBQUM3QixPQUFJWCxTQUFTLEtBQUszQyxrQkFBTCxDQUF3QnlELGNBQXhCLENBQXVDLEtBQUtqRCwwQkFBNUMsRUFBd0U4QyxLQUF4RSxDQUFiO0FBQ0EsT0FBSVgsT0FBT0csVUFBUCxLQUFzQixLQUExQixFQUFpQztBQUNoQyxTQUFLaEQsT0FBTCxDQUFhaUQsR0FBYixDQUFpQjtBQUNoQkMsV0FBUSxTQURRO0FBRWhCQyxjQUFVLElBRk07QUFHaEJDLFlBQVNQLE9BQU9RLE9BSEE7QUFJaEJDLFdBQVEsc0JBSlE7QUFLaEJDLHNCQUFpQjtBQUxELEtBQWpCO0FBT0E7QUFDRjs7OzBCQUdNO0FBQ04sb0RBQVMsS0FBS3RDLE1BQWQ7QUFDQTs7OzBCQUdNO0FBQ04seURBQWMsS0FBS0EsTUFBbkI7QUFDQTs7O3VCQUdJZ0QsTSxFQUFRO0FBQ1pBLFVBQU9DLGNBQVA7QUFDQUQsVUFBT0UsZUFBUDtBQUNBLFFBQUtsRCxNQUFMLENBQVltRCxNQUFaLEdBQXFCLElBQXJCO0FBQ0E7Ozs7OztBQU1GckUsb0JBQW9Cc0UsT0FBcEIsR0FBOEIsQ0FDN0IsU0FENkIsRUFFN0IsVUFGNkIsRUFHN0Isb0JBSDZCLEVBSTdCLHNCQUo2QixDQUE5Qjs7a0JBT2V0RSxtQjtRQUdkRixxQixHQUFBQSxxQjtRQUNBQyx1QixHQUFBQSx1QiIsImZpbGUiOiIxNi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGRhdGVGb3JtYXRzLFxuXHRzZXRUb2RheSxcblx0Y2xlYXJEYXRlVGltZVxufSBcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5jb250cm9sbGVyLmhlbHBlcnMnO1xuXG5jb25zdCBMRUZUX1BBTkVMX0NPTlRST0xMRVIgXHQ9XHQnbGVmdFBhbmVsQ29udHJvbGxlcic7XG5jb25zdCBMRUZUX1BBTkVMX0NPTlRST0xMRVJBU1x0PSAnbGVmdFBhbmVsQ3RybCc7XG5cbmNsYXNzIGxlZnRQYW5lbENvbnRyb2xsZXJ7XG5cdGNvbnN0cnVjdG9yKHRvYXN0ZXIsXG5cdFx0XHRcdFx0XHRcdCR0aW1lb3V0LFxuXHRcdFx0XHRcdFx0XHQkc2VsZWN0T3B0aW9uTWFuZ2UsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xsZXJNb2RhbFByb3h5KXtcblxuXHRcdHRoaXMudG9hc3RlciAgXHRcdFx0XHRcdFx0PSB0b2FzdGVyO1xuXHRcdHRoaXMuJHRpbWVvdXQgIFx0XHRcdFx0XHRcdD0gJHRpbWVvdXQ7XG5cdFx0dGhpcy4kc2VsZWN0T3B0aW9uTWFuZ2UgIFx0PSAkc2VsZWN0T3B0aW9uTWFuZ2U7XG5cdFx0dGhpcy5jb250cm9sbGVyTW9kYWxQcm94eSA9IGNvbnRyb2xsZXJNb2RhbFByb3h5O1xuXG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblxuXHRpbml0KCkge1xuXHRcdHRoaXMucHJveHlNb2RlbCBcdFx0XHRcdFx0XHRcdFx0PSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnByb3h5TW9kZWw7XG5cdFx0dGhpcy5wcm94eU1vZGVsLnNlbGVjdGVkQ29udHJvbCA9IHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLnNlbGVjdGVkQ29udHJvbDtcblx0XHR0aGlzLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiBcdD0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5iYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb247XG5cdFx0dGhpcy5uZXdPcHRpb25CYXNpY1NlbGVjdCBcdFx0XHQ9IHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkubmV3T3B0aW9uQmFzaWNTZWxlY3Q7XG5cblx0XHR0aGlzLmdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uID0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5ncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbjtcblx0XHR0aGlzLm5ld09wdGlvbkdyb3VwZWRTZWxlY3QgXHRcdD0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5uZXdPcHRpb25Hcm91cGVkU2VsZWN0O1xuXHRcdHRoaXMuR3JvdXBlZFNlbGVjdEdyb3VwcyBcdFx0XHRcdD0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5Hcm91cGVkU2VsZWN0R3JvdXBzO1xuXHRcdHRoaXMubmV3R3JvdXBHcm91cGVkU2VsZWN0IFx0XHRcdD0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5uZXdHcm91cEdyb3VwZWRTZWxlY3Q7XG5cdFx0dGhpcy5ncm91cFNlbGVjdEdyb3VwQ2xpY2sgXHRcdFx0PSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5Lmdyb3VwU2VsZWN0R3JvdXBDbGljaztcblxuXHRcdHRoaXMucmFkaW9Sb3dDb2xsZWN0aW9uIFx0XHRcdFx0PSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnJhZGlvUm93Q29sbGVjdGlvbjtcblx0XHR0aGlzLm5ld09wdGlvblJhZGlvIFx0XHRcdFx0XHRcdD0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5uZXdPcHRpb25SYWRpbztcblxuXHRcdHRoaXMuZGVtb2R0IFx0XHRcdFx0XHRcdFx0XHRcdFx0PSB7fTtcblx0XHR0aGlzLmRlbW9kdC5mb3JtYXRzXHRcdFx0XHRcdFx0XHQ9IGRhdGVGb3JtYXRzO1xuXHRcdHRoaXMuZGF0ZU9wdGlvbnNcdFx0XHRcdFx0XHRcdFx0PSB0aGlzLmdldERhdGVPcHRpb25zKCk7XG5cblx0XHQvLyB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnJlc2V0QWxsVGVtcG9yeU1vZGVscygpO1xuICAgIHRoaXMuaW5pdE55YVNlbGVjdENvbmZvcm1pbmdTZWxlY3RlZENvbnRyb2woKTtcblx0fVxuXG5cdGdldERhdGVPcHRpb25zKCkge1xuXHRcdGxldCBkYXRlT3B0aW9ucyA9ICB7XG5cdFx0XHRmb3JtYXRZZWFyXHQ6ICd5eScsXG5cdFx0XHRzdGFydGluZ0RheVx0OiAxLFxuXHRcdFx0c2hvd1dlZWtzXHRcdDogdHJ1ZSxcblx0XHRcdGluaXREYXRlXHRcdDogbnVsbFxuXHRcdH07XG5cdFx0cmV0dXJuIGRhdGVPcHRpb25zO1xuXHR9XG5cblx0aW5pdE55YVNlbGVjdENvbmZvcm1pbmdTZWxlY3RlZENvbnRyb2woKSB7XG5cdFx0Ly9wbGFjZSBwcm94eU1vZGVsIHRvIHNlbGVjdGlvbiBpZiBub3Qgbm9uZSA6XG5cdFx0aWYgKHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLnNlbGVjdGVkQ29udHJvbCAhPT0gJ25vbmUnKSB7XG5cdFx0XHRmb3IgKGxldCBpID0gdGhpcy5wcm94eU1vZGVsLmNvbnRyb2xzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMucHJveHlNb2RlbC5jb250cm9sc1tpXS5pZCA9PT0gdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuc2VsZWN0ZWRDb250cm9sKSB0aGlzLm1vZGVscHJveHlNb2RlbCA9IHRoaXMucHJveHlNb2RlbC5jb250cm9sc1tpXTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5zZWxlY3RlZENvbnRyb2wgPT09ICdCYXNpY1NlbGVjdCcpIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuYmluZEJhc2ljU2VsZWN0RnJvbVByb3h5TW9kZWwoc2VsZi5iYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24pO1xuXHRcdFx0aWYgKHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLnNlbGVjdGVkQ29udHJvbCA9PT0gJ0dyb3VwZWRTZWxlY3QnKSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmJpbmRHcm91cGVkU2VsZWN0RnJvbVByb3h5TW9kZWwodGhpcy5ncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbiwgdGhpcy5Hcm91cGVkU2VsZWN0R3JvdXBzKTtcblx0XHRcdGlmICh0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5zZWxlY3RlZENvbnRyb2wgPT09ICdSYWRpbycpIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuYmluZFJhZGlvRnJvbVByb3h5TW9kZWwodGhpcy5yYWRpb1Jvd0NvbGxlY3Rpb24pO1xuXHRcdH1cblx0fVxuXG5cdHVwZGF0ZVNwZWNpYWxDb250cm9sKCkge1xuXHRcdC8vcmVmcmVzaCBzZXJ2aWNlIGRhdGEgZm9yIHBhcnRpY3VsYXIgY29udHJvbHMgYXMgc2VsZWN0cyBhbmQgcmFkaW9cblx0XHR0aGlzLnByb3h5TW9kZWwuYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uIFx0XHQ9IHRoaXMuYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uO1xuXHRcdHRoaXMucHJveHlNb2RlbC5uZXdPcHRpb25CYXNpY1NlbGVjdCBcdFx0XHRcdD0gdGhpcy5uZXdPcHRpb25CYXNpY1NlbGVjdDtcblx0XHR0aGlzLnByb3h5TW9kZWwuZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24gXHQ9IHRoaXMuZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb247XG5cdFx0dGhpcy5wcm94eU1vZGVsLm5ld09wdGlvbkdyb3VwZWRTZWxlY3QgXHRcdFx0PSB0aGlzLm5ld09wdGlvbkdyb3VwZWRTZWxlY3Q7XG5cdFx0dGhpcy5wcm94eU1vZGVsLkdyb3VwZWRTZWxlY3RHcm91cHMgXHRcdFx0XHQ9IHRoaXMuR3JvdXBlZFNlbGVjdEdyb3Vwcztcblx0XHR0aGlzLnByb3h5TW9kZWwubmV3R3JvdXBHcm91cGVkU2VsZWN0IFx0XHRcdD0gdGhpcy5uZXdHcm91cEdyb3VwZWRTZWxlY3Q7XG5cdFx0dGhpcy5wcm94eU1vZGVsLmdyb3VwU2VsZWN0R3JvdXBDbGljayBcdFx0XHQ9IHRoaXMuZ3JvdXBTZWxlY3RHcm91cENsaWNrO1xuXHRcdHRoaXMucHJveHlNb2RlbC5yYWRpb1Jvd0NvbGxlY3Rpb24gXHRcdFx0XHRcdD0gdGhpcy5yYWRpb1Jvd0NvbGxlY3Rpb247XG5cdFx0dGhpcy5wcm94eU1vZGVsLm5ld09wdGlvblJhZGlvIFx0XHRcdFx0XHRcdFx0PSB0aGlzLm5ld09wdGlvblJhZGlvO1xuXHRcdC8vZm9yY2UgYXBwbHkgdXBkYXRlIHByb3h5TW9kZWxcblx0XHR0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmJpbmRTcGVjaWFsQ3RybFRlbXBvcnlNb2RlbHNUb1Byb3h5TW9kZWwoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdHJlc2V0VGVtcG9yeUNvbmZpZygpIHtcblx0XHR0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZyA9IHtcblx0XHRcdGZvcm1seUxhYmVsXHRcdFx0XHQ6ICcnLFxuXHRcdFx0Zm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSxcblx0XHRcdGZvcm1seVBsYWNlaG9sZGVyXHQ6ICcnLFxuXHRcdFx0Zm9ybWx5RGVzY3JpcHRpb25cdDogJycsXG5cdFx0XHRmb3JtbHlPcHRpb25zXHRcdFx0OiBbXVxuXHRcdH07XG5cdH1cblxuXHRyZXNldENvbnRyb2woKSB7XG5cdFx0dGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5TGFiZWwgXHRcdFx0PSAnJztcblx0XHR0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlSZXF1aXJlZCBcdFx0PSBmYWxzZTtcblx0XHR0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlQbGFjZWhvbGRlclx0PSAnJztcblx0XHR0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlEZXNjcmlwdGlvbiBcdD0gJyc7XG5cdFx0dGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucyBcdFx0PSBbXTtcblx0XHR0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5kYXRlcGlja2VyUG9wdXAgICA9IHRoaXMuaW5pdERhdGVQaWNrZXIoKTtcblx0fVxuXG5cdGluaXREYXRlUGlja2VyKCkge1xuXHRcdHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmRhdGVwaWNrZXJQb3B1cCA9IHRoaXMuZGVtb2R0LmZvcm1hdHNbMF07XG5cdH1cblxuXHRzZWxlY3RUaGlzQ29udHJvbChjb250cm9sTmFtZSl7XG5cdFx0dGhpcy5wcm94eU1vZGVsLnNlbGVjdGVkQ29udHJvbCA9ICdub25lJztcblx0XHR0aGlzLnJlc2V0VGVtcG9yeUNvbmZpZygpO1xuXHRcdGZvciAobGV0IGkgPSB0aGlzLnByb3h5TW9kZWwuY29udHJvbHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcblx0XHRcdGlmICh0aGlzLnByb3h5TW9kZWwuY29udHJvbHNbaV0uaWQgPT09IGNvbnRyb2xOYW1lKSB7XG5cdFx0XHRcdHRoaXMucHJveHlNb2RlbC5zZWxlY3RlZENvbnRyb2wgPSB0aGlzLnByb3h5TW9kZWwuY29udHJvbHNbaV0uaWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICh0aGlzLnByb3h5TW9kZWwuc2VsZWN0ZWRDb250cm9sID09PSAnRGF0ZScpIHRoaXMuaW5pdERhdGVQaWNrZXIoKTtcblx0fVxuXG5cblx0LyoqXG5cdFx0KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXHRcdCogc3BlY2lmaWMgY29udHJvbHMgbWFuYWdlbWVudFxuXHRcdCogKGRpc3BsYXksIHByb3BlcnRpZXMuLi4uIDogZXggOiBncm91cGVkIFNlbGVjdClcblx0XHQqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cdFx0Ki9cblx0XHRhZGROZXdPcHRpb25SYWRpbygpe1xuXHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLmFkZE5ld09wdGlvblJhZGlvKHRoaXMucmFkaW9Sb3dDb2xsZWN0aW9uLCB0aGlzLm5ld09wdGlvblJhZGlvLnNhaXNpZSk7XG5cdFx0XHRpZiAocmVzdWx0LnJlc3VsdEZsYWcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMudG9hc3Rlci5wb3Aoe1xuXHRcdFx0XHRcdFx0dHlwZVx0XHQ6ICd3YXJuaW5nJyxcblx0XHRcdFx0XHRcdHRpbWVvdXRcdDogMjAwMCxcblx0XHRcdFx0XHRcdHRpdGxlXHRcdDogcmVzdWx0LmRldGFpbHMsXG5cdFx0XHRcdFx0XHRib2R5XHRcdDogYCcke3RoaXMubmV3T3B0aW9uUmFkaW8uc2Fpc2llfScgY2Fubm90IGJlIGFkZGVkLmAsXG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b246IHRydWVcblx0XHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdC8vcmVzZXQgaW5wdXRcblx0XHRcdHRoaXMubmV3T3B0aW9uUmFkaW8gPSB7c2Fpc2llOiAnJ307XG5cdFx0fVxuXG5cdFx0cmVtb3ZlUmFkaW9Sb3coaW5kZXgpIHtcblx0XHRcdGxldCByZXN1bHQgPSB0aGlzLiRzZWxlY3RPcHRpb25NYW5nZS5yZW1vdmVPcHRpb24odGhpcy5yYWRpb1Jvd0NvbGxlY3Rpb24sIGluZGV4KTtcblx0XHRcdGlmIChyZXN1bHQucmVzdWx0RmxhZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy50b2FzdGVyLnBvcCh7XG5cdFx0XHRcdFx0dHlwZVx0XHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdHRpbWVvdXRcdFx0OiAyMDAwLFxuXHRcdFx0XHRcdHRpdGxlXHRcdFx0OiByZXN1bHQuZGV0YWlscyxcblx0XHRcdFx0XHRib2R5XHRcdFx0OiAnRGVsZXRlIHdhcyBjYW5jZWxsZWQuJyxcblx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b246IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dXBUaGlzUmFkaW9Sb3coaW5kZXgpe1xuXHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLnVwdGhpc09wdGlvbih0aGlzLnJhZGlvUm93Q29sbGVjdGlvbiwgaW5kZXgpO1xuXHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRGbGFnID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdHRpbWVvdXRcdDogMjAwMCxcblx0XHRcdFx0XHR0aXRsZVx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRcdGJvZHlcdFx0OiAnT3BlcmF0aW9uIGNhbmNlbGxlZC4nLFxuXHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRkb3duVGhpc1JhZGlvUm93KGluZGV4KXtcblx0XHRcdGxldCByZXN1bHQgPSB0aGlzLiRzZWxlY3RPcHRpb25NYW5nZS5kb3dudGhpc09wdGlvbih0aGlzLnJhZGlvUm93Q29sbGVjdGlvbiwgaW5kZXgpO1xuXHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRGbGFnID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdHRpbWVvdXRcdDogMjAwMCxcblx0XHRcdFx0XHR0aXRsZVx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRcdGJvZHlcdFx0OiAnT3BlcmF0aW9uIGNhbmNlbGxlZC4nLFxuXHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRhZGROZXdPcHRpb25CYXNpY1NlbGVjdCgpe1xuXHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLmFkZE5ld09wdGlvbkJhc2ljU2VsZWN0KHRoaXMuYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uLCB0aGlzLm5ld09wdGlvbkJhc2ljU2VsZWN0LnNhaXNpZSk7XG5cdFx0XHRpZiAocmVzdWx0LnJlc3VsdEZsYWcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdHRoaXMudG9hc3Rlci5wb3Aoe1xuXHRcdFx0XHRcdHR5cGVcdFx0XHQ6ICd3YXJuaW5nJyxcblx0XHRcdFx0XHR0aW1lb3V0XHRcdDogMjAwMCxcblx0XHRcdFx0XHR0aXRsZVx0XHRcdDogcmVzdWx0LmRldGFpbHMsXG5cdFx0XHRcdFx0Ym9keVx0XHRcdDogYCcke3RoaXMubmV3T3B0aW9uQmFzaWNTZWxlY3Quc2Fpc2llfScgY2Fubm90IGJlIGFkZGVkLmAsXG5cdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5uZXdPcHRpb25CYXNpY1NlbGVjdCA9IHtzYWlzaWU6ICcnfTsgLy9yZXNldCBpbnB1dFxuXHRcdH1cblxuXHRcdHJlbW92ZVJvdyhpbmRleCkge1xuXHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLnJlbW92ZU9wdGlvbih0aGlzLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiwgaW5kZXgpO1xuXHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRGbGFnID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdHRpbWVvdXRcdDogMjAwMCxcblx0XHRcdFx0XHR0aXRsZVx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRcdGJvZHlcdFx0OiAnRGVsZXRlIHdhcyBjYW5jZWxsZWQuJyxcblx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b246IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dXBUaGlzUm93KGluZGV4KXtcblx0XHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLnVwdGhpc09wdGlvbih0aGlzLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiwgaW5kZXgpO1xuXHRcdFx0XHRpZiAocmVzdWx0LnJlc3VsdEZsYWcgPT09IGZhbHNlKSB7XG5cdFx0XHRcdFx0dGhpcy50b2FzdGVyLnBvcCh7XG5cdFx0XHRcdFx0XHR0eXBlXHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdFx0dGltZW91dFx0OiAyMDAwLFxuXHRcdFx0XHRcdFx0dGl0bGVcdFx0OiByZXN1bHQuZGV0YWlscyxcblx0XHRcdFx0XHRcdGJvZHlcdFx0OiAnT3BlcmF0aW9uIGNhbmNlbGxlZC4nLFxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHR9XG5cblx0XHRkb3duVGhpc1JvdyhpbmRleCl7XG5cdFx0XHRsZXQgcmVzdWx0ID0gdGhpcy4kc2VsZWN0T3B0aW9uTWFuZ2UuZG93bnRoaXNPcHRpb24odGhpcy5iYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24sIGluZGV4KTtcblx0XHRcdGlmIChyZXN1bHQucmVzdWx0RmxhZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy50b2FzdGVyLnBvcCh7XG5cdFx0XHRcdFx0dHlwZVx0XHQ6ICd3YXJuaW5nJyxcblx0XHRcdFx0XHR0aW1lb3V0XHQ6IDIwMDAsXG5cdFx0XHRcdFx0dGl0bGVcdFx0OiByZXN1bHQuZGV0YWlscyxcblx0XHRcdFx0XHRib2R5XHRcdDogJ09wZXJhdGlvbiBjYW5jZWxsZWQuJyxcblx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b246IHRydWVcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0c2hvd0dyb3VwTGlzdFRvQ2hvb3NlKCl7XG5cdFx0XHR0aGlzLmdyb3VwU2VsZWN0R3JvdXBDbGljay5zaG93TGlzdCA9ICF0aGlzLmdyb3VwU2VsZWN0R3JvdXBDbGljay5zaG93TGlzdDtcblx0XHR9XG5cblx0XHRhZGROZXdHcm91cFRvR3JvdXBlZFNlbGVjdCgpe1xuXHRcdFx0aWYgKHRoaXMubmV3R3JvdXBHcm91cGVkU2VsZWN0LnNhaXNpZSAhPT0gJycpIHtcblx0XHRcdFx0Zm9yIChsZXQgaSA9IHRoaXMuR3JvdXBlZFNlbGVjdEdyb3Vwcy5saXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG5cdFx0XHRcdFx0aWYgKHRoaXMuR3JvdXBlZFNlbGVjdEdyb3Vwcy5saXN0W2ldID09PSB0aGlzLm5ld0dyb3VwR3JvdXBlZFNlbGVjdC5zYWlzaWUpIHtcblx0XHRcdFx0XHRcdHRoaXMudG9hc3Rlci5wb3Aoe1xuXHRcdFx0XHRcdFx0XHR0eXBlXHRcdFx0OiAnd2FybmluZycsXG5cdFx0XHRcdFx0XHRcdHRpbWVvdXRcdFx0OiAyMDAwLFxuXHRcdFx0XHRcdFx0XHR0aXRsZVx0XHRcdDogJ0dyb3VwIGFscmVhZHkgZXhpc3RzJyxcblx0XHRcdFx0XHRcdFx0Ym9keVx0XHRcdDogJ05vIGdyb3VwIGFkZGVkLicsXG5cdFx0XHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuR3JvdXBlZFNlbGVjdEdyb3Vwcy5saXN0LnB1c2godGhpcy5uZXdHcm91cEdyb3VwZWRTZWxlY3Quc2Fpc2llKTtcblx0XHRcdH1lbHNle1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdFx0OiAnd2FybmluZycsXG5cdFx0XHRcdFx0dGltZW91dFx0XHQ6IDIwMDAsXG5cdFx0XHRcdFx0dGl0bGVcdFx0XHQ6ICdOb3QgYSB2YWxpZCBncm91cCB0byBhZGQnLFxuXHRcdFx0XHRcdGJvZHlcdFx0XHQ6ICdObyBncm91cCBhZGRlZC4nLFxuXHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHRoaXMubmV3R3JvdXBHcm91cGVkU2VsZWN0LnNhaXNpZSA9ICcnO1xuXHRcdH1cblxuXG5cdFx0YWRkTmV3T3B0aW9uR3JvdXBlZFNlbGVjdCgpe1xuXHRcdFx0bGV0IHJlc3VsdCA9IHRoaXMuJHNlbGVjdE9wdGlvbk1hbmdlLmFkZE5ld09wdGlvbkdyb3VwZWRTZWxlY3QodGhpcy5ncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbiwgdGhpcy5uZXdPcHRpb25Hcm91cGVkU2VsZWN0LnNhaXNpZSwgJycpO1xuXHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRGbGFnID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdFx0OiAnd2FybmluZycsXG5cdFx0XHRcdFx0dGltZW91dFx0XHQ6IDIwMDAsXG5cdFx0XHRcdFx0dGl0bGVcdFx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRcdGJvZHlcdFx0XHQ6IGAnJHt0aGlzLm5ld09wdGlvbkdyb3VwZWRTZWxlY3Quc2Fpc2llfScgY2Fubm90IGJlIGFkZGVkLmAsXG5cdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Ly9iaW5kIG55YSA6IGRvbnQgYmluZCBoZXJlICRhcHBseSBpcyBub3QgZG9uZSBmYXN0IGVub3VnaFxuXHRcdFx0Ly9iaW5kR3JvdXBlZFNlbGVjdFRvTnlhKCk7XG5cdFx0XHQvL3Jlc2V0IGlucHV0XG5cdFx0XHR0aGlzLm5ld09wdGlvbkdyb3VwZWRTZWxlY3QgPSB7c2Fpc2llOiAnJ307XG5cdFx0fVxuXG5cblx0XHRyZW1vdmVHcm91cGVkU2VsZWN0Um93KGluZGV4KSB7XG5cdFx0XHRsZXQgcmVzdWx0ID0gdGhpcy4kc2VsZWN0T3B0aW9uTWFuZ2UucmVtb3ZlT3B0aW9uKHRoaXMuZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24sIGluZGV4KTtcblx0XHRcdGlmIChyZXN1bHQucmVzdWx0RmxhZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy50b2FzdGVyLnBvcCh7XG5cdFx0XHRcdFx0dHlwZVx0XHQ6ICd3YXJuaW5nJyxcblx0XHRcdFx0XHR0aW1lb3V0XHQ6IDIwMDAsXG5cdFx0XHRcdFx0dGl0bGVcdFx0OiByZXN1bHQuZGV0YWlscyxcblx0XHRcdFx0XHRib2R5XHRcdDogJ0RlbGV0ZSB3YXMgY2FuY2VsbGVkLicsXG5cdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHR1cFRoaXNHcm91cGVkU2VsZWN0Um93KGluZGV4KXtcblx0XHRsZXQgcmVzdWx0ID0gdGhpcy4kc2VsZWN0T3B0aW9uTWFuZ2UudXB0aGlzT3B0aW9uKHRoaXMuZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24sIGluZGV4KTtcblx0XHRpZiAocmVzdWx0LnJlc3VsdEZsYWcgPT09IGZhbHNlKSB7XG5cdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0dHlwZVx0XHQ6ICd3YXJuaW5nJyxcblx0XHRcdFx0dGltZW91dFx0OiAyMDAwLFxuXHRcdFx0XHR0aXRsZVx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRib2R5XHRcdDogJ09wZXJhdGlvbiBjYW5jZWxsZWQuJyxcblx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXG5cdGRvd25UaGlzR3JvdXBlZFNlbGVjdFJvdyhpbmRleCl7XG5cdFx0XHRsZXQgcmVzdWx0ID0gdGhpcy4kc2VsZWN0T3B0aW9uTWFuZ2UuZG93bnRoaXNPcHRpb24odGhpcy5ncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbiwgaW5kZXgpO1xuXHRcdFx0aWYgKHJlc3VsdC5yZXN1bHRGbGFnID09PSBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLnRvYXN0ZXIucG9wKHtcblx0XHRcdFx0XHR0eXBlXHRcdDogJ3dhcm5pbmcnLFxuXHRcdFx0XHRcdHRpbWVvdXRcdDogMjAwMCxcblx0XHRcdFx0XHR0aXRsZVx0XHQ6IHJlc3VsdC5kZXRhaWxzLFxuXHRcdFx0XHRcdGJvZHlcdFx0OiAnT3BlcmF0aW9uIGNhbmNlbGxlZC4nLFxuXHRcdFx0XHRcdHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0fVxuXG5cblx0dG9kYXkoKXtcblx0XHRzZXRUb2RheSh0aGlzLmRlbW9kdCk7XG5cdH1cblxuXG5cdGNsZWFyKCl7XG5cdFx0Y2xlYXJEYXRlVGltZSh0aGlzLmRlbW9kdCk7XG5cdH1cblxuXG5cdG9wZW4oJGV2ZW50KSB7XG5cdFx0JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0JGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdHRoaXMuZGVtb2R0Lm9wZW5lZCA9IHRydWU7XG5cdH1cblxuXG5cbn1cblxubGVmdFBhbmVsQ29udHJvbGxlci4kaW5qZWN0ID0gW1xuXHQndG9hc3RlcicsXG5cdCckdGltZW91dCcsXG5cdCckc2VsZWN0T3B0aW9uTWFuZ2UnLFxuXHQnY29udHJvbGxlck1vZGFsUHJveHknXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxDb250cm9sbGVyO1xuXG5leHBvcnQge1xuXHRMRUZUX1BBTkVMX0NPTlRST0xMRVIsXG5cdExFRlRfUEFORUxfQ09OVFJPTExFUkFTXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuY29udHJvbGxlci5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 17 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar dateFormats = ['dd-MMMM-yyyy', 'yyyy/MM/dd', 'dd.MM.yyyy', 'shortDate'];\n\nvar setToday = function setToday(datetimePickerModel) {\n\tdatetimePickerModel.dt = new Date();\n};\n\nvar clearDateTime = function clearDateTime(datetimePickerModel) {\n\tdatetimePickerModel.dt = new Date();\n};\n\nexports.dateFormats = dateFormats;\nexports.setToday = setToday;\nexports.clearDateTime = clearDateTime;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5jb250cm9sbGVyLmhlbHBlcnMuanM/MDMyNCJdLCJuYW1lcyI6WyJkYXRlRm9ybWF0cyIsInNldFRvZGF5IiwiZGF0ZXRpbWVQaWNrZXJNb2RlbCIsImR0IiwiRGF0ZSIsImNsZWFyRGF0ZVRpbWUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBTUEsY0FBYyxDQUFDLGNBQUQsRUFBaUIsWUFBakIsRUFBK0IsWUFBL0IsRUFBNkMsV0FBN0MsQ0FBcEI7O0FBRUEsSUFBTUMsV0FBVyxTQUFYQSxRQUFXLENBQUNDLG1CQUFELEVBQXVCO0FBQ3ZDQSxxQkFBb0JDLEVBQXBCLEdBQXlCLElBQUlDLElBQUosRUFBekI7QUFDQSxDQUZEOztBQUlBLElBQU1DLGdCQUFnQixTQUFoQkEsYUFBZ0IsQ0FBQ0gsbUJBQUQsRUFBdUI7QUFDNUNBLHFCQUFvQkMsRUFBcEIsR0FBeUIsSUFBSUMsSUFBSixFQUF6QjtBQUNBLENBRkQ7O1FBS0NKLFcsR0FBQUEsVztRQUNBQyxRLEdBQUFBLFE7UUFDQUksYSxHQUFBQSxhIiwiZmlsZSI6IjE3LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGF0ZUZvcm1hdHMgPSBbJ2RkLU1NTU0teXl5eScsICd5eXl5L01NL2RkJywgJ2RkLk1NLnl5eXknLCAnc2hvcnREYXRlJ107XG5cbmNvbnN0IHNldFRvZGF5ID0gKGRhdGV0aW1lUGlja2VyTW9kZWwpPT57XG5cdGRhdGV0aW1lUGlja2VyTW9kZWwuZHQgPSBuZXcgRGF0ZSgpO1xufTtcblxuY29uc3QgY2xlYXJEYXRlVGltZSA9IChkYXRldGltZVBpY2tlck1vZGVsKT0+e1xuXHRkYXRldGltZVBpY2tlck1vZGVsLmR0ID0gbmV3IERhdGUoKTtcbn07XG5cbmV4cG9ydCB7XG5cdGRhdGVGb3JtYXRzLFxuXHRzZXRUb2RheSxcblx0Y2xlYXJEYXRlVGltZVxufTtcblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuY29udHJvbGxlci5oZWxwZXJzLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 18 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.LEFT_PANEL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftPanel = __webpack_require__(16);\n\nvar _edaDragDropWayLeftPanelTemplate = __webpack_require__(19);\n\nvar _edaDragDropWayLeftPanelTemplate2 = _interopRequireDefault(_edaDragDropWayLeftPanelTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_DIRECTIVE = 'leftPanel';\n\nfunction leftPanel() {\n\tvar directive = {\n\t\trestrict: 'E',\n\t\ttemplate: _edaDragDropWayLeftPanelTemplate2.default,\n\t\tscope: {},\n\t\tcontroller: _edaDragDropWayLeftPanel.LEFT_PANEL_CONTROLLER,\n\t\tcontrollerAs: _edaDragDropWayLeftPanel.LEFT_PANEL_CONTROLLERAS,\n\t\tbindToController: {\n\t\t\tcloseEditPanel: '&',\n\t\t\tselectedControl: '&',\n\t\t\tsaveFromEditPanel: '&'\n\t\t}\n\t};\n\treturn directive;\n}\n\nleftPanel.$inject = [];\n\nexports.default = leftPanel;\nexports.LEFT_PANEL_DIRECTIVE = LEFT_PANEL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5kaXJlY3RpdmUuanM/ZDg0YSJdLCJuYW1lcyI6WyJMRUZUX1BBTkVMX0RJUkVDVElWRSIsImxlZnRQYW5lbCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwidGVtcGxhdGUiLCJzY29wZSIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyQXMiLCJiaW5kVG9Db250cm9sbGVyIiwiY2xvc2VFZGl0UGFuZWwiLCJzZWxlY3RlZENvbnRyb2wiLCJzYXZlRnJvbUVkaXRQYW5lbCIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFLQTs7Ozs7O0FBRUEsSUFBTUEsdUJBQXVCLFdBQTdCOztBQUdBLFNBQVNDLFNBQVQsR0FBb0I7QUFDbkIsS0FBSUMsWUFBWTtBQUNmQyxZQUFnQixHQUREO0FBRWZDLHFEQUZlO0FBR2ZDLFNBQWMsRUFIQztBQUlmQyw0REFKZTtBQUtmQyxnRUFMZTtBQU1mQyxvQkFBbUI7QUFDbEJDLG1CQUF3QixHQUROO0FBRWZDLG9CQUF3QixHQUZUO0FBR2ZDLHNCQUF3QjtBQUhUO0FBTkosRUFBaEI7QUFZQSxRQUFPVCxTQUFQO0FBQ0E7O0FBRURELFVBQVVXLE9BQVYsR0FBb0IsRUFBcEI7O2tCQUVlWCxTO1FBR2RELG9CLEdBQUFBLG9CIiwiZmlsZSI6IjE4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0TEVGVF9QQU5FTF9DT05UUk9MTEVSLFxuXHRMRUZUX1BBTkVMX0NPTlRST0xMRVJBU1xufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuY29udHJvbGxlcic7XG5cbmltcG9ydCBsZWZ0UGFuZWxUZW1wbGF0ZSBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9ESVJFQ1RJVkUgPSAnbGVmdFBhbmVsJztcblxuXG5mdW5jdGlvbiBsZWZ0UGFuZWwoKXtcblx0bGV0IGRpcmVjdGl2ZSA9IHtcblx0XHRyZXN0cmljdCBcdFx0XHRcdFx0OiAnRScsXG5cdFx0dGVtcGxhdGVcdFx0XHRcdFx0OiBsZWZ0UGFuZWxUZW1wbGF0ZSxcblx0XHRzY29wZVx0XHRcdFx0XHRcdFx0OiB7fSxcblx0XHRjb250cm9sbGVyXHRcdFx0XHQ6XHRMRUZUX1BBTkVMX0NPTlRST0xMRVIsXG5cdFx0Y29udHJvbGxlckFzXHRcdFx0OiBMRUZUX1BBTkVMX0NPTlRST0xMRVJBUyxcblx0XHRiaW5kVG9Db250cm9sbGVyXHQ6IHtcblx0XHRcdGNsb3NlRWRpdFBhbmVsICAgICAgICA6ICcmJyxcbiAgICAgIHNlbGVjdGVkQ29udHJvbCAgICAgICA6ICcmJyxcbiAgICAgIHNhdmVGcm9tRWRpdFBhbmVsICAgICA6ICcmJ1xuXHRcdH1cblx0fTtcblx0cmV0dXJuIGRpcmVjdGl2ZTtcbn1cblxubGVmdFBhbmVsLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsO1xuXG5leHBvcnQge1xuXHRMRUZUX1BBTkVMX0RJUkVDVElWRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvZWRhRHJhZ0Ryb3BXYXkubGVmdFBhbmVsLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 19 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n\\t
    \\n\\t\\t\\n\\t\\t\\t\\n ×\\n \\n\\t\\t\\n\\t
    \\n\\t
    \\n\\t
    \\n\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t
    \\n \\n  \\n Select a control\\n
    \\n\\t\\t\\t\\t
    \\n\\t\\t\\t
    \\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t\\t
    \\n\\t\\t\\t\\n\\t\\t
    \\n\\t
    \\n\\t\\n Close\\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC50ZW1wbGF0ZS5odG1sPzI3NDQiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEseVJBQXlSLHVYQUF1WCIsImZpbGUiOiIxOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGlkPVxcXCJjb250cm9sRWRpdExlZnRQYW5lbFxcXCI+XFxuXFx0PGRpdiBjbGFzcz1cXFwicHVsbC1yaWdodFxcXCI+XFxuXFx0XFx0PGJ1dHRvblxcbiAgICAgIHR5cGU9XFxcImJ1dHRvblxcXCJcXG4gICAgICBjbGFzcz1cXFwiY2xvc2VcXFwiXFxuICAgICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwuY2xvc2VFZGl0UGFuZWwoKVxcXCJcXG4gICAgICBhcmlhLWxhYmVsPVxcXCJDbG9zZVxcXCI+XFxuXFx0XFx0XFx0PHNwYW5cXG4gICAgICAgIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj5cXG4gICAgICAgICZ0aW1lcztcXG4gICAgICA8L3NwYW4+XFxuXFx0XFx0PC9idXR0b24+XFxuXFx0PC9kaXY+XFxuXFx0PGRpdiBjbGFzcz1cXFwic2VwYXJhdG9yMTBwaXhlbFxcXCI+PC9kaXY+XFxuXFx0PGRpdiBuZy1zd2l0Y2ggb249XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLnNlbGVjdGVkQ29udHJvbFxcXCI+XFxuXFx0XFx0PGRpdiBuZy1zd2l0Y2gtd2hlbj1cXFwibm9uZVxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtc20tMTJcXFwiPlxcblxcdFxcdFxcdFxcdFxcdDxoNSBjbGFzcz1cXFwidGV4dC1jZW50ZXIgdGV4dGVSb3VnZVxcXCI+XFxuICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLWFycm93LXVwXFxcIj48L2k+XFxuICAgICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgICAgU2VsZWN0IGEgY29udHJvbFxcbiAgICAgICAgICA8L2g1PlxcblxcdFxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdDwvZGl2PlxcblxcdFxcdDxkaXYgbmctc3dpdGNoLXdoZW49XFxcImVtcHR5XFxcIj5cXG5cXHRcXHRcXHQ8bGVmdC1wYW5lbC1ibGFuay1jb250cm9sIC8+XFxuXFx0XFx0PC9kaXY+XFxuXFx0XFx0PGRpdiBuZy1zd2l0Y2gtd2hlbj1cXFwiSGVhZGVyXFxcIj5cXG5cXHRcXHRcXHQ8bGVmdC1wYW5lbC1oZWFkZXItY29udHJvbCAvPlxcblxcdFxcdDwvZGl2PlxcblxcdFxcdDxkaXYgbmctc3dpdGNoLXdoZW49XFxcIlN1YnRpdGxlXFxcIj5cXG5cXHRcXHRcXHQ8bGVmdC1wYW5lbC1zdWJ0aXRsZS1jb250cm9sIC8+XFxuXFx0XFx0PC9kaXY+XFxuXFx0XFx0PGRpdiBuZy1zd2l0Y2gtd2hlbj1cXFwiVGV4dElucHV0XFxcIj5cXG5cXHRcXHRcXHQ8bGVmdC1wYW5lbC10ZXh0LWlucHV0LWNvbnRyb2wgLz5cXG5cXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8ZGl2IG5nLXN3aXRjaC13aGVuPVxcXCJQYXNzd29yZFxcXCI+XFxuXFx0XFx0XFx0PGxlZnQtcGFuZWwtcGFzc3dvcmQtY29udHJvbCAvPlxcblxcdFxcdDwvZGl2PlxcblxcdFxcdDxkaXYgbmctc3dpdGNoLXdoZW49XFxcIkRhdGVcXFwiPlxcblxcdFxcdFxcdDxsZWZ0LXBhbmVsLWRhdGUtY29udHJvbCAvPlxcblxcdFxcdDwvZGl2PlxcblxcdFxcdDxkaXYgbmctc3dpdGNoLXdoZW49XFxcIlRleGFyZWFcXFwiPlxcblxcdFxcdFxcdDxsZWZ0LXBhbmVsLXRleHRhcmVhLWNvbnRyb2wgLz5cXG5cXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8ZGl2IG5nLXN3aXRjaC13aGVuPVxcXCJSaWNoVGV4dEVkaXRvclxcXCI+XFxuXFx0XFx0XFx0PGxlZnQtcGFuZWwtcmljaC10ZXh0LWVkaXRvci1jb250cm9sIC8+XFxuXFx0XFx0PC9kaXY+XFxuXFx0XFx0PGRpdiBuZy1zd2l0Y2gtd2hlbj1cXFwiUmFkaW9cXFwiPlxcblxcdFxcdFxcdDxsZWZ0LXBhbmVsLXJhZGlvLWNvbnRyb2wgLz5cXG5cXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8ZGl2IG5nLXN3aXRjaC13aGVuPVxcXCJDaGVja2JveFxcXCI+XFxuXFx0XFx0XFx0PGxlZnQtcGFuZWwtY2hlY2stYm94LWNvbnRyb2wgLz5cXG5cXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8ZGl2IG5nLXN3aXRjaC13aGVuPVxcXCJCYXNpY1NlbGVjdFxcXCI+XFxuXFx0XFx0XFx0PGxlZnQtcGFuZWwtYmFzaWMtc2VsZWN0LWNvbnRyb2wgLz5cXG5cXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8ZGl2IG5nLXN3aXRjaC13aGVuPVxcXCJHcm91cGVkU2VsZWN0XFxcIj5cXG5cXHRcXHRcXHQ8bGVmdC1wYW5lbC1ncm91cGVkLXNlbGVjdC1jb250cm9sIC8+XFxuXFx0XFx0PC9kaXY+XFxuXFx0PC9kaXY+XFxuXFx0PGJ1dHRvblxcbiAgICBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1ibG9jayBwdWxsLXJpZ2h0XFxcIlxcbiAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5jbG9zZUVkaXRQYW5lbCgpXFxcIj5cXG4gICAgQ2xvc2VcXG4gIDwvYnV0dG9uPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 20 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global angular */\n\n\nvar _edaDragDropWayLeftPanelSelectOptionManageService = __webpack_require__(21);\n\nvar helpers = _interopRequireWildcard(_edaDragDropWayLeftPanelSelectOptionManageService);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE = '$selectOptionMange';\n\nvar selectOptionMange = function () {\n function selectOptionMange() {\n _classCallCheck(this, selectOptionMange);\n\n this.init();\n }\n\n _createClass(selectOptionMange, [{\n key: 'init',\n value: function init() {}\n }, {\n key: 'initModel',\n value: function initModel(selectObj) {\n helpers.resetModel(selectObj);\n }\n }, {\n key: 'isOptionUnique',\n value: function isOptionUnique(selectObj, textValue) {\n for (var i = selectObj.rows.length - 1; i >= 0; i--) {\n if (selectObj.rows[i].option === textValue) return false;\n }\n return true;\n }\n }, {\n key: 'isOptionValidFormat',\n value: function isOptionValidFormat(textValue) {\n if (textValue !== '') return true;\n return false;\n }\n }, {\n key: 'addNewOptionRadio',\n value: function addNewOptionRadio(selectObj, newOptionText) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n var checkResult = helpers.validOption(selectObj, newOptionText);\n if (checkResult.resultFlag === true) {\n var newOption = {\n option: newOptionText,\n order: selectObj.rows.length\n };\n selectObj.rows.push(newOption);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n angular.copy(checkResult, fullResponse);\n return fullResponse;\n }\n }\n }, {\n key: 'addNewOptionBasicSelect',\n value: function addNewOptionBasicSelect(selectObj, newOptionText) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n var checkResult = helpers.validOption(selectObj, newOptionText);\n if (checkResult.resultFlag === true) {\n var newOption = {\n option: newOptionText,\n order: selectObj.rows.length\n };\n selectObj.rows.push(newOption);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n angular.copy(checkResult, fullResponse);\n return fullResponse;\n }\n }\n }, {\n key: 'addNewOptionGroupedSelect',\n value: function addNewOptionGroupedSelect(selectObj, newOptionText, newOptionGroup) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n var checkResult = helpers.validOption(selectObj, newOptionText);\n if (checkResult.resultFlag === true) {\n var newOption = {\n option: newOptionText,\n group: newOptionGroup,\n order: selectObj.rows.length\n };\n selectObj.rows.push(newOption);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n angular.copy(checkResult, fullResponse);\n return fullResponse;\n }\n }\n }, {\n key: 'removeOption',\n value: function removeOption(selectObj, AtIndex) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n if (AtIndex !== -1) {\n selectObj.rows.splice(AtIndex, 1);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Option index not valid';\n return fullResponse;\n }\n }\n }, {\n key: 'upthisOption',\n value: function upthisOption(selectObj, indexOption) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n if (indexOption > -1) {\n if (indexOption > 0) {\n if (selectObj.rows[indexOption - 1]) {\n var currentOption = selectObj.rows[indexOption];\n selectObj.rows.splice(indexOption, 1);\n selectObj.rows.splice(indexOption - 1, 0, currentOption);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Can\\'t retreive option from option index';\n return fullResponse;\n }\n } else {\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n }\n } else {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Option index not valid';\n return fullResponse;\n }\n }\n }, {\n key: 'downthisOption',\n value: function downthisOption(selectObj, indexOption) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n if (indexOption > -1) {\n if (indexOption < selectObj.rows.length - 1) {\n if (selectObj.rows[indexOption + 1]) {\n var currentOption = selectObj.rows[indexOption];\n selectObj.rows.splice(indexOption, 1);\n selectObj.rows.splice(indexOption + 1, 0, currentOption);\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n } else {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Can\\'t retreive option from option index';\n return fullResponse;\n }\n } else {\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n }\n } else {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Option index not valid';\n return fullResponse;\n }\n }\n }]);\n\n return selectOptionMange;\n}();\n\nselectOptionMange.$inject = [];\n\nexports.default = selectOptionMange;\nexports.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE = LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5zZWxlY3RPcHRpb25NYW5hZ2Uuc2VydmljZS5qcz85ZDAwIl0sIm5hbWVzIjpbImhlbHBlcnMiLCJMRUZUX1BBTkVMX1NFTEVDVF9PUFRJT05fTUFOQUdFX1NFUlZJQ0UiLCJzZWxlY3RPcHRpb25NYW5nZSIsImluaXQiLCJzZWxlY3RPYmoiLCJyZXNldE1vZGVsIiwidGV4dFZhbHVlIiwiaSIsInJvd3MiLCJsZW5ndGgiLCJvcHRpb24iLCJuZXdPcHRpb25UZXh0IiwiZnVsbFJlc3BvbnNlIiwicmVzdWx0RmxhZyIsImRldGFpbHMiLCJjaGVja1Jlc3VsdCIsInZhbGlkT3B0aW9uIiwibmV3T3B0aW9uIiwib3JkZXIiLCJwdXNoIiwiYW5ndWxhciIsImNvcHkiLCJuZXdPcHRpb25Hcm91cCIsImdyb3VwIiwiQXRJbmRleCIsInNwbGljZSIsImluZGV4T3B0aW9uIiwiY3VycmVudE9wdGlvbiIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7cWpCQUFBOzs7QUFDQTs7SUFBWUEsTzs7Ozs7O0FBRVosSUFBTUMsMENBQTBDLG9CQUFoRDs7SUFHTUMsaUI7QUFFSiwrQkFBYTtBQUFBOztBQUNYLFNBQUtDLElBQUw7QUFDRDs7OzsyQkFFSyxDQUVMOzs7OEJBRVNDLFMsRUFBVTtBQUNsQkosY0FBUUssVUFBUixDQUFtQkQsU0FBbkI7QUFDRDs7O21DQUVjQSxTLEVBQVdFLFMsRUFBVTtBQUNsQyxXQUFLLElBQUlDLElBQUlILFVBQVVJLElBQVYsQ0FBZUMsTUFBZixHQUF3QixDQUFyQyxFQUF3Q0YsS0FBSyxDQUE3QyxFQUFnREEsR0FBaEQsRUFBcUQ7QUFDbkQsWUFBSUgsVUFBVUksSUFBVixDQUFlRCxDQUFmLEVBQWtCRyxNQUFsQixLQUE2QkosU0FBakMsRUFBNEMsT0FBTyxLQUFQO0FBQzdDO0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7Ozt3Q0FFbUJBLFMsRUFBVTtBQUM1QixVQUFJQSxjQUFjLEVBQWxCLEVBQXNCLE9BQU8sSUFBUDtBQUN0QixhQUFPLEtBQVA7QUFDRDs7O3NDQUVpQkYsUyxFQUFXTyxhLEVBQWM7QUFDekMsVUFBSUMsZUFBZTtBQUNqQkMsb0JBQWMsS0FERztBQUVqQkMsaUJBQWM7QUFGRyxPQUFuQjtBQUlBLFVBQUlDLGNBQWNmLFFBQVFnQixXQUFSLENBQW9CWixTQUFwQixFQUErQk8sYUFBL0IsQ0FBbEI7QUFDQSxVQUFJSSxZQUFZRixVQUFaLEtBQTJCLElBQS9CLEVBQW9DO0FBQ2hDLFlBQUlJLFlBQVk7QUFDZFAsa0JBQVVDLGFBREk7QUFFZE8saUJBQVVkLFVBQVVJLElBQVYsQ0FBZUM7QUFGWCxTQUFoQjtBQUlBTCxrQkFBVUksSUFBVixDQUFlVyxJQUFmLENBQW9CRixTQUFwQjtBQUNBTCxxQkFBYUMsVUFBYixHQUEwQixJQUExQjtBQUNBRCxxQkFBYUUsT0FBYixHQUEwQixFQUExQjtBQUNBLGVBQU9GLFlBQVA7QUFDSCxPQVRELE1BU0s7QUFDSFEsZ0JBQVFDLElBQVIsQ0FBYU4sV0FBYixFQUEwQkgsWUFBMUI7QUFDQSxlQUFPQSxZQUFQO0FBQ0Q7QUFDRjs7OzRDQUV1QlIsUyxFQUFXTyxhLEVBQWM7QUFDL0MsVUFBSUMsZUFBZTtBQUNqQkMsb0JBQWMsS0FERztBQUVqQkMsaUJBQWM7QUFGRyxPQUFuQjtBQUlBLFVBQUlDLGNBQWNmLFFBQVFnQixXQUFSLENBQW9CWixTQUFwQixFQUErQk8sYUFBL0IsQ0FBbEI7QUFDQSxVQUFJSSxZQUFZRixVQUFaLEtBQTJCLElBQS9CLEVBQW9DO0FBQ2xDLFlBQUlJLFlBQVk7QUFDWlAsa0JBQVVDLGFBREU7QUFFWk8saUJBQVVkLFVBQVVJLElBQVYsQ0FBZUM7QUFGYixTQUFoQjtBQUlBTCxrQkFBVUksSUFBVixDQUFlVyxJQUFmLENBQW9CRixTQUFwQjtBQUNBTCxxQkFBYUMsVUFBYixHQUEwQixJQUExQjtBQUNBRCxxQkFBYUUsT0FBYixHQUEwQixFQUExQjtBQUNBLGVBQU9GLFlBQVA7QUFDRCxPQVRELE1BU0s7QUFDSFEsZ0JBQVFDLElBQVIsQ0FBYU4sV0FBYixFQUEwQkgsWUFBMUI7QUFDQSxlQUFPQSxZQUFQO0FBQ0Q7QUFDRjs7OzhDQUV5QlIsUyxFQUFXTyxhLEVBQWVXLGMsRUFBZTtBQUNqRSxVQUFJVixlQUFlO0FBQ2pCQyxvQkFBYyxLQURHO0FBRWpCQyxpQkFBYztBQUZHLE9BQW5CO0FBSUEsVUFBSUMsY0FBY2YsUUFBUWdCLFdBQVIsQ0FBb0JaLFNBQXBCLEVBQStCTyxhQUEvQixDQUFsQjtBQUNBLFVBQUlJLFlBQVlGLFVBQVosS0FBMkIsSUFBL0IsRUFBb0M7QUFDbEMsWUFBSUksWUFBWTtBQUNaUCxrQkFBVUMsYUFERTtBQUVaWSxpQkFBVUQsY0FGRTtBQUdaSixpQkFBVWQsVUFBVUksSUFBVixDQUFlQztBQUhiLFNBQWhCO0FBS0FMLGtCQUFVSSxJQUFWLENBQWVXLElBQWYsQ0FBb0JGLFNBQXBCO0FBQ0FMLHFCQUFhQyxVQUFiLEdBQTBCLElBQTFCO0FBQ0FELHFCQUFhRSxPQUFiLEdBQTBCLEVBQTFCO0FBQ0EsZUFBT0YsWUFBUDtBQUNELE9BVkQsTUFVSztBQUNIUSxnQkFBUUMsSUFBUixDQUFhTixXQUFiLEVBQTBCSCxZQUExQjtBQUNBLGVBQU9BLFlBQVA7QUFDRDtBQUNGOzs7aUNBRVlSLFMsRUFBV29CLE8sRUFBUztBQUMvQixVQUFJWixlQUFlO0FBQ2pCQyxvQkFBYyxLQURHO0FBRWpCQyxpQkFBYztBQUZHLE9BQW5CO0FBSUEsVUFBSVUsWUFBWSxDQUFDLENBQWpCLEVBQW9CO0FBQ2xCcEIsa0JBQVVJLElBQVYsQ0FBZWlCLE1BQWYsQ0FBc0JELE9BQXRCLEVBQStCLENBQS9CO0FBQ0FaLHFCQUFhQyxVQUFiLEdBQTBCLElBQTFCO0FBQ0FELHFCQUFhRSxPQUFiLEdBQTBCLEVBQTFCO0FBQ0EsZUFBT0YsWUFBUDtBQUNELE9BTEQsTUFLSztBQUNIQSxxQkFBYUMsVUFBYixHQUEwQixLQUExQjtBQUNBRCxxQkFBYUUsT0FBYixHQUEwQix3QkFBMUI7QUFDQSxlQUFPRixZQUFQO0FBQ0Q7QUFDRjs7O2lDQUVZUixTLEVBQVdzQixXLEVBQVk7QUFDbEMsVUFBSWQsZUFBZTtBQUNqQkMsb0JBQWMsS0FERztBQUVqQkMsaUJBQWM7QUFGRyxPQUFuQjtBQUlBLFVBQUlZLGNBQWMsQ0FBQyxDQUFuQixFQUFzQjtBQUNwQixZQUFJQSxjQUFjLENBQWxCLEVBQXFCO0FBQ25CLGNBQUl0QixVQUFVSSxJQUFWLENBQWVrQixjQUFjLENBQTdCLENBQUosRUFBcUM7QUFDbkMsZ0JBQUlDLGdCQUFnQnZCLFVBQVVJLElBQVYsQ0FBZWtCLFdBQWYsQ0FBcEI7QUFDQXRCLHNCQUFVSSxJQUFWLENBQWVpQixNQUFmLENBQXNCQyxXQUF0QixFQUFvQyxDQUFwQztBQUNBdEIsc0JBQVVJLElBQVYsQ0FBZWlCLE1BQWYsQ0FBdUJDLGNBQWMsQ0FBckMsRUFBeUMsQ0FBekMsRUFBNENDLGFBQTVDO0FBQ0FmLHlCQUFhQyxVQUFiLEdBQTBCLElBQTFCO0FBQ0FELHlCQUFhRSxPQUFiLEdBQTBCLEVBQTFCO0FBQ0EsbUJBQU9GLFlBQVA7QUFDRCxXQVBELE1BT0s7QUFDSEEseUJBQWFDLFVBQWIsR0FBMEIsS0FBMUI7QUFDQUQseUJBQWFFLE9BQWI7QUFDQSxtQkFBT0YsWUFBUDtBQUNEO0FBQ0YsU0FiRCxNQWFLO0FBQ0hBLHVCQUFhQyxVQUFiLEdBQTBCLElBQTFCO0FBQ0FELHVCQUFhRSxPQUFiLEdBQTBCLEVBQTFCO0FBQ0EsaUJBQU9GLFlBQVA7QUFDRDtBQUNGLE9BbkJELE1BbUJLO0FBQ0hBLHFCQUFhQyxVQUFiLEdBQTBCLEtBQTFCO0FBQ0FELHFCQUFhRSxPQUFiLEdBQTBCLHdCQUExQjtBQUNBLGVBQU9GLFlBQVA7QUFDRDtBQUNGOzs7bUNBRWNSLFMsRUFBV3NCLFcsRUFBWTtBQUNwQyxVQUFJZCxlQUFlO0FBQ2pCQyxvQkFBYyxLQURHO0FBRWpCQyxpQkFBYztBQUZHLE9BQW5CO0FBSUEsVUFBSVksY0FBYyxDQUFDLENBQW5CLEVBQXNCO0FBQ3BCLFlBQUlBLGNBQWN0QixVQUFVSSxJQUFWLENBQWVDLE1BQWYsR0FBd0IsQ0FBMUMsRUFBNEM7QUFDMUMsY0FBSUwsVUFBVUksSUFBVixDQUFla0IsY0FBYyxDQUE3QixDQUFKLEVBQXFDO0FBQ25DLGdCQUFJQyxnQkFBZ0J2QixVQUFVSSxJQUFWLENBQWVrQixXQUFmLENBQXBCO0FBQ0F0QixzQkFBVUksSUFBVixDQUFlaUIsTUFBZixDQUFzQkMsV0FBdEIsRUFBb0MsQ0FBcEM7QUFDQXRCLHNCQUFVSSxJQUFWLENBQWVpQixNQUFmLENBQXVCQyxjQUFjLENBQXJDLEVBQXlDLENBQXpDLEVBQTRDQyxhQUE1QztBQUNBZix5QkFBYUMsVUFBYixHQUEwQixJQUExQjtBQUNBRCx5QkFBYUUsT0FBYixHQUEwQixFQUExQjtBQUNBLG1CQUFPRixZQUFQO0FBQ0QsV0FQRCxNQU9LO0FBQ0hBLHlCQUFhQyxVQUFiLEdBQTBCLEtBQTFCO0FBQ0FELHlCQUFhRSxPQUFiO0FBQ0EsbUJBQU9GLFlBQVA7QUFDRDtBQUNGLFNBYkQsTUFhSztBQUNIQSx1QkFBYUMsVUFBYixHQUEwQixJQUExQjtBQUNBRCx1QkFBYUUsT0FBYixHQUEwQixFQUExQjtBQUNBLGlCQUFPRixZQUFQO0FBQ0Q7QUFDRixPQW5CRCxNQW1CSztBQUNIQSxxQkFBYUMsVUFBYixHQUEwQixLQUExQjtBQUNBRCxxQkFBYUUsT0FBYixHQUEwQix3QkFBMUI7QUFDQSxlQUFPRixZQUFQO0FBQ0Q7QUFDRjs7Ozs7O0FBTUhWLGtCQUFrQjBCLE9BQWxCLEdBQTRCLEVBQTVCOztrQkFFZTFCLGlCO1FBR2JELHVDLEdBQUFBLHVDIiwiZmlsZSI6IjIwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCAqIGFzIGhlbHBlcnMgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuc2VsZWN0T3B0aW9uTWFuYWdlLnNlcnZpY2UuaGVscGVycyc7XG5cbmNvbnN0IExFRlRfUEFORUxfU0VMRUNUX09QVElPTl9NQU5BR0VfU0VSVklDRSA9ICckc2VsZWN0T3B0aW9uTWFuZ2UnO1xuXG5cbmNsYXNzIHNlbGVjdE9wdGlvbk1hbmdle1xuICBcbiAgY29uc3RydWN0b3IoKXtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuICBcbiAgaW5pdCgpe1xuICAgIFxuICB9XG4gIFxuICBpbml0TW9kZWwoc2VsZWN0T2JqKXtcbiAgICBoZWxwZXJzLnJlc2V0TW9kZWwoc2VsZWN0T2JqKTtcbiAgfVxuICBcbiAgaXNPcHRpb25VbmlxdWUoc2VsZWN0T2JqLCB0ZXh0VmFsdWUpe1xuICAgIGZvciAobGV0IGkgPSBzZWxlY3RPYmoucm93cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHNlbGVjdE9iai5yb3dzW2ldLm9wdGlvbiA9PT0gdGV4dFZhbHVlKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIFxuICBpc09wdGlvblZhbGlkRm9ybWF0KHRleHRWYWx1ZSl7XG4gICAgaWYgKHRleHRWYWx1ZSAhPT0gJycpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgIFxuICB9XG5cbiAgYWRkTmV3T3B0aW9uUmFkaW8oc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KXtcbiAgICBsZXQgZnVsbFJlc3BvbnNlID0ge1xuICAgICAgcmVzdWx0RmxhZyAgOiBmYWxzZSxcbiAgICAgIGRldGFpbHMgICAgIDogJydcbiAgICB9O1xuICAgIGxldCBjaGVja1Jlc3VsdCA9IGhlbHBlcnMudmFsaWRPcHRpb24oc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KTsgIFxuICAgIGlmIChjaGVja1Jlc3VsdC5yZXN1bHRGbGFnID09PSB0cnVlKXtcbiAgICAgICAgbGV0IG5ld09wdGlvbiA9IHtcbiAgICAgICAgICBvcHRpb24gIDogbmV3T3B0aW9uVGV4dCxcbiAgICAgICAgICBvcmRlciAgIDogc2VsZWN0T2JqLnJvd3MubGVuZ3RoXG4gICAgICAgIH07XG4gICAgICAgIHNlbGVjdE9iai5yb3dzLnB1c2gobmV3T3B0aW9uKTtcbiAgICAgICAgZnVsbFJlc3BvbnNlLnJlc3VsdEZsYWcgPSB0cnVlO1xuICAgICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgIH1lbHNle1xuICAgICAgYW5ndWxhci5jb3B5KGNoZWNrUmVzdWx0LCBmdWxsUmVzcG9uc2UpOyAgICAgICAgICAgICAgICAgICAgXG4gICAgICByZXR1cm4gZnVsbFJlc3BvbnNlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIH1cbiAgfVxuICBcbiAgYWRkTmV3T3B0aW9uQmFzaWNTZWxlY3Qoc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KXtcbiAgICBsZXQgZnVsbFJlc3BvbnNlID0ge1xuICAgICAgcmVzdWx0RmxhZyAgOiBmYWxzZSxcbiAgICAgIGRldGFpbHMgICAgIDogJydcbiAgICB9O1xuICAgIGxldCBjaGVja1Jlc3VsdCA9IGhlbHBlcnMudmFsaWRPcHRpb24oc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KTsgIFxuICAgIGlmIChjaGVja1Jlc3VsdC5yZXN1bHRGbGFnID09PSB0cnVlKXtcbiAgICAgIGxldCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgb3B0aW9uICA6IG5ld09wdGlvblRleHQsXG4gICAgICAgICAgb3JkZXIgICA6IHNlbGVjdE9iai5yb3dzLmxlbmd0aFxuICAgICAgfTtcbiAgICAgIHNlbGVjdE9iai5yb3dzLnB1c2gobmV3T3B0aW9uKTtcbiAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gdHJ1ZTtcbiAgICAgIGZ1bGxSZXNwb25zZS5kZXRhaWxzICAgID0gJyc7XG4gICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgIH1lbHNle1xuICAgICAgYW5ndWxhci5jb3B5KGNoZWNrUmVzdWx0LCBmdWxsUmVzcG9uc2UpOyAgICAgICAgICAgICAgICAgICAgXG4gICAgICByZXR1cm4gZnVsbFJlc3BvbnNlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIH1cbiAgfVxuICBcbiAgYWRkTmV3T3B0aW9uR3JvdXBlZFNlbGVjdChzZWxlY3RPYmosIG5ld09wdGlvblRleHQsIG5ld09wdGlvbkdyb3VwKXtcbiAgICBsZXQgZnVsbFJlc3BvbnNlID0ge1xuICAgICAgcmVzdWx0RmxhZyAgOiBmYWxzZSxcbiAgICAgIGRldGFpbHMgICAgIDogJydcbiAgICB9O1xuICAgIGxldCBjaGVja1Jlc3VsdCA9IGhlbHBlcnMudmFsaWRPcHRpb24oc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KTsgIFxuICAgIGlmIChjaGVja1Jlc3VsdC5yZXN1bHRGbGFnID09PSB0cnVlKXtcbiAgICAgIGxldCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgb3B0aW9uICA6IG5ld09wdGlvblRleHQsXG4gICAgICAgICAgZ3JvdXAgICA6IG5ld09wdGlvbkdyb3VwLFxuICAgICAgICAgIG9yZGVyICAgOiBzZWxlY3RPYmoucm93cy5sZW5ndGhcbiAgICAgIH07XG4gICAgICBzZWxlY3RPYmoucm93cy5wdXNoKG5ld09wdGlvbik7XG4gICAgICBmdWxsUmVzcG9uc2UucmVzdWx0RmxhZyA9IHRydWU7XG4gICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcbiAgICB9ZWxzZXtcbiAgICAgIGFuZ3VsYXIuY29weShjaGVja1Jlc3VsdCwgZnVsbFJlc3BvbnNlKTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgcmV0dXJuIGZ1bGxSZXNwb25zZTsgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICB9XG4gIH0gIFxuICBcbiAgcmVtb3ZlT3B0aW9uKHNlbGVjdE9iaiwgQXRJbmRleCkge1xuICAgIGxldCBmdWxsUmVzcG9uc2UgPSB7XG4gICAgICByZXN1bHRGbGFnICA6IGZhbHNlLFxuICAgICAgZGV0YWlscyAgICAgOiAnJ1xuICAgIH07XG4gICAgaWYgKEF0SW5kZXggIT09IC0xKSB7XG4gICAgICBzZWxlY3RPYmoucm93cy5zcGxpY2UoQXRJbmRleCwgMSk7XG4gICAgICBmdWxsUmVzcG9uc2UucmVzdWx0RmxhZyA9IHRydWU7XG4gICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcbiAgICB9ZWxzZXtcbiAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gZmFsc2U7XG4gICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICdPcHRpb24gaW5kZXggbm90IHZhbGlkJztcbiAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gICAgfVxuICB9XG4gIFxuICB1cHRoaXNPcHRpb24oc2VsZWN0T2JqLCBpbmRleE9wdGlvbil7XG4gICAgbGV0IGZ1bGxSZXNwb25zZSA9IHtcbiAgICAgIHJlc3VsdEZsYWcgIDogZmFsc2UsXG4gICAgICBkZXRhaWxzICAgICA6ICcnXG4gICAgfTtcbiAgICBpZiAoaW5kZXhPcHRpb24gPiAtMSkge1xuICAgICAgaWYgKGluZGV4T3B0aW9uID4gMCkge1xuICAgICAgICBpZiAoc2VsZWN0T2JqLnJvd3NbaW5kZXhPcHRpb24gLSAxXSkge1xuICAgICAgICAgIGxldCBjdXJyZW50T3B0aW9uID0gc2VsZWN0T2JqLnJvd3NbaW5kZXhPcHRpb25dO1xuICAgICAgICAgIHNlbGVjdE9iai5yb3dzLnNwbGljZShpbmRleE9wdGlvbiAsIDEpO1xuICAgICAgICAgIHNlbGVjdE9iai5yb3dzLnNwbGljZSgoaW5kZXhPcHRpb24gLSAxKSwgMCwgY3VycmVudE9wdGlvbik7IFxuICAgICAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gZmFsc2U7XG4gICAgICAgICAgZnVsbFJlc3BvbnNlLmRldGFpbHMgICAgPSBgQ2FuJ3QgcmV0cmVpdmUgb3B0aW9uIGZyb20gb3B0aW9uIGluZGV4YDtcbiAgICAgICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXtcbiAgICAgICAgZnVsbFJlc3BvbnNlLnJlc3VsdEZsYWcgPSB0cnVlO1xuICAgICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgICAgfSAgXG4gICAgfWVsc2V7XG4gICAgICBmdWxsUmVzcG9uc2UucmVzdWx0RmxhZyA9IGZhbHNlO1xuICAgICAgZnVsbFJlc3BvbnNlLmRldGFpbHMgICAgPSAnT3B0aW9uIGluZGV4IG5vdCB2YWxpZCc7XG4gICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgIH1cbiAgfVxuICBcbiAgZG93bnRoaXNPcHRpb24oc2VsZWN0T2JqLCBpbmRleE9wdGlvbil7XG4gICAgbGV0IGZ1bGxSZXNwb25zZSA9IHtcbiAgICAgIHJlc3VsdEZsYWcgIDogZmFsc2UsXG4gICAgICBkZXRhaWxzICAgICA6ICcnXG4gICAgfTtcbiAgICBpZiAoaW5kZXhPcHRpb24gPiAtMSkge1xuICAgICAgaWYgKGluZGV4T3B0aW9uIDwgc2VsZWN0T2JqLnJvd3MubGVuZ3RoIC0gMSl7XG4gICAgICAgIGlmIChzZWxlY3RPYmoucm93c1tpbmRleE9wdGlvbiArIDFdKSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnRPcHRpb24gPSBzZWxlY3RPYmoucm93c1tpbmRleE9wdGlvbl07XG4gICAgICAgICAgc2VsZWN0T2JqLnJvd3Muc3BsaWNlKGluZGV4T3B0aW9uICwgMSk7XG4gICAgICAgICAgc2VsZWN0T2JqLnJvd3Muc3BsaWNlKChpbmRleE9wdGlvbiArIDEpLCAwLCBjdXJyZW50T3B0aW9uKTsgIFxuICAgICAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICcnO1xuICAgICAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gZmFsc2U7XG4gICAgICAgICAgZnVsbFJlc3BvbnNlLmRldGFpbHMgICAgPSBgQ2FuJ3QgcmV0cmVpdmUgb3B0aW9uIGZyb20gb3B0aW9uIGluZGV4YDtcbiAgICAgICAgICByZXR1cm4gZnVsbFJlc3BvbnNlO1xuICAgICAgICB9XG4gICAgICB9ZWxzZXsgICAgICAgICAgXG4gICAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgZnVsbFJlc3BvbnNlLmRldGFpbHMgICAgPSAnJztcbiAgICAgICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcbiAgICAgIH1cbiAgICB9ZWxzZXtcbiAgICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gZmFsc2U7XG4gICAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICdPcHRpb24gaW5kZXggbm90IHZhbGlkJztcbiAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gICAgfVxuICB9ICAgIFxuICBcbiAgXG4gIFxufVxuXG5zZWxlY3RPcHRpb25NYW5nZS4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0IHNlbGVjdE9wdGlvbk1hbmdlO1xuXG5leHBvcnQge1xuICBMRUZUX1BBTkVMX1NFTEVDVF9PUFRJT05fTUFOQUdFX1NFUlZJQ0Vcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9lZGFEcmFnRHJvcFdheS5sZWZ0UGFuZWwuc2VsZWN0T3B0aW9uTWFuYWdlLnNlcnZpY2UuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 21 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n/* global angular */\nvar resetModel = function resetModel(selectObj) {\n var zeroModel = { rows: [] };\n angular.copy(zeroModel, selectObj);\n};\n\nvar validOption = function validOption(selectObj, newOptionText) {\n var fullResponse = {\n resultFlag: false,\n details: ''\n };\n if (typeof newOptionText === 'undefined') {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Entered option is empty';\n return fullResponse;\n }\n if (newOptionText !== '') {\n for (var i = selectObj.rows.length - 1; i >= 0; i--) {\n if (selectObj.rows[i].option === newOptionText) {\n fullResponse.resultFlag = false;\n fullResponse.details = 'Entered option is not unique';\n return fullResponse;\n }\n }\n fullResponse.resultFlag = true;\n fullResponse.details = '';\n return fullResponse;\n }\n fullResponse.resultFlag = false;\n fullResponse.details = 'Entered option is empty';\n return fullResponse;\n};\n\nexports.resetModel = resetModel;\nexports.validOption = validOption;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5zZWxlY3RPcHRpb25NYW5hZ2Uuc2VydmljZS5oZWxwZXJzLmpzPzQyOGEiXSwibmFtZXMiOlsicmVzZXRNb2RlbCIsInNlbGVjdE9iaiIsInplcm9Nb2RlbCIsInJvd3MiLCJhbmd1bGFyIiwiY29weSIsInZhbGlkT3B0aW9uIiwibmV3T3B0aW9uVGV4dCIsImZ1bGxSZXNwb25zZSIsInJlc3VsdEZsYWciLCJkZXRhaWxzIiwiaSIsImxlbmd0aCIsIm9wdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBLElBQU1BLGFBQWEsU0FBYkEsVUFBYSxDQUFDQyxTQUFELEVBQWU7QUFDaEMsTUFBSUMsWUFBWSxFQUFFQyxNQUFLLEVBQVAsRUFBaEI7QUFDQUMsVUFBUUMsSUFBUixDQUFhSCxTQUFiLEVBQXdCRCxTQUF4QjtBQUNELENBSEQ7O0FBTUEsSUFBTUssY0FBYyxTQUFkQSxXQUFjLENBQUNMLFNBQUQsRUFBWU0sYUFBWixFQUE4QjtBQUNoRCxNQUFJQyxlQUFlO0FBQ2pCQyxnQkFBYSxLQURJO0FBRWpCQyxhQUFVO0FBRk8sR0FBbkI7QUFJQSxNQUFJLE9BQU9ILGFBQVAsS0FBeUIsV0FBN0IsRUFBMEM7QUFDeENDLGlCQUFhQyxVQUFiLEdBQTBCLEtBQTFCO0FBQ0FELGlCQUFhRSxPQUFiLEdBQTBCLHlCQUExQjtBQUNBLFdBQU9GLFlBQVA7QUFDRDtBQUNELE1BQUlELGtCQUFrQixFQUF0QixFQUEwQjtBQUN4QixTQUFLLElBQUlJLElBQUlWLFVBQVVFLElBQVYsQ0FBZVMsTUFBZixHQUF3QixDQUFyQyxFQUF3Q0QsS0FBSyxDQUE3QyxFQUFnREEsR0FBaEQsRUFBcUQ7QUFDbkQsVUFBSVYsVUFBVUUsSUFBVixDQUFlUSxDQUFmLEVBQWtCRSxNQUFsQixLQUE2Qk4sYUFBakMsRUFBZ0Q7QUFDOUNDLHFCQUFhQyxVQUFiLEdBQTBCLEtBQTFCO0FBQ0FELHFCQUFhRSxPQUFiLEdBQTBCLDhCQUExQjtBQUNBLGVBQU9GLFlBQVA7QUFDRDtBQUNGO0FBQ0RBLGlCQUFhQyxVQUFiLEdBQTBCLElBQTFCO0FBQ0FELGlCQUFhRSxPQUFiLEdBQXVCLEVBQXZCO0FBQ0EsV0FBT0YsWUFBUDtBQUNEO0FBQ0RBLGVBQWFDLFVBQWIsR0FBMEIsS0FBMUI7QUFDQUQsZUFBYUUsT0FBYixHQUF1Qix5QkFBdkI7QUFDQSxTQUFPRixZQUFQO0FBQ0QsQ0F6QkQ7O1FBNEJFUixVLEdBQUFBLFU7UUFDQU0sVyxHQUFBQSxXIiwiZmlsZSI6IjIxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmNvbnN0IHJlc2V0TW9kZWwgPSAoc2VsZWN0T2JqKSA9PiB7XG4gIGxldCB6ZXJvTW9kZWwgPSB7IHJvd3M6W10gfTtcbiAgYW5ndWxhci5jb3B5KHplcm9Nb2RlbCwgc2VsZWN0T2JqKTtcbn07XG5cblxuY29uc3QgdmFsaWRPcHRpb24gPSAoc2VsZWN0T2JqLCBuZXdPcHRpb25UZXh0KSA9PiB7XG4gIGxldCBmdWxsUmVzcG9uc2UgPSB7XG4gICAgcmVzdWx0RmxhZyA6IGZhbHNlLFxuICAgIGRldGFpbHMgOiAnJ1xuICB9O1xuICBpZiAodHlwZW9mIG5ld09wdGlvblRleHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgZnVsbFJlc3BvbnNlLnJlc3VsdEZsYWcgPSBmYWxzZTtcbiAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyAgICA9ICdFbnRlcmVkIG9wdGlvbiBpcyBlbXB0eSc7XG4gICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcbiAgfVxuICBpZiAobmV3T3B0aW9uVGV4dCAhPT0gJycpIHtcbiAgICBmb3IgKHZhciBpID0gc2VsZWN0T2JqLnJvd3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChzZWxlY3RPYmoucm93c1tpXS5vcHRpb24gPT09IG5ld09wdGlvblRleHQpIHtcbiAgICAgICAgZnVsbFJlc3BvbnNlLnJlc3VsdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgZnVsbFJlc3BvbnNlLmRldGFpbHMgICAgPSAnRW50ZXJlZCBvcHRpb24gaXMgbm90IHVuaXF1ZSc7XG4gICAgICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bGxSZXNwb25zZS5yZXN1bHRGbGFnID0gdHJ1ZTtcbiAgICBmdWxsUmVzcG9uc2UuZGV0YWlscyA9ICcnO1xuICAgIHJldHVybiBmdWxsUmVzcG9uc2U7XG4gIH1cbiAgZnVsbFJlc3BvbnNlLnJlc3VsdEZsYWcgPSBmYWxzZTsgICAgIFxuICBmdWxsUmVzcG9uc2UuZGV0YWlscyA9ICdFbnRlcmVkIG9wdGlvbiBpcyBlbXB0eSc7XG4gIHJldHVybiBmdWxsUmVzcG9uc2U7XG59O1xuXG5leHBvcnQge1xuICByZXNldE1vZGVsLFxuICB2YWxpZE9wdGlvblxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvZWRhRHJhZ0Ryb3BXYXkubGVmdFBhbmVsLnNlbGVjdE9wdGlvbk1hbmFnZS5zZXJ2aWNlLmhlbHBlcnMuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 22 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/// \n/// \n\n/**\n * TODO :\n * - clean deprecated functions\n * - method 'resetAllTemporyModels' -> remove no use angular.copy to optimize\n */\n\nvar CONTROLLER_MODAL_PROXY = 'controllerModalProxy';\nvar INIT_OPTION_MODEL = { rows: [] };\n\nvar controllerModalProxy = function () {\n function controllerModalProxy(EasyFormGenFormlyBindingModels) {\n _classCallCheck(this, controllerModalProxy);\n\n this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels;\n this.init();\n }\n\n _createClass(controllerModalProxy, [{\n key: 'init',\n value: function init() {\n this.proxyModel = {};\n this.resetProxyModel();\n this.editPanelModel = {\n toggle: false,\n lineIndex: -1,\n columnIndex: -1,\n control: {}\n };\n this.basicSelectRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionBasicSelect = angular.copy({ saisie: '' });\n\n this.groupedSelectRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionGroupedSelect = angular.copy({ saisie: '' });\n this.GroupedSelectGroups = angular.copy({ list: [] });\n this.newGroupGroupedSelect = angular.copy({ saisie: '' });\n this.groupSelectGroupClick = angular.copy({ showList: false });\n\n this.radioRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionRadio = angular.copy({ saisie: '' });\n }\n\n // deprecated in drag and drop version, use initProxyModel insead\n\n }, {\n key: 'initNyaSelect',\n value: function initNyaSelect(nyaSelectObj) {\n return this.resetNyaSelect(nyaSelectObj);\n }\n }, {\n key: 'initProxyModel',\n value: function initProxyModel(thisProxyModelToInit) {\n return this.resetProxyModel(thisProxyModelToInit);\n }\n\n // deprecated : in drag and drop version, use \"resetProxyModel()\"\"\n\n }, {\n key: 'resetNyaSelect',\n value: function resetNyaSelect(nyaSelectObj) {\n var newNyaSelectObj = this.EasyFormGenFormlyBindingModels.getEasyFormListControls();\n angular.copy(newNyaSelectObj, nyaSelectObj);\n return true;\n }\n }, {\n key: 'resetProxyModel',\n value: function resetProxyModel() {\n var newProxyModel = this.EasyFormGenFormlyBindingModels.getEasyFormListControls();\n this.proxyModel = angular.copy(newProxyModel);\n return true;\n }\n }, {\n key: 'returnControlFromAddCtrlModalModel',\n value: function returnControlFromAddCtrlModalModel(CtrlModalModel) {\n var modelToReturn = {\n selectedControl: 'none',\n formlyType: 'none',\n formlySubtype: 'none',\n formlyLabel: '',\n formlyRequired: false,\n formlyDescription: '',\n formlyPlaceholder: '',\n formlyOptions: []\n };\n for (var i = CtrlModalModel.controls.length - 1; i >= 0; i--) {\n if (CtrlModalModel.selectedControl === CtrlModalModel.controls[i].id) {\n\n modelToReturn.selectedControl = CtrlModalModel.selectedControl;\n modelToReturn.formlyType = CtrlModalModel.controls[i].formlyType;\n modelToReturn.formlySubtype = CtrlModalModel.controls[i].formlySubtype;\n modelToReturn.formlyLabel = CtrlModalModel.controls[i].formlyLabel;\n modelToReturn.formlyRequired = CtrlModalModel.controls[i].formlyRequired;\n modelToReturn.formlyDescription = CtrlModalModel.controls[i].formlyDescription;\n modelToReturn.formlyPlaceholder = CtrlModalModel.controls[i].formlyPlaceholder;\n modelToReturn.formlyOptions = CtrlModalModel.controls[i].formlyOptions;\n // particular properties, here ; datetpicker format\n if (CtrlModalModel.controls[i].formlyType === 'datepicker') modelToReturn.datepickerPopup = CtrlModalModel.controls[i].datepickerPopup;\n }\n }\n return modelToReturn;\n }\n }, {\n key: 'validKeyUniqueness',\n value: function validKeyUniqueness(thisKey, configurationObj) {\n var isUnique = true;\n for (var i = configurationObj.lines.length - 1; i >= 0; i--) {\n for (var j = configurationObj.lines[i].columns.length - 1; j >= 0; j--) {\n if (configurationObj.lines[i].columns[j].control.key === thisKey) {\n isUnique = false;\n }\n }\n }\n return isUnique;\n }\n }, {\n key: 'getSelectedProxyModel',\n value: function getSelectedProxyModel(configurationSelectedCtrl) {\n var selectedProxyModelControl = 'none';\n var listProxyModelCTRL = angular.copy(this.EasyFormGenFormlyBindingModels.getEasyFormListControls().controls);\n\n listProxyModelCTRL.forEach(function (control) {\n if (control.formlyType === configurationSelectedCtrl.type && control.formlySubtype === configurationSelectedCtrl.subtype) {\n selectedProxyModelControl = control.id;\n return selectedProxyModelControl;\n }\n });\n return selectedProxyModelControl;\n }\n\n // to refresh configuration model from edit panel\n\n }, {\n key: 'bindConfigurationModelFromProxyModel',\n value: function bindConfigurationModelFromProxyModel(indexLine, numcolumn, configurationObj) {\n var extractedProps = angular.copy(this.proxyModel.temporyConfig);\n\n configurationObj.lines[indexLine].columns[numcolumn].control.selectedControl = extractedProps.selectedControl;\n configurationObj.lines[indexLine].columns[numcolumn].control.type = extractedProps.formlyType;\n configurationObj.lines[indexLine].columns[numcolumn].control.subtype = extractedProps.formlySubtype;\n // templateOptions\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions = {\n label: '',\n required: false,\n description: '',\n placeholder: '',\n options: []\n };\n // then bind template option\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label = extractedProps.formlyLabel;\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required = extractedProps.formlyRequired;\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description = extractedProps.formlyDescription;\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder = extractedProps.formlyPlaceholder;\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options = extractedProps.formlyOptions;\n // add additionnal — particular — properties : -> datepicker : datepickerPopup\n if (configurationObj.lines[indexLine].columns[numcolumn].control.type === 'datepicker') {\n configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup = extractedProps.datepickerPopup;\n }\n // unique key (set only first time) in this model is formly control type + Date.now();\n var newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now();\n\n if (this.validKeyUniqueness(newKey, configurationObj) === true) {\n configurationObj.lines[indexLine].columns[numcolumn].control.key = newKey;\n } else {\n newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now();\n if (this.validKeyUniqueness(newKey, configurationObj) === true) {\n configurationObj.lines[indexLine].columns[numcolumn].control.key = newKey;\n } else {\n newKey = configurationObj.lines[indexLine].columns[numcolumn].control.type + '-' + Date.now();\n }\n }\n configurationObj.lines[indexLine].columns[numcolumn].control.edited = true;\n }\n\n /**\n * set local proxyModel from Selected control in configuration model\n *\n * replace deprecated \"getNyASelectFromSelectedLineColumn\"\n * -model is now named \"proxyModel\"\n * -model is stored in this service\n *\n * -> it has just more sence!\n */\n\n }, {\n key: 'setProxyModelFromConfigurationSelection',\n value: function setProxyModelFromConfigurationSelection(configurationObj, indexLine, numcolumn) {\n // data send to modal controller\n if (typeof configurationObj.lines[indexLine].columns[numcolumn].control != 'undefined') {\n // determine selected control from indexes and control.type and control.subtype in configuration model\n this.proxyModel.selectedControl = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? this.getSelectedProxyModel(configurationObj.lines[indexLine].columns[numcolumn].control) : 'none';\n this.proxyModel.temporyConfig.selectedControl = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? this.getSelectedProxyModel(configurationObj.lines[indexLine].columns[numcolumn].control) : 'none';\n this.proxyModel.temporyConfig.formlyType = typeof configurationObj.lines[indexLine].columns[numcolumn].control.type != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.type : 'none';\n this.proxyModel.temporyConfig.formlySubtype = typeof configurationObj.lines[indexLine].columns[numcolumn].control.subtype != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.subtype : 'none';\n this.proxyModel.temporyConfig.formlyLabel = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.label : '';\n this.proxyModel.temporyConfig.formlyRequired = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.required : '';\n this.proxyModel.temporyConfig.formlyDescription = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.description : '';\n this.proxyModel.temporyConfig.formlyPlaceholder = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.placeholder : '';\n this.proxyModel.temporyConfig.formlyOptions = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.options : '';\n // particular case : datepicker\n if (this.proxyModel.temporyConfig.selectedControl === 'Date') {\n this.proxyModel.temporyConfig.datepickerPopup = typeof configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup != 'undefined' ? configurationObj.lines[indexLine].columns[numcolumn].control.templateOptions.datepickerPopup : '';\n }\n // console.info('debug setProxyModelFromConfigurationSelection');\n // console.dir({\n // selectedControl : angular.copy(this.proxyModel.selectedControl ),\n // temporyConfig : angular.copy(this.proxyModel.temporyConfig)\n // });\n }\n return this.proxyModel;\n }\n }, {\n key: 'getProxyModel',\n value: function getProxyModel() {\n return this.proxyModel;\n }\n\n /**\n * ============================================================\n * following methods for \"editPanelModel\"\n *\n * Note this model :\n * - to manage side edit control panel\n * ============================================================\n */\n\n // getter : editPanelModel (whole model => type = object)\n\n }, {\n key: 'getEditPanelModelAllModel',\n value: function getEditPanelModelAllModel() {\n return this.editPanelModel;\n }\n\n // setter : editPanelModel (whole model => type = object)\n\n }, {\n key: 'setEditPanelModelControl',\n value: function setEditPanelModelControl(newEditPanelModel) {\n var successfullDone = false;\n if (typeof newEditPanelModel !== 'undefined') {\n angular.merge(this.editPanelModel, newEditPanelModel);\n successfullDone = true;\n }\n return successfullDone;\n }\n\n // getter : editPanelModel.columnIndex\n\n }, {\n key: 'getEditPanelModelColumnIndex',\n value: function getEditPanelModelColumnIndex() {\n return this.editPanelModel.columnIndex;\n }\n\n // setter : editPanelModel.columnIndex\n\n }, {\n key: 'setEditPanelModelColumnIndex',\n value: function setEditPanelModelColumnIndex(newColumnIndex) {\n var successfullDone = false;\n if (typeof newColumnIndex !== 'undefined') {\n this.editPanelModel.columnIndex = newColumnIndex;\n successfullDone = true;\n }\n return successfullDone;\n }\n\n // getter : editPanelModel.lineIndex\n\n }, {\n key: 'getEditPanelModelLineIndex',\n value: function getEditPanelModelLineIndex() {\n return this.editPanelModel.lineIndex;\n }\n\n // setter : editPanelModel.lineIndex\n\n }, {\n key: 'setEditPanelModelLineIndex',\n value: function setEditPanelModelLineIndex(newLineIndex) {\n var successfullDone = false;\n if (typeof newLineIndex !== 'undefined') {\n this.editPanelModel.lineIndex = newLineIndex;\n successfullDone = true;\n }\n return successfullDone;\n }\n\n // getter : editPanelModel.control\n\n }, {\n key: 'getEditPanelModelControl',\n value: function getEditPanelModelControl() {\n return this.editPanelModel.control;\n }\n\n // getter : editPanelModel.toggle\n\n }, {\n key: 'getEditPanelModelToggle',\n value: function getEditPanelModelToggle() {\n return this.editPanelModel.toggle;\n }\n\n // setter : editPanelModel.toggle\n\n }, {\n key: 'setEditPanelModelToggle',\n value: function setEditPanelModelToggle(newToggleValue) {\n var successfullDone = false;\n if (typeof newToggleValue !== 'undefined') {\n this.editPanelModel.toggle = newToggleValue;\n successfullDone = true;\n }\n return successfullDone;\n }\n }, {\n key: 'resetAllTemporyModels',\n value: function resetAllTemporyModels() {\n this.basicSelectRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionBasicSelect = angular.copy({ saisie: '' });\n\n this.groupedSelectRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionGroupedSelect = angular.copy({ saisie: '' });\n this.GroupedSelectGroups = angular.copy({ list: [] });\n this.newGroupGroupedSelect = angular.copy({ saisie: '' });\n this.groupSelectGroupClick = angular.copy({ showList: false });\n\n this.radioRowCollection = angular.copy(INIT_OPTION_MODEL);\n this.newOptionRadio = angular.copy({ saisie: '' });\n return true;\n }\n\n /**\n * bindSpecialCtrlTemporyModelsToProxyModel: needed when validating after editing a control\n * tempory models applied to proxyModel if control is one of these\n *\n * example : if selected control is a basic select options\n * -> so its tempory models are bound to proxyModel\n */\n\n }, {\n key: 'bindSpecialCtrlTemporyModelsToProxyModel',\n value: function bindSpecialCtrlTemporyModelsToProxyModel() {\n if (this.proxyModel.selectedControl === 'BasicSelect') {\n this.bindBasicSelectToProxyModel(this.basicSelectRowCollection);\n }\n if (this.proxyModel.selectedControl === 'GroupedSelect') {\n this.bindGroupedSelectToProxyModel(this.groupedSelectRowCollection);\n }\n if (this.proxyModel.selectedControl === 'Radio') {\n this.bindRadioToProxyModel(this.radioRowCollection);\n }\n }\n\n // basic select\n\n }, {\n key: 'bindBasicSelectFromProxyModel',\n value: function bindBasicSelectFromProxyModel(basicSelectRowCollection) {\n if (this.proxyModel.temporyConfig.formlyOptions.length > 0) {\n for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) {\n var newOption = {\n 'option': this.proxyModel.temporyConfig.formlyOptions[i].name,\n 'order': i,\n 'group': ''\n };\n basicSelectRowCollection.rows.push(newOption);\n }\n }\n }\n }, {\n key: 'bindBasicSelectToProxyModel',\n value: function bindBasicSelectToProxyModel(basicSelectRowCollection) {\n var resetNyASelectOptions = [];\n this.proxyModel.temporyConfig.formlyOptions = resetNyASelectOptions;\n if (basicSelectRowCollection.rows.length > 0) {\n for (var i = 0; i <= basicSelectRowCollection.rows.length - 1; i++) {\n var newOption = {\n 'name': basicSelectRowCollection.rows[i].option,\n 'value': i,\n 'group': ''\n };\n this.proxyModel.temporyConfig.formlyOptions.push(newOption);\n }\n }\n }\n\n //* grouped select\n\n }, {\n key: 'bindGroupedSelectFromProxyModel',\n value: function bindGroupedSelectFromProxyModel(groupedSelectRowCollection, GroupedSelectGroups) {\n if (this.proxyModel.temporyConfig.formlyOptions.length > 0) {\n for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) {\n var newOption = {\n 'option': this.proxyModel.temporyConfig.formlyOptions[i].name,\n 'order': i,\n 'group': this.proxyModel.temporyConfig.formlyOptions[i].group\n };\n groupedSelectRowCollection.rows.push(newOption);\n }\n //grouplist : thx to lodash it is easy\n var filteredgroup = _.uniq(_.pluck(groupedSelectRowCollection.rows, 'group'));\n angular.copy(filteredgroup, GroupedSelectGroups.list);\n }\n }\n }, {\n key: 'bindGroupedSelectToProxyModel',\n value: function bindGroupedSelectToProxyModel(groupedSelectRowCollection) {\n this.proxyModel.temporyConfig.formlyOptions = [];\n for (var i = 0; i <= groupedSelectRowCollection.rows.length - 1; i++) {\n var newOption = {\n 'name': groupedSelectRowCollection.rows[i].option,\n 'value': i,\n 'group': groupedSelectRowCollection.rows[i].group\n };\n this.proxyModel.temporyConfig.formlyOptions.push(newOption);\n }\n }\n\n // radio\n\n }, {\n key: 'bindRadioFromProxyModel',\n value: function bindRadioFromProxyModel(radioRowCollection) {\n if (this.proxyModel.temporyConfig.formlyOptions.length > 0) {\n for (var i = 0; i <= this.proxyModel.temporyConfig.formlyOptions.length - 1; i++) {\n var newOption = {\n 'option': this.proxyModel.temporyConfig.formlyOptions[i].name,\n 'order': i,\n 'group': ''\n };\n radioRowCollection.rows.push(newOption);\n }\n }\n }\n }, {\n key: 'bindRadioToProxyModel',\n value: function bindRadioToProxyModel(radioRowCollection) {\n var resetproxyModelOptions = [];\n this.proxyModel.temporyConfig.formlyOptions = resetproxyModelOptions;\n if (radioRowCollection.rows.length > 0) {\n for (var i = 0; i <= radioRowCollection.rows.length - 1; i++) {\n var newOption = {\n 'name': radioRowCollection.rows[i].option,\n 'value': i,\n 'group': ''\n };\n this.proxyModel.temporyConfig.formlyOptions.push(newOption);\n }\n }\n }\n }]);\n\n return controllerModalProxy;\n}();\n\ncontrollerModalProxy.$inject = ['EasyFormGenFormlyBindingModels'];\n\nexports.default = controllerModalProxy;\nexports.CONTROLLER_MODAL_PROXY = CONTROLLER_MODAL_PROXY;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL2VkYURyYWdEcm9wV2F5LmxlZnRQYW5lbC5jb250cm9sbGVyTW9kYWxQcm94eS5zZXJ2aWNlLmpzP2UwMzEiXSwibmFtZXMiOlsiQ09OVFJPTExFUl9NT0RBTF9QUk9YWSIsIklOSVRfT1BUSU9OX01PREVMIiwicm93cyIsImNvbnRyb2xsZXJNb2RhbFByb3h5IiwiRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzIiwiaW5pdCIsInByb3h5TW9kZWwiLCJyZXNldFByb3h5TW9kZWwiLCJlZGl0UGFuZWxNb2RlbCIsInRvZ2dsZSIsImxpbmVJbmRleCIsImNvbHVtbkluZGV4IiwiY29udHJvbCIsImJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiIsImFuZ3VsYXIiLCJjb3B5IiwibmV3T3B0aW9uQmFzaWNTZWxlY3QiLCJzYWlzaWUiLCJncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbiIsIm5ld09wdGlvbkdyb3VwZWRTZWxlY3QiLCJHcm91cGVkU2VsZWN0R3JvdXBzIiwibGlzdCIsIm5ld0dyb3VwR3JvdXBlZFNlbGVjdCIsImdyb3VwU2VsZWN0R3JvdXBDbGljayIsInNob3dMaXN0IiwicmFkaW9Sb3dDb2xsZWN0aW9uIiwibmV3T3B0aW9uUmFkaW8iLCJueWFTZWxlY3RPYmoiLCJyZXNldE55YVNlbGVjdCIsInRoaXNQcm94eU1vZGVsVG9Jbml0IiwibmV3TnlhU2VsZWN0T2JqIiwiZ2V0RWFzeUZvcm1MaXN0Q29udHJvbHMiLCJuZXdQcm94eU1vZGVsIiwiQ3RybE1vZGFsTW9kZWwiLCJtb2RlbFRvUmV0dXJuIiwic2VsZWN0ZWRDb250cm9sIiwiZm9ybWx5VHlwZSIsImZvcm1seVN1YnR5cGUiLCJmb3JtbHlMYWJlbCIsImZvcm1seVJlcXVpcmVkIiwiZm9ybWx5RGVzY3JpcHRpb24iLCJmb3JtbHlQbGFjZWhvbGRlciIsImZvcm1seU9wdGlvbnMiLCJpIiwiY29udHJvbHMiLCJsZW5ndGgiLCJpZCIsImRhdGVwaWNrZXJQb3B1cCIsInRoaXNLZXkiLCJjb25maWd1cmF0aW9uT2JqIiwiaXNVbmlxdWUiLCJsaW5lcyIsImoiLCJjb2x1bW5zIiwia2V5IiwiY29uZmlndXJhdGlvblNlbGVjdGVkQ3RybCIsInNlbGVjdGVkUHJveHlNb2RlbENvbnRyb2wiLCJsaXN0UHJveHlNb2RlbENUUkwiLCJmb3JFYWNoIiwidHlwZSIsInN1YnR5cGUiLCJpbmRleExpbmUiLCJudW1jb2x1bW4iLCJleHRyYWN0ZWRQcm9wcyIsInRlbXBvcnlDb25maWciLCJ0ZW1wbGF0ZU9wdGlvbnMiLCJsYWJlbCIsInJlcXVpcmVkIiwiZGVzY3JpcHRpb24iLCJwbGFjZWhvbGRlciIsIm9wdGlvbnMiLCJuZXdLZXkiLCJEYXRlIiwibm93IiwidmFsaWRLZXlVbmlxdWVuZXNzIiwiZWRpdGVkIiwiZ2V0U2VsZWN0ZWRQcm94eU1vZGVsIiwibmV3RWRpdFBhbmVsTW9kZWwiLCJzdWNjZXNzZnVsbERvbmUiLCJtZXJnZSIsIm5ld0NvbHVtbkluZGV4IiwibmV3TGluZUluZGV4IiwibmV3VG9nZ2xlVmFsdWUiLCJiaW5kQmFzaWNTZWxlY3RUb1Byb3h5TW9kZWwiLCJiaW5kR3JvdXBlZFNlbGVjdFRvUHJveHlNb2RlbCIsImJpbmRSYWRpb1RvUHJveHlNb2RlbCIsIm5ld09wdGlvbiIsIm5hbWUiLCJwdXNoIiwicmVzZXROeUFTZWxlY3RPcHRpb25zIiwib3B0aW9uIiwiZ3JvdXAiLCJmaWx0ZXJlZGdyb3VwIiwiXyIsInVuaXEiLCJwbHVjayIsInJlc2V0cHJveHlNb2RlbE9wdGlvbnMiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTs7QUFFQTs7Ozs7O0FBTUEsSUFBTUEseUJBQTBCLHNCQUFoQztBQUNBLElBQU1DLG9CQUEwQixFQUFFQyxNQUFPLEVBQVQsRUFBaEM7O0lBRU1DLG9CO0FBRUosZ0NBQVlDLDhCQUFaLEVBQTJDO0FBQUE7O0FBQ3pDLFNB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QixJQUFuQixDQUF3QnNGLElBQXhCLENBQTZCRixTQUE3QjtBQUNIO0FBQ0Y7QUFDSDs7OzBDQUVzQjdELGtCLEVBQW1CO0FBQ3ZDLFVBQUl1RSx5QkFBeUIsRUFBN0I7QUFDQSxXQUFLMUYsVUFBTCxDQUFnQjBELGFBQWhCLENBQThCdEIsYUFBOUIsR0FBOENzRCxzQkFBOUM7QUFDQSxVQUFJdkUsbUJBQW1CdkIsSUFBbkIsQ0FBd0IyQyxNQUF4QixHQUFpQyxDQUFyQyxFQUF3QztBQUN0QyxhQUFLLElBQUlGLElBQUksQ0FBYixFQUFnQkEsS0FBS2xCLG1CQUFtQnZCLElBQW5CLENBQXdCMkMsTUFBeEIsR0FBaUMsQ0FBdEQsRUFBeURGLEdBQXpELEVBQTZEO0FBQzNELGNBQUkyQyxZQUFZO0FBQ2Qsb0JBQVU3RCxtQkFBbUJ2QixJQUFuQixDQUF3QnlDLENBQXhCLEVBQTJCK0MsTUFEdkI7QUFFZCxxQkFBVy9DLENBRkc7QUFHZCxxQkFBVztBQUhHLFdBQWhCO0FBS0EsZUFBS3JDLFVBQUwsQ0FBZ0IwRCxhQUFoQixDQUE4QnRCLGFBQTlCLENBQTRDOEMsSUFBNUMsQ0FBaURGLFNBQWpEO0FBQ0Q7QUFDRjtBQUNGOzs7Ozs7QUFRSG5GLHFCQUFxQjhGLE9BQXJCLEdBQStCLENBQzdCLGdDQUQ2QixDQUEvQjs7a0JBSWU5RixvQjtRQUdiSCxzQixHQUFBQSxzQiIsImZpbGUiOiIyMi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi8uLi8uLi8uLi90eXBpbmdzL2FuZ3VsYXJqcy9hbmd1bGFyLmQudHNcIiAvPlxuLy8vIDxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uLy4uLy4uLy4uL3R5cGluZ3MvbG9kYXNoL2xvZGFzaC5kLnRzXCIgLz5cblxuLyoqXG4gKiBUT0RPIDpcbiAqIC0gY2xlYW4gZGVwcmVjYXRlZCBmdW5jdGlvbnNcbiAqIC0gbWV0aG9kICdyZXNldEFsbFRlbXBvcnlNb2RlbHMnIC0+IHJlbW92ZSBubyB1c2UgYW5ndWxhci5jb3B5IHRvIG9wdGltaXplXG4gKi9cblxuY29uc3QgQ09OVFJPTExFUl9NT0RBTF9QUk9YWSAgPSAnY29udHJvbGxlck1vZGFsUHJveHknO1xuY29uc3QgSU5JVF9PUFRJT05fTU9ERUwgICAgICAgPSB7IHJvd3MgOiBbXSB9O1xuXG5jbGFzcyBjb250cm9sbGVyTW9kYWxQcm94eXtcblxuICBjb25zdHJ1Y3RvcihFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMpe1xuICAgIHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzID0gRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgaW5pdCgpe1xuICAgIHRoaXMucHJveHlNb2RlbCAgICAgPSB7fTtcbiAgICB0aGlzLnJlc2V0UHJveHlNb2RlbCgpO1xuICAgIHRoaXMuZWRpdFBhbmVsTW9kZWwgPSB7XG4gICAgICB0b2dnbGUgICAgICA6IGZhbHNlLFxuICAgICAgbGluZUluZGV4ICAgOiAtMSxcbiAgICAgIGNvbHVtbkluZGV4IDogLTEsXG4gICAgICBjb250cm9sICAgICA6IHt9XG4gICAgfTtcbiAgICB0aGlzLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiAgID0gYW5ndWxhci5jb3B5KElOSVRfT1BUSU9OX01PREVMKTtcblx0XHR0aGlzLm5ld09wdGlvbkJhc2ljU2VsZWN0IFx0XHRcdD0gYW5ndWxhci5jb3B5KHsgc2Fpc2llOiAnJyB9KTtcblxuXHRcdHRoaXMuZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24gPSBhbmd1bGFyLmNvcHkoSU5JVF9PUFRJT05fTU9ERUwpO1xuXHRcdHRoaXMubmV3T3B0aW9uR3JvdXBlZFNlbGVjdCBcdFx0PSBhbmd1bGFyLmNvcHkoeyBzYWlzaWU6ICcnIH0pO1xuXHRcdHRoaXMuR3JvdXBlZFNlbGVjdEdyb3VwcyBcdFx0XHRcdD0gYW5ndWxhci5jb3B5KHsgbGlzdDpbXSB9KTtcblx0XHR0aGlzLm5ld0dyb3VwR3JvdXBlZFNlbGVjdCBcdFx0XHQ9IGFuZ3VsYXIuY29weSh7IHNhaXNpZTogJycgfSk7XG5cdFx0dGhpcy5ncm91cFNlbGVjdEdyb3VwQ2xpY2sgXHRcdFx0PSBhbmd1bGFyLmNvcHkoeyBzaG93TGlzdCA6IGZhbHNlIH0pO1xuXG5cdFx0dGhpcy5yYWRpb1Jvd0NvbGxlY3Rpb24gXHRcdFx0XHQ9IGFuZ3VsYXIuY29weShJTklUX09QVElPTl9NT0RFTCk7XG5cdFx0dGhpcy5uZXdPcHRpb25SYWRpbyBcdFx0XHRcdFx0XHQ9IGFuZ3VsYXIuY29weSh7IHNhaXNpZTogJycgfSk7XG4gIH1cblxuXG4gIC8vIGRlcHJlY2F0ZWQgaW4gZHJhZyBhbmQgZHJvcCB2ZXJzaW9uLCB1c2UgaW5pdFByb3h5TW9kZWwgaW5zZWFkXG4gIGluaXROeWFTZWxlY3QobnlhU2VsZWN0T2JqKXtcbiAgICByZXR1cm4gdGhpcy5yZXNldE55YVNlbGVjdChueWFTZWxlY3RPYmopO1xuICB9XG5cblxuICBpbml0UHJveHlNb2RlbCh0aGlzUHJveHlNb2RlbFRvSW5pdCl7XG4gICAgcmV0dXJuIHRoaXMucmVzZXRQcm94eU1vZGVsKHRoaXNQcm94eU1vZGVsVG9Jbml0KTtcbiAgfVxuXG5cbiAgLy8gZGVwcmVjYXRlZCA6IGluIGRyYWcgYW5kIGRyb3AgdmVyc2lvbiwgdXNlIFwicmVzZXRQcm94eU1vZGVsKClcIlwiXG4gIHJlc2V0TnlhU2VsZWN0KG55YVNlbGVjdE9iail7XG4gICAgbGV0IG5ld055YVNlbGVjdE9iaiA9IHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLmdldEVhc3lGb3JtTGlzdENvbnRyb2xzKCk7XG4gICAgYW5ndWxhci5jb3B5KG5ld055YVNlbGVjdE9iaiwgbnlhU2VsZWN0T2JqKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgcmVzZXRQcm94eU1vZGVsKCl7XG4gICAgbGV0IG5ld1Byb3h5TW9kZWwgPSB0aGlzLkVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscy5nZXRFYXN5Rm9ybUxpc3RDb250cm9scygpO1xuICAgIHRoaXMucHJveHlNb2RlbCA9IGFuZ3VsYXIuY29weShuZXdQcm94eU1vZGVsKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgcmV0dXJuQ29udHJvbEZyb21BZGRDdHJsTW9kYWxNb2RlbChDdHJsTW9kYWxNb2RlbCl7XG4gICAgbGV0IG1vZGVsVG9SZXR1cm4gPSB7XG4gICAgICAgICAgc2VsZWN0ZWRDb250cm9sXHRcdDogJ25vbmUnLFxuICAgICAgICAgIGZvcm1seVR5cGUgXHRcdFx0XHQ6ICdub25lJyxcbiAgICAgICAgICBmb3JtbHlTdWJ0eXBlXHRcdFx0OiAnbm9uZScsXG4gICAgICAgICAgZm9ybWx5TGFiZWxcdFx0XHRcdDogJycsXG4gICAgICAgICAgZm9ybWx5UmVxdWlyZWQgXHRcdDogZmFsc2UsXG4gICAgICAgICAgZm9ybWx5RGVzY3JpcHRpb25cdDogJycsXG4gICAgICAgICAgZm9ybWx5UGxhY2Vob2xkZXJcdDogJycsXG4gICAgICAgICAgZm9ybWx5T3B0aW9uc1x0XHRcdDogW11cbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSBDdHJsTW9kYWxNb2RlbC5jb250cm9scy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKEN0cmxNb2RhbE1vZGVsLnNlbGVjdGVkQ29udHJvbCA9PT0gQ3RybE1vZGFsTW9kZWwuY29udHJvbHNbaV0uaWQpIHtcblxuICAgICAgICBtb2RlbFRvUmV0dXJuLnNlbGVjdGVkQ29udHJvbCBcdD0gQ3RybE1vZGFsTW9kZWwuc2VsZWN0ZWRDb250cm9sO1xuICAgICAgICBtb2RlbFRvUmV0dXJuLmZvcm1seVR5cGUgXHRcdFx0XHQ9IEN0cmxNb2RhbE1vZGVsLmNvbnRyb2xzW2ldLmZvcm1seVR5cGU7XG4gICAgICAgIG1vZGVsVG9SZXR1cm4uZm9ybWx5U3VidHlwZSBcdFx0PSBDdHJsTW9kYWxNb2RlbC5jb250cm9sc1tpXS5mb3JtbHlTdWJ0eXBlO1xuICAgICAgICBtb2RlbFRvUmV0dXJuLmZvcm1seUxhYmVsIFx0XHRcdD0gQ3RybE1vZGFsTW9kZWwuY29udHJvbHNbaV0uZm9ybWx5TGFiZWw7XG4gICAgICAgIG1vZGVsVG9SZXR1cm4uZm9ybWx5UmVxdWlyZWQgXHRcdD0gQ3RybE1vZGFsTW9kZWwuY29udHJvbHNbaV0uZm9ybWx5UmVxdWlyZWQ7XG4gICAgICAgIG1vZGVsVG9SZXR1cm4uZm9ybWx5RGVzY3JpcHRpb24gXHQ9IEN0cmxNb2RhbE1vZGVsLmNvbnRyb2xzW2ldLmZvcm1seURlc2NyaXB0aW9uO1xuICAgICAgICBtb2RlbFRvUmV0dXJuLmZvcm1seVBsYWNlaG9sZGVyID0gQ3RybE1vZGFsTW9kZWwuY29udHJvbHNbaV0uZm9ybWx5UGxhY2Vob2xkZXI7XG4gICAgICAgIG1vZGVsVG9SZXR1cm4uZm9ybWx5T3B0aW9ucyBcdFx0PSBDdHJsTW9kYWxNb2RlbC5jb250cm9sc1tpXS5mb3JtbHlPcHRpb25zO1xuICAgICAgICAvLyBwYXJ0aWN1bGFyIHByb3BlcnRpZXMsIGhlcmUgOyBkYXRldHBpY2tlciBmb3JtYXRcbiAgICAgICAgaWYgKEN0cmxNb2RhbE1vZGVsLmNvbnRyb2xzW2ldLmZvcm1seVR5cGUgPT09ICdkYXRlcGlja2VyJykgbW9kZWxUb1JldHVybi5kYXRlcGlja2VyUG9wdXAgPSBDdHJsTW9kYWxNb2RlbC5jb250cm9sc1tpXS5kYXRlcGlja2VyUG9wdXA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtb2RlbFRvUmV0dXJuO1xuICB9XG5cblxuICB2YWxpZEtleVVuaXF1ZW5lc3ModGhpc0tleSwgY29uZmlndXJhdGlvbk9iail7XG4gICAgbGV0IGlzVW5pcXVlID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gY29uZmlndXJhdGlvbk9iai5saW5lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZm9yIChsZXQgaiA9IGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaV0uY29sdW1ucy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbk9iai5saW5lc1tpXS5jb2x1bW5zW2pdLmNvbnRyb2wua2V5ID09PSB0aGlzS2V5KSB7XG4gICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaXNVbmlxdWU7XG4gIH1cblxuXG4gIGdldFNlbGVjdGVkUHJveHlNb2RlbChjb25maWd1cmF0aW9uU2VsZWN0ZWRDdHJsKXtcbiAgICB2YXIgc2VsZWN0ZWRQcm94eU1vZGVsQ29udHJvbCA9ICdub25lJztcbiAgICB2YXIgbGlzdFByb3h5TW9kZWxDVFJMICAgICAgICA9IGFuZ3VsYXIuY29weSh0aGlzLkVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscy5nZXRFYXN5Rm9ybUxpc3RDb250cm9scygpLmNvbnRyb2xzKTtcblxuICAgIGxpc3RQcm94eU1vZGVsQ1RSTC5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRyb2wpe1xuICAgICAgaWYgKGNvbnRyb2wuZm9ybWx5VHlwZSBcdFx0PT09IGNvbmZpZ3VyYXRpb25TZWxlY3RlZEN0cmwudHlwZSAmJlxuICAgICAgICAgIGNvbnRyb2wuZm9ybWx5U3VidHlwZSA9PT0gY29uZmlndXJhdGlvblNlbGVjdGVkQ3RybC5zdWJ0eXBlKSB7XG4gICAgICAgIHNlbGVjdGVkUHJveHlNb2RlbENvbnRyb2wgPSBjb250cm9sLmlkO1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRQcm94eU1vZGVsQ29udHJvbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc2VsZWN0ZWRQcm94eU1vZGVsQ29udHJvbDtcbiAgfVxuXG5cbiAgLy8gdG8gcmVmcmVzaCBjb25maWd1cmF0aW9uIG1vZGVsIGZyb20gZWRpdCBwYW5lbFxuICBiaW5kQ29uZmlndXJhdGlvbk1vZGVsRnJvbVByb3h5TW9kZWwoaW5kZXhMaW5lLCBudW1jb2x1bW4sIGNvbmZpZ3VyYXRpb25PYmope1xuICAgIGxldCBleHRyYWN0ZWRQcm9wcyA9IGFuZ3VsYXIuY29weSh0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZyk7XG5cbiAgICBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wuc2VsZWN0ZWRDb250cm9sIFx0PSBleHRyYWN0ZWRQcm9wcy5zZWxlY3RlZENvbnRyb2w7XG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnR5cGUgXHRcdFx0XHRcdFx0PSBleHRyYWN0ZWRQcm9wcy5mb3JtbHlUeXBlO1xuICAgIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC5zdWJ0eXBlIFx0XHRcdFx0XHQ9IGV4dHJhY3RlZFByb3BzLmZvcm1seVN1YnR5cGU7XG4gICAgLy8gdGVtcGxhdGVPcHRpb25zXG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnRlbXBsYXRlT3B0aW9ucyA9IHtcbiAgICAgIGxhYmVsXHRcdFx0XHQ6ICcnLFxuICAgICAgcmVxdWlyZWRcdFx0OiBmYWxzZSxcbiAgICAgIGRlc2NyaXB0aW9uXHQ6ICcnLFxuICAgICAgcGxhY2Vob2xkZXJcdDogJycsXG4gICAgICBvcHRpb25zXHRcdFx0OiBbXVxuICAgIH07XG4gICAgLy8gdGhlbiBiaW5kIHRlbXBsYXRlIG9wdGlvblxuICAgIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMubGFiZWwgXHRcdFx0XHQ9IGV4dHJhY3RlZFByb3BzLmZvcm1seUxhYmVsO1xuICAgIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQgXHRcdD0gZXh0cmFjdGVkUHJvcHMuZm9ybWx5UmVxdWlyZWQ7XG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbiBcdD0gZXh0cmFjdGVkUHJvcHMuZm9ybWx5RGVzY3JpcHRpb247XG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlciBcdD0gZXh0cmFjdGVkUHJvcHMuZm9ybWx5UGxhY2Vob2xkZXI7XG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnRlbXBsYXRlT3B0aW9ucy5vcHRpb25zIFx0XHRcdD0gZXh0cmFjdGVkUHJvcHMuZm9ybWx5T3B0aW9ucztcbiAgICAvLyBhZGQgYWRkaXRpb25uYWwg4oCUIHBhcnRpY3VsYXIg4oCUIHByb3BlcnRpZXMgOiAtPiBkYXRlcGlja2VyIDogZGF0ZXBpY2tlclBvcHVwXG4gICAgaWYgKGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50eXBlID09PSAnZGF0ZXBpY2tlcicpIHtcbiAgICAgIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMuZGF0ZXBpY2tlclBvcHVwID0gZXh0cmFjdGVkUHJvcHMuZGF0ZXBpY2tlclBvcHVwO1xuICAgIH1cbiAgICAvLyB1bmlxdWUga2V5IChzZXQgb25seSBmaXJzdCB0aW1lKSBpbiB0aGlzIG1vZGVsIGlzIGZvcm1seSBjb250cm9sIHR5cGUgKyBEYXRlLm5vdygpO1xuICAgIGxldCBuZXdLZXkgPSBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudHlwZSArICctJyArIERhdGUubm93KCk7XG5cbiAgICBpZiAodGhpcy52YWxpZEtleVVuaXF1ZW5lc3MobmV3S2V5LCBjb25maWd1cmF0aW9uT2JqKSA9PT0gdHJ1ZSl7XG4gICAgICBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wua2V5ID0gbmV3S2V5O1xuICAgIH1lbHNle1xuICAgICAgbmV3S2V5ID0gY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnR5cGUgKyAnLScgKyBEYXRlLm5vdygpO1xuICAgICAgaWYgKHRoaXMudmFsaWRLZXlVbmlxdWVuZXNzKG5ld0tleSwgY29uZmlndXJhdGlvbk9iaikgPT09IHRydWUpe1xuICAgICAgICBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wua2V5ID0gbmV3S2V5O1xuICAgICAgfWVsc2V7XG4gICAgICAgIG5ld0tleSA9IGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50eXBlICsgJy0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLmVkaXRlZCA9IHRydWU7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBzZXQgbG9jYWwgcHJveHlNb2RlbCBmcm9tIFNlbGVjdGVkIGNvbnRyb2wgaW4gY29uZmlndXJhdGlvbiBtb2RlbFxuICAgKlxuICAgKiByZXBsYWNlIGRlcHJlY2F0ZWQgXCJnZXROeUFTZWxlY3RGcm9tU2VsZWN0ZWRMaW5lQ29sdW1uXCJcbiAgICogLW1vZGVsIGlzIG5vdyBuYW1lZCBcInByb3h5TW9kZWxcIlxuICAgKiAtbW9kZWwgaXMgc3RvcmVkIGluIHRoaXMgc2VydmljZVxuICAgKlxuICAgKiAtPiBpdCBoYXMganVzdCBtb3JlIHNlbmNlIVxuICAgKi9cbiAgc2V0UHJveHlNb2RlbEZyb21Db25maWd1cmF0aW9uU2VsZWN0aW9uKGNvbmZpZ3VyYXRpb25PYmosIGluZGV4TGluZSwgbnVtY29sdW1uKXtcbiAgICAvLyBkYXRhIHNlbmQgdG8gbW9kYWwgY29udHJvbGxlclxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sICE9ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBkZXRlcm1pbmUgc2VsZWN0ZWQgY29udHJvbCBmcm9tIGluZGV4ZXMgYW5kIGNvbnRyb2wudHlwZSBhbmQgY29udHJvbC5zdWJ0eXBlIGluIGNvbmZpZ3VyYXRpb24gbW9kZWxcbiAgICAgIHRoaXMucHJveHlNb2RlbC5zZWxlY3RlZENvbnRyb2wgXHRcdFx0XHRcdFx0XHRcdFx0PSB0eXBlb2YgY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnR5cGUgIT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFNlbGVjdGVkUHJveHlNb2RlbChjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wpIDogJ25vbmUnO1xuICAgICAgdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuc2VsZWN0ZWRDb250cm9sIFx0XHQ9IHR5cGVvZiBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudHlwZSAhPSAndW5kZWZpbmVkJyA/IHRoaXMuZ2V0U2VsZWN0ZWRQcm94eU1vZGVsKGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbCkgOiAnbm9uZSc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlUeXBlIFx0XHRcdFx0ICA9IHR5cGVvZiBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudHlwZSAhPSAndW5kZWZpbmVkJyA/IGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50eXBlOiAnbm9uZSc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlTdWJ0eXBlIFx0XHRcdD0gdHlwZW9mIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC5zdWJ0eXBlICE9ICd1bmRlZmluZWQnID8gY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnN1YnR5cGUgOiAnbm9uZSc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlMYWJlbCBcdFx0XHRcdD0gdHlwZW9mIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMubGFiZWwgIT0gJ3VuZGVmaW5lZCcgPyBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLmxhYmVsIDogJyc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlSZXF1aXJlZFx0IFx0XHQ9IHR5cGVvZiBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkICE9ICd1bmRlZmluZWQnID8gY29uZmlndXJhdGlvbk9iai5saW5lc1tpbmRleExpbmVdLmNvbHVtbnNbbnVtY29sdW1uXS5jb250cm9sLnRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCA6ICcnO1xuICAgICAgdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5RGVzY3JpcHRpb24gXHQgID0gdHlwZW9mIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb24gIT0gJ3VuZGVmaW5lZCcgPyBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uIDogJyc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlQbGFjZWhvbGRlciBcdD0gdHlwZW9mIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMucGxhY2Vob2xkZXIgIT0gJ3VuZGVmaW5lZCcgPyBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLnBsYWNlaG9sZGVyIDogJyc7XG4gICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zIFx0XHRcdD0gdHlwZW9mIGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyAhPSAndW5kZWZpbmVkJyA/IGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyA6ICcnO1xuICAgICAgLy8gcGFydGljdWxhciBjYXNlIDogZGF0ZXBpY2tlclxuICAgICAgaWYgKHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLnNlbGVjdGVkQ29udHJvbCA9PT0gJ0RhdGUnKSB7XG4gICAgICAgIHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmRhdGVwaWNrZXJQb3B1cCA9IHR5cGVvZiBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2luZGV4TGluZV0uY29sdW1uc1tudW1jb2x1bW5dLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLmRhdGVwaWNrZXJQb3B1cCAhPSAndW5kZWZpbmVkJyA/IGNvbmZpZ3VyYXRpb25PYmoubGluZXNbaW5kZXhMaW5lXS5jb2x1bW5zW251bWNvbHVtbl0uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMuZGF0ZXBpY2tlclBvcHVwIDogJyc7XG4gICAgICB9XG4gICAgICAvLyBjb25zb2xlLmluZm8oJ2RlYnVnIHNldFByb3h5TW9kZWxGcm9tQ29uZmlndXJhdGlvblNlbGVjdGlvbicpO1xuICAgICAgLy8gY29uc29sZS5kaXIoe1xuICAgICAgLy8gICBzZWxlY3RlZENvbnRyb2wgOiBhbmd1bGFyLmNvcHkodGhpcy5wcm94eU1vZGVsLnNlbGVjdGVkQ29udHJvbCApLFxuICAgICAgLy8gICB0ZW1wb3J5Q29uZmlnICAgOiBhbmd1bGFyLmNvcHkodGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcpXG4gICAgICAvLyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgfVxuXG5cblx0Z2V0UHJveHlNb2RlbCgpe1xuICAgIHJldHVybiB0aGlzLnByb3h5TW9kZWw7XG4gIH1cblxuXG4gIC8qKlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICogZm9sbG93aW5nIG1ldGhvZHMgZm9yIFwiZWRpdFBhbmVsTW9kZWxcIlxuICAgKlxuICAgKiBOb3RlIHRoaXMgbW9kZWwgOlxuICAgKiAtIHRvIG1hbmFnZSBzaWRlIGVkaXQgY29udHJvbCBwYW5lbFxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgLy8gZ2V0dGVyIDogZWRpdFBhbmVsTW9kZWwgKHdob2xlIG1vZGVsID0+IHR5cGUgPSBvYmplY3QpXG4gIGdldEVkaXRQYW5lbE1vZGVsQWxsTW9kZWwoKXtcbiAgICByZXR1cm4gdGhpcy5lZGl0UGFuZWxNb2RlbDtcbiAgfVxuXG4gIC8vIHNldHRlciA6IGVkaXRQYW5lbE1vZGVsICh3aG9sZSBtb2RlbCA9PiB0eXBlID0gb2JqZWN0KVxuICBzZXRFZGl0UGFuZWxNb2RlbENvbnRyb2wobmV3RWRpdFBhbmVsTW9kZWwpe1xuICAgIGxldCBzdWNjZXNzZnVsbERvbmUgID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBuZXdFZGl0UGFuZWxNb2RlbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGFuZ3VsYXIubWVyZ2UodGhpcy5lZGl0UGFuZWxNb2RlbCwgbmV3RWRpdFBhbmVsTW9kZWwpO1xuICAgICAgc3VjY2Vzc2Z1bGxEb25lICAgICA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZXNzZnVsbERvbmU7XG4gIH1cblxuXG4gIC8vIGdldHRlciA6IGVkaXRQYW5lbE1vZGVsLmNvbHVtbkluZGV4XG4gIGdldEVkaXRQYW5lbE1vZGVsQ29sdW1uSW5kZXgoKXtcbiAgICByZXR1cm4gdGhpcy5lZGl0UGFuZWxNb2RlbC5jb2x1bW5JbmRleDtcbiAgfVxuXG4gIC8vIHNldHRlciA6IGVkaXRQYW5lbE1vZGVsLmNvbHVtbkluZGV4XG4gIHNldEVkaXRQYW5lbE1vZGVsQ29sdW1uSW5kZXgobmV3Q29sdW1uSW5kZXgpe1xuICAgIGxldCBzdWNjZXNzZnVsbERvbmUgID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBuZXdDb2x1bW5JbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZWRpdFBhbmVsTW9kZWwuY29sdW1uSW5kZXggPSBuZXdDb2x1bW5JbmRleDtcbiAgICAgIHN1Y2Nlc3NmdWxsRG9uZSAgICAgICAgICAgICAgICAgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2Vzc2Z1bGxEb25lO1xuICB9XG5cblxuICAvLyBnZXR0ZXIgOiBlZGl0UGFuZWxNb2RlbC5saW5lSW5kZXhcbiAgZ2V0RWRpdFBhbmVsTW9kZWxMaW5lSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdFBhbmVsTW9kZWwubGluZUluZGV4O1xuICB9XG5cblxuICAvLyBzZXR0ZXIgOiBlZGl0UGFuZWxNb2RlbC5saW5lSW5kZXhcbiAgc2V0RWRpdFBhbmVsTW9kZWxMaW5lSW5kZXgobmV3TGluZUluZGV4KSB7XG4gICAgbGV0IHN1Y2Nlc3NmdWxsRG9uZSAgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIG5ld0xpbmVJbmRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMuZWRpdFBhbmVsTW9kZWwubGluZUluZGV4ID0gbmV3TGluZUluZGV4O1xuICAgICAgc3VjY2Vzc2Z1bGxEb25lID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2Nlc3NmdWxsRG9uZTtcbiAgfVxuXG4gIC8vIGdldHRlciA6IGVkaXRQYW5lbE1vZGVsLmNvbnRyb2xcbiAgZ2V0RWRpdFBhbmVsTW9kZWxDb250cm9sKCl7XG4gICAgcmV0dXJuIHRoaXMuZWRpdFBhbmVsTW9kZWwuY29udHJvbDtcbiAgfVxuXG4gIC8vIGdldHRlciA6IGVkaXRQYW5lbE1vZGVsLnRvZ2dsZVxuICBnZXRFZGl0UGFuZWxNb2RlbFRvZ2dsZSgpe1xuICAgIHJldHVybiB0aGlzLmVkaXRQYW5lbE1vZGVsLnRvZ2dsZTtcbiAgfVxuXG4gIC8vIHNldHRlciA6IGVkaXRQYW5lbE1vZGVsLnRvZ2dsZVxuICBzZXRFZGl0UGFuZWxNb2RlbFRvZ2dsZShuZXdUb2dnbGVWYWx1ZSl7XG4gICAgbGV0IHN1Y2Nlc3NmdWxsRG9uZSAgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIG5ld1RvZ2dsZVZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy5lZGl0UGFuZWxNb2RlbC50b2dnbGUgID0gbmV3VG9nZ2xlVmFsdWU7XG4gICAgICBzdWNjZXNzZnVsbERvbmUgICAgICAgICAgICAgPSB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gc3VjY2Vzc2Z1bGxEb25lO1xuICB9XG5cbiAgcmVzZXRBbGxUZW1wb3J5TW9kZWxzKCl7XG4gICAgdGhpcy5iYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24gXHQ9IGFuZ3VsYXIuY29weShJTklUX09QVElPTl9NT0RFTCk7XG4gICAgdGhpcy5uZXdPcHRpb25CYXNpY1NlbGVjdCBcdFx0XHQ9IGFuZ3VsYXIuY29weSh7IHNhaXNpZTogJycgfSk7XG5cbiAgICB0aGlzLmdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uID0gYW5ndWxhci5jb3B5KElOSVRfT1BUSU9OX01PREVMKTtcbiAgICB0aGlzLm5ld09wdGlvbkdyb3VwZWRTZWxlY3QgXHRcdD0gYW5ndWxhci5jb3B5KHsgc2Fpc2llOiAnJyB9KTtcbiAgICB0aGlzLkdyb3VwZWRTZWxlY3RHcm91cHMgXHRcdFx0XHQ9IGFuZ3VsYXIuY29weSh7IGxpc3Q6W10gfSk7XG4gICAgdGhpcy5uZXdHcm91cEdyb3VwZWRTZWxlY3QgXHRcdFx0PSBhbmd1bGFyLmNvcHkoeyBzYWlzaWU6ICcnIH0pO1xuICAgIHRoaXMuZ3JvdXBTZWxlY3RHcm91cENsaWNrIFx0XHRcdD0gYW5ndWxhci5jb3B5KHsgc2hvd0xpc3QgOiBmYWxzZSB9KTtcblxuICAgIHRoaXMucmFkaW9Sb3dDb2xsZWN0aW9uIFx0XHRcdFx0PSBhbmd1bGFyLmNvcHkoSU5JVF9PUFRJT05fTU9ERUwpO1xuICAgIHRoaXMubmV3T3B0aW9uUmFkaW8gXHRcdFx0XHRcdFx0PSBhbmd1bGFyLmNvcHkoeyBzYWlzaWU6ICcnIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cblx0LyoqXG5cdCAqIGJpbmRTcGVjaWFsQ3RybFRlbXBvcnlNb2RlbHNUb1Byb3h5TW9kZWw6IG5lZWRlZCB3aGVuIHZhbGlkYXRpbmcgYWZ0ZXIgZWRpdGluZyBhIGNvbnRyb2xcblx0ICogdGVtcG9yeSBtb2RlbHMgYXBwbGllZCB0byBwcm94eU1vZGVsIGlmIGNvbnRyb2wgaXMgb25lIG9mIHRoZXNlXG5cdCAqXG5cdCAqIGV4YW1wbGUgOiBpZiBzZWxlY3RlZCBjb250cm9sIGlzIGEgYmFzaWMgc2VsZWN0IG9wdGlvbnNcblx0ICogLT4gc28gaXRzIHRlbXBvcnkgbW9kZWxzIGFyZSBib3VuZCB0byBwcm94eU1vZGVsXG5cdCAqL1xuXHRiaW5kU3BlY2lhbEN0cmxUZW1wb3J5TW9kZWxzVG9Qcm94eU1vZGVsKCkge1xuXHRcdGlmICh0aGlzLnByb3h5TW9kZWwuc2VsZWN0ZWRDb250cm9sID09PSAnQmFzaWNTZWxlY3QnKSB7XG4gICAgICB0aGlzLmJpbmRCYXNpY1NlbGVjdFRvUHJveHlNb2RlbCh0aGlzLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbik7XG4gICAgfVxuXHRcdGlmICh0aGlzLnByb3h5TW9kZWwuc2VsZWN0ZWRDb250cm9sID09PSAnR3JvdXBlZFNlbGVjdCcpIHtcbiAgICAgIHRoaXMuYmluZEdyb3VwZWRTZWxlY3RUb1Byb3h5TW9kZWwodGhpcy5ncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbik7XG4gICAgfVxuXHRcdGlmICh0aGlzLnByb3h5TW9kZWwuc2VsZWN0ZWRDb250cm9sID09PSAnUmFkaW8nKSB7XG4gICAgICB0aGlzLmJpbmRSYWRpb1RvUHJveHlNb2RlbCh0aGlzLnJhZGlvUm93Q29sbGVjdGlvbik7XG4gICAgfVxuXHR9XG5cbiAgLy8gYmFzaWMgc2VsZWN0XG4gIGJpbmRCYXNpY1NlbGVjdEZyb21Qcm94eU1vZGVsKGJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbil7XG4gICAgaWYgKHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seU9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucy5sZW5ndGgtMTsgaSsrKXtcbiAgICAgICAgbGV0IG5ld09wdGlvbiA9IHtcbiAgICAgICAgICAnb3B0aW9uJyBcdDogdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9uc1tpXS5uYW1lLFxuICAgICAgICAgICdvcmRlcicgXHQ6IGksXG4gICAgICAgICAgJ2dyb3VwJyBcdDogJydcbiAgICAgICAgfTtcbiAgICAgICAgYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MucHVzaChuZXdPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJpbmRCYXNpY1NlbGVjdFRvUHJveHlNb2RlbChiYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24pe1xuICAgIGxldCByZXNldE55QVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zID0gcmVzZXROeUFTZWxlY3RPcHRpb25zO1xuICAgIGlmIChiYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24ucm93cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSBiYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24ucm93cy5sZW5ndGggLSAxOyBpKyspe1xuICAgICAgICBsZXQgbmV3T3B0aW9uID0ge1xuICAgICAgICAgICduYW1lJyA6IGJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbi5yb3dzW2ldLm9wdGlvbixcbiAgICAgICAgICAndmFsdWUnOiBpLFxuICAgICAgICAgICdncm91cCc6ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seU9wdGlvbnMucHVzaChuZXdPcHRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vKiBncm91cGVkIHNlbGVjdFxuICBiaW5kR3JvdXBlZFNlbGVjdEZyb21Qcm94eU1vZGVsKGdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uLCBHcm91cGVkU2VsZWN0R3JvdXBzKXtcbiAgICBpZiAodGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zLmxlbmd0aC0xOyBpKyspe1xuICAgICAgICBsZXQgbmV3T3B0aW9uID0ge1xuICAgICAgICAgICdvcHRpb24nIFx0OiB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zW2ldLm5hbWUsXG4gICAgICAgICAgJ29yZGVyJ1x0XHQ6IGksXG4gICAgICAgICAgJ2dyb3VwJ1x0XHQ6IHRoaXMucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seU9wdGlvbnNbaV0uZ3JvdXBcbiAgICAgICAgfTtcbiAgICAgICAgZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24ucm93cy5wdXNoKG5ld09wdGlvbik7XG4gICAgICAgfVxuICAgICAgIC8vZ3JvdXBsaXN0IDogdGh4IHRvIGxvZGFzaCBpdCBpcyBlYXN5XG4gICAgICAgbGV0IGZpbHRlcmVkZ3JvdXAgPSBfLnVuaXEoXy5wbHVjayhncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbi5yb3dzLCAnZ3JvdXAnKSk7XG4gICAgICAgYW5ndWxhci5jb3B5KGZpbHRlcmVkZ3JvdXAsIEdyb3VwZWRTZWxlY3RHcm91cHMubGlzdCk7XG4gICAgfVxuICB9XG5cblxuICBiaW5kR3JvdXBlZFNlbGVjdFRvUHJveHlNb2RlbChncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbil7XG4gICAgdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MubGVuZ3RoIC0gMTsgaSsrKXtcbiAgICAgIGxldCBuZXdPcHRpb24gPSB7XG4gICAgICAgICduYW1lJyBcdDogZ3JvdXBlZFNlbGVjdFJvd0NvbGxlY3Rpb24ucm93c1tpXS5vcHRpb24sXG4gICAgICAgICd2YWx1ZSdcdDogaSxcbiAgICAgICAgJ2dyb3VwJ1x0OiBncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbi5yb3dzW2ldLmdyb3VwXG4gICAgICB9O1xuICAgICAgdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucy5wdXNoKG5ld09wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gcmFkaW9cblx0YmluZFJhZGlvRnJvbVByb3h5TW9kZWwocmFkaW9Sb3dDb2xsZWN0aW9uKXtcbiAgICBpZiAodGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8PSB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zLmxlbmd0aC0xOyBpKyspe1xuICAgICAgICAgIGxldCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgICAnb3B0aW9uJ1x0OiB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zW2ldLm5hbWUsXG4gICAgICAgICAgICAnb3JkZXInXHRcdDogaSxcbiAgICAgICAgICAgICdncm91cCdcdFx0OiAnJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgcmFkaW9Sb3dDb2xsZWN0aW9uLnJvd3MucHVzaChuZXdPcHRpb24pO1xuICAgICAgfVxuICAgIH1cblx0fVxuXG4gIGJpbmRSYWRpb1RvUHJveHlNb2RlbChyYWRpb1Jvd0NvbGxlY3Rpb24pe1xuICAgIGxldCByZXNldHByb3h5TW9kZWxPcHRpb25zID0gW107XG4gICAgdGhpcy5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5T3B0aW9ucyA9IHJlc2V0cHJveHlNb2RlbE9wdGlvbnM7XG4gICAgaWYgKHJhZGlvUm93Q29sbGVjdGlvbi5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHJhZGlvUm93Q29sbGVjdGlvbi5yb3dzLmxlbmd0aCAtIDE7IGkrKyl7XG4gICAgICAgIGxldCBuZXdPcHRpb24gPSB7XG4gICAgICAgICAgJ25hbWUnXHRcdDogcmFkaW9Sb3dDb2xsZWN0aW9uLnJvd3NbaV0ub3B0aW9uLFxuICAgICAgICAgICd2YWx1ZSdcdFx0OiBpLFxuICAgICAgICAgICdncm91cCdcdFx0OiAnJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlPcHRpb25zLnB1c2gobmV3T3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG5cblxuXG59XG5cbmNvbnRyb2xsZXJNb2RhbFByb3h5LiRpbmplY3QgPSBbXG4gICdFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMnXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBjb250cm9sbGVyTW9kYWxQcm94eTtcblxuZXhwb3J0IHtcbiAgQ09OVFJPTExFUl9NT0RBTF9QUk9YWVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvZWRhRHJhZ0Ryb3BXYXkubGVmdFBhbmVsLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNlcnZpY2UuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 23 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelValidEditFooterTemplate = __webpack_require__(24);\n\nvar _edaDragDropWayLeftpanelValidEditFooterTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelValidEditFooterTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE = 'leftPanelValidEditFooter';\n\nfunction leftPanelValidEditFooter() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelValidEditFooterTemplate2.default\n };\n return directive;\n}\n\nleftPanelValidEditFooter.$inject = [];\n\nexports.default = leftPanelValidEditFooter;\nexports.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE = LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL3ZhbGlkRWRpdEZvb3Rlci9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudmFsaWRFZGl0Rm9vdGVyLmRpcmVjdGl2ZS5qcz83MTg1Il0sIm5hbWVzIjpbIkxFRlRfUEFORUxfVkFMSURfRURJVF9GT09URVJfRElSRUNUSVZFIiwibGVmdFBhbmVsVmFsaWRFZGl0Rm9vdGVyIiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJ0ZW1wbGF0ZSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7O0FBRUEsSUFBTUEseUNBQXlDLDBCQUEvQzs7QUFFQSxTQUFTQyx3QkFBVCxHQUFvQztBQUNsQyxNQUFJQyxZQUFZO0FBQ2RDLGNBQVcsR0FERztBQUVkQztBQUZjLEdBQWhCO0FBSUEsU0FBT0YsU0FBUDtBQUNEOztBQUVERCx5QkFBeUJJLE9BQXpCLEdBQW1DLEVBQW5DOztrQkFFZUosd0I7UUFHYkQsc0MsR0FBQUEsc0MiLCJmaWxlIjoiMjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbGVmdFBhbmVsVmFsaWRFZGl0Rm9vdGVyVGVtcGxhdGUgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudmFsaWRFZGl0Rm9vdGVyLnRlbXBsYXRlLmh0bWwnO1xuXG5jb25zdCBMRUZUX1BBTkVMX1ZBTElEX0VESVRfRk9PVEVSX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxWYWxpZEVkaXRGb290ZXInO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxWYWxpZEVkaXRGb290ZXIoKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxWYWxpZEVkaXRGb290ZXJUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxWYWxpZEVkaXRGb290ZXIuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxWYWxpZEVkaXRGb290ZXI7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfVkFMSURfRURJVF9GT09URVJfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC92YWxpZEVkaXRGb290ZXIvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnZhbGlkRWRpdEZvb3Rlci5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 24 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n \\n \\n  \\n Reset\\n \\n \\n \\n  \\n Save\\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL3ZhbGlkRWRpdEZvb3Rlci9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudmFsaWRFZGl0Rm9vdGVyLnRlbXBsYXRlLmh0bWw/ODMwNyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrTUFBa00sbUlBQW1JLG1DQUFtQyxxREFBcUQiLCJmaWxlIjoiMjQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwibW9kYWwtZm9vdGVyXFxcIj5cXG4gIDxidXR0b25cXG4gICAgY2xhc3M9XFxcImJ0biBidG4tZGFuZ2VyIHB1bGwtbGVmdFxcXCJcXG4gICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwucmVzZXRDb250cm9sKClcXFwiPlxcbiAgICA8aSBjbGFzcz1cXFwiZmEgZmEtcmVmcmVzaFxcXCI+PC9pPlxcbiAgICAmbmJzcDtcXG4gICAgUmVzZXRcXG4gIDwvYnV0dG9uPlxcbiAgPGJ1dHRvblxcbiAgICBjbGFzcz1cXFwiYnRuIGJ0bi1zdWNjZXNzIHB1bGwtcmlnaHRcXFwiXFxuICAgIG5nLWNsaWNrPVxcXCJsZWZ0UGFuZWxDdHJsLnVwZGF0ZVNwZWNpYWxDb250cm9sKCk7IGxlZnRQYW5lbEN0cmwuc2F2ZUZyb21FZGl0UGFuZWwoKTtcXFwiPlxcbiAgICA8aSBjbGFzcz1cXFwiZmEgZmEtZmxvcHB5LW9cXFwiPjwvaT5cXG4gICAgJm5ic3A7XFxuICAgIFNhdmVcXG4gIDwvYnV0dG9uPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL3ZhbGlkRWRpdEZvb3Rlci9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudmFsaWRFZGl0Rm9vdGVyLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 25 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelTextInputControlTemplate = __webpack_require__(26);\n\nvar _edaDragDropWayLeftpanelTextInputControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelTextInputControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE = 'leftPanelTextInputControl';\n\nfunction leftPanelTextInputControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelTextInputControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelTextInputControl.$inject = [];\n\nexports.default = leftPanelTextInputControl;\nexports.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE = LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1RleHRJbnB1dENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRJbnB1dENvbnRyb2wuZGlyZWN0aXZlLmpzP2JmZWYiXSwibmFtZXMiOlsiTEVGVF9QQU5FTF9URVhUX0lOUFVUX0NPTlRST0xfRElSRUNUSVZFIiwibGVmdFBhbmVsVGV4dElucHV0Q29udHJvbCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwidGVtcGxhdGUiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLDBDQUEwQywyQkFBaEQ7O0FBRUEsU0FBU0MseUJBQVQsR0FBcUM7QUFDbkMsTUFBSUMsWUFBWTtBQUNkQyxjQUFXLEdBREc7QUFFZEM7QUFGYyxHQUFoQjtBQUlBLFNBQU9GLFNBQVA7QUFDRDs7QUFFREQsMEJBQTBCSSxPQUExQixHQUFvQyxFQUFwQzs7a0JBRWVKLHlCO1FBR2JELHVDLEdBQUFBLHVDIiwiZmlsZSI6IjI1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgbGVmdFBhbmVsVGV4dElucHV0Q29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRJbnB1dENvbnRyb2wudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IExFRlRfUEFORUxfVEVYVF9JTlBVVF9DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxUZXh0SW5wdXRDb250cm9sJztcblxuZnVuY3Rpb24gbGVmdFBhbmVsVGV4dElucHV0Q29udHJvbCgpIHtcbiAgbGV0IGRpcmVjdGl2ZSA9IHtcbiAgICByZXN0cmljdCA6ICdFJyxcbiAgICB0ZW1wbGF0ZSA6IGxlZnRQYW5lbFRleHRJbnB1dENvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxUZXh0SW5wdXRDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsVGV4dElucHV0Q29udHJvbDtcblxuZXhwb3J0IHtcbiAgTEVGVF9QQU5FTF9URVhUX0lOUFVUX0NPTlRST0xfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9UZXh0SW5wdXRDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC50ZXh0SW5wdXRDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 26 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n placeholder :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Required :\\n \\n
    \\n
     
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1RleHRJbnB1dENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRJbnB1dENvbnRyb2wudGVtcGxhdGUuaHRtbD85Nzg4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1QQUFtUCxrdkRBQWt2RCIsImZpbGUiOiIyNi5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8aDUgY2xhc3M9XFxcImdyZXlUZXh0XFxcIj5cXG4gICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXBlbmNpbC1zcXVhcmUtb1xcXCI+PC9pPlxcbiAgICAgICAgICAmbmJzcDtcXG4gICAgICAgICAgRWRpdCBwcm9wZXJ0aWVzIDpcXG4gICAgICAgIDwvaDU+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcImlucHV0VGV4dExhYmVsVXBkYXRlXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiIGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIExhYmVsIHRleHQgOlxcbiAgICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlMYWJlbFxcXCJcXG4gICAgICAgICAgICBpZD1cXFwiaW5wdXRUZXh0TGFiZWxVcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiaW5wdXRUZXh0cGxhY2Vob2xkZXJVcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBwbGFjZWhvbGRlciA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlQbGFjZWhvbGRlclxcXCJcXG4gICAgICAgICAgICBpZD1cXFwiaW5wdXRUZXh0cGxhY2Vob2xkZXJVcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgcGxhY2Vob2xkZXIgdGV4dCBoZXJlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiaW5wdXRUZXh0UmVxdWlyZWRVcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBSZXF1aXJlZCA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLThcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjaGVja2JveENzc0NvcnJlY3Rpb25cXFwiPiZuYnNwOzwvZGl2PlxcbiAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICB0eXBlPVxcXCJjaGVja2JveFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5UmVxdWlyZWRcXFwiXFxuICAgICAgICAgICAgaWQ9XFxcImlucHV0VGV4dFJlcXVpcmVkVXBkYXRlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiaW5wdXRUZXh0RGVzY3JpcHRpb25VcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBEZXNjcmlwdGlvbiA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCIgXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5RGVzY3JpcHRpb25cXFwiXFxuICAgICAgICAgICAgaWQ9XFxcImlucHV0VGV4dERlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVxcXCJBZGQgLyBlZGl0IGRlc2NyaXB0aW9uIGhlcmVcXFwiPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGxlZnQtcGFuZWwtdmFsaWQtZWRpdC1mb290ZXIgLz5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9UZXh0SW5wdXRDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC50ZXh0SW5wdXRDb250cm9sLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDI2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 27 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelTextareaControlTemplate = __webpack_require__(28);\n\nvar _edaDragDropWayLeftpanelTextareaControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelTextareaControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE = 'leftPanelTextareaControl';\n\nfunction leftPanelTextareaControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelTextareaControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelTextareaControl.$inject = [];\n\nexports.default = leftPanelTextareaControl;\nexports.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE = LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1RleHRBcmVhQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudGV4dGFyZWFDb250cm9sLmRpcmVjdGl2ZS5qcz8yY2IzIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfVEVYVEFSRUFfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSx3Q0FBd0MsMEJBQTlDOztBQUVBLFNBQVNDLHdCQUFULEdBQW9DO0FBQ2xDLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHlCQUF5QkksT0FBekIsR0FBbUMsRUFBbkM7O2tCQUVlSix3QjtRQUdiRCxxQyxHQUFBQSxxQyIsImZpbGUiOiIyNy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGxlZnRQYW5lbFRleHRhcmVhQ29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRhcmVhQ29udHJvbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9URVhUQVJFQV9DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxUZXh0YXJlYUNvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfVEVYVEFSRUFfQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1RleHRBcmVhQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudGV4dGFyZWFDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 28 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Required :\\n \\n
    \\n
    \\n  \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1RleHRBcmVhQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwudGV4dGFyZWFDb250cm9sLnRlbXBsYXRlLmh0bWw/OWU4MCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAsMmxDQUEybEMiLCJmaWxlIjoiMjguanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgIEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgZm9yPVxcXCJpbnB1dFRleHRMYWJlbFVwZGF0ZVxcXCJcXG4gICAgICAgICAgY2xhc3M9XFxcIiBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBMYWJlbCB0ZXh0IDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICB0eXBlPVxcXCJ0ZXh0XFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seUxhYmVsXFxcIiBcXG4gICAgICAgICAgICBpZD1cXFwiaW5wdXRUZXh0TGFiZWxVcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiUmVxdWlyZWRVcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBSZXF1aXJlZCA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLThcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjaGVja2JveENzc0NvcnJlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgICZuYnNwO1xcbiAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxuICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seVJlcXVpcmVkXFxcIlxcbiAgICAgICAgICAgIGlkPVxcXCJSZXF1aXJlZFVwZGF0ZVxcXCI+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgRGVzY3JpcHRpb24gOlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5RGVzY3JpcHRpb25cXFwiXFxuICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVxcXCJBZGQgLyBlZGl0IGRlc2NyaXB0aW9uIGhlcmVcXFwiPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGxlZnQtcGFuZWwtdmFsaWQtZWRpdC1mb290ZXIgLz5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9UZXh0QXJlYUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnRleHRhcmVhQ29udHJvbC50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSAyOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 29 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelSubtitleControlTemplate = __webpack_require__(30);\n\nvar _edaDragDropWayLeftpanelSubtitleControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelSubtitleControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE = 'leftPanelSubtitleControl';\n\nfunction leftPanelSubtitleControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelSubtitleControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelSubtitleControl.$inject = [];\n\nexports.default = leftPanelSubtitleControl;\nexports.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE = LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1N1YlRpdGxlQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuc3VidGl0bGVDb250cm9sLmRpcmVjdGl2ZS5qcz9hYjE1Il0sIm5hbWVzIjpbIkxFRlRfUEFORUxfU1VCVElUTEVfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxTdWJ0aXRsZUNvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxJQUFNQSx3Q0FBd0MsMEJBQTlDOztBQUVBLFNBQVNDLHdCQUFULEdBQW9DO0FBQ2xDLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHlCQUF5QkksT0FBekIsR0FBbUMsRUFBbkM7O2tCQUVlSix3QjtRQUdiRCxxQyxHQUFBQSxxQyIsImZpbGUiOiIyOS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsZWZ0UGFuZWxTdWJ0aXRsZUNvbnRyb2xUZW1wbGF0ZSBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5zdWJ0aXRsZUNvbnRyb2wudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IExFRlRfUEFORUxfU1VCVElUTEVfQ09OVFJPTF9ESVJFQ1RJVkUgPSAnbGVmdFBhbmVsU3VidGl0bGVDb250cm9sJztcblxuZnVuY3Rpb24gbGVmdFBhbmVsU3VidGl0bGVDb250cm9sKCkge1xuICBsZXQgZGlyZWN0aXZlID0ge1xuICAgIHJlc3RyaWN0IDogJ0UnLFxuICAgIHRlbXBsYXRlIDogbGVmdFBhbmVsU3VidGl0bGVDb250cm9sVGVtcGxhdGVcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcbn1cblxubGVmdFBhbmVsU3VidGl0bGVDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsU3VidGl0bGVDb250cm9sO1xuXG5leHBvcnQge1xuICBMRUZUX1BBTkVMX1NVQlRJVExFX0NPTlRST0xfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9TdWJUaXRsZUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnN1YnRpdGxlQ29udHJvbC5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 30 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Subtitle text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1N1YlRpdGxlQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuc3VidGl0bGVDb250cm9sLnRlbXBsYXRlLmh0bWw/ZTBlMiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAiLCJmaWxlIjoiMzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgIEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcImlucHV0VGV4dERlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICAgIFN1YnRpdGxlIHRleHQgOlxcbiAgICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIFxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seURlc2NyaXB0aW9uXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcImlucHV0U3VidGl0bGVUZXh0VXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgc3VidGl0bGUgdGV4dCBoZXJlXFxcIiA+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8bGVmdC1wYW5lbC12YWxpZC1lZGl0LWZvb3RlciAvPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1N1YlRpdGxlQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuc3VidGl0bGVDb250cm9sLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDMwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 31 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelRichTextEditorControlTemplate = __webpack_require__(32);\n\nvar _edaDragDropWayLeftpanelRichTextEditorControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelRichTextEditorControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE = 'leftPanelRichTextEditorControl';\n\nfunction leftPanelRichTextEditorControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelRichTextEditorControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelRichTextEditorControl.$inject = [];\n\nexports.default = leftPanelRichTextEditorControl;\nexports.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE = LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JpY2hUZXh0RWRpdG9yQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmljaFRleHRFZGl0b3JDb250cm9sLmRpcmVjdGl2ZS5qcz9jNWQwIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfUklDSF9URVhUX0VESVRPUl9DT05UUk9MX0RJUkVDVElWRSIsImxlZnRQYW5lbFJpY2hUZXh0RWRpdG9yQ29udHJvbCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwidGVtcGxhdGUiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLGdEQUFnRCxnQ0FBdEQ7O0FBRUEsU0FBU0MsOEJBQVQsR0FBMEM7QUFDeEMsTUFBSUMsWUFBWTtBQUNkQyxjQUFXLEdBREc7QUFFZEM7QUFGYyxHQUFoQjtBQUlBLFNBQU9GLFNBQVA7QUFDRDs7QUFFREQsK0JBQStCSSxPQUEvQixHQUF5QyxFQUF6Qzs7a0JBRWVKLDhCO1FBR2JELDZDLEdBQUFBLDZDIiwiZmlsZSI6IjMxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sVGVtcGxhdGUgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmljaFRleHRFZGl0b3JDb250cm9sLnRlbXBsYXRlLmh0bWwnO1xuXG5jb25zdCBMRUZUX1BBTkVMX1JJQ0hfVEVYVF9FRElUT1JfQ09OVFJPTF9ESVJFQ1RJVkUgPSAnbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sJztcblxuZnVuY3Rpb24gbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sKCkge1xuICBsZXQgZGlyZWN0aXZlID0ge1xuICAgIHJlc3RyaWN0IDogJ0UnLFxuICAgIHRlbXBsYXRlIDogbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sVGVtcGxhdGVcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcbn1cblxubGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsUmljaFRleHRFZGl0b3JDb250cm9sO1xuXG5leHBvcnQge1xuICBMRUZUX1BBTkVMX1JJQ0hfVEVYVF9FRElUT1JfQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JpY2hUZXh0RWRpdG9yQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmljaFRleHRFZGl0b3JDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 32 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n   Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JpY2hUZXh0RWRpdG9yQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmljaFRleHRFZGl0b3JDb250cm9sLnRlbXBsYXRlLmh0bWw/ZmVjNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAiLCJmaWxlIjoiMzIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7IEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgZm9yPVxcXCJEZXNjcmlwdGlvblVwZGF0ZVxcXCJcXG4gICAgICAgICAgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIERlc2NyaXB0aW9uIDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICB0eXBlPVxcXCJ0ZXh0XFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seURlc2NyaXB0aW9uXFxcIlxcbiAgICAgICAgICAgIGlkPVxcXCJEZXNjcmlwdGlvblVwZGF0ZVxcXCJcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiQWRkIC8gZWRpdCBkZXNjcmlwdGlvbiBoZXJlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxsZWZ0LXBhbmVsLXZhbGlkLWVkaXQtZm9vdGVyIC8+XFxuPC9kaXY+XFxuXCJcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvUmljaFRleHRFZGl0b3JDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5yaWNoVGV4dEVkaXRvckNvbnRyb2wudGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 33 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelRadioControlTemplate = __webpack_require__(34);\n\nvar _edaDragDropWayLeftpanelRadioControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelRadioControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_RADIO_CONTROL_DIRECTIVE = 'leftPanelRadioControl';\n\nfunction leftPanelRadioControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelRadioControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelRadioControl.$inject = [];\n\nexports.default = leftPanelRadioControl;\nexports.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE = LEFT_PANEL_RADIO_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JhZGlvQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmFkaW9Db250cm9sLmRpcmVjdGl2ZS5qcz9lMmE0Il0sIm5hbWVzIjpbIkxFRlRfUEFORUxfUkFESU9fQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxSYWRpb0NvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxxQ0FBcUMsdUJBQTNDOztBQUVBLFNBQVNDLHFCQUFULEdBQWlDO0FBQy9CLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHNCQUFzQkksT0FBdEIsR0FBZ0MsRUFBaEM7O2tCQUVlSixxQjtRQUdiRCxrQyxHQUFBQSxrQyIsImZpbGUiOiIzMy5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGxlZnRQYW5lbFJhZGlvQ29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnJhZGlvQ29udHJvbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9SQURJT19DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxSYWRpb0NvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxSYWRpb0NvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxSYWRpb0NvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxSYWRpb0NvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxSYWRpb0NvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfUkFESU9fQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JhZGlvQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmFkaW9Db250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 34 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Add new radio :\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n add\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Edit/Remove radio :\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n - no radio : add new radio values -\\n \\n
    \\n
    \\n 0\\\"\\n class=\\\"table table-striped\\\">\\n \\n \\n \\n order\\n \\n \\n option\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{$index}}\\n \\n \\n {{radioRow.option}}\\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Required :\\n \\n
    \\n
     
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1JhZGlvQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucmFkaW9Db250cm9sLnRlbXBsYXRlLmh0bWw/ODQzYSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAsMm9GQUEyb0YsUUFBUSxtRkFBbUYsaUJBQWlCLDhnRUFBOGdFIiwiZmlsZSI6IjM0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHRcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxoNSBjbGFzcz1cXFwiZ3JleVRleHRcXFwiPlxcbiAgICAgICAgICA8aSBjbGFzcz1cXFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXFxcIj48L2k+XFxuICAgICAgICAgICZuYnNwO1xcbiAgICAgICAgICBFZGl0IHByb3BlcnRpZXMgOlxcbiAgICAgICAgPC9oNT5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwicmFkaW9Sb3dDb2xsZWN0aW9uXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiIGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIEFkZCBuZXcgcmFkaW8gOlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICA8ZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXNtLTkgY29sLXhzLTkgY29sLW1kLTkgY29sLWxnLTlcXFwiPlxcbiAgICAgICAgPGlucHV0XFxuICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgIGlkPVxcXCJpbnB1dEFkZE5ld1JhZGlvT3B0aW9uXFxcIlxcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiYWRkIG5ldyByYWRpb1xcXCJcXG4gICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwubmV3T3B0aW9uUmFkaW8uc2Fpc2llXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXNtLTMgY29sLXhzLTMgY29sLW1kLTMgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5hZGROZXdPcHRpb25SYWRpbygpXFxcIj5cXG4gICAgICAgICAgICBhZGRcXG4gICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtbWQtMTJcXFwiPlxcbiAgICAgIDxsYWJlbFxcbiAgICAgICAgZm9yPVxcXCJyYWRpb1Jvd0NvbGxlY3Rpb25cXFwiXFxuICAgICAgICBjbGFzcz1cXFwiIGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICBFZGl0L1JlbW92ZSByYWRpbyA6XFxuICAgICAgPC9sYWJlbD5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3MtXFxcImNvbC1sZy0xMiBjb2wtbWQtMTIgY29sLXNtLTEyIGNvbC14cy0xMlxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb250YWluZXJcXFwiPlxcbiAgICAgICAgICA8ZGl2IG5nLXNob3c9XFxcImxlZnRQYW5lbEN0cmwucmFkaW9Sb3dDb2xsZWN0aW9uLnJvd3MubGVuZ3RoID09PSAwXFxcIj5cXG4gICAgICAgICAgICA8aDUgY2xhc3M9XFxcInRleHQtY2VudGVyIGdyZXlUZXh0XFxcIj5cXG4gICAgICAgICAgICAgIDxlbT5cXG4gICAgICAgICAgICAgICAgLSBubyByYWRpbyA6IGFkZCBuZXcgcmFkaW8gdmFsdWVzIC1cXG4gICAgICAgICAgICAgIDwvZW0+XFxuICAgICAgICAgICAgPC9oNT5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgIDx0YWJsZVxcbiAgICAgICAgICAgIG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLnJhZGlvUm93Q29sbGVjdGlvbi5yb3dzLmxlbmd0aCA+IDBcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcInRhYmxlIHRhYmxlLXN0cmlwZWRcXFwiPlxcbiAgICAgICAgICAgIDx0aGVhZD5cXG4gICAgICAgICAgICA8dHI+XFxuICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjIwXFxcIj5cXG4gICAgICAgICAgICAgICAgb3JkZXJcXG4gICAgICAgICAgICAgIDwvdGg+XFxuICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjU1XFxcIj5cXG4gICAgICAgICAgICAgICAgb3B0aW9uXFxuICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCIyNVxcXCI+XFxuICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCIyMFxcXCI+XFxuICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCI1NVxcXCI+XFxuICAgICAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJyYWRpb0ZpbHRlclxcXCJcXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwic2VhcmNoIGZvciBvcHRpb25cXFwiXFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImlucHV0LXNtIGZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICAgICAgICB0eXBlPVxcXCJzZWFyY2hcXFwiIC8+XFxuICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCIyNVxcXCI+PC90aD5cXG4gICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgPHRib2R5PlxcbiAgICAgICAgICAgICAgPHRyIG5nLXJlcGVhdD1cXFwicmFkaW9Sb3cgaW4gbGVmdFBhbmVsQ3RybC5yYWRpb1Jvd0NvbGxlY3Rpb24ucm93cyB8IGZpbHRlcjpyYWRpb0ZpbHRlciBhcyByYWRpb1Jvd1xcXCI+XFxuICAgICAgICAgICAgICAgIDx0ZCBzdC1yYXRpbz1cXFwiMjBcXFwiPlxcbiAgICAgICAgICAgICAgICAgIHt7JGluZGV4fX1cXG4gICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgPHRkIHN0LXJhdGlvPVxcXCI1NVxcXCI+XFxuICAgICAgICAgICAgICAgICAge3tyYWRpb1Jvdy5vcHRpb259fVxcbiAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICA8dGQgc3QtcmF0aW89XFxcIjI1XFxcIj5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwdWxsLXJpZ2h0XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwudXBUaGlzUmFkaW9Sb3coJGluZGV4KVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1hcnJvdy11cFxcXCI+PC9pPlxcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIG5nLWNsaWNrPVxcXCJsZWZ0UGFuZWxDdHJsLmRvd25UaGlzUmFkaW9Sb3coJGluZGV4KVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1hcnJvdy1kb3duXFxcIj48L2k+XFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tZGFuZ2VyXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5yZW1vdmVSYWRpb1JvdygkaW5kZXgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXRyYXNoLW9cXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgPC90Ym9keT5cXG4gICAgICAgICAgPC90YWJsZT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICBcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcImlucHV0VGV4dExhYmVsVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCIgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgICBMYWJlbCB0ZXh0IDpcXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seUxhYmVsXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcImlucHV0VGV4dExhYmVsVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIj5cXG4gICAgICAgICAgPC9kaXY+XFxuICBcXHRcXHRcXHQ8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGxhYmVsXFxuICAgICAgICAgICAgZm9yPVxcXCJSZXF1aXJlZFVwZGF0ZVxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiY29sLW1kLTQgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgICBSZXF1aXJlZCA6XFxuICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjaGVja2JveENzc0NvcnJlY3Rpb25cXFwiPiZuYnNwOzwvZGl2PlxcbiAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxuICAgICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5UmVxdWlyZWRcXFwiXFxuICAgICAgICAgICAgICBpZD1cXFwiUmVxdWlyZWRVcGRhdGVcXFwiPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gIFxcdFxcdFxcdDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICBcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICAgIERlc2NyaXB0aW9uIDpcXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seURlc2NyaXB0aW9uXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgZGVzY3JpcHRpb24gaGVyZVxcXCI+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgXFx0XFx0XFx0PC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxsZWZ0LXBhbmVsLXZhbGlkLWVkaXQtZm9vdGVyIC8+XFxuPC9kaXY+XFxuXCJcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvUmFkaW9Db250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5yYWRpb0NvbnRyb2wudGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 35 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelPasswordControlTemplate = __webpack_require__(36);\n\nvar _edaDragDropWayLeftpanelPasswordControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelPasswordControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE = 'leftPanelPasswordControl';\n\nfunction leftPanelPasswordControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelPasswordControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelPasswordControl.$inject = [];\n\nexports.default = leftPanelPasswordControl;\nexports.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE = LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1Bhc3N3b3JkQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucGFzc3dvcmRDb250cm9sLmRpcmVjdGl2ZS5qcz82NjgzIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfUEFTU1dPUkRfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxQYXNzd29yZENvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSx3Q0FBd0MsMEJBQTlDOztBQUVBLFNBQVNDLHdCQUFULEdBQW9DO0FBQ2xDLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHlCQUF5QkksT0FBekIsR0FBbUMsRUFBbkM7O2tCQUVlSix3QjtRQUdiRCxxQyxHQUFBQSxxQyIsImZpbGUiOiIzNS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGxlZnRQYW5lbFBhc3N3b3JkQ29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLnBhc3N3b3JkQ29udHJvbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9QQVNTV09SRF9DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxQYXNzd29yZENvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxQYXNzd29yZENvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxQYXNzd29yZENvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxQYXNzd29yZENvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxQYXNzd29yZENvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfUEFTU1dPUkRfQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1Bhc3N3b3JkQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucGFzc3dvcmRDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 36 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n placeholder :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Required :\\n \\n
    \\n
     
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL1Bhc3N3b3JkQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwucGFzc3dvcmRDb250cm9sLnRlbXBsYXRlLmh0bWw/YWY5ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAsaXVEQUFpdUQiLCJmaWxlIjoiMzYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgIEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgZm9yPVxcXCJpbnB1dFRleHRMYWJlbFVwZGF0ZVxcXCJcXG4gICAgICAgICAgY2xhc3M9XFxcIiBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBMYWJlbCB0ZXh0IDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICB0eXBlPVxcXCJ0ZXh0XFxcIiBcXG4gICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlMYWJlbFxcXCJcXG4gICAgICAgICAgICBpZD1cXFwiaW5wdXRUZXh0TGFiZWxVcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIiA+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcInBsYWNlaG9sZGVyVXBkYXRlXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgcGxhY2Vob2xkZXIgOlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5UGxhY2Vob2xkZXJcXFwiXFxuICAgICAgICAgICAgaWQ9XFxcImlucHV0VGV4dHBsYWNlaG9sZGVyVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVxcXCJBZGQgLyBlZGl0IHBsYWNlaG9sZGVyIHRleHQgaGVyZVxcXCIgPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgIDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgZm9yPVxcXCJSZXF1aXJlZFVwZGF0ZVxcXCJcXG4gICAgICAgICAgY2xhc3M9XFxcImNvbC1tZC00IGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIFJlcXVpcmVkIDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtOFxcXCI+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNoZWNrYm94Q3NzQ29ycmVjdGlvblxcXCI+Jm5ic3A7PC9kaXY+XFxuICAgICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgICB0eXBlPVxcXCJjaGVja2JveFxcXCJcXG4gICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlSZXF1aXJlZFxcXCJcXG4gICAgICAgICAgICAgIGlkPVxcXCJSZXF1aXJlZFVwZGF0ZVxcXCI+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgRGVzY3JpcHRpb24gOlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5RGVzY3JpcHRpb25cXFwiXFxuICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVxcXCJBZGQgLyBlZGl0IGRlc2NyaXB0aW9uIGhlcmVcXFwiID5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICA8L2Rpdj5cXG4gIDxsZWZ0LXBhbmVsLXZhbGlkLWVkaXQtZm9vdGVyIC8+XFxuPC9kaXY+XFxuXCJcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvUGFzc3dvcmRDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5wYXNzd29yZENvbnRyb2wudGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 37 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelHeaderControlTemplate = __webpack_require__(38);\n\nvar _edaDragDropWayLeftpanelHeaderControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelHeaderControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_HEADER_CONTROL_DIRECTIVE = 'leftPanelHeaderControl';\n\nfunction leftPanelHeaderControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelHeaderControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelHeaderControl.$inject = [];\n\nexports.default = leftPanelHeaderControl;\nexports.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE = LEFT_PANEL_HEADER_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0hlYWRlckNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmhlYWRlckNvbnRyb2wuZGlyZWN0aXZlLmpzPzhjNmMiXSwibmFtZXMiOlsiTEVGVF9QQU5FTF9IRUFERVJfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxIZWFkZXJDb250cm9sIiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJ0ZW1wbGF0ZSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7O0FBRUEsSUFBTUEsc0NBQXNDLHdCQUE1Qzs7QUFFQSxTQUFTQyxzQkFBVCxHQUFrQztBQUNoQyxNQUFJQyxZQUFZO0FBQ2RDLGNBQVcsR0FERztBQUVkQztBQUZjLEdBQWhCO0FBSUEsU0FBT0YsU0FBUDtBQUVEOztBQUVERCx1QkFBdUJJLE9BQXZCLEdBQWlDLEVBQWpDOztrQkFFZUosc0I7UUFHYkQsbUMsR0FBQUEsbUMiLCJmaWxlIjoiMzcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbGVmdFBhbmVsSGVhZGVyQ29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmhlYWRlckNvbnRyb2wudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IExFRlRfUEFORUxfSEVBREVSX0NPTlRST0xfRElSRUNUSVZFID0gJ2xlZnRQYW5lbEhlYWRlckNvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxIZWFkZXJDb250cm9sKCkgeyAgXG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxIZWFkZXJDb250cm9sVGVtcGxhdGVcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcblxufVxuXG5sZWZ0UGFuZWxIZWFkZXJDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsSGVhZGVyQ29udHJvbDtcblxuZXhwb3J0IHtcbiAgTEVGVF9QQU5FTF9IRUFERVJfQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0hlYWRlckNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmhlYWRlckNvbnRyb2wuZGlyZWN0aXZlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 38 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Header text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0hlYWRlckNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmhlYWRlckNvbnRyb2wudGVtcGxhdGUuaHRtbD9jMTk5Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1QQUFtUCIsImZpbGUiOiIzOC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8aDUgY2xhc3M9XFxcImdyZXlUZXh0XFxcIj5cXG4gICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXBlbmNpbC1zcXVhcmUtb1xcXCI+PC9pPlxcbiAgICAgICAgICAmbmJzcDtcXG4gICAgICAgICAgRWRpdCBwcm9wZXJ0aWVzIDpcXG4gICAgICAgIDwvaDU+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcImlucHV0VGV4dERlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgSGVhZGVyIHRleHQgOlxcbiAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5RGVzY3JpcHRpb25cXFwiXFxuICAgICAgICAgICAgaWQ9XFxcImlucHV0SGVhZGVyVGV4dFVwZGF0ZVxcXCJcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiQWRkIC8gZWRpdCBoZWFkZXIgdGV4dCBoZXJlXFxcIiA+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8bGVmdC1wYW5lbC12YWxpZC1lZGl0LWZvb3RlciAvPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0hlYWRlckNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmhlYWRlckNvbnRyb2wudGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gMzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 39 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelGroupedSelectControlTemplate = __webpack_require__(40);\n\nvar _edaDragDropWayLeftpanelGroupedSelectControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelGroupedSelectControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE = 'leftPanelGroupedSelectControl';\n\nfunction leftPanelGroupedSelectControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelGroupedSelectControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelGroupedSelectControl.$inject = [];\n\nexports.default = leftPanelGroupedSelectControl;\nexports.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE = LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0dyb3VwZWRTZWxlY3RDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5ncm91cGVkU2VsZWN0Q29udHJvbC5kaXJlY3RpdmUuanM/YmE5NCJdLCJuYW1lcyI6WyJMRUZUX1BBTkVMX0dST1VQRURfU0VMRUNUX0NPTlRST0xfRElSRUNUSVZFIiwibGVmdFBhbmVsR3JvdXBlZFNlbGVjdENvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSw4Q0FBOEMsK0JBQXBEOztBQUVBLFNBQVNDLDZCQUFULEdBQXlDO0FBQ3ZDLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELDhCQUE4QkksT0FBOUIsR0FBd0MsRUFBeEM7O2tCQUVlSiw2QjtRQUdiRCwyQyxHQUFBQSwyQyIsImZpbGUiOiIzOS5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGxlZnRQYW5lbEdyb3VwZWRTZWxlY3RDb250cm9sVGVtcGxhdGUgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuZ3JvdXBlZFNlbGVjdENvbnRyb2wudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IExFRlRfUEFORUxfR1JPVVBFRF9TRUxFQ1RfQ09OVFJPTF9ESVJFQ1RJVkUgPSAnbGVmdFBhbmVsR3JvdXBlZFNlbGVjdENvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxHcm91cGVkU2VsZWN0Q29udHJvbCgpIHtcbiAgbGV0IGRpcmVjdGl2ZSA9IHtcbiAgICByZXN0cmljdCA6ICdFJyxcbiAgICB0ZW1wbGF0ZSA6IGxlZnRQYW5lbEdyb3VwZWRTZWxlY3RDb250cm9sVGVtcGxhdGVcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcbn1cblxubGVmdFBhbmVsR3JvdXBlZFNlbGVjdENvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxHcm91cGVkU2VsZWN0Q29udHJvbDtcblxuZXhwb3J0IHtcbiAgTEVGVF9QQU5FTF9HUk9VUEVEX1NFTEVDVF9DT05UUk9MX0RJUkVDVElWRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvR3JvdXBlZFNlbGVjdENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmdyb3VwZWRTZWxlY3RDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 40 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Add new options :\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n add\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Add new groups :\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n add\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Edit/Remove options/groups:\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n - no option : add new options -\\n \\n
    \\n
    \\n 0\\\"\\n class=\\\"table table-striped\\\">\\n \\n \\n \\n order\\n \\n \\n group\\n \\n \\n option\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{$index}}\\n \\n \\n
    \\n
    \\n

    \\n - add new groups -\\n

    \\n
    \\n
    0\\\">\\n \\n \\n \\n {{GroupedSelectGroup}}\\n \\n \\n \\n
    \\n
    \\n
    \\n {{groupedSelectRow.group}}\\n
    \\n \\n \\n {{groupedSelectRow.option}}\\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\\t\\t\\t\\t
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n\\t\\t\\t\\t
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0dyb3VwZWRTZWxlY3RDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5ncm91cGVkU2VsZWN0Q29udHJvbC50ZW1wbGF0ZS5odG1sPzY0N2MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbVBBQW1QLDY3SEFBNjdILFFBQVEsNm5DQUE2bkMsb0JBQW9CLG9RQUFvUSx3QkFBd0IsNkdBQTZHLHlCQUF5QiIsImZpbGUiOiI0MC5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG4gIDxkaXYgY2xhc3M9XFxcInBhbmVsLWJvZHlcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICA8aDUgY2xhc3M9XFxcImdyZXlUZXh0XFxcIj5cXG4gICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXBlbmNpbC1zcXVhcmUtb1xcXCI+PC9pPlxcbiAgICAgICAgICAmbmJzcDtcXG4gICAgICAgICAgRWRpdCBwcm9wZXJ0aWVzIDpcXG4gICAgICAgIDwvaDU+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbGctMTIgY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcImdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgQWRkIG5ldyBvcHRpb25zIDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtc20tOSBjb2wteHMtOSBjb2wtbWQtOSBjb2wtbGctOVxcXCI+XFxuICAgICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgICB0eXBlPVxcXCJ0ZXh0XFxcIlxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICAgIGlkPVxcXCJpbnB1dEFkZE5ld0dyb3VwZWRPcHRpb25cXFwiXFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiYWRkIG5ldyBvcHRpb25cXFwiXFxuICAgICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5uZXdPcHRpb25Hcm91cGVkU2VsZWN0LnNhaXNpZVxcXCI+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtc20tMyBjb2wteHMtMyBjb2wtbWQtMyBjb2wtbGctM1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgIG5nLWNsaWNrPVxcXCJsZWZ0UGFuZWxDdHJsLmFkZE5ld09wdGlvbkdyb3VwZWRTZWxlY3QoKVxcXCI+XFxuICAgICAgICAgICAgICBhZGRcXG4gICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbGctMTIgY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxsYWJlbFxcbiAgICAgICAgICBmb3I9XFxcImdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiIGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIEFkZCBuZXcgZ3JvdXBzIDpcXG4gICAgICAgIDwvbGFiZWw+XFxuICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtc20tOSBjb2wteHMtOSBjb2wtbWQtOSBjb2wtbGctOVxcXCI+XFxuICAgICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgICBpZD1cXFwiaW5wdXRBZGROZXdHcm91cEdyb3VwZWRPcHRpb25cXFwiXFxuICAgICAgICAgICAgICB0eXBlPVxcXCJ0ZXh0XFxcIlxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCJcXG4gICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLm5ld0dyb3VwR3JvdXBlZFNlbGVjdC5zYWlzaWVcXFwiXFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiQWRkIG5ldyBncm91cFxcXCI+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtc20tMyBjb2wteHMtMyBjb2wtbWQtMyBjb2wtbGctM1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgIG5nLWNsaWNrPVxcXCJsZWZ0UGFuZWxDdHJsLmFkZE5ld0dyb3VwVG9Hcm91cGVkU2VsZWN0KClcXFwiPlxcbiAgICAgICAgICAgICAgYWRkXFxuICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGNsYXNzPVxcXCIgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgRWRpdC9SZW1vdmUgb3B0aW9ucy9ncm91cHM6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcy1cXFwiY29sLWxnLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgY29sLXhzLTEyXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLmdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MubGVuZ3RoID09PSAwXFxcIj5cXG4gICAgICAgICAgICAgIDxoNSBjbGFzcz1cXFwidGV4dC1jZW50ZXIgZ3JleVRleHRcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZW0+XFxuICAgICAgICAgICAgICAgICAgLSBubyBvcHRpb24gOiBhZGQgbmV3IG9wdGlvbnMgLVxcbiAgICAgICAgICAgICAgICA8L2VtPlxcbiAgICAgICAgICAgICAgPC9oNT5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8dGFibGVcXG4gICAgICAgICAgICAgIG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLmdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MubGVuZ3RoID4gMFxcXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVxcXCJ0YWJsZSB0YWJsZS1zdHJpcGVkXFxcIj5cXG4gICAgICAgICAgICAgIDx0aGVhZD5cXG4gICAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMjBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXJcXG4gICAgICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMjVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBcXG4gICAgICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMzBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uXFxuICAgICAgICAgICAgICAgICAgPC90aD5cXG4gICAgICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjI1XFxcIj48L3RoPlxcbiAgICAgICAgICAgICAgICA8L3RyPlxcbiAgICAgICAgICAgICAgICA8dHI+XFxuICAgICAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCIyMFxcXCI+PC90aD5cXG4gICAgICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjI1XFxcIj48L3RoPlxcbiAgICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMzBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJncm91cGVkU2VsZWN0RmlsdGVyXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwic2VhcmNoIGZvciBvcHRpb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJpbnB1dC1zbSBmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInNlYXJjaFxcXCIgLz5cXG4gICAgICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMjVcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICA8L3RoZWFkPlxcbiAgICAgICAgICAgICAgPHRib2R5PlxcbiAgICAgICAgICAgICAgPHRyXFxuICAgICAgICAgICAgICAgIG5nLXJlcGVhdD1cXFwiZ3JvdXBlZFNlbGVjdFJvdyBpbiBsZWZ0UGFuZWxDdHJsLmdyb3VwZWRTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MgfCBmaWx0ZXI6Z3JvdXBlZFNlbGVjdEZpbHRlciBhcyBncm91cGVkU2VsZWN0Um93XFxcIj5cXG4gICAgICAgICAgICAgICAgPHRkIHN0LXJhdGlvPVxcXCIyMFxcXCI+XFxuICAgICAgICAgICAgICAgICAge3skaW5kZXh9fVxcbiAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICA8dGQgc3QtcmF0aW89XFxcIjI1XFxcIj5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLmdyb3VwU2VsZWN0R3JvdXBDbGljay5zaG93TGlzdCA9PT0gdHJ1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLkdyb3VwZWRTZWxlY3RHcm91cHMubGlzdC5sZW5ndGggPT09IDBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cXFwidGV4dC1sZWZ0IG5vR3JvdXBUZXh0XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAtIGFkZCBuZXcgZ3JvdXBzIC1cXG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLkdyb3VwZWRTZWxlY3RHcm91cHMubGlzdC5sZW5ndGggPiAwXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPG9sXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcIm55YS1icy1zZWxlY3QgY29sLXNtLTEyIGNvbC14cy0xMiBjb2wtbWQtMTIgY29sLWxnMTIgZWRpdEdyb3VwZWRTZWxlY3RueWFTZWxlY3RcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImdyb3VwZWRTZWxlY3RSb3cuZ3JvdXBcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XFxcIm1vZGVsR3JvdXBlZE9wdGlvbkdyb3VwZWRDaG9vc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9XFxcImxlZnRQYW5lbEN0cmwuR3JvdXBlZFNlbGVjdEdyb3Vwcy5saXN0Lmxlbmd0aCA9PT0gMFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwibnlhLWJzLW9wdGlvblxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG55YS1icy1vcHRpb249XFxcIkdyb3VwZWRTZWxlY3RHcm91cCBpbiBsZWZ0UGFuZWxDdHJsLkdyb3VwZWRTZWxlY3RHcm91cHMubGlzdFxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVxcXCJHcm91cGVkU2VsZWN0R3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGE+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7R3JvdXBlZFNlbGVjdEdyb3VwfX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICA8L29sPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgPGRpdiBuZy1pZj1cXFwibGVmdFBhbmVsQ3RybC5ncm91cFNlbGVjdEdyb3VwQ2xpY2suc2hvd0xpc3QgPT09IGZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7Z3JvdXBlZFNlbGVjdFJvdy5ncm91cH19XFxuICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgIDx0ZCBzdC1yYXRpbz1cXFwiMzBcXFwiPlxcbiAgICAgICAgICAgICAgICAgIHt7Z3JvdXBlZFNlbGVjdFJvdy5vcHRpb259fVxcbiAgICAgICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgICAgICAgICA8dGQgc3QtcmF0aW89XFxcIjI1XFxcIj5cXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwdWxsLXJpZ2h0XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwudXBUaGlzR3JvdXBlZFNlbGVjdFJvdygkaW5kZXgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLWFycm93LXVwXFxcIj48L2k+XFxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwuZG93blRoaXNHcm91cGVkU2VsZWN0Um93KCRpbmRleClcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cXFwiZmEgZmEtYXJyb3ctZG93blxcXCI+PC9pPlxcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJidG4gYnRuLXdhcm5pbmdcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIG5nLWNsaWNrPVxcXCJsZWZ0UGFuZWxDdHJsLnNob3dHcm91cExpc3RUb0Nob29zZSgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXBlbmNpbC1zcXVhcmUtb1xcXCI+PC9pPlxcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJidG4gYnRuLWRhbmdlclxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgbmctY2xpY2s9XFxcImxlZnRQYW5lbEN0cmwucmVtb3ZlR3JvdXBlZFNlbGVjdFJvdygkaW5kZXgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXRyYXNoLW9cXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICA8L3Rib2R5PlxcbiAgICAgICAgICAgIDwvdGFibGU+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtYXJnaW5Ub3BGaXZlcGl4ZWxzXFxcIj48L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICAgIERlc2NyaXB0aW9uIDpcXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seURlc2NyaXB0aW9uXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgZGVzY3JpcHRpb24gaGVyZVxcXCI+XFxuICAgICAgICAgIDwvZGl2PlxcblxcdFxcdFxcdFxcdDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGxlZnQtcGFuZWwtdmFsaWQtZWRpdC1mb290ZXIgLz5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9Hcm91cGVkU2VsZWN0Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuZ3JvdXBlZFNlbGVjdENvbnRyb2wudGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gNDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 41 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_DATE_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelDateControlTemplate = __webpack_require__(42);\n\nvar _edaDragDropWayLeftpanelDateControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelDateControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_DATE_CONTROL_DIRECTIVE = 'leftPanelDateControl';\n\nfunction leftPanelDateControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelDateControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelDateControl.$inject = [];\n\nexports.default = leftPanelDateControl;\nexports.LEFT_PANEL_DATE_CONTROL_DIRECTIVE = LEFT_PANEL_DATE_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0RhdGVDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5kYXRlQ29udHJvbC5kaXJlY3RpdmUuanM/Yjg0NiJdLCJuYW1lcyI6WyJMRUZUX1BBTkVMX0RBVEVfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxEYXRlQ29udHJvbCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwidGVtcGxhdGUiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLG9DQUFvQyxzQkFBMUM7O0FBRUEsU0FBU0Msb0JBQVQsR0FBZ0M7QUFDOUIsTUFBSUMsWUFBWTtBQUNkQyxjQUFXLEdBREc7QUFFZEM7QUFGYyxHQUFoQjtBQUlBLFNBQU9GLFNBQVA7QUFDRDs7QUFFREQscUJBQXFCSSxPQUFyQixHQUErQixFQUEvQjs7a0JBRWVKLG9CO1FBR2JELGlDLEdBQUFBLGlDIiwiZmlsZSI6IjQxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgbGVmdFBhbmVsRGF0ZUNvbnRyb2xUZW1wbGF0ZSBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5kYXRlQ29udHJvbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9EQVRFX0NPTlRST0xfRElSRUNUSVZFID0gJ2xlZnRQYW5lbERhdGVDb250cm9sJztcblxuZnVuY3Rpb24gbGVmdFBhbmVsRGF0ZUNvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxEYXRlQ29udHJvbFRlbXBsYXRlXG4gIH07XG4gIHJldHVybiBkaXJlY3RpdmU7XG59XG5cbmxlZnRQYW5lbERhdGVDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsRGF0ZUNvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfREFURV9DT05UUk9MX0RJUkVDVElWRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9sZWZ0UGFuZWwvRGF0ZUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmRhdGVDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 42 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n \\n \\n \\n {{dateformat}}\\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Required :\\n \\n
    \\n
     
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0RhdGVDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5kYXRlQ29udHJvbC50ZW1wbGF0ZS5odG1sPzAyYjciXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbVBBQW1QLHltQkFBeW1CLFlBQVksOGpDQUE4akMiLCJmaWxlIjoiNDIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgIEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgPGxhYmVsIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgIERhdGUgZm9ybWF0IDpcXG4gICAgPC9sYWJlbD5cXG4gICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICA8b2xcXG4gICAgICAgIGNsYXNzPVxcXCJueWEtYnMtc2VsZWN0IGNvbC1zbS0xMiBjb2wteHMtMTIgY29sLW1kLTEyIGNvbC1sZzEyXFxcIlxcbiAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmRhdGVwaWNrZXJQb3B1cFxcXCJcXG4gICAgICAgIGlkPVxcXCJkYXRlZm9ybWF0U2VsZWN0XFxcIj5cXG4gICAgICAgIDxsaVxcbiAgICAgICAgICBjbGFzcz1cXFwibnlhLWJzLW9wdGlvblxcXCJcXG4gICAgICAgICAgbnlhLWJzLW9wdGlvbj1cXFwiZGF0ZWZvcm1hdCBpbiBsZWZ0UGFuZWxDdHJsLmRlbW9kdC5mb3JtYXRzXFxcIlxcbiAgICAgICAgICB2YWx1ZT1cXFwiZGF0ZWZvcm1hdFxcXCI+XFxuICAgICAgICAgIDxhPlxcbiAgICAgICAgICAgIHt7ZGF0ZWZvcm1hdH19XFxuICAgICAgICAgIDwvYT5cXG4gICAgICAgIDwvbGk+XFxuICAgICAgPC9vbD5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiaW5wdXRUZXh0TGFiZWxVcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCIgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgTGFiZWwgdGV4dCA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlMYWJlbFxcXCJcXG4gICAgICAgICAgICBpZD1cXFwiaW5wdXRUZXh0TGFiZWxVcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiUmVxdWlyZWRVcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb2wtbWQtNCBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBSZXF1aXJlZCA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLThcXFwiPlxcbiAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjaGVja2JveENzc0NvcnJlY3Rpb25cXFwiPiZuYnNwOzwvZGl2PlxcbiAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICB0eXBlPVxcXCJjaGVja2JveFxcXCJcXG4gICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5UmVxdWlyZWRcXFwiXFxuICAgICAgICAgICAgaWQ9XFxcIlJlcXVpcmVkVXBkYXRlXFxcIj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiRGVzY3JpcHRpb25VcGRhdGVcXFwiXFxuICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICBEZXNjcmlwdGlvbiA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlEZXNjcmlwdGlvblxcXCJcXG4gICAgICAgICAgICBpZD1cXFwiRGVzY3JpcHRpb25VcGRhdGVcXFwiXFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgZGVzY3JpcHRpb24gaGVyZVxcXCI+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8bGVmdC1wYW5lbC12YWxpZC1lZGl0LWZvb3RlciAvPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0RhdGVDb250cm9sL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5kYXRlQ29udHJvbC50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA0MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 43 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelCheckBoxControlTemplate = __webpack_require__(44);\n\nvar _edaDragDropWayLeftpanelCheckBoxControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelCheckBoxControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE = 'leftPanelCheckBoxControl';\n\nfunction leftPanelCheckBoxControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelCheckBoxControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelCheckBoxControl.$inject = [];\n\nexports.default = leftPanelCheckBoxControl;\nexports.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE = LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0NoZWNrQm94Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuY2hlY2tCb3hDb250cm9sLmRpcmVjdGl2ZS5qcz9iZjFhIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfQ0hFQ0tCT1hfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxDaGVja0JveENvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSx3Q0FBd0MsMEJBQTlDOztBQUVBLFNBQVNDLHdCQUFULEdBQW9DO0FBQ2xDLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHlCQUF5QkksT0FBekIsR0FBbUMsRUFBbkM7O2tCQUVlSix3QjtRQUdiRCxxQyxHQUFBQSxxQyIsImZpbGUiOiI0My5qcyIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IGxlZnRQYW5lbENoZWNrQm94Q29udHJvbFRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmNoZWNrQm94Q29udHJvbC50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgTEVGVF9QQU5FTF9DSEVDS0JPWF9DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxDaGVja0JveENvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxDaGVja0JveENvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxDaGVja0JveENvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxDaGVja0JveENvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxDaGVja0JveENvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfQ0hFQ0tCT1hfQ09OVFJPTF9ESVJFQ1RJVkVcbn07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0NoZWNrQm94Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuY2hlY2tCb3hDb250cm9sLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 44 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Label text :\\n \\n
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Required :\\n \\n
    \\n
     
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t\\t\\t
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n \\t\\t\\t
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0NoZWNrQm94Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuY2hlY2tCb3hDb250cm9sLnRlbXBsYXRlLmh0bWw/MzEwNSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAsdW5DQUF1bkMiLCJmaWxlIjoiNDQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7XFxuICAgICAgICAgIEVkaXQgcHJvcGVydGllcyA6XFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICBcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcImlucHV0VGV4dExhYmVsVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCIgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgICBMYWJlbCB0ZXh0IDpcXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seUxhYmVsXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcImlucHV0VGV4dExhYmVsVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgY29udHJvbCBsYWJlbCBoZXJlXFxcIj5cXG4gICAgICAgICAgPC9kaXY+XFxuICBcXHRcXHRcXHQ8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgPGxhYmVsXFxuICAgICAgICAgICAgZm9yPVxcXCJSZXF1aXJlZFVwZGF0ZVxcXCJcXG4gICAgICAgICAgICBjbGFzcz1cXFwiY29sLW1kLTQgY29udHJvbC1sYWJlbCBncmV5VGV4dCBlZGl0UHJvcGVydGllc0xhYmVsXFxcIj5cXG4gICAgICAgICAgICBSZXF1aXJlZCA6XFxuICAgICAgICAgIDwvbGFiZWw+XFxuICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjaGVja2JveENzc0NvcnJlY3Rpb25cXFwiPiZuYnNwOzwvZGl2PlxcbiAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgdHlwZT1cXFwiY2hlY2tib3hcXFwiXFxuICAgICAgICAgICAgICBuZy1tb2RlbD1cXFwibGVmdFBhbmVsQ3RybC5wcm94eU1vZGVsLnRlbXBvcnlDb25maWcuZm9ybWx5UmVxdWlyZWRcXFwiXFxuICAgICAgICAgICAgICBpZD1cXFwiUmVxdWlyZWRVcGRhdGVcXFwiPlxcbiAgICAgICAgICA8L2Rpdj5cXG4gIFxcdFxcdFxcdDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFyZ2luVG9wRml2ZXBpeGVsc1xcXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICBcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgICA8bGFiZWxcXG4gICAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgIGNsYXNzPVxcXCJjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgICAgIERlc2NyaXB0aW9uIDpcXG4gICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiXFxcIj5cXG4gICAgICAgICAgICA8aW5wdXRcXG4gICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwucHJveHlNb2RlbC50ZW1wb3J5Q29uZmlnLmZvcm1seURlc2NyaXB0aW9uXFxcIlxcbiAgICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XFxcIkFkZCAvIGVkaXQgZGVzY3JpcHRpb24gaGVyZVxcXCI+XFxuICAgICAgICAgIDwvZGl2PlxcbiAgXFx0XFx0XFx0PC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPC9kaXY+XFxuICA8bGVmdC1wYW5lbC12YWxpZC1lZGl0LWZvb3RlciAvPlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0NoZWNrQm94Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuY2hlY2tCb3hDb250cm9sLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDQ0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 45 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelBlankControlTemplate = __webpack_require__(46);\n\nvar _edaDragDropWayLeftpanelBlankControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelBlankControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_BLANK_CONTROL_DIRECTIVE = 'leftPanelBlankControl';\n\nfunction leftPanelBlankControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelBlankControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelBlankControl.$inject = [];\n\nexports.default = leftPanelBlankControl;\nexports.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE = LEFT_PANEL_BLANK_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0JsYW5rQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmxhbmtDb250cm9sLmRpcmVjdGl2ZS5qcz8xY2JmIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfQkxBTktfQ09OVFJPTF9ESVJFQ1RJVkUiLCJsZWZ0UGFuZWxCbGFua0NvbnRyb2wiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOzs7Ozs7QUFFQSxJQUFNQSxxQ0FBcUMsdUJBQTNDOztBQUVBLFNBQVNDLHFCQUFULEdBQWlDO0FBQy9CLE1BQUlDLFlBQVk7QUFDZEMsY0FBVyxHQURHO0FBRWRDO0FBRmMsR0FBaEI7QUFJQSxTQUFPRixTQUFQO0FBQ0Q7O0FBRURELHNCQUFzQkksT0FBdEIsR0FBZ0MsRUFBaEM7O2tCQUVlSixxQjtRQUdiRCxrQyxHQUFBQSxrQyIsImZpbGUiOiI0NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBsZWZ0UGFuZWxCbGFua0NvbnRyb2xUZW1wbGF0ZSBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmxlZnRwYW5lbC5ibGFua0NvbnRyb2wudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IExFRlRfUEFORUxfQkxBTktfQ09OVFJPTF9ESVJFQ1RJVkUgPSAnbGVmdFBhbmVsQmxhbmtDb250cm9sJztcblxuZnVuY3Rpb24gbGVmdFBhbmVsQmxhbmtDb250cm9sKCkge1xuICBsZXQgZGlyZWN0aXZlID0ge1xuICAgIHJlc3RyaWN0IDogJ0UnLFxuICAgIHRlbXBsYXRlIDogbGVmdFBhbmVsQmxhbmtDb250cm9sVGVtcGxhdGVcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcbn1cblxubGVmdFBhbmVsQmxhbmtDb250cm9sLiRpbmplY3QgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgbGVmdFBhbmVsQmxhbmtDb250cm9sO1xuXG5leHBvcnQge1xuICBMRUZUX1BBTkVMX0JMQU5LX0NPTlRST0xfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9CbGFua0NvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmJsYW5rQ29udHJvbC5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 46 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n   \\n Edit :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n Column will be blank\\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0JsYW5rQ29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmxhbmtDb250cm9sLnRlbXBsYXRlLmh0bWw/NGNiZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAiLCJmaWxlIjoiNDYuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCI+XFxuICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIDxpIGNsYXNzPVxcXCJmYSBmYS1wZW5jaWwtc3F1YXJlLW9cXFwiPjwvaT5cXG4gICAgICAgICAgJm5ic3A7IFxcbiAgICAgICAgICBFZGl0IDpcXG4gICAgICAgIDwvaDU+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PiBcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wtc20tMTJcXFwiPlxcbiAgICAgICAgPGg1IGNsYXNzPVxcXCJ0ZXh0LWNlbnRlciBncmV5VGV4dFxcXCI+XFxuICAgICAgICAgIENvbHVtbiB3aWxsIGJlIGJsYW5rXFxuICAgICAgICA8L2g1PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2PlxcbiAgPGxlZnQtcGFuZWwtdmFsaWQtZWRpdC1mb290ZXIgLz5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9CbGFua0NvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmJsYW5rQ29udHJvbC50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA0NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 47 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE = undefined;\n\nvar _edaDragDropWayLeftpanelBasicSelectControlTemplate = __webpack_require__(48);\n\nvar _edaDragDropWayLeftpanelBasicSelectControlTemplate2 = _interopRequireDefault(_edaDragDropWayLeftpanelBasicSelectControlTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE = 'leftPanelBasicSelectControl';\n\nfunction leftPanelBasicSelectControl() {\n var directive = {\n restrict: 'E',\n template: _edaDragDropWayLeftpanelBasicSelectControlTemplate2.default\n };\n return directive;\n}\n\nleftPanelBasicSelectControl.$inject = [];\n\nexports.default = leftPanelBasicSelectControl;\nexports.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE = LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0Jhc2ljU2VsZWN0Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmFzaWNTZWxlY3RDb250cm9sLmRpcmVjdGl2ZS5qcz84YmNhIl0sIm5hbWVzIjpbIkxFRlRfUEFORUxfQkFTSUNfU0VMRUNUX0NPTlRST0xfRElSRUNUSVZFIiwibGVmdFBhbmVsQmFzaWNTZWxlY3RDb250cm9sIiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJ0ZW1wbGF0ZSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7Ozs7O0FBRUEsSUFBTUEsNENBQTRDLDZCQUFsRDs7QUFFQSxTQUFTQywyQkFBVCxHQUF1QztBQUNyQyxNQUFJQyxZQUFZO0FBQ2RDLGNBQVcsR0FERztBQUVkQztBQUZjLEdBQWhCO0FBSUEsU0FBT0YsU0FBUDtBQUNEOztBQUVERCw0QkFBNEJJLE9BQTVCLEdBQXNDLEVBQXRDOztrQkFFZUosMkI7UUFHYkQseUMsR0FBQUEseUMiLCJmaWxlIjoiNDcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbGVmdFBhbmVsQmFzaWNTZWxlY3RDb250cm9sVGVtcGxhdGUgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmFzaWNTZWxlY3RDb250cm9sLnRlbXBsYXRlLmh0bWwnO1xuXG5jb25zdCBMRUZUX1BBTkVMX0JBU0lDX1NFTEVDVF9DT05UUk9MX0RJUkVDVElWRSA9ICdsZWZ0UGFuZWxCYXNpY1NlbGVjdENvbnRyb2wnO1xuXG5mdW5jdGlvbiBsZWZ0UGFuZWxCYXNpY1NlbGVjdENvbnRyb2woKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgcmVzdHJpY3QgOiAnRScsXG4gICAgdGVtcGxhdGUgOiBsZWZ0UGFuZWxCYXNpY1NlbGVjdENvbnRyb2xUZW1wbGF0ZVxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xufVxuXG5sZWZ0UGFuZWxCYXNpY1NlbGVjdENvbnRyb2wuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBsZWZ0UGFuZWxCYXNpY1NlbGVjdENvbnRyb2w7XG5cbmV4cG9ydCB7XG4gIExFRlRfUEFORUxfQkFTSUNfU0VMRUNUX0NPTlRST0xfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9CYXNpY1NlbGVjdENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmJhc2ljU2VsZWN0Q29udHJvbC5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 48 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n \\n  \\n Edit properties :\\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n Add new options :\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n \\n add\\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\n - no option : add new options -\\n \\n
    \\n
    \\n 0\\\"\\n class=\\\"table table-striped\\\">\\n \\n \\n \\n order\\n \\n \\n option\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n {{$index}}\\n \\n \\n {{basicSelectRow.option}}\\n \\n \\n
    \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
    \\n \\n \\n \\n \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n \\t
    \\n \\n Description :\\n \\n
    \\n \\n
    \\n \\t
    \\n
    \\n
    \\n
    \\n \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvbGVmdFBhbmVsL0Jhc2ljU2VsZWN0Q29udHJvbC9lZGFEcmFnRHJvcFdheS5sZWZ0cGFuZWwuYmFzaWNTZWxlY3RDb250cm9sLnRlbXBsYXRlLmh0bWw/ZWI1OCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtUEFBbVAscXlGQUFxeUYsUUFBUSx5RkFBeUYsdUJBQXVCIiwiZmlsZSI6IjQ4LmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXYgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHRcXFwiPlxcbiAgPGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLW1kLTEyXFxcIj5cXG4gICAgICAgIDxoNSBjbGFzcz1cXFwiZ3JleVRleHRcXFwiPlxcbiAgICAgICAgICA8aSBjbGFzcz1cXFwiZmEgZmEtcGVuY2lsLXNxdWFyZS1vXFxcIj48L2k+XFxuICAgICAgICAgICZuYnNwO1xcbiAgICAgICAgICBFZGl0IHByb3BlcnRpZXMgOlxcbiAgICAgICAgPC9oNT5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtbWQtMTJcXFwiPlxcbiAgICAgICAgPGxhYmVsXFxuICAgICAgICAgIGZvcj1cXFwiYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uXFxcIlxcbiAgICAgICAgICBjbGFzcz1cXFwiIGNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgIEFkZCBuZXcgb3B0aW9ucyA6XFxuICAgICAgICA8L2xhYmVsPlxcbiAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXNtLTkgY29sLXhzLTkgY29sLW1kLTkgY29sLWxnLTlcXFwiPlxcbiAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgdHlwZT1cXFwidGV4dFxcXCJcXG4gICAgICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgICAgICBpZD1cXFwiaW5wdXRBZGROZXdCYXNpY09wdGlvblxcXCJcXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVxcXCJhZGQgbmV3IG9wdGlvblxcXCJcXG4gICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLm5ld09wdGlvbkJhc2ljU2VsZWN0LnNhaXNpZVxcXCI+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXNtLTMgY29sLXhzLTMgY29sLW1kLTMgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgICBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIlxcbiAgICAgICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5hZGROZXdPcHRpb25CYXNpY1NlbGVjdCgpXFxcIj5cXG4gICAgICAgICAgICAgICAgYWRkXFxuICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgIDxkaXYgY2xhc3M9XFxcImNvbC1sZy0xMiBjb2wtbWQtMTJcXFwiPlxcbiAgICAgICA8bGFiZWwgY2xhc3M9XFxcIiBjb250cm9sLWxhYmVsIGdyZXlUZXh0IGVkaXRQcm9wZXJ0aWVzTGFiZWxcXFwiPlxcbiAgICAgICAgIEVkaXQvUmVtb3ZlIG9wdGlvbnMgOlxcbiAgICAgICA8L2xhYmVsPlxcbiAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcy1cXFwiY29sLWxnLTEyIGNvbC1tZC0xMiBjb2wtc20tMTIgY29sLXhzLTEyXFxcIj5cXG4gICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJsZWZ0UGFuZWxDdHJsLmJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbi5yb3dzLmxlbmd0aCA9PT0gMFxcXCI+XFxuICAgICAgICAgICAgICA8aDUgY2xhc3M9XFxcInRleHQtY2VudGVyIGdyZXlUZXh0XFxcIj5cXG4gICAgICAgICAgICAgICAgPGVtPlxcbiAgICAgICAgICAgICAgICAgIC0gbm8gb3B0aW9uIDogYWRkIG5ldyBvcHRpb25zIC1cXG4gICAgICAgICAgICAgICAgPC9lbT5cXG4gICAgICAgICAgICAgIDwvaDU+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPHRhYmxlXFxuICAgICAgICAgICAgICBuZy1pZj1cXFwibGVmdFBhbmVsQ3RybC5iYXNpY1NlbGVjdFJvd0NvbGxlY3Rpb24ucm93cy5sZW5ndGggPiAwXFxcIlxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcInRhYmxlIHRhYmxlLXN0cmlwZWRcXFwiPlxcbiAgICAgICAgICAgICAgPHRoZWFkPlxcbiAgICAgICAgICAgICAgPHRyPlxcbiAgICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjIwXFxcIj5cXG4gICAgICAgICAgICAgICAgICBvcmRlclxcbiAgICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjU1XFxcIj5cXG4gICAgICAgICAgICAgICAgICBvcHRpb25cXG4gICAgICAgICAgICAgICAgPC90aD5cXG4gICAgICAgICAgICAgICAgPHRoIHN0LXJhdGlvPVxcXCIyNVxcXCI+PC90aD5cXG4gICAgICAgICAgICAgIDwvdHI+XFxuICAgICAgICAgICAgICA8dHI+XFxuICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiMjBcXFwiPjwvdGg+XFxuICAgICAgICAgICAgICAgIDx0aCBzdC1yYXRpbz1cXFwiNTVcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxcbiAgICAgICAgICAgICAgICAgICAgbmctbW9kZWw9XFxcImxlZnRQYW5lbEN0cmwuYmFzaWNTZWxlY3RGaWx0ZXJcXFwiXFxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwic2VhcmNoIGZvciBvcHRpb25cXFwiXFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiaW5wdXQtc20gZm9ybS1jb250cm9sXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwic2VhcmNoXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8L3RoPlxcbiAgICAgICAgICAgICAgICA8dGggc3QtcmF0aW89XFxcIjI1XFxcIj48L3RoPlxcbiAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgICAgIDwvdGhlYWQ+XFxuICAgICAgICAgICAgICA8dGJvZHk+XFxuICAgICAgICAgICAgICAgIDx0ciBuZy1yZXBlYXQ9XFxcImJhc2ljU2VsZWN0Um93IGluIGxlZnRQYW5lbEN0cmwuYmFzaWNTZWxlY3RSb3dDb2xsZWN0aW9uLnJvd3MgfCBmaWx0ZXI6YmFzaWNTZWxlY3RGaWx0ZXIgYXMgYmFzaWNTZWxlY3RSb3dcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDx0ZCBzdC1yYXRpbz1cXFwiMjBcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAge3skaW5kZXh9fVxcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XFxuICAgICAgICAgICAgICAgICAgPHRkIHN0LXJhdGlvPVxcXCI1NVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7e2Jhc2ljU2VsZWN0Um93Lm9wdGlvbn19XFxuICAgICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgICA8dGQgc3QtcmF0aW89XFxcIjI1XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInB1bGwtcmlnaHRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC51cFRoaXNSb3coJGluZGV4KVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLWFycm93LXVwXFxcIj48L2k+XFxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5kb3duVGhpc1JvdygkaW5kZXgpXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cXFwiZmEgZmEtYXJyb3ctZG93blxcXCI+PC9pPlxcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJidG4gYnRuLWRhbmdlclxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICBuZy1jbGljaz1cXFwibGVmdFBhbmVsQ3RybC5yZW1vdmVSb3coJGluZGV4KVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XFxcImZhIGZhLXRyYXNoLW9cXFwiPjwvaT5cXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICAgICAgPC90cj5cXG4gICAgICAgICAgICAgIDwvdGJvZHk+XFxuICAgICAgICAgICAgPC90YWJsZT5cXG4gICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1hcmdpblRvcEZpdmVwaXhlbHNcXFwiPjwvZGl2PlxcbiAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgIFxcdDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCI+XFxuICAgICAgICAgICAgPGxhYmVsXFxuICAgICAgICAgICAgICBmb3I9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImNvbnRyb2wtbGFiZWwgZ3JleVRleHQgZWRpdFByb3BlcnRpZXNMYWJlbFxcXCI+XFxuICAgICAgICAgICAgICBEZXNjcmlwdGlvbiA6XFxuICAgICAgICAgICAgPC9sYWJlbD5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJcXFwiPlxcbiAgICAgICAgICAgICAgPGlucHV0XFxuICAgICAgICAgICAgICAgIHR5cGU9XFxcInRleHRcXFwiXFxuICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuICAgICAgICAgICAgICAgIG5nLW1vZGVsPVxcXCJsZWZ0UGFuZWxDdHJsLnByb3h5TW9kZWwudGVtcG9yeUNvbmZpZy5mb3JtbHlEZXNjcmlwdGlvblxcXCJcXG4gICAgICAgICAgICAgICAgaWQ9XFxcIkRlc2NyaXB0aW9uVXBkYXRlXFxcIlxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cXFwiQWRkIC8gZWRpdCBkZXNjcmlwdGlvbiBoZXJlXFxcIj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcdDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgPGxlZnQtcGFuZWwtdmFsaWQtZWRpdC1mb290ZXIgLz5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2xlZnRQYW5lbC9CYXNpY1NlbGVjdENvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkubGVmdHBhbmVsLmJhc2ljU2VsZWN0Q29udHJvbC50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA0OFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 49 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaDragDropWayFormlyProxyFormFieldManage = __webpack_require__(50);\n\nvar _edaDragDropWayFormlyProxyFormFieldManage2 = _interopRequireDefault(_edaDragDropWayFormlyProxyFormFieldManage);\n\nvar _edaDragDropWayFormlyProxyFormFieldManage3 = __webpack_require__(51);\n\nvar _edaDragDropWayFormlyProxyFormFieldManage4 = _interopRequireDefault(_edaDragDropWayFormlyProxyFormFieldManage3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar FORMLY_PROXY_MODULE = '';\n\nexports.default = angular.module(FORMLY_PROXY_MODULE, []).service(_edaDragDropWayFormlyProxyFormFieldManage.FORM_FIELD_MANAGE_SERVICE, _edaDragDropWayFormlyProxyFormFieldManage2.default).provider(_edaDragDropWayFormlyProxyFormFieldManage3.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER, _edaDragDropWayFormlyProxyFormFieldManage4.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLm1vZHVsZS5qcz9kZmRmIl0sIm5hbWVzIjpbIkZPUk1MWV9QUk9YWV9NT0RVTEUiLCJhbmd1bGFyIiwibW9kdWxlIiwic2VydmljZSIsInByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7OztBQUlBOzs7Ozs7QUFNQSxJQUFNQSxzQkFBc0IsRUFBNUI7O2tCQUVlQyxRQUNFQyxNQURGLENBQ1NGLG1CQURULEVBQzhCLEVBRDlCLEVBRUVHLE9BRkYsMEhBR0VDLFFBSEYsd0kiLCJmaWxlIjoiNDkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZm9ybUZpZWxkTWFuYWdlLCB7XG4gIEZPUk1fRklFTERfTUFOQUdFX1NFUlZJQ0Vcbn0gICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5mb3JtbHlQcm94eS5mb3JtRmllbGRNYW5hZ2Uuc2VydmljZSc7XG5cbmltcG9ydCBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMsIHtcbiAgRUFTWV9GT1JNX0ZPUk1MWV9CSU5ESU5HX01PREVMX1BST1ZJREVSXG59ICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyJztcblxuXG5cbmNvbnN0IEZPUk1MWV9QUk9YWV9NT0RVTEUgPSAnJztcblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuICAgICAgICAgICAgICAgIC5tb2R1bGUoRk9STUxZX1BST1hZX01PRFVMRSwgW10pXG4gICAgICAgICAgICAgICAgLnNlcnZpY2UoRk9STV9GSUVMRF9NQU5BR0VfU0VSVklDRSwgZm9ybUZpZWxkTWFuYWdlKVxuICAgICAgICAgICAgICAgIC5wcm92aWRlcihFQVNZX0ZPUk1fRk9STUxZX0JJTkRJTkdfTU9ERUxfUFJPVklERVIsIEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscyk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2Zvcm1seVByb3h5L2VkYURyYWdEcm9wV2F5LmZvcm1seVByb3h5LmZvcm1GaWVsZE1hbmFnZS5tb2R1bGUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 50 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FORM_FIELD_MANAGE_SERVICE = 'formFieldManage';\n\nvar formFieldManage = function () {\n function formFieldManage(EasyFormGenFormlyBindingModels) {\n _classCallCheck(this, formFieldManage);\n\n this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels;\n this.init();\n }\n\n _createClass(formFieldManage, [{\n key: 'init',\n value: function init() {}\n\n /**\n * At initial state : configuration model will contain 1 line, since :\n * -> it is non sense to create a form without a single line (no line = no form at all)\n * -> so it is non sense to force user to add a first line\n *\n * PLEASE NOTE columns array contains objects that look like formly fields one\n */\n\n }, {\n key: 'initConfigurationEditFromScratch',\n value: function initConfigurationEditFromScratch(configurationModel, addStepWayProperties) {\n var configurationModelInit = this.EasyFormGenFormlyBindingModels.getEasyFormInitialStateConfigurationModel(addStepWayProperties);\n angular.copy(configurationModelInit, configurationModel);\n }\n\n /**\n * Get an configuration empty (no init line) then empty it with lines array provided in param\n * @param object - configurationModel [configuration model]\n * @param array - lines [an array : lines to apply to an empty configuration model]\n * @param bool - addStepWayProperties [description]\n * @return {object message} [give details on how it happened to caller]\n */\n\n }, {\n key: 'bindConfigurationLines',\n value: function bindConfigurationLines(configurationModel, lines, addStepWayProperties) {\n if (Object.prototype.toString.call(lines) === '[object Array]') {\n var configurationModelResult = this.EasyFormGenFormlyBindingModels.getEasyFormReloadConfigurationModel(addStepWayProperties);\n configurationModelResult.lines = [].concat(lines);\n angular.copy(configurationModelResult, configurationModel);\n return this.getMessageObject('configuration model is bound', 'lines are bound to configuration model.');\n } else {\n return this.getErrorObject('lines is not an array', 'Checks lines type, it is not an array.');\n }\n }\n\n /**\n * applyConfigurationToformlyModel :\n * - bind configuration model into formly field model\n * - reset dataModel (formlyfield may have changed so previous dataModel would be false)\n * @param configurationModel\n * @param formlyModel\n * @param formlyDataModel\n */\n\n }, {\n key: 'applyConfigurationToformlyModel',\n value: function applyConfigurationToformlyModel(configurationModel, formlyModel, formlyDataModel) {\n this.resetFormlyModel(formlyModel);\n this.resetDataModel(formlyDataModel);\n var lineNumber = configurationModel.lines.length;\n for (var i = 0; i < lineNumber; i++) {\n this.AddNColumnControl(formlyModel, configurationModel, i);\n }\n }\n }, {\n key: 'resetFormlyModel',\n value: function resetFormlyModel(formlyModel) {\n var resetformly = [];\n angular.copy(resetformly, formlyModel);\n }\n }, {\n key: 'AddNColumnControl',\n value: function AddNColumnControl(formlyModel, configurationModel, lineIndex) {\n var _this = this;\n\n var numberOfColumns = configurationModel.lines[lineIndex].columns.length;\n /**\n * push formly model\n * here : only className and empty fieldGroup (controls != header)\n * if header will be reset to set a template (at least we have now indexFormlyModel)\n */\n var rawFormlyModel = {\n className: 'row',\n fieldGroup: []\n };\n //get index formlyModel for this line :\n var indexFormlyModel = formlyModel.push(rawFormlyModel) - 1;\n\n // iterates through controls in the line\n configurationModel.lines[lineIndex].columns.forEach(function (column) {\n var controlTemplate = {};\n if (typeof controlTemplate !== 'undefined' &&\n // column.control.type !== 'header' &&\n // column.control.type !== 'subTitle' &&\n column.control.type !== 'none') {\n /**\n * controls : getFormlyControlTemplateForNcolumnLine()\n *\n * @PARAM numberOfColumns : integer to deduce cssClss to apply\n * @PARAM column.control.type : to add if needed specific properties (example : datepicker)\n */\n if (column.control.type === 'header' || column.control.type === 'subTitle') {\n var headerTextContent = column.control.templateOptions.description;\n controlTemplate.template = _this.EasyFormGenFormlyBindingModels.getHeaderTemplateForNcolumnLine(numberOfColumns, headerTextContent).template;\n controlTemplate.className = _this.EasyFormGenFormlyBindingModels.getRawHeaderTemplates().selectedClass;\n } else {\n controlTemplate = _this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(numberOfColumns, column.control.type);\n /**\n * NEED REFACTOR HERE\n * should bind properties dynamically\n *\n * TODO need to validate all controls (datepicker may not work)\n * need to refactor\n */\n controlTemplate.className = column.control.className;\n controlTemplate.type = column.control.type;\n controlTemplate.key = column.control.key;\n controlTemplate.templateOptions.type = column.control.templateOptions.type;\n controlTemplate.templateOptions.label = column.control.templateOptions.label;\n controlTemplate.templateOptions.required = column.control.templateOptions.required;\n controlTemplate.templateOptions.placeholder = column.control.templateOptions.placeholder;\n controlTemplate.templateOptions.description = column.control.templateOptions.description;\n controlTemplate.templateOptions.options = [].concat(column.control.templateOptions.options);\n\n if (typeof controlTemplate.templateOptions.datepickerPopup !== 'undefined') column.control.templateOptions.datepickerPopup = controlTemplate.templateOptions.datepickerPopup;\n }\n /**\n * popuplate properties\n */\n\n /**\n * push control into formly model in its group\n */\n\n /**\n * need to catch this random error\n */\n formlyModel[indexFormlyModel].fieldGroup.push(controlTemplate);\n }\n });\n }\n }, {\n key: 'isTemplateOptionDefined',\n value: function isTemplateOptionDefined(obj) {\n return typeof obj.templateOptions !== 'undefined' ? true : false;\n }\n }, {\n key: 'extractTemplateOptionLabel',\n value: function extractTemplateOptionLabel(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.label !== 'undefined' ? obj.templateOptions.label : '' : '';\n }\n }, {\n key: 'extractTemplateOptionDatepickerPopup',\n value: function extractTemplateOptionDatepickerPopup(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.datepickerPopup !== 'undefined' ? obj.templateOptions.datepickerPopup : '' : '';\n }\n }, {\n key: 'extractTemplateOptionRequired',\n value: function extractTemplateOptionRequired(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.required !== 'undefined' ? obj.templateOptions.required : '' : '';\n }\n //radio and select\n\n }, {\n key: 'extractTemplateOptionOptions',\n value: function extractTemplateOptionOptions(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.options !== 'undefined' ? obj.templateOptions.options : '' : '';\n }\n }, {\n key: 'extractTemplateOptionType',\n value: function extractTemplateOptionType(obj) {\n return typeof obj.subtype !== 'undefined' ? obj.subtype : '';\n }\n }, {\n key: 'extractTemplateOptionPlaceholder',\n value: function extractTemplateOptionPlaceholder(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.placeholder !== 'undefined' ? obj.templateOptions.placeholder : '' : '';\n }\n }, {\n key: 'extractTemplateOptionDescription',\n value: function extractTemplateOptionDescription(obj) {\n return typeof obj.templateOptions !== 'undefined' ? typeof obj.templateOptions.description !== 'undefined' ? obj.templateOptions.description : '' : '';\n }\n\n // formly model functions\n\n }, {\n key: 'resetDataModel',\n value: function resetDataModel(obj) {\n var emptyDataModel = {};\n angular.copy(emptyDataModel, obj);\n return true;\n }\n\n // custom errors\n\n }, {\n key: 'getErrorObject',\n value: function getErrorObject(errorTitle, errorMessage) {\n var messageObj = {\n noError: false,\n title: '',\n Message: ''\n };\n messageObj.noError = false;\n messageObj.title = errorTitle;\n messageObj.Message = errorMessage;\n return messageObj;\n }\n }, {\n key: 'getMessageObject',\n value: function getMessageObject(messageTitle, messageBody) {\n var messageObj = {\n noError: false,\n title: '',\n Message: ''\n };\n messageObj.noError = true;\n messageObj.title = messageTitle;\n messageObj.Message = messageBody;\n return messageObj;\n }\n }]);\n\n return formFieldManage;\n}();\n\nformFieldManage.$inject = ['EasyFormGenFormlyBindingModels'];\n\nexports.default = formFieldManage;\nexports.FORM_FIELD_MANAGE_SERVICE = FORM_FIELD_MANAGE_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnNlcnZpY2UuanM/MTg3NyJdLCJuYW1lcyI6WyJGT1JNX0ZJRUxEX01BTkFHRV9TRVJWSUNFIiwiZm9ybUZpZWxkTWFuYWdlIiwiRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzIiwiaW5pdCIsImNvbmZpZ3VyYXRpb25Nb2RlbCIsImFkZFN0ZXBXYXlQcm9wZXJ0aWVzIiwiY29uZmlndXJhdGlvbk1vZGVsSW5pdCIsImdldEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsIiwiYW5ndWxhciIsImNvcHkiLCJsaW5lcyIsIk9iamVjdCIsInByb3RvdHlwZSIsInRvU3RyaW5nIiwiY2FsbCIsImNvbmZpZ3VyYXRpb25Nb2RlbFJlc3VsdCIsImdldEVhc3lGb3JtUmVsb2FkQ29uZmlndXJhdGlvbk1vZGVsIiwiY29uY2F0IiwiZ2V0TWVzc2FnZU9iamVjdCIsImdldEVycm9yT2JqZWN0IiwiZm9ybWx5TW9kZWwiLCJmb3JtbHlEYXRhTW9kZWwiLCJyZXNldEZvcm1seU1vZGVsIiwicmVzZXREYXRhTW9kZWwiLCJsaW5lTnVtYmVyIiwibGVuZ3RoIiwiaSIsIkFkZE5Db2x1bW5Db250cm9sIiwicmVzZXRmb3JtbHkiLCJsaW5lSW5kZXgiLCJudW1iZXJPZkNvbHVtbnMiLCJjb2x1bW5zIiwicmF3Rm9ybWx5TW9kZWwiLCJjbGFzc05hbWUiLCJmaWVsZEdyb3VwIiwiaW5kZXhGb3JtbHlNb2RlbCIsInB1c2giLCJmb3JFYWNoIiwiY29sdW1uIiwiY29udHJvbFRlbXBsYXRlIiwiY29udHJvbCIsInR5cGUiLCJoZWFkZXJUZXh0Q29udGVudCIsInRlbXBsYXRlT3B0aW9ucyIsImRlc2NyaXB0aW9uIiwidGVtcGxhdGUiLCJnZXRIZWFkZXJUZW1wbGF0ZUZvck5jb2x1bW5MaW5lIiwiZ2V0UmF3SGVhZGVyVGVtcGxhdGVzIiwic2VsZWN0ZWRDbGFzcyIsImdldEZvcm1seUNvbnRyb2xUZW1wbGF0ZUZvck5jb2x1bW5MaW5lIiwia2V5IiwibGFiZWwiLCJyZXF1aXJlZCIsInBsYWNlaG9sZGVyIiwib3B0aW9ucyIsImRhdGVwaWNrZXJQb3B1cCIsIm9iaiIsInN1YnR5cGUiLCJlbXB0eURhdGFNb2RlbCIsImVycm9yVGl0bGUiLCJlcnJvck1lc3NhZ2UiLCJtZXNzYWdlT2JqIiwibm9FcnJvciIsInRpdGxlIiwiTWVzc2FnZSIsIm1lc3NhZ2VUaXRsZSIsIm1lc3NhZ2VCb2R5IiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQU1BLDRCQUE0QixpQkFBbEM7O0lBRU1DLGU7QUFFSiwyQkFBWUMsOEJBQVosRUFBNEM7QUFBQTs7QUFDMUMsU0FBS0EsOEJBQUwsR0FBc0NBLDhCQUF0QztBQUNBLFNBQUtDLElBQUw7QUFDRDs7OzsyQkFFTSxDQUVOOztBQUVEOzs7Ozs7Ozs7O3FEQU9pQ0Msa0IsRUFBb0JDLG9CLEVBQXNCO0FBQ3pFLFVBQUlDLHlCQUF5QixLQUFLSiw4QkFBTCxDQUFvQ0sseUNBQXBDLENBQThFRixvQkFBOUUsQ0FBN0I7QUFDQUcsY0FBUUMsSUFBUixDQUFhSCxzQkFBYixFQUFxQ0Ysa0JBQXJDO0FBQ0Q7O0FBRUQ7Ozs7Ozs7Ozs7MkNBT3VCQSxrQixFQUFvQk0sSyxFQUFPTCxvQixFQUFxQjtBQUNyRSxVQUFJTSxPQUFPQyxTQUFQLENBQWlCQyxRQUFqQixDQUEwQkMsSUFBMUIsQ0FBK0JKLEtBQS9CLE1BQTBDLGdCQUE5QyxFQUFpRTtBQUMvRCxZQUFJSywyQkFBMkIsS0FBS2IsOEJBQUwsQ0FBb0NjLG1DQUFwQyxDQUF3RVgsb0JBQXhFLENBQS9CO0FBQ0FVLGlDQUF5QkwsS0FBekIsR0FBaUMsR0FBR08sTUFBSCxDQUFVUCxLQUFWLENBQWpDO0FBQ0FGLGdCQUFRQyxJQUFSLENBQWFNLHdCQUFiLEVBQXVDWCxrQkFB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QWM7QUFDaEJDLGlCQUFZLEtBREk7QUFFaEJDLGVBQVksRUFGSTtBQUdoQkMsaUJBQVk7QUFISSxPQUFsQjtBQUtBSCxpQkFBV0MsT0FBWCxHQUFzQixLQUF0QjtBQUNBRCxpQkFBV0UsS0FBWCxHQUFzQkosVUFBdEI7QUFDQUUsaUJBQVdHLE9BQVgsR0FBc0JKLFlBQXRCO0FBQ0EsYUFBT0MsVUFBUDtBQUNEOzs7cUNBRWdCSSxZLEVBQWNDLFcsRUFBWTtBQUN6QyxVQUFJTCxhQUFjO0FBQ2hCQyxpQkFBWSxLQURJO0FBRWhCQyxlQUFZLEVBRkk7QUFHaEJDLGlCQUFZO0FBSEksT0FBbEI7QUFLQUgsaUJBQVdDLE9BQVgsR0FBd0IsSUFBeEI7QUFDQUQsaUJBQVdFLEtBQVgsR0FBd0JFLFlBQXhCO0FBQ0FKLGlCQUFXRyxPQUFYLEdBQXdCRSxXQUF4QjtBQUNBLGFBQU9MLFVBQVA7QUFDRDs7Ozs7O0FBSUg1RCxnQkFBZ0JrRSxPQUFoQixHQUEwQixDQUN4QixnQ0FEd0IsQ0FBMUI7O2tCQUllbEUsZTtRQUdiRCx5QixHQUFBQSx5QiIsImZpbGUiOiI1MC5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEZPUk1fRklFTERfTUFOQUdFX1NFUlZJQ0UgPSAnZm9ybUZpZWxkTWFuYWdlJztcblxuY2xhc3MgZm9ybUZpZWxkTWFuYWdle1xuXG4gIGNvbnN0cnVjdG9yKEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscykge1xuICAgIHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzID0gRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzO1xuICAgIHRoaXMuaW5pdCgpO1xuICB9XG5cbiAgaW5pdCgpIHtcblxuICB9XG5cbiAgLyoqXG4gICAqIEF0IGluaXRpYWwgc3RhdGUgOiBjb25maWd1cmF0aW9uIG1vZGVsIHdpbGwgY29udGFpbiAxIGxpbmUsIHNpbmNlIDpcbiAgICogICAgLT4gaXQgaXMgbm9uIHNlbnNlIHRvIGNyZWF0ZSBhIGZvcm0gd2l0aG91dCBhIHNpbmdsZSBsaW5lIChubyBsaW5lID0gbm8gZm9ybSBhdCBhbGwpXG4gICAqICAgIC0+IHNvIGl0IGlzIG5vbiBzZW5zZSB0byBmb3JjZSB1c2VyIHRvIGFkZCBhIGZpcnN0IGxpbmVcbiAgICpcbiAgICogIFBMRUFTRSBOT1RFIGNvbHVtbnMgYXJyYXkgY29udGFpbnMgb2JqZWN0cyB0aGF0IGxvb2sgbGlrZSBmb3JtbHkgZmllbGRzIG9uZVxuICAgKi9cbiAgaW5pdENvbmZpZ3VyYXRpb25FZGl0RnJvbVNjcmF0Y2goY29uZmlndXJhdGlvbk1vZGVsLCBhZGRTdGVwV2F5UHJvcGVydGllcykge1xuICAgIGxldCBjb25maWd1cmF0aW9uTW9kZWxJbml0ID0gdGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0RWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWwoYWRkU3RlcFdheVByb3BlcnRpZXMpO1xuICAgIGFuZ3VsYXIuY29weShjb25maWd1cmF0aW9uTW9kZWxJbml0LCBjb25maWd1cmF0aW9uTW9kZWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBjb25maWd1cmF0aW9uIGVtcHR5IChubyBpbml0IGxpbmUpIHRoZW4gZW1wdHkgaXQgd2l0aCBsaW5lcyBhcnJheSBwcm92aWRlZCBpbiBwYXJhbVxuICAgKiBAcGFyYW0gICBvYmplY3QgLSBjb25maWd1cmF0aW9uTW9kZWwgICBbY29uZmlndXJhdGlvbiBtb2RlbF1cbiAgICogQHBhcmFtICAgYXJyYXkgLSAgbGluZXMgICAgICAgICAgICAgICAgW2FuIGFycmF5IDogbGluZXMgdG8gYXBwbHkgdG8gYW4gZW1wdHkgY29uZmlndXJhdGlvbiBtb2RlbF1cbiAgICogQHBhcmFtICAgYm9vbCAtICAgYWRkU3RlcFdheVByb3BlcnRpZXMgW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtvYmplY3QgbWVzc2FnZX0gICAgICAgICAgICAgICBbZ2l2ZSBkZXRhaWxzIG9uIGhvdyBpdCBoYXBwZW5lZCB0byBjYWxsZXJdXG4gICAqL1xuICBiaW5kQ29uZmlndXJhdGlvbkxpbmVzKGNvbmZpZ3VyYXRpb25Nb2RlbCwgbGluZXMsIGFkZFN0ZXBXYXlQcm9wZXJ0aWVzKXtcbiAgICBpZiggT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxpbmVzKSA9PT0gJ1tvYmplY3QgQXJyYXldJyApIHtcbiAgICAgIGxldCBjb25maWd1cmF0aW9uTW9kZWxSZXN1bHQgPSB0aGlzLkVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscy5nZXRFYXN5Rm9ybVJlbG9hZENvbmZpZ3VyYXRpb25Nb2RlbChhZGRTdGVwV2F5UHJvcGVydGllcyk7XG4gICAgICBjb25maWd1cmF0aW9uTW9kZWxSZXN1bHQubGluZXMgPSBbXS5jb25jYXQobGluZXMpO1xuICAgICAgYW5ndWxhci5jb3B5KGNvbmZpZ3VyYXRpb25Nb2RlbFJlc3VsdCwgY29uZmlndXJhdGlvbk1vZGVsKTtcbiAgICAgIHJldHVybiB0aGlzLmdldE1lc3NhZ2VPYmplY3QoJ2NvbmZpZ3VyYXRpb24gbW9kZWwgaXMgYm91bmQnLCdsaW5lcyBhcmUgYm91bmQgdG8gY29uZmlndXJhdGlvbiBtb2RlbC4nKTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVybiB0aGlzLmdldEVycm9yT2JqZWN0KCdsaW5lcyBpcyBub3QgYW4gYXJyYXknLCAnQ2hlY2tzIGxpbmVzIHR5cGUsIGl0IGlzIG5vdCBhbiBhcnJheS4nKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBhcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsIDpcbiAgICogIC0gYmluZCBjb25maWd1cmF0aW9uIG1vZGVsIGludG8gZm9ybWx5IGZpZWxkIG1vZGVsXG4gICAqICAtIHJlc2V0IGRhdGFNb2RlbCAoZm9ybWx5ZmllbGQgbWF5IGhhdmUgY2hhbmdlZCBzbyBwcmV2aW91cyBkYXRhTW9kZWwgd291bGQgYmUgZmFsc2UpXG4gICAqIEBwYXJhbSAgY29uZmlndXJhdGlvbk1vZGVsXG4gICAqIEBwYXJhbSAgZm9ybWx5TW9kZWxcbiAgICogQHBhcmFtICBmb3JtbHlEYXRhTW9kZWxcbiAgICovXG4gIGFwcGx5Q29uZmlndXJhdGlvblRvZm9ybWx5TW9kZWwoY29uZmlndXJhdGlvbk1vZGVsLCBmb3JtbHlNb2RlbCwgZm9ybWx5RGF0YU1vZGVsKXtcbiAgICB0aGlzLnJlc2V0Rm9ybWx5TW9kZWwoZm9ybWx5TW9kZWwpO1xuICAgIHRoaXMucmVzZXREYXRhTW9kZWwoZm9ybWx5RGF0YU1vZGVsKTtcbiAgICBsZXQgbGluZU51bWJlciA9IGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lcy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lTnVtYmVyOyBpKyspIHtcbiAgICAgIHRoaXMuQWRkTkNvbHVtbkNvbnRyb2woZm9ybWx5TW9kZWwsIGNvbmZpZ3VyYXRpb25Nb2RlbCwgaSk7XG4gICAgfVxuICB9XG5cblxuICByZXNldEZvcm1seU1vZGVsKGZvcm1seU1vZGVsKXtcbiAgICBsZXQgcmVzZXRmb3JtbHkgPSBbXTtcbiAgICBhbmd1bGFyLmNvcHkocmVzZXRmb3JtbHksIGZvcm1seU1vZGVsKTtcbiAgfVxuXG5cbiAgQWRkTkNvbHVtbkNvbnRyb2woZm9ybWx5TW9kZWwsIGNvbmZpZ3VyYXRpb25Nb2RlbCwgbGluZUluZGV4KXtcblxuICAgIGxldCBudW1iZXJPZkNvbHVtbnMgPSBjb25maWd1cmF0aW9uTW9kZWwubGluZXNbbGluZUluZGV4XS5jb2x1bW5zLmxlbmd0aDtcbiAgICAvKipcbiAgICAgKiBwdXNoIGZvcm1seSBtb2RlbFxuICAgICAqIGhlcmUgOiBvbmx5IGNsYXNzTmFtZSBhbmQgZW1wdHkgZmllbGRHcm91cCAoY29udHJvbHMgIT0gaGVhZGVyKVxuICAgICAqIGlmIGhlYWRlciB3aWxsIGJlIHJlc2V0IHRvIHNldCBhIHRlbXBsYXRlIChhdCBsZWFzdCB3ZSBoYXZlIG5vdyBpbmRleEZvcm1seU1vZGVsKVxuICAgICAqL1xuICAgIGxldCByYXdGb3JtbHlNb2RlbCA9IHtcbiAgICAgIGNsYXNzTmFtZSAgIDogJ3JvdycsXG4gICAgICBmaWVsZEdyb3VwICA6IFtdXG4gICAgfTtcbiAgICAvL2dldCBpbmRleCBmb3JtbHlNb2RlbCBmb3IgdGhpcyBsaW5lIDpcbiAgICBsZXQgaW5kZXhGb3JtbHlNb2RlbCA9ICBmb3JtbHlNb2RlbC5wdXNoKHJhd0Zvcm1seU1vZGVsKSAtIDEgO1xuXG4gICAgLy8gaXRlcmF0ZXMgdGhyb3VnaCBjb250cm9scyBpbiB0aGUgbGluZVxuICAgIGNvbmZpZ3VyYXRpb25Nb2RlbC5saW5lc1tsaW5lSW5kZXhdLmNvbHVtbnMuZm9yRWFjaCggKGNvbHVtbikgPT4ge1xuICAgICAgbGV0IGNvbnRyb2xUZW1wbGF0ZSA9IHt9O1xuICAgICAgaWYgKHR5cGVvZiBjb250cm9sVGVtcGxhdGUgICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIC8vIGNvbHVtbi5jb250cm9sLnR5cGUgICAgICE9PSAnaGVhZGVyJyAgICAmJlxuICAgICAgICAgIC8vIGNvbHVtbi5jb250cm9sLnR5cGUgICAgICE9PSAnc3ViVGl0bGUnICAmJlxuICAgICAgICAgIGNvbHVtbi5jb250cm9sLnR5cGUgICAgICE9PSAnbm9uZScpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGNvbnRyb2xzIDogZ2V0Rm9ybWx5Q29udHJvbFRlbXBsYXRlRm9yTmNvbHVtbkxpbmUoKVxuICAgICAgICAgKlxuICAgICAgICAgICogQFBBUkFNIG51bWJlck9mQ29sdW1ucyAgICAgICA6IGludGVnZXIgdG8gZGVkdWNlIGNzc0Nsc3MgdG8gYXBwbHlcbiAgICAgICAgICAqIEBQQVJBTSBjb2x1bW4uY29udHJvbC50eXBlICAgOiB0byBhZGQgaWYgbmVlZGVkIHNwZWNpZmljIHByb3BlcnRpZXMgKGV4YW1wbGUgOiBkYXRlcGlja2VyKVxuICAgICAgICAgICovXG4gICAgICAgIGlmKGNvbHVtbi5jb250cm9sLnR5cGUgID09PSAnaGVhZGVyJyB8fFxuICAgICAgICAgICAgY29sdW1uLmNvbnRyb2wudHlwZSAgPT09ICdzdWJUaXRsZScpe1xuICAgICAgICAgIGxldCBoZWFkZXJUZXh0Q29udGVudCAgICAgPSBjb2x1bW4uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgICAgICAgY29udHJvbFRlbXBsYXRlLnRlbXBsYXRlICA9IHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLmdldEhlYWRlclRlbXBsYXRlRm9yTmNvbHVtbkxpbmUobnVtYmVyT2ZDb2x1bW5zLCBoZWFkZXJUZXh0Q29udGVudCkudGVtcGxhdGU7XG4gICAgICAgICAgY29udHJvbFRlbXBsYXRlLmNsYXNzTmFtZSA9IHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLmdldFJhd0hlYWRlclRlbXBsYXRlcygpLnNlbGVjdGVkQ2xhc3M7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJvbFRlbXBsYXRlID0gdGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0Rm9ybWx5Q29udHJvbFRlbXBsYXRlRm9yTmNvbHVtbkxpbmUobnVtYmVyT2ZDb2x1bW5zLCBjb2x1bW4uY29udHJvbC50eXBlKTtcbiAgICAgICAgICAvKipcbiAgICAgICAgICAqIE5FRUQgUkVGQUNUT1IgSEVSRVxuICAgICAgICAgICogc2hvdWxkIGJpbmQgcHJvcGVydGllcyBkeW5hbWljYWxseVxuICAgICAgICAgICpcbiAgICAgICAgICAqIFRPRE8gbmVlZCB0byB2YWxpZGF0ZSBhbGwgY29udHJvbHMgKGRhdGVwaWNrZXIgbWF5IG5vdCB3b3JrKVxuICAgICAgICAgICogbmVlZCB0byByZWZhY3RvclxuICAgICAgICAgICovXG4gICAgICAgICAgY29udHJvbFRlbXBsYXRlLmNsYXNzTmFtZSAgICAgICAgICAgICAgICAgICA9IGNvbHVtbi5jb250cm9sLmNsYXNzTmFtZTtcbiAgICAgICAgICBjb250cm9sVGVtcGxhdGUudHlwZSAgICAgICAgICAgICAgICAgICAgICAgID0gY29sdW1uLmNvbnRyb2wudHlwZTtcbiAgICAgICAgICBjb250cm9sVGVtcGxhdGUua2V5ICAgICAgICAgICAgICAgICAgICAgICAgID0gY29sdW1uLmNvbnRyb2wua2V5O1xuICAgICAgICAgIGNvbnRyb2xUZW1wbGF0ZS50ZW1wbGF0ZU9wdGlvbnMudHlwZSAgICAgICAgPSBjb2x1bW4uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMudHlwZTtcbiAgICAgICAgICBjb250cm9sVGVtcGxhdGUudGVtcGxhdGVPcHRpb25zLmxhYmVsICAgICAgID0gY29sdW1uLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLmxhYmVsO1xuICAgICAgICAgIGNvbnRyb2xUZW1wbGF0ZS50ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQgICAgPSBjb2x1bW4uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQ7XG4gICAgICAgICAgY29udHJvbFRlbXBsYXRlLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlciA9IGNvbHVtbi5jb250cm9sLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICBjb250cm9sVGVtcGxhdGUudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uID0gY29sdW1uLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uO1xuICAgICAgICAgIGNvbnRyb2xUZW1wbGF0ZS50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyAgICAgPSBbXS5jb25jYXQoY29sdW1uLmNvbnRyb2wudGVtcGxhdGVPcHRpb25zLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKHR5cGVvZiBjb250cm9sVGVtcGxhdGUudGVtcGxhdGVPcHRpb25zLmRhdGVwaWNrZXJQb3B1cCAhPT0gJ3VuZGVmaW5lZCcpICBjb2x1bW4uY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMuZGF0ZXBpY2tlclBvcHVwID0gY29udHJvbFRlbXBsYXRlLnRlbXBsYXRlT3B0aW9ucy5kYXRlcGlja2VyUG9wdXAgIDtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogcG9wdXBsYXRlIHByb3BlcnRpZXNcbiAgICAgICAgICovXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHB1c2ggY29udHJvbCBpbnRvIGZvcm1seSBtb2RlbCBpbiBpdHMgZ3JvdXBcbiAgICAgICAgICovXG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAqIG5lZWQgdG8gY2F0Y2ggdGhpcyByYW5kb20gZXJyb3JcbiAgICAgICAgICAqL1xuICAgICAgICAgIGZvcm1seU1vZGVsW2luZGV4Rm9ybWx5TW9kZWxdLmZpZWxkR3JvdXAucHVzaChjb250cm9sVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGlzVGVtcGxhdGVPcHRpb25EZWZpbmVkKG9iail7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zICE9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIGV4dHJhY3RUZW1wbGF0ZU9wdGlvbkxhYmVsKG9iail7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zICE9PSAndW5kZWZpbmVkJyA/ICh0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucy5sYWJlbCAhPT0gJ3VuZGVmaW5lZCc/IG9iai50ZW1wbGF0ZU9wdGlvbnMubGFiZWw6ICcnKSA6ICcnO1xuICB9XG5cbiAgZXh0cmFjdFRlbXBsYXRlT3B0aW9uRGF0ZXBpY2tlclBvcHVwKG9iail7XG4gICAgcmV0dXJuICB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyAodHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMuZGF0ZXBpY2tlclBvcHVwICE9PSAndW5kZWZpbmVkJz8gb2JqLnRlbXBsYXRlT3B0aW9ucy5kYXRlcGlja2VyUG9wdXA6ICcnKSA6ICcnO1xuICB9XG5cbiAgZXh0cmFjdFRlbXBsYXRlT3B0aW9uUmVxdWlyZWQob2JqKXtcbiAgICByZXR1cm4gIHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zICE9PSAndW5kZWZpbmVkJyA/ICh0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCAhPT0gJ3VuZGVmaW5lZCc/IG9iai50ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQ6ICcnKSA6ICcnO1xuICB9XG4gIC8vcmFkaW8gYW5kIHNlbGVjdFxuICBleHRyYWN0VGVtcGxhdGVPcHRpb25PcHRpb25zKG9iail7XG4gICAgcmV0dXJuICB0eXBlb2Ygb2JqLnRlbXBsYXRlT3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyAodHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCc/IG9iai50ZW1wbGF0ZU9wdGlvbnMub3B0aW9uczogJycpIDogJyc7XG4gIH1cblxuICBleHRyYWN0VGVtcGxhdGVPcHRpb25UeXBlKG9iail7XG4gICAgcmV0dXJuICB0eXBlb2Ygb2JqLnN1YnR5cGUgIT09ICd1bmRlZmluZWQnPyBvYmouc3VidHlwZTogJyc7XG4gIH1cblxuICBleHRyYWN0VGVtcGxhdGVPcHRpb25QbGFjZWhvbGRlcihvYmope1xuICAgIHJldHVybiAgdHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMgIT09ICd1bmRlZmluZWQnID8gKHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zLnBsYWNlaG9sZGVyICE9PSAndW5kZWZpbmVkJz8gb2JqLnRlbXBsYXRlT3B0aW9ucy5wbGFjZWhvbGRlcjogJycpIDogJyc7XG4gIH1cblxuICBleHRyYWN0VGVtcGxhdGVPcHRpb25EZXNjcmlwdGlvbihvYmope1xuICAgIHJldHVybiAgdHlwZW9mIG9iai50ZW1wbGF0ZU9wdGlvbnMgIT09ICd1bmRlZmluZWQnID8gKHR5cGVvZiBvYmoudGVtcGxhdGVPcHRpb25zLmRlc2NyaXB0aW9uICE9PSAndW5kZWZpbmVkJz8gb2JqLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbjogJycpIDogJyc7XG4gIH1cblxuICAvLyBmb3JtbHkgbW9kZWwgZnVuY3Rpb25zXG4gIHJlc2V0RGF0YU1vZGVsKG9iail7XG4gICAgbGV0IGVtcHR5RGF0YU1vZGVsID0ge307XG4gICAgYW5ndWxhci5jb3B5KGVtcHR5RGF0YU1vZGVsLCBvYmopO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gY3VzdG9tIGVycm9yc1xuICBnZXRFcnJvck9iamVjdChlcnJvclRpdGxlLCBlcnJvck1lc3NhZ2Upe1xuICAgIGxldCBtZXNzYWdlT2JqID0gIHtcbiAgICAgIG5vRXJyb3IgICA6IGZhbHNlLFxuICAgICAgdGl0bGUgICAgIDogJycsXG4gICAgICBNZXNzYWdlICAgOiAnJ1xuICAgIH07XG4gICAgbWVzc2FnZU9iai5ub0Vycm9yICA9IGZhbHNlO1xuICAgIG1lc3NhZ2VPYmoudGl0bGUgICAgPSBlcnJvclRpdGxlO1xuICAgIG1lc3NhZ2VPYmouTWVzc2FnZSAgPSBlcnJvck1lc3NhZ2U7XG4gICAgcmV0dXJuIG1lc3NhZ2VPYmo7XG4gIH1cblxuICBnZXRNZXNzYWdlT2JqZWN0KG1lc3NhZ2VUaXRsZSwgbWVzc2FnZUJvZHkpe1xuICAgIGxldCBtZXNzYWdlT2JqID0gIHtcbiAgICAgIG5vRXJyb3IgICA6IGZhbHNlLFxuICAgICAgdGl0bGUgICAgIDogJycsXG4gICAgICBNZXNzYWdlICAgOiAnJ1xuICAgIH07XG4gICAgbWVzc2FnZU9iai5ub0Vycm9yICAgID0gdHJ1ZTtcbiAgICBtZXNzYWdlT2JqLnRpdGxlICAgICAgPSBtZXNzYWdlVGl0bGU7XG4gICAgbWVzc2FnZU9iai5NZXNzYWdlICAgID0gbWVzc2FnZUJvZHk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPYmo7XG4gIH1cblxufVxuXG5mb3JtRmllbGRNYW5hZ2UuJGluamVjdCA9IFtcbiAgJ0Vhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscydcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1GaWVsZE1hbmFnZTtcblxuZXhwb3J0IHtcbiAgRk9STV9GSUVMRF9NQU5BR0VfU0VSVklDRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9mb3JtbHlQcm94eS9lZGFEcmFnRHJvcFdheS5mb3JtbHlQcm94eS5mb3JtRmllbGRNYW5hZ2Uuc2VydmljZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 51 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _edaDragDropWayFormlyProxyFormFieldManageProvider = __webpack_require__(52);\n\nvar helpers = _interopRequireWildcard(_edaDragDropWayFormlyProxyFormFieldManageProvider);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nvar EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER = 'EasyFormGenFormlyBindingModels';\n\nfunction EasyFormGenFormlyBindingModels() {\n\n var _easyFormListControls = helpers.initEasyFormListControls();\n var _easyFormEmptyConfigurationLineModel = helpers.initEasyFormEmptyConfigurationLineModel();\n var _emptyControlFieldModel = helpers.initEmptyControlFieldModel();\n var _easyFormInitialStateConfigurationModel = helpers.initEasyFormInitialStateConfigurationModel(_easyFormEmptyConfigurationLineModel);\n var _easyFormInitialStateConfigurationModelAddOnForStepWay = helpers.initEasyFormInitialStateConfigurationModelAddOnForStepWay();\n var _easyFormReloadConfigurationModel = helpers.initEasyFormReloadConfigurationModel();\n var _headerTemplates = helpers.initHeaderTemplates();\n var _formlyControlTemplates = helpers.initFormlyControlTemplates();\n var _particularControlProperties = helpers.initParticularControlProperties();\n\n this.getAllParticularControlProperties = getAllParticularControlProperties;\n this.addParticularControlProperties = addParticularControlProperties;\n this.getEasyFormListControls = getEasyFormListControls;\n this.addEasyFormControlToList = addEasyFormControlToList;\n this.getHeaderTemplates = getHeaderTemplates;\n this.addHeaderTemplateCssClass = addHeaderTemplateCssClass;\n this.getFormlyControlTemplate = getFormlyControlTemplate;\n this.addformlyControlTemplatesCssClass = addformlyControlTemplatesCssClass;\n this.setFormlyControlTemplate = setFormlyControlTemplate;\n this.$get = getFct;\n\n function getAllParticularControlProperties() {\n return _particularControlProperties;\n }\n\n function addParticularControlProperties(newParticularControlProperty) {\n // test object param has waited properties\n if ('controlType' in newParticularControlProperty && 'properties' in newParticularControlProperty) {\n var isAnUpdate = false;\n if (_particularControlProperties.length > 0) {\n _particularControlProperties.forEach(function (controlProp) {\n if (controlProp.controlType === newParticularControlProperty.controlType) {\n controlProp.properties = [].concat(newParticularControlProperty.properties);\n isAnUpdate = true;\n }\n });\n }\n if (!isAnUpdate) {\n _particularControlProperties.push(newParticularControlProperty);\n }\n }\n return _particularControlProperties;\n }\n\n function getEasyFormListControls() {\n return _easyFormListControls;\n }\n\n function addEasyFormControlToList(controlDeclaration) {\n if (typeof controlDeclaration !== 'undefined') {\n _easyFormListControls.controls.push(controlDeclaration);\n }\n }\n\n function getHeaderTemplates() {\n return _headerTemplates;\n }\n\n function addHeaderTemplateCssClass(cssClassToAdd) {\n if (typeof cssClassToAdd !== 'undefined') {\n _headerTemplates.cssClass.push(cssClassToAdd);\n }\n }\n\n function getFormlyControlTemplate() {\n return _formlyControlTemplates;\n }\n\n function addformlyControlTemplatesCssClass(cssClassToAdd) {\n if (typeof cssClassToAdd !== 'undefined') {\n _formlyControlTemplates.className.push(cssClassToAdd);\n }\n }\n\n function setFormlyControlTemplate(newFormlyControlTemplate) {\n if ('className' in newFormlyControlTemplate && 'type' in newFormlyControlTemplate && 'key' in newFormlyControlTemplate && 'templateOptions' in newFormlyControlTemplate) {\n _formlyControlTemplates = angular.copy(newFormlyControlTemplate);\n }\n return true;\n }\n\n getFct.$inject = [];\n function getFct() {\n var service = {\n getEasyFormListControls: getEasyFormListControlsFct,\n getEasyFormInitialStateConfigurationModel: getEasyFormInitialStateConfigurationModel,\n getEasyFormReloadConfigurationModel: getEasyFormReloadConfigurationModel,\n getEasyFormEmptyConfigurationLineModel: getEasyFormEmptyConfigurationLineModel,\n getEasyFormConfigurationEmptyControlModel: getEasyFormConfigurationEmptyControlModel,\n getRawHeaderTemplates: getRawHeaderTemplates,\n getHeaderTemplateForNcolumnLine: getHeaderTemplateForNcolumnLine,\n getRawFormlyControlTemplates: getRawFormlyControlTemplates,\n getFormlyControlTemplateForNcolumnLine: getFormlyControlTemplateForNcolumnLine\n };\n return service;\n\n function getEasyFormListControlsFct() {\n return _easyFormListControls;\n }\n\n function getEasyFormInitialStateConfigurationModel(addStepWayProperties) {\n var initialConfigurationModel = angular.copy(_easyFormInitialStateConfigurationModel);\n if (typeof addStepWayProperties !== 'undefined') {\n if (addStepWayProperties) {\n // add properties specific to step way\n angular.extend(initialConfigurationModel, _easyFormInitialStateConfigurationModelAddOnForStepWay);\n }\n }\n return initialConfigurationModel;\n }\n\n function getEasyFormReloadConfigurationModel(addStepWayProperties) {\n var initialConfigurationModel = angular.copy(_easyFormReloadConfigurationModel);\n if (typeof addStepWayProperties !== 'undefined') {\n if (addStepWayProperties) {\n // add properties specific to step way\n angular.extend(initialConfigurationModel, _easyFormInitialStateConfigurationModelAddOnForStepWay);\n }\n }\n return initialConfigurationModel;\n }\n\n function getEasyFormEmptyConfigurationLineModel() {\n return _easyFormEmptyConfigurationLineModel;\n }\n\n function getEasyFormConfigurationEmptyControlModel() {\n return _emptyControlFieldModel;\n }\n\n function getRawHeaderTemplates() {\n return _headerTemplates;\n }\n\n function getHeaderTemplateForNcolumnLine(nbColInLines, textContent) {\n if (typeof nbColInLines !== 'undefined' && typeof textContent !== 'undefined') {\n if (nbColInLines === parseInt(nbColInLines, 10)) {\n if (nbColInLines <= _headerTemplates.cssClass.length) {\n var headerToReturn = {};\n headerToReturn.className = _headerTemplates.cssClass[nbColInLines - 1];\n // header html property depends this property dont forget to set it before reading html property\n _headerTemplates.textContent = textContent;\n _headerTemplates.selectedClass = headerToReturn.className;\n headerToReturn.template = [_headerTemplates.simpleHtml1, textContent, _headerTemplates.simpleHtml2].join('');\n return headerToReturn;\n }\n }\n }\n }\n\n function getRawFormlyControlTemplates() {\n return _formlyControlTemplates;\n }\n\n function getFormlyControlTemplateForNcolumnLine(nbColInLines, controlType) {\n if (typeof nbColInLines !== 'undefined') {\n if (nbColInLines === parseInt(nbColInLines, 10)) {\n if (nbColInLines <= _formlyControlTemplates.className.length) {\n var _ret = function () {\n var controlToReturn = angular.copy(_formlyControlTemplates);\n controlToReturn.className = _formlyControlTemplates.className[nbColInLines - 1];\n // throw `it should have a bug upper line`;\n /* eslint no-console:0 */\n console.warn('it should have a bug upper line');\n /**\n * check controlType: it may require another particular property\n */\n if (typeof controlType !== 'undefined') {\n _particularControlProperties.forEach(function (controlProp) {\n if (controlProp.controlType === controlType) {\n /**\n * add all properties this controlType has\n * \n * NOTE : dot expression and bracket expression to access object property\n * http://www.ecma-international.org/ecma-262/5.1/#sec-11.2.1\n */\n controlProp.properties.forEach(function (aPropToAdd) {\n if (aPropToAdd.isRoot) controlToReturn[aPropToAdd.value] = '';\n if (aPropToAdd.isTemplateOptions) controlToReturn.templateOptions[aPropToAdd.value] = '';\n });\n }\n });\n }\n return {\n v: controlToReturn\n };\n }();\n\n if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === \"object\") return _ret.v;\n }\n }\n }\n }\n }\n}\n\nEasyFormGenFormlyBindingModels.$inject = [];\n\nexports.default = EasyFormGenFormlyBindingModels;\nexports.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER = EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyLmpzPzAxNDgiXSwibmFtZXMiOlsiaGVscGVycyIsIkVBU1lfRk9STV9GT1JNTFlfQklORElOR19NT0RFTF9QUk9WSURFUiIsIkVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscyIsIl9lYXN5Rm9ybUxpc3RDb250cm9scyIsImluaXRFYXN5Rm9ybUxpc3RDb250cm9scyIsIl9lYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCIsImluaXRFYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCIsIl9lbXB0eUNvbnRyb2xGaWVsZE1vZGVsIiwiaW5pdEVtcHR5Q29udHJvbEZpZWxkTW9kZWwiLCJfZWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWwiLCJpbml0RWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWwiLCJfZWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWxBZGRPbkZvclN0ZXBXYXkiLCJpbml0RWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWxBZGRPbkZvclN0ZXBXYXkiLCJfZWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwiLCJpbml0RWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwiLCJfaGVhZGVyVGVtcGxhdGVzIiwiaW5pdEhlYWRlclRlbXBsYXRlcyIsIl9mb3JtbHlDb250cm9sVGVtcGxhdGVzIiwiaW5pdEZvcm1seUNvbnRyb2xUZW1wbGF0ZXMiLCJfcGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzIiwiaW5pdFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyIsImdldEFsbFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyIsImFkZFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyIsImdldEVhc3lGb3JtTGlzdENvbnRyb2xzIiwiYWRkRWFzeUZvcm1Db250cm9sVG9MaXN0IiwiZ2V0SGVhZGVyVGVtcGxhdGVzIiwiYWRkSGVhZGVyVGVtcGxhdGVDc3NDbGFzcyIsImdldEZvcm1seUNvbnRyb2xUZW1wbGF0ZSIsImFkZGZvcm1seUNvbnRyb2xUZW1wbGF0ZXNDc3NDbGFzcyIsInNldEZvcm1seUNvbnRyb2xUZW1wbGF0ZSIsIiRnZXQiLCJnZXRGY3QiLCJuZXdQYXJ0aWN1bGFyQ29udHJvbFByb3BlcnR5IiwiaXNBblVwZGF0ZSIsImxlbmd0aCIsImZvckVhY2giLCJjb250cm9sUHJvcCIsImNvbnRyb2xUeXBlIiwicHJvcGVydGllcyIsImNvbmNhdCIsInB1c2giLCJjb250cm9sRGVjbGFyYXRpb24iLCJjb250cm9scyIsImNzc0NsYXNzVG9BZGQiLCJjc3NDbGFzcyIsImNsYXNzTmFtZSIsIm5ld0Zvcm1seUNvbnRyb2xUZW1wbGF0ZSIsImFuZ3VsYXIiLCJjb3B5IiwiJGluamVjdCIsInNlcnZpY2UiLCJnZXRFYXN5Rm9ybUxpc3RDb250cm9sc0ZjdCIsImdldEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsIiwiZ2V0RWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwiLCJnZXRFYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCIsImdldEVhc3lGb3JtQ29uZmlndXJhdGlvbkVtcHR5Q29udHJvbE1vZGVsIiwiZ2V0UmF3SGVhZGVyVGVtcGxhdGVzIiwiZ2V0SGVhZGVyVGVtcGxhdGVGb3JOY29sdW1uTGluZSIsImdldFJhd0Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMiLCJnZXRGb3JtbHlDb250cm9sVGVtcGxhdGVGb3JOY29sdW1uTGluZSIsImFkZFN0ZXBXYXlQcm9wZXJ0aWVzIiwiaW5pdGlhbENvbmZpZ3VyYXRpb25Nb2RlbCIsImV4dGVuZCIsIm5iQ29sSW5MaW5lcyIsInRleHRDb250ZW50IiwicGFyc2VJbnQiLCJoZWFkZXJUb1JldHVybiIsInNlbGVjdGVkQ2xhc3MiLCJ0ZW1wbGF0ZSIsInNpbXBsZUh0bWwxIiwic2ltcGxlSHRtbDIiLCJqb2luIiwiY29udHJvbFRvUmV0dXJuIiwiY29uc29sZSIsIndhcm4iLCJhUHJvcFRvQWRkIiwiaXNSb290IiwidmFsdWUiLCJpc1RlbXBsYXRlT3B0aW9ucyIsInRlbXBsYXRlT3B0aW9ucyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7O0lBQVlBLE87Ozs7QUFFWixJQUFNQywwQ0FBMEMsZ0NBQWhEOztBQUVBLFNBQVNDLDhCQUFULEdBQXlDOztBQUV2QyxNQUFJQyx3QkFBMERILFFBQVFJLHdCQUFSLEVBQTlEO0FBQ0EsTUFBSUMsdUNBQTBETCxRQUFRTSx1Q0FBUixFQUE5RDtBQUNBLE1BQUlDLDBCQUEwRFAsUUFBUVEsMEJBQVIsRUFBOUQ7QUFDQSxNQUFJQywwQ0FBMERULFFBQVFVLDBDQUFSLENBQW1ETCxvQ0FBbkQsQ0FBOUQ7QUFDQSxNQUFJTSx5REFBMERYLFFBQVFZLHlEQUFSLEVBQTlEO0FBQ0EsTUFBSUMsb0NBQTBEYixRQUFRYyxvQ0FBUixFQUE5RDtBQUNBLE1BQUlDLG1CQUEwRGYsUUFBUWdCLG1CQUFSLEVBQTlEO0FBQ0EsTUFBSUMsMEJBQTBEakIsUUFBUWtCLDBCQUFSLEVBQTlEO0FBQ0EsTUFBSUMsK0JBQTBEbkIsUUFBUW9CLCtCQUFSLEVBQTlEOztBQUVBLE9BQUtDLGlDQUFMLEdBQThEQSxpQ0FBOUQ7QUFDQSxPQUFLQyw4QkFBTCxHQUE4REEsOEJBQTlEO0FBQ0EsT0FBS0MsdUJBQUwsR0FBOERBLHVCQUE5RDtBQUNBLE9BQUtDLHdCQUFMLEdBQThEQSx3QkFBOUQ7QUFDQSxPQUFLQyxrQkFBTCxHQUE4REEsa0JBQTlEO0FBQ0EsT0FBS0MseUJBQUwsR0FBOERBLHlCQUE5RDtBQUNBLE9BQUtDLHdCQUFMLEdBQThEQSx3QkFBOUQ7QUFDQSxPQUFLQyxpQ0FBTCxHQUE4REEsaUNBQTlEO0FBQ0Es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QUFDRDtBQUFBLG1CQUFPTDtBQUFQO0FBekI2RDs7QUFBQTtBQTBCOUQ7QUFDRjtBQUNGO0FBQ0Y7QUFHSjtBQUdGOztBQUdEdEUsK0JBQStCK0MsT0FBL0IsR0FBeUMsRUFBekM7O2tCQUVlL0MsOEI7UUFHYkQsdUMsR0FBQUEsdUMiLCJmaWxlIjoiNTEuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyLmhlbHBlcnMnO1xuXG5jb25zdCBFQVNZX0ZPUk1fRk9STUxZX0JJTkRJTkdfTU9ERUxfUFJPVklERVIgPSAnRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzJztcblxuZnVuY3Rpb24gRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzKCl7XG5cbiAgbGV0IF9lYXN5Rm9ybUxpc3RDb250cm9scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPVx0aGVscGVycy5pbml0RWFzeUZvcm1MaXN0Q29udHJvbHMoKTtcbiAgbGV0IF9lYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCAgICAgICAgICAgICAgICAgICAgPSBoZWxwZXJzLmluaXRFYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCgpO1xuICBsZXQgX2VtcHR5Q29udHJvbEZpZWxkTW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGhlbHBlcnMuaW5pdEVtcHR5Q29udHJvbEZpZWxkTW9kZWwoKTtcbiAgbGV0IF9lYXN5Rm9ybUluaXRpYWxTdGF0ZUNvbmZpZ3VyYXRpb25Nb2RlbCAgICAgICAgICAgICAgICAgPSBoZWxwZXJzLmluaXRFYXN5Rm9ybUluaXRpYWxTdGF0ZUNvbmZpZ3VyYXRpb25Nb2RlbChfZWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwpO1xuICBsZXQgX2Vhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsQWRkT25Gb3JTdGVwV2F5ICA9IGhlbHBlcnMuaW5pdEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsQWRkT25Gb3JTdGVwV2F5KCk7XG4gIGxldCBfZWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwgICAgICAgICAgICAgICAgICAgICAgID0gaGVscGVycy5pbml0RWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwoKTtcbiAgbGV0IF9oZWFkZXJUZW1wbGF0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBoZWxwZXJzLmluaXRIZWFkZXJUZW1wbGF0ZXMoKTsgXG4gIGxldCBfZm9ybWx5Q29udHJvbFRlbXBsYXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGVscGVycy5pbml0Rm9ybWx5Q29udHJvbFRlbXBsYXRlcygpOyAgXG4gIGxldCBfcGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaGVscGVycy5pbml0UGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzKCk7ICBcbiAgXG4gIHRoaXMuZ2V0QWxsUGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgID0gZ2V0QWxsUGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzO1xuICB0aGlzLmFkZFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICA9IGFkZFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcztcbiAgdGhpcy5nZXRFYXN5Rm9ybUxpc3RDb250cm9scyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBnZXRFYXN5Rm9ybUxpc3RDb250cm9scztcbiAgdGhpcy5hZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBhZGRFYXN5Rm9ybUNvbnRyb2xUb0xpc3Q7XG4gIHRoaXMuZ2V0SGVhZGVyVGVtcGxhdGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0SGVhZGVyVGVtcGxhdGVzO1xuICB0aGlzLmFkZEhlYWRlclRlbXBsYXRlQ3NzQ2xhc3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGFkZEhlYWRlclRlbXBsYXRlQ3NzQ2xhc3M7XG4gIHRoaXMuZ2V0Rm9ybWx5Q29udHJvbFRlbXBsYXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0Rm9ybWx5Q29udHJvbFRlbXBsYXRlO1xuICB0aGlzLmFkZGZvcm1seUNvbnRyb2xUZW1wbGF0ZXNDc3NDbGFzcyAgICAgICAgICAgICAgICAgICAgICA9IGFkZGZvcm1seUNvbnRyb2xUZW1wbGF0ZXNDc3NDbGFzcztcbiAgdGhpcy5zZXRGb3JtbHlDb250cm9sVGVtcGxhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBzZXRGb3JtbHlDb250cm9sVGVtcGxhdGU7XG4gIHRoaXMuJGdldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZ2V0RmN0O1xuICBcbiAgZnVuY3Rpb24gZ2V0QWxsUGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzKCl7XG4gICAgcmV0dXJuIF9wYXJ0aWN1bGFyQ29udHJvbFByb3BlcnRpZXM7XG4gIH0gICAgXG4gICAgXG4gIGZ1bmN0aW9uIGFkZFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyhuZXdQYXJ0aWN1bGFyQ29udHJvbFByb3BlcnR5KXtcbiAgICAvLyB0ZXN0IG9iamVjdCBwYXJhbSBoYXMgd2FpdGVkIHByb3BlcnRpZXNcbiAgICBpZiAoKCdjb250cm9sVHlwZScgXHRpbiBuZXdQYXJ0aWN1bGFyQ29udHJvbFByb3BlcnR5KSAmJlxuICAgICAgICAoJ3Byb3BlcnRpZXMnIFx0aW4gbmV3UGFydGljdWxhckNvbnRyb2xQcm9wZXJ0eSkpIHtcbiAgICAgIGxldCBpc0FuVXBkYXRlID0gZmFsc2U7XG4gICAgICBpZiAoIF9wYXJ0aWN1bGFyQ29udHJvbFByb3BlcnRpZXMubGVuZ3RoID4gMCApIHtcbiAgICAgICAgX3BhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRyb2xQcm9wKXtcbiAgICAgICAgICBpZiAoY29udHJvbFByb3AuY29udHJvbFR5cGUgPT09IG5ld1BhcnRpY3VsYXJDb250cm9sUHJvcGVydHkuY29udHJvbFR5cGUpIHtcbiAgICAgICAgICAgIGNvbnRyb2xQcm9wLnByb3BlcnRpZXMgPSBbXS5jb25jYXQobmV3UGFydGljdWxhckNvbnRyb2xQcm9wZXJ0eS5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIGlzQW5VcGRhdGUgPSB0cnVlO1xuICAgICAgICAgIH1cdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghaXNBblVwZGF0ZSkge1xuICAgICAgICBfcGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzLnB1c2gobmV3UGFydGljdWxhckNvbnRyb2xQcm9wZXJ0eSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfcGFydGljdWxhckNvbnRyb2xQcm9wZXJ0aWVzO1x0XHRcdFxuICB9ICBcblxuICBmdW5jdGlvbiBnZXRFYXN5Rm9ybUxpc3RDb250cm9scygpIHtcbiAgICByZXR1cm4gX2Vhc3lGb3JtTGlzdENvbnRyb2xzO1xuICB9XG4gXG4gIGZ1bmN0aW9uIGFkZEVhc3lGb3JtQ29udHJvbFRvTGlzdChjb250cm9sRGVjbGFyYXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGNvbnRyb2xEZWNsYXJhdGlvbiAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgX2Vhc3lGb3JtTGlzdENvbnRyb2xzLmNvbnRyb2xzLnB1c2goY29udHJvbERlY2xhcmF0aW9uKTtcbiAgICB9XG4gIH1cbiAgXG4gIGZ1bmN0aW9uIGdldEhlYWRlclRlbXBsYXRlcygpIHtcbiAgICByZXR1cm4gX2hlYWRlclRlbXBsYXRlcztcbiAgfVxuICBcbiAgZnVuY3Rpb24gYWRkSGVhZGVyVGVtcGxhdGVDc3NDbGFzcyhjc3NDbGFzc1RvQWRkKXtcbiAgICBpZiAodHlwZW9mIGNzc0NsYXNzVG9BZGQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBfaGVhZGVyVGVtcGxhdGVzLmNzc0NsYXNzLnB1c2goY3NzQ2xhc3NUb0FkZCk7XG4gICAgfVxuICB9XG4gIFxuICBmdW5jdGlvbiBnZXRGb3JtbHlDb250cm9sVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIF9mb3JtbHlDb250cm9sVGVtcGxhdGVzO1xuICB9XG4gIFxuICBmdW5jdGlvbiBhZGRmb3JtbHlDb250cm9sVGVtcGxhdGVzQ3NzQ2xhc3MoY3NzQ2xhc3NUb0FkZCl7XG4gICAgaWYgKHR5cGVvZiBjc3NDbGFzc1RvQWRkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgX2Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMuY2xhc3NOYW1lLnB1c2goY3NzQ2xhc3NUb0FkZCk7XG4gICAgfVxuICB9ICBcbiAgXG4gIGZ1bmN0aW9uIHNldEZvcm1seUNvbnRyb2xUZW1wbGF0ZShuZXdGb3JtbHlDb250cm9sVGVtcGxhdGUpIHtcbiAgICBpZiAoKCdjbGFzc05hbWUnXHRcdFx0XHRpbiBuZXdGb3JtbHlDb250cm9sVGVtcGxhdGUpICYmXG4gICAgICAgICgndHlwZScgXHRcdFx0XHRcdFx0aW4gbmV3Rm9ybWx5Q29udHJvbFRlbXBsYXRlKSAmJlxuICAgICAgICAoJ2tleScgXHRcdFx0XHRcdFx0XHRpbiBuZXdGb3JtbHlDb250cm9sVGVtcGxhdGUpICYmXG4gICAgICAgICgndGVtcGxhdGVPcHRpb25zJykgaW4gbmV3Rm9ybWx5Q29udHJvbFRlbXBsYXRlKSB7XG4gICAgICBfZm9ybWx5Q29udHJvbFRlbXBsYXRlcyA9IGFuZ3VsYXIuY29weShuZXdGb3JtbHlDb250cm9sVGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAgXG4gIFxuICBnZXRGY3QuJGluamVjdCA9IFtdO1xuICBmdW5jdGlvbiBnZXRGY3QoKXtcbiAgICBsZXQgc2VydmljZSA9IHtcbiAgICAgIGdldEVhc3lGb3JtTGlzdENvbnRyb2xzICAgICAgICAgICAgICAgICAgIDogZ2V0RWFzeUZvcm1MaXN0Q29udHJvbHNGY3QsXG4gICAgICBnZXRFYXN5Rm9ybUluaXRpYWxTdGF0ZUNvbmZpZ3VyYXRpb25Nb2RlbCA6IGdldEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsLFxuICAgICAgZ2V0RWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwgICAgICAgOiBnZXRFYXN5Rm9ybVJlbG9hZENvbmZpZ3VyYXRpb25Nb2RlbCxcbiAgICAgIGdldEVhc3lGb3JtRW1wdHlDb25maWd1cmF0aW9uTGluZU1vZGVsICAgIDogZ2V0RWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwsXG4gICAgICBnZXRFYXN5Rm9ybUNvbmZpZ3VyYXRpb25FbXB0eUNvbnRyb2xNb2RlbCA6IGdldEVhc3lGb3JtQ29uZmlndXJhdGlvbkVtcHR5Q29udHJvbE1vZGVsLFxuICAgICAgZ2V0UmF3SGVhZGVyVGVtcGxhdGVzICAgICAgICAgICAgICAgICAgICAgOiBnZXRSYXdIZWFkZXJUZW1wbGF0ZXMsXG4gICAgICBnZXRIZWFkZXJUZW1wbGF0ZUZvck5jb2x1bW5MaW5lICAgICAgICAgICA6IGdldEhlYWRlclRlbXBsYXRlRm9yTmNvbHVtbkxpbmUsXG4gICAgICBnZXRSYXdGb3JtbHlDb250cm9sVGVtcGxhdGVzICAgICAgICAgICAgICA6IGdldFJhd0Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMsXG4gICAgICBnZXRGb3JtbHlDb250cm9sVGVtcGxhdGVGb3JOY29sdW1uTGluZSAgICA6IGdldEZvcm1seUNvbnRyb2xUZW1wbGF0ZUZvck5jb2x1bW5MaW5lXG4gICAgfTtcbiAgICByZXR1cm4gc2VydmljZTtcbiAgICBcbiAgICBmdW5jdGlvbiBnZXRFYXN5Rm9ybUxpc3RDb250cm9sc0ZjdCgpIHtcbiAgICAgIHJldHVybiBfZWFzeUZvcm1MaXN0Q29udHJvbHM7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGdldEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsKGFkZFN0ZXBXYXlQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgaW5pdGlhbENvbmZpZ3VyYXRpb25Nb2RlbCA9IGFuZ3VsYXIuY29weShfZWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWwpO1xuICAgICAgaWYgKHR5cGVvZiBhZGRTdGVwV2F5UHJvcGVydGllcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKGFkZFN0ZXBXYXlQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgIC8vIGFkZCBwcm9wZXJ0aWVzIHNwZWNpZmljIHRvIHN0ZXAgd2F5XG4gICAgICAgICAgYW5ndWxhci5leHRlbmQoaW5pdGlhbENvbmZpZ3VyYXRpb25Nb2RlbCwgX2Vhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsQWRkT25Gb3JTdGVwV2F5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGluaXRpYWxDb25maWd1cmF0aW9uTW9kZWw7ICAgICAgXG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGdldEVhc3lGb3JtUmVsb2FkQ29uZmlndXJhdGlvbk1vZGVsKGFkZFN0ZXBXYXlQcm9wZXJ0aWVzKSB7XG4gICAgICBsZXQgaW5pdGlhbENvbmZpZ3VyYXRpb25Nb2RlbCA9IGFuZ3VsYXIuY29weShfZWFzeUZvcm1SZWxvYWRDb25maWd1cmF0aW9uTW9kZWwpO1xuICAgICAgaWYgKHR5cGVvZiBhZGRTdGVwV2F5UHJvcGVydGllcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgaWYgKGFkZFN0ZXBXYXlQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgLy8gYWRkIHByb3BlcnRpZXMgc3BlY2lmaWMgdG8gc3RlcCB3YXlcbiAgICAgICAgICBhbmd1bGFyLmV4dGVuZChpbml0aWFsQ29uZmlndXJhdGlvbk1vZGVsLCBfZWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWxBZGRPbkZvclN0ZXBXYXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5pdGlhbENvbmZpZ3VyYXRpb25Nb2RlbDsgICAgICBcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gZ2V0RWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwoKSB7XG4gICAgICByZXR1cm4gX2Vhc3lGb3JtRW1wdHlDb25maWd1cmF0aW9uTGluZU1vZGVsOyAgICAgIFxuICAgIH1cbiAgICBcbiAgICBmdW5jdGlvbiBnZXRFYXN5Rm9ybUNvbmZpZ3VyYXRpb25FbXB0eUNvbnRyb2xNb2RlbCgpIHtcbiAgICAgIHJldHVybiBfZW1wdHlDb250cm9sRmllbGRNb2RlbDsgICAgICBcbiAgICB9XG4gICAgXG4gICAgZnVuY3Rpb24gZ2V0UmF3SGVhZGVyVGVtcGxhdGVzKCkge1xuICAgICAgcmV0dXJuIF9oZWFkZXJUZW1wbGF0ZXM7XG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGdldEhlYWRlclRlbXBsYXRlRm9yTmNvbHVtbkxpbmUobmJDb2xJbkxpbmVzLCB0ZXh0Q29udGVudCkge1xuICAgICAgaWYgKHR5cGVvZiBuYkNvbEluTGluZXMgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgdHlwZW9mIHRleHRDb250ZW50IFx0IT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChuYkNvbEluTGluZXMgPT09IHBhcnNlSW50KG5iQ29sSW5MaW5lcywgMTApKSB7XG4gICAgICAgICAgaWYgKG5iQ29sSW5MaW5lcyA8PSAgX2hlYWRlclRlbXBsYXRlcy5jc3NDbGFzcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxldCBoZWFkZXJUb1JldHVybiAgICAgICAgPSB7fTtcbiAgICAgICAgICAgIGhlYWRlclRvUmV0dXJuLmNsYXNzTmFtZSAgPSBfaGVhZGVyVGVtcGxhdGVzLmNzc0NsYXNzW25iQ29sSW5MaW5lcyAtIDFdO1xuICAgICAgICAgICAgLy8gaGVhZGVyIGh0bWwgcHJvcGVydHkgZGVwZW5kcyB0aGlzIHByb3BlcnR5IGRvbnQgZm9yZ2V0IHRvIHNldCBpdCBiZWZvcmUgcmVhZGluZyBodG1sIHByb3BlcnR5XG4gICAgICAgICAgICBfaGVhZGVyVGVtcGxhdGVzLnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgICAgICAgICBfaGVhZGVyVGVtcGxhdGVzLnNlbGVjdGVkQ2xhc3MgPSBoZWFkZXJUb1JldHVybi5jbGFzc05hbWU7XG4gICAgICAgICAgICBoZWFkZXJUb1JldHVybi50ZW1wbGF0ZSA9IFtcbiAgICAgICAgICAgICAgX2hlYWRlclRlbXBsYXRlcy5zaW1wbGVIdG1sMSxcbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgIF9oZWFkZXJUZW1wbGF0ZXMuc2ltcGxlSHRtbDJcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgICAgICByZXR1cm4gaGVhZGVyVG9SZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ICAgICAgXG4gICAgfVxuICAgIFxuICAgIGZ1bmN0aW9uIGdldFJhd0Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMoKSB7XG4gICAgICByZXR1cm4gX2Zvcm1seUNvbnRyb2xUZW1wbGF0ZXM7XG4gICAgfSBcbiAgICBcbiAgICBcbiAgICBmdW5jdGlvbiBnZXRGb3JtbHlDb250cm9sVGVtcGxhdGVGb3JOY29sdW1uTGluZShuYkNvbEluTGluZXMsIGNvbnRyb2xUeXBlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmJDb2xJbkxpbmVzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGlmIChuYkNvbEluTGluZXMgPT09IHBhcnNlSW50KG5iQ29sSW5MaW5lcywgMTApKSB7XG4gICAgICAgICAgICBpZiAobmJDb2xJbkxpbmVzIDw9ICBfZm9ybWx5Q29udHJvbFRlbXBsYXRlcy5jbGFzc05hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGxldCBjb250cm9sVG9SZXR1cm4gICAgICAgPSBhbmd1bGFyLmNvcHkoX2Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMpO1xuICAgICAgICAgICAgICBjb250cm9sVG9SZXR1cm4uY2xhc3NOYW1lID0gX2Zvcm1seUNvbnRyb2xUZW1wbGF0ZXMuY2xhc3NOYW1lW25iQ29sSW5MaW5lcyAtIDFdO1xuICAgICAgICAgICAgICAvLyB0aHJvdyBgaXQgc2hvdWxkIGhhdmUgYSBidWcgdXBwZXIgbGluZWA7XG4gICAgICAgICAgICAgIC8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBpdCBzaG91bGQgaGF2ZSBhIGJ1ZyB1cHBlciBsaW5lYCk7XG4gICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgKiBjaGVjayBjb250cm9sVHlwZTogaXQgbWF5IHJlcXVpcmUgYW5vdGhlciBwYXJ0aWN1bGFyIHByb3BlcnR5XG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xUeXBlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIF9wYXJ0aWN1bGFyQ29udHJvbFByb3BlcnRpZXMuZm9yRWFjaCgoY29udHJvbFByb3ApPT57XG4gICAgICAgICAgICAgICAgICBpZiAoY29udHJvbFByb3AuY29udHJvbFR5cGUgPT09IGNvbnRyb2xUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBhZGQgYWxsIHByb3BlcnRpZXMgdGhpcyBjb250cm9sVHlwZSBoYXNcbiAgICAgICAgICAgICAgICAgICAgICogXG4gICAgICAgICAgICAgICAgICAgICAqIE5PVEUgOiBkb3QgZXhwcmVzc2lvbiBhbmQgYnJhY2tldCBleHByZXNzaW9uIHRvIGFjY2VzcyBvYmplY3QgcHJvcGVydHlcbiAgICAgICAgICAgICAgICAgICAgICogaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTExLjIuMVxuICAgICAgICAgICAgICAgICAgICAgKi9cdFx0XHRcdFx0XHRcdFx0XHRcdFxuICAgICAgICAgICAgICAgICAgICBjb250cm9sUHJvcC5wcm9wZXJ0aWVzLmZvckVhY2goKGFQcm9wVG9BZGQpPT57XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGFQcm9wVG9BZGQuaXNSb290KSBjb250cm9sVG9SZXR1cm5bYVByb3BUb0FkZC52YWx1ZV0gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYVByb3BUb0FkZC5pc1RlbXBsYXRlT3B0aW9ucykgY29udHJvbFRvUmV0dXJuLnRlbXBsYXRlT3B0aW9uc1thUHJvcFRvQWRkLnZhbHVlXSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBjb250cm9sVG9SZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ICAgICAgIFxuICAgIFxuICAgIFxuICB9XG4gIFxuICBcbn1cblxuXG5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHM7XG5cbmV4cG9ydCB7XG4gIEVBU1lfRk9STV9GT1JNTFlfQklORElOR19NT0RFTF9QUk9WSURFUlxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 52 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar initEasyFormListControls = exports.initEasyFormListControls = function initEasyFormListControls() {\n return {\n controls: [],\n selectedControl: 'none',\n temporyConfig: {\n selectedControl: 'none',\n formlyLabel: 'label',\n formlyRequired: false,\n formlyDescription: '',\n formlyPlaceholder: '',\n formlyOptions: []\n }\n };\n};\n\nvar initEasyFormEmptyConfigurationLineModel = exports.initEasyFormEmptyConfigurationLineModel = function initEasyFormEmptyConfigurationLineModel() {\n return {\n line: 1,\n activeColumn: 1,\n columns: [{\n numColumn: 1,\n exist: true,\n control: {\n type: 'none',\n key: 'none'\n }\n }]\n };\n};\n\nvar initEmptyControlFieldModel = exports.initEmptyControlFieldModel = function initEmptyControlFieldModel() {\n return {\n 'control': {\n 'type': 'none',\n 'key': 'none'\n }\n };\n};\n\nvar initEasyFormInitialStateConfigurationModel = exports.initEasyFormInitialStateConfigurationModel = function initEasyFormInitialStateConfigurationModel(_easyFormEmptyConfigurationLineModel) {\n // commun all easy form generator ways\n return {\n submitButtonText: 'submit',\n cancelButtonText: 'cancel',\n lines: [].concat(_easyFormEmptyConfigurationLineModel)\n };\n};\n\nvar initEasyFormInitialStateConfigurationModelAddOnForStepWay = exports.initEasyFormInitialStateConfigurationModelAddOnForStepWay = function initEasyFormInitialStateConfigurationModelAddOnForStepWay() {\n // specific easy form generator — step way — (not drag and drop way), needed for wizard management\n return {\n activeLine: 1,\n listConfigStep: ['init', 'first', 'second', 'third'],\n stepIndicators: [true, false, false, false],\n configStepCounter: 0\n };\n};\n\nvar initEasyFormReloadConfigurationModel = exports.initEasyFormReloadConfigurationModel = function initEasyFormReloadConfigurationModel() {\n var reloadConfigModel = initEasyFormInitialStateConfigurationModel();\n reloadConfigModel.lines = [];\n return reloadConfigModel;\n};\n\n// can't use arrow function here -> 'this' would be bound to caller rather than expected current returned object... \nvar initHeaderTemplates = exports.initHeaderTemplates = function initHeaderTemplates() {\n var headerTemplate = {\n cssClass: ['col-xs-12', 'col-xs-6', 'col-xs-4'],\n textContent: '',\n html_part1: ['
    ', '

    '].join(''),\n html_part3: this.textContent,\n html_part4: ['

    ', '
    ', '

    '].join(''),\n simpleHtml1: ['

    '].join(''),\n simpleHtml2: ['

    ', '
    '].join('')\n };\n return headerTemplate;\n};\n\nvar initFormlyControlTemplates = exports.initFormlyControlTemplates = function initFormlyControlTemplates() {\n return {\n className: ['col-xs-12', 'col-xs-6', 'col-xs-4'],\n type: '',\n key: '',\n templateOptions: {\n type: '',\n label: '',\n required: '',\n placeholder: '',\n description: '',\n options: ''\n }\n };\n};\n\nvar initParticularControlProperties = exports.initParticularControlProperties = function initParticularControlProperties() {\n return [{\n controlType: 'datepicker',\n properties: [{\n isRoot: false,\n isTemplateOptions: true,\n value: 'datepickerPopup'\n }]\n }];\n};//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyLmhlbHBlcnMuanM/MDgyMiJdLCJuYW1lcyI6WyJpbml0RWFzeUZvcm1MaXN0Q29udHJvbHMiLCJjb250cm9scyIsInNlbGVjdGVkQ29udHJvbCIsInRlbXBvcnlDb25maWciLCJmb3JtbHlMYWJlbCIsImZvcm1seVJlcXVpcmVkIiwiZm9ybWx5RGVzY3JpcHRpb24iLCJmb3JtbHlQbGFjZWhvbGRlciIsImZvcm1seU9wdGlvbnMiLCJpbml0RWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwiLCJsaW5lIiwiYWN0aXZlQ29sdW1uIiwiY29sdW1ucyIsIm51bUNvbHVtbiIsImV4aXN0IiwiY29udHJvbCIsInR5cGUiLCJrZXkiLCJpbml0RW1wdHlDb250cm9sRmllbGRNb2RlbCIsImluaXRFYXN5Rm9ybUluaXRpYWxTdGF0ZUNvbmZpZ3VyYXRpb25Nb2RlbCIsIl9lYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCIsInN1Ym1pdEJ1dHRvblRleHQiLCJjYW5jZWxCdXR0b25UZXh0IiwibGluZXMiLCJjb25jYXQiLCJpbml0RWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWxBZGRPbkZvclN0ZXBXYXkiLCJhY3RpdmVMaW5lIiwibGlzdENvbmZpZ1N0ZXAiLCJzdGVwSW5kaWNhdG9ycyIsImNvbmZpZ1N0ZXBDb3VudGVyIiwiaW5pdEVhc3lGb3JtUmVsb2FkQ29uZmlndXJhdGlvbk1vZGVsIiwicmVsb2FkQ29uZmlnTW9kZWwiLCJpbml0SGVhZGVyVGVtcGxhdGVzIiwiaGVhZGVyVGVtcGxhdGUiLCJjc3NDbGFzcyIsInRleHRDb250ZW50IiwiaHRtbF9wYXJ0MSIsImpvaW4iLCJzZWxlY3RlZENsYXNzIiwiaHRtbF9wYXJ0MiIsImh0bWxfcGFydDMiLCJodG1sX3BhcnQ0Iiwic2ltcGxlSHRtbDEiLCJzaW1wbGVIdG1sMiIsImluaXRGb3JtbHlDb250cm9sVGVtcGxhdGVzIiwiY2xhc3NOYW1lIiwidGVtcGxhdGVPcHRpb25zIiwibGFiZWwiLCJyZXF1aXJlZCIsInBsYWNlaG9sZGVyIiwiZGVzY3JpcHRpb24iLCJvcHRpb25zIiwiaW5pdFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyIsImNvbnRyb2xUeXBlIiwicHJvcGVydGllcyIsImlzUm9vdCIsImlzVGVtcGxhdGVPcHRpb25zIiwidmFsdWUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQVEsSUFBTUEsOERBQTJCLFNBQTNCQSx3QkFBMkIsR0FBTTtBQUM3QyxTQUFPO0FBQ0xDLGNBQWtCLEVBRGI7QUFFTEMscUJBQWtCLE1BRmI7QUFHTEMsbUJBQWtCO0FBQ2hCRCx1QkFBbUIsTUFESDtBQUVoQkUsbUJBQWlCLE9BRkQ7QUFHaEJDLHNCQUFrQixLQUhGO0FBSWhCQyx5QkFBb0IsRUFKSjtBQUtoQkMseUJBQW9CLEVBTEo7QUFNaEJDLHFCQUFrQjtBQU5GO0FBSGIsR0FBUDtBQVlELENBYk87O0FBZUQsSUFBTUMsNEZBQTBDLFNBQTFDQSx1Q0FBMEMsR0FBTTtBQUMzRCxTQUFPO0FBQ0xDLFVBQVksQ0FEUDtBQUVMQyxrQkFBZ0IsQ0FGWDtBQUdMQyxhQUFhLENBQUM7QUFDWkMsaUJBQWEsQ0FERDtBQUVaQyxhQUFVLElBRkU7QUFHWkMsZUFBWTtBQUNWQyxjQUFLLE1BREs7QUFFVkMsYUFBSztBQUZLO0FBSEEsS0FBRDtBQUhSLEdBQVA7QUFZRCxDQWJNOztBQWVBLElBQU1DLGtFQUE2QixTQUE3QkEsMEJBQTZCLEdBQU07QUFDOUMsU0FBTztBQUNMLGVBQWM7QUFDWixjQUFVLE1BREU7QUFFWixhQUFVO0FBRkU7QUFEVCxHQUFQO0FBTUQsQ0FQTTs7QUFTQSxJQUFNQyxrR0FBNkMsU0FBN0NBLDBDQUE2QyxDQUFDQyxvQ0FBRCxFQUEwQztBQUNsRztBQUNBLFNBQU87QUFDTEMsc0JBQW9CLFFBRGY7QUFFTEMsc0JBQW9CLFFBRmY7QUFHTEMsV0FBUSxHQUFHQyxNQUFILENBQVVKLG9DQUFWO0FBSEgsR0FBUDtBQUtELENBUE07O0FBU0EsSUFBTUssZ0lBQTRELFNBQTVEQSx5REFBNEQsR0FBTTtBQUM3RTtBQUNBLFNBQU87QUFDTEMsZ0JBQWdCLENBRFg7QUFFTEMsb0JBQWtCLENBQ2hCLE1BRGdCLEVBRWhCLE9BRmdCLEVBR2hCLFFBSGdCLEVBSWhCLE9BSmdCLENBRmI7QUFRTEMsb0JBQWtCLENBQ2hCLElBRGdCLEVBRWhCLEtBRmdCLEVBR2hCLEtBSGdCLEVBSWhCLEtBSmdCLENBUmI7QUFjTEMsdUJBQW9CO0FBZGYsR0FBUDtBQWdCRCxDQWxCTTs7QUFvQkEsSUFBTUMsc0ZBQXVDLFNBQXZDQSxvQ0FBdUMsR0FBTTtBQUN4RCxNQUFJQyxvQkFBb0JaLDRDQUF4QjtBQUNBWSxvQkFBa0JSLEtBQWxCLEdBQTBCLEVBQTFCO0FBQ0EsU0FBT1EsaUJBQVA7QUFDRCxDQUpNOztBQU1QO0FBQ08sSUFBTUMsb0RBQXNCLFNBQXRCQSxtQkFBc0IsR0FBVztBQUM1QyxNQUFJQyxpQkFBaUI7QUFDbkJDLGNBQWEsQ0FBQyxXQUFELEVBQWMsVUFBZCxFQUEwQixVQUExQixDQURNO0FBRW5CQyxpQkFBYyxFQUZLO0FBR25CQyxnQkFBYyxDQUNFLGdCQURGLEVBRUlDLElBRkosQ0FFUyxFQUZULENBSEs7QUFNbkJDLG1CQUFnQixFQU5HO0FBT25CQyxnQkFBYyxDQUNFLElBREYsRUFFRSw4QkFGRixFQUdFRixJQUhGLENBR08sRUFIUCxDQVBLO0FBV25CRyxnQkFBYyxLQUFLTCxXQVhBO0FBWW5CTSxnQkFBZSxDQUNDLFVBREQsRUFFQyxXQUZELEVBR0MsVUFIRCxFQUlHSixJQUpILENBSVEsRUFKUixDQVpJO0FBaUJuQkssaUJBQWUsQ0FDQywwQkFERCxFQUVHTCxJQUZILENBRVEsRUFGUixDQWpCSTtBQW9CbkJNLGlCQUFlLENBQ0MsVUFERCxFQUVDLFdBRkQsRUFHR04sSUFISCxDQUdRLEVBSFI7QUFwQkksR0FBckI7QUF5QkEsU0FBUUosY0FBUjtBQUNELENBM0JNOztBQThCQSxJQUFNVyxrRUFBNkIsU0FBN0JBLDBCQUE2QixHQUFNO0FBQzlDLFNBQU87QUFDTEMsZUFBWSxDQUFDLFdBQUQsRUFBYyxVQUFkLEVBQTBCLFVBQTFCLENBRFA7QUFFTDdCLFVBQVksRUFGUDtBQUdMQyxTQUFZLEVBSFA7QUFJTDZCLHFCQUFpQjtBQUNmOUIsWUFBYyxFQURDO0FBRWYrQixhQUFjLEVBRkM7QUFHZkMsZ0JBQWMsRUFIQztBQUlmQyxtQkFBYyxFQUpDO0FBS2ZDLG1CQUFjLEVBTEM7QUFNZkMsZUFBYztBQU5DO0FBSlosR0FBUDtBQWFELENBZE07O0FBZ0JBLElBQU1DLDRFQUFrQyxTQUFsQ0EsK0JBQWtDLEdBQU07QUFDbkQsU0FBTyxDQUNMO0FBQ0VDLGlCQUFlLFlBRGpCO0FBRUVDLGdCQUFlLENBQ2I7QUFDQUMsY0FBZSxLQURmO0FBRUFDLHlCQUFvQixJQUZwQjtBQUdBQyxhQUFjO0FBSGQsS0FEYTtBQUZqQixHQURLLENBQVA7QUFZRCxDQWJNIiwiZmlsZSI6IjUyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIGV4cG9ydCBjb25zdCBpbml0RWFzeUZvcm1MaXN0Q29udHJvbHMgPSAoKSA9PiB7XG4gIHJldHVybiB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuICAgIGNvbnRyb2xzICAgICAgICA6IFtdLFxuICAgIHNlbGVjdGVkQ29udHJvbCA6ICdub25lJyAsXG4gICAgdGVtcG9yeUNvbmZpZyAgIDoge1xuICAgICAgc2VsZWN0ZWRDb250cm9sXHRcdDogJ25vbmUnLFxuICAgICAgZm9ybWx5TGFiZWxcdFx0XHRcdDogJ2xhYmVsJywgIFxuICAgICAgZm9ybWx5UmVxdWlyZWRcdFx0OiBmYWxzZSwgXG4gICAgICBmb3JtbHlEZXNjcmlwdGlvblx0OiAnJyxcbiAgICAgIGZvcm1seVBsYWNlaG9sZGVyXHQ6ICcnLFxuICAgICAgZm9ybWx5T3B0aW9ucyBcdFx0OiBbXVxuICAgIH0gXG4gIH07XG59O1xuICBcbmV4cG9ydCBjb25zdCBpbml0RWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwgPSAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgbGluZSBcdFx0XHRcdFx0OiAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgIGFjdGl2ZUNvbHVtbiBcdDogMSxcbiAgICBjb2x1bW5zIFx0XHRcdDogW3sgIFxuICAgICAgbnVtQ29sdW1uIFx0OiAxLFxuICAgICAgZXhpc3QgXHRcdFx0OnRydWUsIFxuICAgICAgY29udHJvbCBcdFx0OiB7XG4gICAgICAgIHR5cGU6J25vbmUnLFxuICAgICAgICBrZXk6ICdub25lJ1xuICAgICAgfVxuICAgIH1dXG4gIH07ICAgICAgXG59O1xuICBcbmV4cG9ydCBjb25zdCBpbml0RW1wdHlDb250cm9sRmllbGRNb2RlbCA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAnY29udHJvbCcgXHRcdDoge1xuICAgICAgJ3R5cGUnICA6ICdub25lJyxcbiAgICAgICdrZXknICAgOiAnbm9uZSdcbiAgICB9XHRcbiAgfTsgIFxufTtcbiAgXG5leHBvcnQgY29uc3QgaW5pdEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsID0gKF9lYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCkgPT4ge1xuICAvLyBjb21tdW4gYWxsIGVhc3kgZm9ybSBnZW5lcmF0b3Igd2F5c1xuICByZXR1cm4geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgc3VibWl0QnV0dG9uVGV4dCBcdDogJ3N1Ym1pdCcsXG4gICAgY2FuY2VsQnV0dG9uVGV4dCBcdDogJ2NhbmNlbCcsXG4gICAgbGluZXMgOiBbXS5jb25jYXQoX2Vhc3lGb3JtRW1wdHlDb25maWd1cmF0aW9uTGluZU1vZGVsKVxuICB9OyAgICBcbn07XG5cbmV4cG9ydCBjb25zdCBpbml0RWFzeUZvcm1Jbml0aWFsU3RhdGVDb25maWd1cmF0aW9uTW9kZWxBZGRPbkZvclN0ZXBXYXkgPSAoKSA9PiB7XG4gIC8vIHNwZWNpZmljIGVhc3kgZm9ybSBnZW5lcmF0b3Ig4oCUIHN0ZXAgd2F5IOKAlCAobm90IGRyYWcgYW5kIGRyb3Agd2F5KSwgbmVlZGVkIGZvciB3aXphcmQgbWFuYWdlbWVudFxuICByZXR1cm4ge1xuICAgIGFjdGl2ZUxpbmUgXHRcdFx0OiAxLCAgIFxuICAgIGxpc3RDb25maWdTdGVwIFx0OiBbXG4gICAgICAnaW5pdCcsXG4gICAgICAnZmlyc3QnLFxuICAgICAgJ3NlY29uZCcsXG4gICAgICAndGhpcmQnXG4gICAgXSxcbiAgICBzdGVwSW5kaWNhdG9ycyBcdDogW1xuICAgICAgdHJ1ZSxcbiAgICAgIGZhbHNlLFxuICAgICAgZmFsc2UsXG4gICAgICBmYWxzZVxuICAgIF0sIFxuICAgIGNvbmZpZ1N0ZXBDb3VudGVyIDogMCAgXHRcbiAgfTtcbn07XG4gIFxuZXhwb3J0IGNvbnN0IGluaXRFYXN5Rm9ybVJlbG9hZENvbmZpZ3VyYXRpb25Nb2RlbCA9ICgpID0+IHtcbiAgbGV0IHJlbG9hZENvbmZpZ01vZGVsID0gaW5pdEVhc3lGb3JtSW5pdGlhbFN0YXRlQ29uZmlndXJhdGlvbk1vZGVsKCk7XG4gIHJlbG9hZENvbmZpZ01vZGVsLmxpbmVzID0gW107XG4gIHJldHVybiByZWxvYWRDb25maWdNb2RlbDtcbn07XG4gIFxuLy8gY2FuJ3QgdXNlIGFycm93IGZ1bmN0aW9uIGhlcmUgLT4gJ3RoaXMnIHdvdWxkIGJlIGJvdW5kIHRvIGNhbGxlciByYXRoZXIgdGhhbiBleHBlY3RlZCBjdXJyZW50IHJldHVybmVkIG9iamVjdC4uLiAgXG5leHBvcnQgY29uc3QgaW5pdEhlYWRlclRlbXBsYXRlcyA9IGZ1bmN0aW9uKCkge1xuICBsZXQgaGVhZGVyVGVtcGxhdGUgPSB7XG4gICAgY3NzQ2xhc3MgXHRcdDogWydjb2wteHMtMTInLCAnY29sLXhzLTYnLCAnY29sLXhzLTQnXSxcbiAgICB0ZXh0Q29udGVudCA6ICcnLFxuICAgIGh0bWxfcGFydDEgXHQ6IFtcbiAgICAgICAgICAgICAgICAgICAgJyAgPGRpdiBjbGFzcz1cIidcbiAgICAgICAgICAgICAgICAgICAgXS5qb2luKCcnKSxcbiAgICBzZWxlY3RlZENsYXNzIDogJycsXG4gICAgaHRtbF9wYXJ0MiBcdDogW1xuICAgICAgICAgICAgICAgICAgICAnXCI+JyxcbiAgICAgICAgICAgICAgICAgICAgJyAgICA8aDIgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPidcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG4gICAgICAgICAgICAgICAgICBdLmpvaW4oJycpLFx0XHRcdFx0XHRcdFx0IFxuICAgIGh0bWxfcGFydDMgIDogdGhpcy50ZXh0Q29udGVudCwgIFxuICAgIGh0bWxfcGFydDQgXHQ6ICBbIFxuICAgICAgICAgICAgICAgICAgICAnICAgIDxoMj4nLFxuICAgICAgICAgICAgICAgICAgICAnICAgIDxoci8+JyxcbiAgICAgICAgICAgICAgICAgICAgJyAgPC9kaXY+J1xuICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJycpLCBcbiAgICBzaW1wbGVIdG1sMSA6IFx0W1xuICAgICAgICAgICAgICAgICAgICAnPGgyIGNsYXNzPVwidGV4dC1jZW50ZXJcIj4nXG4gICAgICAgICAgICAgICAgICAgIF0uam9pbignJyksXG4gICAgc2ltcGxlSHRtbDIgOiBcdFtcbiAgICAgICAgICAgICAgICAgICAgJyAgICA8aDI+JyxcbiAgICAgICAgICAgICAgICAgICAgJyAgICA8aHIvPidcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuICAgICAgICAgICAgICAgICAgICBdLmpvaW4oJycpXHRcdFx0XHRcdFx0IFxuICB9OyAgXG4gIHJldHVybiAgaGVhZGVyVGVtcGxhdGU7IFxufTtcbiAgXG4gIFxuZXhwb3J0IGNvbnN0IGluaXRGb3JtbHlDb250cm9sVGVtcGxhdGVzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIGNsYXNzTmFtZSA6IFsnY29sLXhzLTEyJywgJ2NvbC14cy02JywgJ2NvbC14cy00J10sXG4gICAgdHlwZSAgICAgIDogJycsXG4gICAga2V5ICAgICAgIDogJycsXG4gICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICB0eXBlICAgICAgICA6ICcnLFxuICAgICAgbGFiZWwgICAgICAgOiAnJyxcbiAgICAgIHJlcXVpcmVkICAgIDogJycsXG4gICAgICBwbGFjZWhvbGRlciA6ICcnLFxuICAgICAgZGVzY3JpcHRpb24gOiAnJyxcbiAgICAgIG9wdGlvbnMgICAgIDogJycgICAgXG4gICAgfVxuICB9O1xufTtcbiAgXG5leHBvcnQgY29uc3QgaW5pdFBhcnRpY3VsYXJDb250cm9sUHJvcGVydGllcyA9ICgpID0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBjb250cm9sVHlwZSBcdDogJ2RhdGVwaWNrZXInLFxuICAgICAgcHJvcGVydGllcyBcdFx0OiBbXHRcbiAgICAgICAge1x0XG4gICAgICAgIGlzUm9vdCAgXHRcdFx0XHRcdDogZmFsc2UsIFxuICAgICAgICBpc1RlbXBsYXRlT3B0aW9ucyA6IHRydWUsIFxuICAgICAgICB2YWx1ZSBcdFx0XHRcdFx0XHQ6ICdkYXRlcGlja2VyUG9wdXAnXG4gICAgICB9XG4gICAgICBdXG4gICAgfVxuICBdO1xufTtcbiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZm9ybWx5UHJveHkvZWRhRHJhZ0Ryb3BXYXkuZm9ybWx5UHJveHkuZm9ybUZpZWxkTWFuYWdlLnByb3ZpZGVyLmhlbHBlcnMuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 53 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaDragDropWayDragdropDdContentCounter = __webpack_require__(54);\n\nvar _edaDragDropWayDragdropDdContentCounter2 = _interopRequireDefault(_edaDragDropWayDragdropDdContentCounter);\n\nvar _edaDragDropWayDragdropDdContentCounter3 = __webpack_require__(55);\n\nvar _edaDragDropWayDragdropDdContentCounter4 = _interopRequireDefault(_edaDragDropWayDragdropDdContentCounter3);\n\nvar _edaDragDropWayDragdropDdDecorContainer = __webpack_require__(56);\n\nvar _edaDragDropWayDragdropDdDecorContainer2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorContainer);\n\nvar _edaDragDropWayDragdropDdDecorContainer3 = __webpack_require__(58);\n\nvar _edaDragDropWayDragdropDdDecorContainer4 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorContainer3);\n\nvar _edaDragDropWayDragdropDdDecorDropZone = __webpack_require__(59);\n\nvar _edaDragDropWayDragdropDdDecorDropZone2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorDropZone);\n\nvar _edaDragDropWayDragdropDdDecorItem = __webpack_require__(61);\n\nvar _edaDragDropWayDragdropDdDecorItem2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorItem);\n\nvar _edaDragDropWayDragdropDdDecorItem3 = __webpack_require__(63);\n\nvar _edaDragDropWayDragdropDdDecorItem4 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorItem3);\n\nvar _edaDragDropWayDragdropDdDecorLine = __webpack_require__(64);\n\nvar _edaDragDropWayDragdropDdDecorLine2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorLine);\n\nvar _edaDragDropWayDragdropDdNoEditableControl = __webpack_require__(66);\n\nvar _edaDragDropWayDragdropDdNoEditableControl2 = _interopRequireDefault(_edaDragDropWayDragdropDdNoEditableControl);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAGDROP_MODULE = 'edaDragDropWay.dragdrop.module'; /* global angular */\nexports.default = angular.module(DRAGDROP_MODULE, []).directive(_edaDragDropWayDragdropDdContentCounter.DD_CONTENT_COUNTER_DIRECTIVE, _edaDragDropWayDragdropDdContentCounter2.default).controller(_edaDragDropWayDragdropDdDecorContainer3.DD_DECOR_CONTAINER_CONTROLLER_NAME, _edaDragDropWayDragdropDdDecorContainer4.default).directive(_edaDragDropWayDragdropDdDecorContainer.DD_DECOR_CONTAINER_DIRECTIVE, _edaDragDropWayDragdropDdDecorContainer2.default).directive(_edaDragDropWayDragdropDdDecorDropZone.DD_DECOR_DROPZONE_DIRECTIVE, _edaDragDropWayDragdropDdDecorDropZone2.default).directive(_edaDragDropWayDragdropDdDecorItem.DRAG_DROP_DECOR_ITEM, _edaDragDropWayDragdropDdDecorItem2.default).service(_edaDragDropWayDragdropDdDecorItem3.DRAG_DROP_ITEM_DECOR_SERVICE, _edaDragDropWayDragdropDdDecorItem4.default).directive(_edaDragDropWayDragdropDdNoEditableControl.DRAG_DROP_NO_EDITABLE_CONTROL, _edaDragDropWayDragdropDdNoEditableControl2.default).service(_edaDragDropWayDragdropDdContentCounter3.DRAG_DROP_ITEM_COUNTER_SERVICE, _edaDragDropWayDragdropDdContentCounter4.default).directive(_edaDragDropWayDragdropDdDecorLine.DRAG_DROP_DECOR_LINE, _edaDragDropWayDragdropDdDecorLine2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AubW9kdWxlLmpzPzExZjkiXSwibmFtZXMiOlsiRFJBR0RST1BfTU9EVUxFIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsImNvbnRyb2xsZXIiLCJzZXJ2aWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBR0E7Ozs7QUFHQTs7OztBQUdBOzs7O0FBSUE7Ozs7OztBQUtBLElBQU1BLGtCQUFrQixnQ0FBeEIsQyxDQS9CQTtrQkFpQ2VDLFFBQ05DLE1BRE0sQ0FDQ0YsZUFERCxFQUNrQixFQURsQixFQUVORyxTQUZNLHlIQUdOQyxVQUhNLGdJQUlORCxTQUpNLHlIQUtOQSxTQUxNLHNIQU1OQSxTQU5NLHVHQU9ORSxPQVBNLGdIQVFORixTQVJNLGdJQVNORSxPQVRNLDRIQVVORixTQVZNLHNHIiwiZmlsZSI6IjUzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCBkZENvbnRlbnRDb3VudGVyLCB7XG4gRERfQ09OVEVOVF9DT1VOVEVSX0RJUkVDVElWRVx0XG59XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2RkQ29udGVudENvdW50ZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGRDb250ZW50Q291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IGRyYWdEcm9wSXRlbUNvdW50ZXJTZXJ2aWNlLCB7XG5cdERSQUdfRFJPUF9JVEVNX0NPVU5URVJfU0VSVklDRVxufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9kZENvbnRlbnRDb3VudGVyL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkQ29udGVudENvdW50ZXIuc2VydmljZSc7XG5pbXBvcnQgZGREZWNvckNvbnRhaW5lckRpcmVjdGl2ZSwge1xuXHRERF9ERUNPUl9DT05UQUlORVJfRElSRUNUSVZFXG59IFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZGREZWNvckNvbnRhaW5lci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yQ29udGFpbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgZGREZWNvckNvbnRhaW5lckNvbnRyb2xsZXIsIHtcblx0RERfREVDT1JfQ09OVEFJTkVSX0NPTlRST0xMRVJfTkFNRVxufSBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2RkRGVjb3JDb250YWluZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckNvbnRhaW5lci5jb250cm9sbGVyJztcbmltcG9ydCBkZERlY29yRHJvcFpvbmUsIHtcblx0RERfREVDT1JfRFJPUFpPTkVfRElSRUNUSVZFXG59IFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZGREZWNvckRyb3Bab25lL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JEcm9wWm9uZS5kaXJlY3RpdmUnO1xuaW1wb3J0IGRkRGVjb3JJdGVtLCB7XG5cdERSQUdfRFJPUF9ERUNPUl9JVEVNXG59IFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCBkcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZSwge1xuXHREUkFHX0RST1BfSVRFTV9ERUNPUl9TRVJWSUNFXG59XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmcm9tICcuL2RkRGVjb3JJdGVtL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JJdGVtLnNlcnZpY2UnO1xuaW1wb3J0IGRkRGVjb3JMaW5lLCB7XG5cdERSQUdfRFJPUF9ERUNPUl9MSU5FXG59IFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZGREZWNvckxpbmUvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckxpbmUuZGlyZWN0aXZlJztcblxuaW1wb3J0IGRkTm9FZGl0YWJsZUNvbnRyb2wsIHtcblx0RFJBR19EUk9QX05PX0VESVRBQkxFX0NPTlRST0xcbn0gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9kZE5vRWRpdGFibGVDb250cm9sL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkTm9FZGl0YWJsZUNvbnRyb2wuZGlyZWN0aXZlJztcblxuXG5jb25zdCBEUkFHRFJPUF9NT0RVTEUgPSAnZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AubW9kdWxlJztcblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuXHRcdFx0XHRcdFx0XHRcdC5tb2R1bGUoRFJBR0RST1BfTU9EVUxFLCBbXSlcblx0XHRcdFx0XHRcdFx0XHQuZGlyZWN0aXZlKEREX0NPTlRFTlRfQ09VTlRFUl9ESVJFQ1RJVkUsIGRkQ29udGVudENvdW50ZXIpXG5cdFx0XHRcdFx0XHRcdFx0LmNvbnRyb2xsZXIoRERfREVDT1JfQ09OVEFJTkVSX0NPTlRST0xMRVJfTkFNRSwgZGREZWNvckNvbnRhaW5lckNvbnRyb2xsZXIpXG5cdFx0XHRcdFx0XHRcdFx0LmRpcmVjdGl2ZShERF9ERUNPUl9DT05UQUlORVJfRElSRUNUSVZFLCBkZERlY29yQ29udGFpbmVyRGlyZWN0aXZlKVxuXHRcdFx0XHRcdFx0XHRcdC5kaXJlY3RpdmUoRERfREVDT1JfRFJPUFpPTkVfRElSRUNUSVZFLCBkZERlY29yRHJvcFpvbmUpXG5cdFx0XHRcdFx0XHRcdFx0LmRpcmVjdGl2ZShEUkFHX0RST1BfREVDT1JfSVRFTSwgZGREZWNvckl0ZW0pXG5cdFx0XHRcdFx0XHRcdFx0LnNlcnZpY2UoRFJBR19EUk9QX0lURU1fREVDT1JfU0VSVklDRSwgZHJhZ0Ryb3BJdGVtRGVjb3JhdGlvblNlcnZpY2UpXG5cdFx0XHRcdFx0XHRcdFx0LmRpcmVjdGl2ZShEUkFHX0RST1BfTk9fRURJVEFCTEVfQ09OVFJPTCwgZGROb0VkaXRhYmxlQ29udHJvbClcblx0XHRcdFx0XHRcdFx0XHQuc2VydmljZShEUkFHX0RST1BfSVRFTV9DT1VOVEVSX1NFUlZJQ0UsIGRyYWdEcm9wSXRlbUNvdW50ZXJTZXJ2aWNlKVxuXHRcdFx0XHRcdFx0XHRcdC5kaXJlY3RpdmUoRFJBR19EUk9QX0RFQ09SX0xJTkUsIGRkRGVjb3JMaW5lKVxuXHRcdFx0XHRcdFx0XHQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLm1vZHVsZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 54 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar DD_CONTENT_COUNTER_DIRECTIVE = 'ddContentCounter';\n\nfunction ddContentCounter(dragDropItemCounterService, $timeout) {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\tscope: {\n\t\t\tvalueWhenPlaceholder: '@ddValueWhenPlaceholder',\n\t\t\tvalueWhendragging: '@ddValueWhenDragging',\n\t\t\tfullModel: '=ddFullModel',\n\t\t\tcurrentIndex: '@ddContentCounterCurrentIndex',\n\t\t\tparentIndex: '@ddContentCounterParentIndex',\n\t\t\tforceRefresh: '=ddContentCounterForceCssRefresh'\n\t\t},\n\t\tlink: linkfct\n\t};\n\treturn directive;\n\n\tfunction linkfct($scope, element) {\n\t\tvar timer = void 0;\n\t\t// watch children length change : to update css item class\n\t\t$scope.$watch(function () {\n\t\t\treturn element[0].children.length;\n\t\t}, function (newValue, oldValue) {\n\t\t\tif (newValue !== oldValue) {\n\t\t\t\t(function () {\n\t\t\t\t\tvar newRealCount = 0;\n\t\t\t\t\tvar listClassForThisRow = [];\n\t\t\t\t\tfor (var i = element[0].children.length - 1; i >= 0; i--) {\n\t\t\t\t\t\tif (dragDropItemCounterService.isHtmlElementToCount(element[0].children[i].classList)) {\n\t\t\t\t\t\t\tnewRealCount++;\n\t\t\t\t\t\t\tlistClassForThisRow.push({ item: i, isReal: true });\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tlistClassForThisRow.push({ item: i, isReal: false });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t$scope.contentRealCount = newRealCount;\n\t\t\t\t\t// a timer otherwise won't refresh everytime\n\t\t\t\t\ttimer = $timeout(function () {\n\t\t\t\t\t\tdragDropItemCounterService.updateLineItemCss($scope.fullModel, listClassForThisRow, $scope.parentIndex, $scope.currentIndex, newRealCount);\n\t\t\t\t\t}, 20);\n\t\t\t\t})();\n\t\t\t}\n\t\t});\n\n\t\t$scope.$on('$destroy', function () {\n\t\t\t$timeout.cancel(timer);\n\t\t});\n\t}\n}\n\nddContentCounter.$inject = ['dragDropItemCounterService', '$timeout'];\n\nexports.default = ddContentCounter;\nexports.DD_CONTENT_COUNTER_DIRECTIVE = DD_CONTENT_COUNTER_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGRDb250ZW50Q291bnRlci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZENvbnRlbnRDb3VudGVyLmRpcmVjdGl2ZS5qcz81NDljIl0sIm5hbWVzIjpbIkREX0NPTlRFTlRfQ09VTlRFUl9ESVJFQ1RJVkUiLCJkZENvbnRlbnRDb3VudGVyIiwiZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2UiLCIkdGltZW91dCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0Iiwic2NvcGUiLCJ2YWx1ZVdoZW5QbGFjZWhvbGRlciIsInZhbHVlV2hlbmRyYWdnaW5nIiwiZnVsbE1vZGVsIiwiY3VycmVudEluZGV4IiwicGFyZW50SW5kZXgiLCJmb3JjZVJlZnJlc2giLCJsaW5rIiwibGlua2ZjdCIsIiRzY29wZSIsImVsZW1lbnQiLCJ0aW1lciIsIiR3YXRjaCIsImNoaWxkcmVuIiwibGVuZ3RoIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsIm5ld1JlYWxDb3VudCIsImxpc3RDbGFzc0ZvclRoaXNSb3ciLCJpIiwiaXNIdG1sRWxlbWVudFRvQ291bnQiLCJjbGFzc0xpc3QiLCJwdXNoIiwiaXRlbSIsImlzUmVhbCIsImNvbnRlbnRSZWFsQ291bnQiLCJ1cGRhdGVMaW5lSXRlbUNzcyIsIiRvbiIsImNhbmNlbCIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBTUEsK0JBQStCLGtCQUFyQzs7QUFFQSxTQUFTQyxnQkFBVCxDQUEwQkMsMEJBQTFCLEVBQXNEQyxRQUF0RCxFQUErRDtBQUM3RCxLQUFJQyxZQUFZO0FBQ2ZDLFlBQVcsR0FESTtBQUVmQyxTQUFVO0FBQ1RDLHlCQUF1Qix5QkFEZDtBQUVUQyxzQkFBc0Isc0JBRmI7QUFHVEMsY0FBa0IsY0FIVDtBQUlUQyxpQkFBb0IsK0JBSlg7QUFLVEMsZ0JBQW1CLDhCQUxWO0FBTVRDLGlCQUFtQjtBQU5WLEdBRks7QUFVZkMsUUFBU0M7QUFWTSxFQUFoQjtBQVlBLFFBQU9WLFNBQVA7O0FBRUEsVUFBU1UsT0FBVCxDQUFpQkMsTUFBakIsRUFBeUJDLE9BQXpCLEVBQWlDO0FBQ2hDLE1BQUlDLGNBQUo7QUFDQTtBQUNBRixTQUFPRyxNQUFQLENBQWM7QUFBQSxVQUFJRixRQUFRLENBQVIsRUFBV0csUUFBWCxDQUFvQkMsTUFBeEI7QUFBQSxHQUFkLEVBQTZDLFVBQUNDLFFBQUQsRUFBV0MsUUFBWCxFQUFzQjtBQUNsRSxPQUFJRCxhQUFhQyxRQUFqQixFQUEyQjtBQUFBO0FBQzFCLFNBQUlDLGVBQW1CLENBQXZCO0FBQ0EsU0FBSUMsc0JBQXNCLEVBQTFCO0FBQ0EsVUFBSyxJQUFJQyxJQUFJVCxRQUFRLENBQVIsRUFBV0csUUFBWCxDQUFvQkMsTUFBcEIsR0FBNkIsQ0FBMUMsRUFBNkNLLEtBQUssQ0FBbEQsRUFBcURBLEdBQXJELEVBQTBEO0FBQ3pELFVBQUd2QiwyQkFBMkJ3QixvQkFBM0IsQ0FBZ0RWLFFBQVEsQ0FBUixFQUFXRyxRQUFYLENBQW9CTSxDQUFwQixFQUF1QkUsU0FBdkUsQ0FBSCxFQUFxRjtBQUNwRko7QUFDQUMsMkJBQW9CSSxJQUFwQixDQUEwQixFQUFDQyxNQUFNSixDQUFQLEVBQVVLLFFBQVMsSUFBbkIsRUFBMUI7QUFDQSxPQUhELE1BR0s7QUFDSk4sMkJBQW9CSSxJQUFwQixDQUEwQixFQUFDQyxNQUFNSixDQUFQLEVBQVVLLFFBQVMsS0FBbkIsRUFBMUI7QUFDQTtBQUNEO0FBQ0RmLFlBQU9nQixnQkFBUCxHQUEwQlIsWUFBMUI7QUFDQTtBQUNBTixhQUFRZCxTQUFTLFlBQU07QUFDdEJELGlDQUEyQjhCLGlCQUEzQixDQUE2Q2pCLE9BQU9OLFNBQXBELEVBQStEZSxtQkFBL0QsRUFBb0ZULE9BQU9KLFdBQTNGLEVBQXdHSSxPQUFPTCxZQUEvRyxFQUE2SGEsWUFBN0g7QUFDQSxNQUZPLEVBRUwsRUFGSyxDQUFSO0FBYjBCO0FBaUIxQjtBQUNELEdBbkJEOztBQXFCQVIsU0FBT2tCLEdBQVAsQ0FBVyxVQUFYLEVBQXVCLFlBQUk7QUFDMUI5QixZQUFTK0IsTUFBVCxDQUFnQmpCLEtBQWhCO0FBQXdCLEdBRHpCO0FBR0E7QUFFRjs7QUFFRGhCLGlCQUFpQmtDLE9BQWpCLEdBQTJCLENBQzFCLDRCQUQwQixFQUUxQixVQUYwQixDQUEzQjs7a0JBS2VsQyxnQjtRQUdkRCw0QixHQUFBQSw0QiIsImZpbGUiOiI1NC5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEREX0NPTlRFTlRfQ09VTlRFUl9ESVJFQ1RJVkUgPSAnZGRDb250ZW50Q291bnRlcic7XG5cbmZ1bmN0aW9uIGRkQ29udGVudENvdW50ZXIoZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2UsICR0aW1lb3V0KXtcblx0XHRsZXQgZGlyZWN0aXZlICA9e1xuXHRcdFx0cmVzdHJpY3RcdDogJ0EnLFxuXHRcdFx0c2NvcGUgXHRcdDoge1xuXHRcdFx0XHR2YWx1ZVdoZW5QbGFjZWhvbGRlclx0OiAnQGRkVmFsdWVXaGVuUGxhY2Vob2xkZXInLFxuXHRcdFx0XHR2YWx1ZVdoZW5kcmFnZ2luZ1x0XHRcdDogJ0BkZFZhbHVlV2hlbkRyYWdnaW5nJyxcblx0XHRcdFx0ZnVsbE1vZGVsIFx0XHRcdFx0XHRcdDogJz1kZEZ1bGxNb2RlbCcsXG5cdFx0XHRcdGN1cnJlbnRJbmRleCBcdFx0XHRcdFx0OiAnQGRkQ29udGVudENvdW50ZXJDdXJyZW50SW5kZXgnLFxuXHRcdFx0XHRwYXJlbnRJbmRleCBcdFx0XHRcdFx0OiAnQGRkQ29udGVudENvdW50ZXJQYXJlbnRJbmRleCcsXG5cdFx0XHRcdGZvcmNlUmVmcmVzaFx0XHRcdFx0XHQ6ICc9ZGRDb250ZW50Q291bnRlckZvcmNlQ3NzUmVmcmVzaCdcdFx0XHRcdFxuXHRcdFx0fSxcblx0XHRcdGxpbmtcdFx0XHQ6IGxpbmtmY3Rcblx0XHR9O1xuXHRcdHJldHVybiBkaXJlY3RpdmU7XG5cdFx0XG5cdFx0ZnVuY3Rpb24gbGlua2ZjdCgkc2NvcGUsIGVsZW1lbnQpe1xuXHRcdFx0bGV0IHRpbWVyO1xuXHRcdFx0Ly8gd2F0Y2ggY2hpbGRyZW4gbGVuZ3RoIGNoYW5nZSA6IHRvIHVwZGF0ZSBjc3MgaXRlbSBjbGFzc1xuXHRcdFx0JHNjb3BlLiR3YXRjaCgoKT0+ZWxlbWVudFswXS5jaGlsZHJlbi5sZW5ndGgsKG5ld1ZhbHVlLCBvbGRWYWx1ZSk9Pntcblx0XHRcdFx0aWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuXHRcdFx0XHRcdGxldCBuZXdSZWFsQ291bnQgXHRcdFx0XHQ9IDA7XG5cdFx0XHRcdFx0bGV0IGxpc3RDbGFzc0ZvclRoaXNSb3cgPSBbXTtcblx0XHRcdFx0XHRmb3IgKGxldCBpID0gZWxlbWVudFswXS5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYoZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2UuaXNIdG1sRWxlbWVudFRvQ291bnQoZWxlbWVudFswXS5jaGlsZHJlbltpXS5jbGFzc0xpc3QpKXtcblx0XHRcdFx0XHRcdFx0bmV3UmVhbENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdGxpc3RDbGFzc0ZvclRoaXNSb3cucHVzaCgge2l0ZW06IGksIGlzUmVhbCA6IHRydWV9ICk7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bGlzdENsYXNzRm9yVGhpc1Jvdy5wdXNoKCB7aXRlbTogaSwgaXNSZWFsIDogZmFsc2V9ICk7XG5cdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQkc2NvcGUuY29udGVudFJlYWxDb3VudCA9IG5ld1JlYWxDb3VudDtcblx0XHRcdFx0XHQvLyBhIHRpbWVyIG90aGVyd2lzZSB3b24ndCByZWZyZXNoIGV2ZXJ5dGltZVxuXHRcdFx0XHRcdHRpbWVyID0gJHRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdFx0ZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2UudXBkYXRlTGluZUl0ZW1Dc3MoJHNjb3BlLmZ1bGxNb2RlbCwgbGlzdENsYXNzRm9yVGhpc1JvdywgJHNjb3BlLnBhcmVudEluZGV4LCAkc2NvcGUuY3VycmVudEluZGV4LCBuZXdSZWFsQ291bnQpO1x0XHRcdFx0ICAgICAgICBcdFxuXHRcdFx0XHRcdH0sIDIwKTtcblx0XHRcdFx0XHRcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFxuXHRcdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKT0+e1xuXHRcdFx0XHQkdGltZW91dC5jYW5jZWwodGltZXIpO31cblx0XHRcdCk7XG5cdFx0fVxuXHRcdFxufVxuXG5kZENvbnRlbnRDb3VudGVyLiRpbmplY3QgPSBbXG5cdCdkcmFnRHJvcEl0ZW1Db3VudGVyU2VydmljZScsXG5cdCckdGltZW91dCdcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRkQ29udGVudENvdW50ZXI7XG5cbmV4cG9ydCB7XG5cdEREX0NPTlRFTlRfQ09VTlRFUl9ESVJFQ1RJVkVcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkQ29udGVudENvdW50ZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGRDb250ZW50Q291bnRlci5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 55 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DRAG_DROP_ITEM_COUNTER_SERVICE = 'dragDropItemCounterService';\n\nvar dragDropItemCounterService = function () {\n\tfunction dragDropItemCounterService(easyFormDragWayConfig) {\n\t\t_classCallCheck(this, dragDropItemCounterService);\n\n\t\tthis.easyFormDragWayConfig = easyFormDragWayConfig;\n\t\tthis.init();\n\t}\n\n\t_createClass(dragDropItemCounterService, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tthis._modelItemRealCounter = [];\n\t\t\tthis._itemsNotToCount = angular.copy(this.easyFormDragWayConfig.getItemsNotToCount());\n\t\t}\n\t}, {\n\t\tkey: 'getItemsNotToCount',\n\t\tvalue: function getItemsNotToCount() {\n\t\t\treturn this._itemsNotToCount;\n\t\t}\n\t}, {\n\t\tkey: 'getModelItemsRealCounter',\n\t\tvalue: function getModelItemsRealCounter() {\n\t\t\treturn this._modelItemRealCounter;\n\t\t}\n\t}, {\n\t\tkey: 'isHtmlElementToCount',\n\t\tvalue: function isHtmlElementToCount(htmlvalue) {\n\t\t\tvar isToCount = true;\n\t\t\tif (htmlvalue.length > 0) {\n\t\t\t\tangular.forEach(this._itemsNotToCount, function (value) {\n\t\t\t\t\tfor (var classes = htmlvalue.length - 1; classes >= 0; classes--) {\n\t\t\t\t\t\tif (htmlvalue[classes] === value) isToCount = isToCount && false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn isToCount;\n\t\t}\n\t}, {\n\t\tkey: 'updateLineItemCss',\n\t\tvalue: function updateLineItemCss(fullModel, listCssToApply, columIndex, lineIndex, realCount) {\n\t\t\tif (typeof fullModel !== 'undefined' && typeof listCssToApply !== 'undefined' && typeof columIndex !== 'undefined' && typeof lineIndex !== 'undefined' && typeof realCount !== 'undefined') {\n\t\t\t\tfor (var i = fullModel[columIndex][lineIndex].length - 1; i >= 0; i--) {\n\t\t\t\t\tfor (var j = 0; j < listCssToApply.length; j++) {\n\t\t\t\t\t\tif (listCssToApply[j].item === i && listCssToApply[j].isReal === true) {\n\t\t\t\t\t\t\tfullModel[columIndex][lineIndex][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(realCount);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn dragDropItemCounterService;\n}();\n\ndragDropItemCounterService.$inject = ['easyFormDragWayConfig'];\n\nexports.default = dragDropItemCounterService;\nexports.DRAG_DROP_ITEM_COUNTER_SERVICE = DRAG_DROP_ITEM_COUNTER_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGRDb250ZW50Q291bnRlci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZENvbnRlbnRDb3VudGVyLnNlcnZpY2UuanM/MzE4MiJdLCJuYW1lcyI6WyJEUkFHX0RST1BfSVRFTV9DT1VOVEVSX1NFUlZJQ0UiLCJkcmFnRHJvcEl0ZW1Db3VudGVyU2VydmljZSIsImVhc3lGb3JtRHJhZ1dheUNvbmZpZyIsImluaXQiLCJfbW9kZWxJdGVtUmVhbENvdW50ZXIiLCJfaXRlbXNOb3RUb0NvdW50IiwiYW5ndWxhciIsImNvcHkiLCJnZXRJdGVtc05vdFRvQ291bnQiLCJodG1sdmFsdWUiLCJpc1RvQ291bnQiLCJsZW5ndGgiLCJmb3JFYWNoIiwidmFsdWUiLCJjbGFzc2VzIiwiZnVsbE1vZGVsIiwibGlzdENzc1RvQXBwbHkiLCJjb2x1bUluZGV4IiwibGluZUluZGV4IiwicmVhbENvdW50IiwiaSIsImoiLCJpdGVtIiwiaXNSZWFsIiwiY3NzQ2xhc3MiLCJnZXRJdGVtQ3NzRGVwZW5kaW5nTnVtYmVySXRlbXNJblJvdyIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNQSxpQ0FBaUMsNEJBQXZDOztJQUVNQywwQjtBQUVMLHFDQUFZQyxxQkFBWixFQUFrQztBQUFBOztBQUNqQyxPQUFLQSxxQkFBTCxHQUE2QkEscUJBQTdCO0FBQ0EsT0FBS0MsSUFBTDtBQUNBOzs7O3lCQUVLO0FBQ0wsUUFBS0MscUJBQUwsR0FBNkIsRUFBN0I7QUFDQSxRQUFLQyxnQkFBTCxHQUF3QkMsUUFBUUMsSUFBUixDQUFhLEtBQUtMLHFCQUFMLENBQTJCTSxrQkFBM0IsRUFBYixDQUF4QjtBQUNBOzs7dUNBRW1CO0FBQ25CLFVBQU8sS0FBS0gsZ0JBQVo7QUFDQTs7OzZDQUV5QjtBQUN6QixVQUFPLEtBQUtELHFCQUFaO0FBQ0E7Ozt1Q0FFb0JLLFMsRUFBVTtBQUM5QixPQUFJQyxZQUFZLElBQWhCO0FBQ0EsT0FBSUQsVUFBVUUsTUFBVixHQUFtQixDQUF2QixFQUEwQjtBQUN6QkwsWUFBUU0sT0FBUixDQUFnQixLQUFLUCxnQkFBckIsRUFBdUMsVUFBQ1EsS0FBRCxFQUFTO0FBQy9DLFVBQUssSUFBSUMsVUFBVUwsVUFBVUUsTUFBVixHQUFtQixDQUF0QyxFQUF5Q0csV0FBVyxDQUFwRCxFQUF1REEsU0FBdkQsRUFBa0U7QUFDakUsVUFBSUwsVUFBVUssT0FBVixNQUF1QkQsS0FBM0IsRUFBa0NILFlBQVlBLGFBQWEsS0FBekI7QUFDbEM7QUFDRCxLQUpEO0FBS0E7QUFDRCxVQUFPQSxTQUFQO0FBQ0E7OztvQ0FFaUJLLFMsRUFBV0MsYyxFQUFnQkMsVSxFQUFZQyxTLEVBQVdDLFMsRUFBVTtBQUM3RSxPQUFJLE9BQU9KLFNBQVAsS0FBeUIsV0FBekIsSUFDSCxPQUFPQyxjQUFQLEtBQTRCLFdBRHpCLElBRUgsT0FBT0MsVUFBUCxLQUEwQixXQUZ2QixJQUdILE9BQU9DLFNBQVAsS0FBMEIsV0FIdkIsSUFJSCxPQUFPQyxTQUFQLEtBQTBCLFdBSjNCLEVBSXdDO0FBQ3ZDLFNBQUssSUFBSUMsSUFBSUwsVUFBVUUsVUFBVixFQUFzQkMsU0FBdEIsRUFBaUNQLE1BQWpDLEdBQTBDLENBQXZELEVBQTBEUyxLQUFLLENBQS9ELEVBQWtFQSxHQUFsRSxFQUF1RTtBQUN0RSxVQUFLLElBQUlDLElBQUksQ0FBYixFQUFnQkEsSUFBSUwsZUFBZUwsTUFBbkMsRUFBMkNVLEdBQTNDLEVBQWdEO0FBQy9DLFVBQUlMLGVBQWVLLENBQWYsRUFBa0JDLElBQWxCLEtBQTZCRixDQUE3QixJQUNGSixlQUFlSyxDQUFmLEVBQWtCRSxNQUFsQixLQUE4QixJQURoQyxFQUNxQztBQUNwQ1IsaUJBQVVFLFVBQVYsRUFBc0JDLFNBQXRCLEVBQWlDRSxDQUFqQyxFQUFvQ0ksUUFBcEMsR0FBK0MsS0FBS3RCLHFCQUFMLENBQTJCdUIsbUNBQTNCLENBQStETixTQUEvRCxDQUEvQztBQUNBO0FBQ0Q7QUFDRDtBQUNELFdBQU8sSUFBUDtBQUNBO0FBQ0Q7Ozs7OztBQUtGbEIsMkJBQTJCeUIsT0FBM0IsR0FBcUMsQ0FDcEMsdUJBRG9DLENBQXJDOztrQkFJZXpCLDBCO1FBR2RELDhCLEdBQUFBLDhCIiwiZmlsZSI6IjU1LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRFJBR19EUk9QX0lURU1fQ09VTlRFUl9TRVJWSUNFID0gJ2RyYWdEcm9wSXRlbUNvdW50ZXJTZXJ2aWNlJztcblxuY2xhc3MgZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2V7XG5cdFxuXHRjb25zdHJ1Y3RvcihlYXN5Rm9ybURyYWdXYXlDb25maWcpe1xuXHRcdHRoaXMuZWFzeUZvcm1EcmFnV2F5Q29uZmlnID0gZWFzeUZvcm1EcmFnV2F5Q29uZmlnO1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdFxuXHRpbml0KCl7XG5cdFx0dGhpcy5fbW9kZWxJdGVtUmVhbENvdW50ZXIgPSBbXTtcblx0XHR0aGlzLl9pdGVtc05vdFRvQ291bnQgPSBhbmd1bGFyLmNvcHkodGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuZ2V0SXRlbXNOb3RUb0NvdW50KCkpO1xuXHR9XG5cdFx0XG5cdGdldEl0ZW1zTm90VG9Db3VudCgpe1xuXHRcdHJldHVybiB0aGlzLl9pdGVtc05vdFRvQ291bnQ7XG5cdH0gXHRcblxuXHRnZXRNb2RlbEl0ZW1zUmVhbENvdW50ZXIoKXtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxJdGVtUmVhbENvdW50ZXI7XG5cdH1cblx0XG5cdGlzSHRtbEVsZW1lbnRUb0NvdW50KGh0bWx2YWx1ZSl7XG5cdFx0bGV0IGlzVG9Db3VudCA9IHRydWU7XG5cdFx0aWYgKGh0bWx2YWx1ZS5sZW5ndGggPiAwKSB7XG5cdFx0XHRhbmd1bGFyLmZvckVhY2godGhpcy5faXRlbXNOb3RUb0NvdW50LCAodmFsdWUpPT57XG5cdFx0XHRcdGZvciAobGV0IGNsYXNzZXMgPSBodG1sdmFsdWUubGVuZ3RoIC0gMTsgY2xhc3NlcyA+PSAwOyBjbGFzc2VzLS0pIHtcblx0XHRcdFx0XHRpZiAoaHRtbHZhbHVlW2NsYXNzZXNdID09PSB2YWx1ZSkgaXNUb0NvdW50ID0gaXNUb0NvdW50ICYmIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGlzVG9Db3VudDtcdFxuXHR9XG5cdFxuXHR1cGRhdGVMaW5lSXRlbUNzcyhmdWxsTW9kZWwsIGxpc3RDc3NUb0FwcGx5LCBjb2x1bUluZGV4LCBsaW5lSW5kZXgsIHJlYWxDb3VudCl7XG5cdFx0aWYgKHR5cGVvZiBmdWxsTW9kZWwgXHRcdCE9PSBcdFx0J3VuZGVmaW5lZCcgJiZcblx0XHRcdHR5cGVvZiBsaXN0Q3NzVG9BcHBseSAhPT0gXHRcdCd1bmRlZmluZWQnICYmXG5cdFx0XHR0eXBlb2YgY29sdW1JbmRleCBcdFx0IT09IFx0XHQndW5kZWZpbmVkJyAmJlxuXHRcdFx0dHlwZW9mIGxpbmVJbmRleCBcdFx0XHQhPT0gXHRcdCd1bmRlZmluZWQnICYmXG5cdFx0XHR0eXBlb2YgcmVhbENvdW50IFx0XHRcdCE9PSBcdFx0J3VuZGVmaW5lZCcpIHtcblx0XHRcdGZvciAobGV0IGkgPSBmdWxsTW9kZWxbY29sdW1JbmRleF1bbGluZUluZGV4XS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGxpc3RDc3NUb0FwcGx5Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0aWYoXHRsaXN0Q3NzVG9BcHBseVtqXS5pdGVtIFx0XHQ9PT0gaSAmJlxuXHRcdFx0XHRcdFx0XHRsaXN0Q3NzVG9BcHBseVtqXS5pc1JlYWwgXHQ9PT0gdHJ1ZSl7XG5cdFx0XHRcdFx0XHRmdWxsTW9kZWxbY29sdW1JbmRleF1bbGluZUluZGV4XVtpXS5jc3NDbGFzcyA9IHRoaXMuZWFzeUZvcm1EcmFnV2F5Q29uZmlnLmdldEl0ZW1Dc3NEZXBlbmRpbmdOdW1iZXJJdGVtc0luUm93KHJlYWxDb3VudCk7XG5cdFx0XHRcdFx0fSBcdFxuXHRcdFx0XHR9XG5cdFx0XHR9XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cdFx0XG5cdFxuXHRcbn1cblxuZHJhZ0Ryb3BJdGVtQ291bnRlclNlcnZpY2UuJGluamVjdCA9IFtcblx0J2Vhc3lGb3JtRHJhZ1dheUNvbmZpZydcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRyYWdEcm9wSXRlbUNvdW50ZXJTZXJ2aWNlO1xuXG5leHBvcnQge1xuXHREUkFHX0RST1BfSVRFTV9DT1VOVEVSX1NFUlZJQ0Vcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkQ29udGVudENvdW50ZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGRDb250ZW50Q291bnRlci5zZXJ2aWNlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 56 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.DD_DECOR_CONTAINER_DIRECTIVE = undefined;\n\nvar _edaDragDropWayDragdropDdDecorContainerTemplate = __webpack_require__(57);\n\nvar _edaDragDropWayDragdropDdDecorContainerTemplate2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorContainerTemplate);\n\nvar _edaDragDropWayDragdropDdDecorContainer = __webpack_require__(58);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global angular */\nvar DD_DECOR_CONTAINER_DIRECTIVE = 'ddDecorContainer';\n\nfunction ddDecorContainer() {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\ttemplate: _edaDragDropWayDragdropDdDecorContainerTemplate2.default,\n\t\tscope: {},\n\t\tcontroller: _edaDragDropWayDragdropDdDecorContainer.DD_DECOR_CONTAINER_CONTROLLER_NAME,\n\t\tcontrollerAs: _edaDragDropWayDragdropDdDecorContainer.DD_DECOR_CONTAINER_CONTROLLERAS_NAME,\n\t\tbindToController: {\n\t\t\t'styleParam': '=ddContainerProperties',\n\t\t\t'isStillCollapsed': '=ddContainerIsCollpased',\n\t\t\t'verboseMode': '@ddContainerVerboseMode',\n\t\t\t'currentIndex': '@ddContainerCurrentIndex',\n\t\t\t'collpaseAll': '&ddCollapseAll'\n\t\t},\n\t\ttransclude: true,\n\t\tlink: linkFct\n\t};\n\treturn directive;\n\n\tfunction linkFct($scope, element, attrs, ctrl, transclude) {\n\t\tvar verboseModeActive = $scope.ddDecorContainerCtrl.verboseMode;\n\t\tvar currentIndex = $scope.ddDecorContainerCtrl.currentIndex;\n\t\t$scope.ddDecorContainerCtrl.isCollapsed = false;\n\t\t$scope.ddDecorContainerCtrl.config.isEnabled = false;\n\t\t/**\n \t* forceCollapse when :\n \t* dragDropConfigModel.containerConfig.decoration.isCollapsed changed (here bound to $scope.isStillCollapsed)\n \t*/\n\t\t$scope.$watch(function () {\n\t\t\treturn $scope.ddDecorContainerCtrl.isStillCollapsed;\n\t\t}, function (newVal, oldVal) {\n\t\t\tif (newVal !== oldVal) {\n\t\t\t\tif ($scope.$parent.$parent.$index === 0) $scope.ddDecorContainerCtrl.isCollapsed = newVal;\n\t\t\t}\n\t\t});\n\n\t\t/**\n \t* verbose mode for developments only\n \t*/\n\t\tif (verboseModeActive !== '') {\n\t\t\tvar verbose = angular.lowercase(verboseModeActive);\n\t\t\tif (verbose === 'true' || verbose === '1') {\n\t\t\t\t/* eslint no-console:0 */\n\t\t\t\tconsole.dir({\n\t\t\t\t\twhoAmI: 'I am verbose from ddDecorContainer link',\n\t\t\t\t\tverbodeMode: verbose,\n\t\t\t\t\tParentParentIndex: $scope.$parent.$parent.$index,\n\t\t\t\t\tParentIndex: $scope.$parent.$index,\n\t\t\t\t\tcurrentIndex: currentIndex,\n\t\t\t\t\tstyleParam: $scope.ddDecorContainerCtrl.styleParam,\n\t\t\t\t\tcolumnindex: $scope.$parent.$parent.$parent.$parent.$index\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n \t* no header (no title, no collapse....)\n \t*/\n\t\t//$scope.ddDecorContainerCtrl.config.isEnabled\n\t\tif (typeof currentIndex !== 'undefined') {\n\t\t\tif (currentIndex !== '') {\n\t\t\t\t/**\n \t* specific 1st column\n \t*/\n\t\t\t\tif (currentIndex === '0') {\n\t\t\t\t\t/**\n \t* apply title\n \t*/\n\t\t\t\t\tif (typeof $scope.ddDecorContainerCtrl.styleParam.title !== 'undefined') {\n\t\t\t\t\t\t$scope.ddDecorContainerCtrl.currentTitle = $scope.ddDecorContainerCtrl.styleParam.title;\n\t\t\t\t\t\t$scope.ddDecorContainerCtrl.config.isEnabled = true;\n\t\t\t\t\t\t$scope.ddDecorContainerCtrl.isCollapsed = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n \t* prevent transclusion creating child scope\n \t* want to know more about what I'm talking about : check this nice tip on the subject :\n \t* http://angular-tips.com/blog/2014/03/transclusion-and-scopes/\n \t*/\n\t\ttransclude($scope.$parent, function (contentClone) {\n\t\t\t/**\n \t* transclusion will append content to '
    '\n \t*/\n\t\t\tvar childDiv = angular.element(element.children()[1]);\n\t\t\tchildDiv.append(contentClone);\n\t\t});\n\t}\n}\n\nexports.default = ddDecorContainer;\nexports.DD_DECOR_CONTAINER_DIRECTIVE = DD_DECOR_CONTAINER_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckNvbnRhaW5lci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yQ29udGFpbmVyLmRpcmVjdGl2ZS5qcz84MWI0Il0sIm5hbWVzIjpbIkREX0RFQ09SX0NPTlRBSU5FUl9ESVJFQ1RJVkUiLCJkZERlY29yQ29udGFpbmVyIiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJ0ZW1wbGF0ZSIsInNjb3BlIiwiY29udHJvbGxlciIsImNvbnRyb2xsZXJBcyIsImJpbmRUb0NvbnRyb2xsZXIiLCJ0cmFuc2NsdWRlIiwibGluayIsImxpbmtGY3QiLCIkc2NvcGUiLCJlbGVtZW50IiwiYXR0cnMiLCJjdHJsIiwidmVyYm9zZU1vZGVBY3RpdmUiLCJkZERlY29yQ29udGFpbmVyQ3RybCIsInZlcmJvc2VNb2RlIiwiY3VycmVudEluZGV4IiwiaXNDb2xsYXBzZWQiLCJjb25maWciLCJpc0VuYWJsZWQiLCIkd2F0Y2giLCJpc1N0aWxsQ29sbGFwc2VkIiwibmV3VmFsIiwib2xkVmFsIiwiJHBhcmVudCIsIiRpbmRleCIsInZlcmJvc2UiLCJhbmd1bGFyIiwibG93ZXJjYXNlIiwiY29uc29sZSIsImRpciIsIndob0FtSSIsInZlcmJvZGVNb2RlIiwiUGFyZW50UGFyZW50SW5kZXgiLCJQYXJlbnRJbmRleCIsInN0eWxlUGFyYW0iLCJjb2x1bW5pbmRleCIsInRpdGxlIiwiY3VycmVudFRpdGxlIiwiY29udGVudENsb25lIiwiY2hpbGREaXYiLCJjaGlsZHJlbiIsImFwcGVuZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFGQTtBQVFBLElBQU1BLCtCQUErQixrQkFBckM7O0FBR0EsU0FBU0MsZ0JBQVQsR0FBMkI7QUFDMUIsS0FBSUMsWUFBWTtBQUNmQyxZQUFlLEdBREE7QUFFZkMsb0VBRmU7QUFHZkMsU0FBYyxFQUhDO0FBSWZDLHdGQUplO0FBS2JDLDRGQUxhO0FBTWJDLG9CQUFtQjtBQUNwQixpQkFBeUIsd0JBREw7QUFFcEIsdUJBQXlCLHlCQUZMO0FBR3BCLGtCQUF5Qix5QkFITDtBQUlwQixtQkFBeUIsMEJBSkw7QUFLcEIsa0JBQXlCO0FBTEwsR0FOTjtBQWFmQyxjQUFnQixJQWJEO0FBY2ZDLFFBQWNDO0FBZEMsRUFBaEI7QUFnQkEsUUFBT1QsU0FBUDs7QUFFQSxVQUFTUyxPQUFULENBQWlCQyxNQUFqQixFQUF5QkMsT0FBekIsRUFBa0NDLEtBQWxDLEVBQXlDQyxJQUF6QyxFQUErQ04sVUFBL0MsRUFBMEQ7QUFDekQsTUFBSU8sb0JBQWlDSixPQUFPSyxvQkFBUCxDQUE0QkMsV0FBakU7QUFDQSxNQUFJQyxlQUFpQ1AsT0FBT0ssb0JBQVAsQ0FBNEJFLFlBQWpFO0FBQ0FQLFNBQU9LLG9CQUFQLENBQTRCRyxXQUE1QixHQUE2QyxLQUE3QztBQUNBUixTQUFPSyxvQkFBUCxDQUE0QkksTUFBNUIsQ0FBbUNDLFNBQW5DLEdBQStDLEtBQS9DO0FBQ0E7Ozs7QUFJQVYsU0FBT1csTUFBUCxDQUFjO0FBQUEsVUFBS1gsT0FBT0ssb0JBQVAsQ0FBNEJPLGdCQUFqQztBQUFBLEdBQWQsRUFBZ0UsVUFBQ0MsTUFBRCxFQUFTQyxNQUFULEVBQWtCO0FBQ2pGLE9BQUlELFdBQVdDLE1BQWYsRUFBdUI7QUFDdEIsUUFBSWQsT0FBT2UsT0FBUCxDQUFlQSxPQUFmLENBQXVCQyxNQUF2QixLQUFrQyxDQUF0QyxFQUF5Q2hCLE9BQU9LLG9CQUFQLENBQTRCRyxXQUE1QixHQUEwQ0ssTUFBMUM7QUFDekM7QUFDRCxHQUpEOztBQU9BOzs7QUFHQSxNQUFJVCxzQkFBc0IsRUFBMUIsRUFBOEI7QUFDN0IsT0FBSWEsVUFBVUMsUUFBUUMsU0FBUixDQUFrQmYsaUJBQWxCLENBQWQ7QUFDQSxPQUFJYSxZQUFZLE1BQVosSUFBc0JBLFlBQVksR0FBdEMsRUFBMkM7QUFDMUM7QUFDQUcsWUFBUUMsR0FBUixDQUFZO0FBQ1hDLGFBQXdCLHlDQURiO0FBRVhDLGtCQUF3Qk4sT0FGYjtBQUdYTyx3QkFBd0J4QixPQUFPZSxPQUFQLENBQWVBLE9BQWYsQ0FBdUJDLE1BSHBDO0FBSVhTLGtCQUF3QnpCLE9BQU9lLE9BQVAsQ0FBZUMsTUFKNUI7QUFLWFQsbUJBQXdCQSxZQUxiO0FBTVhtQixpQkFBd0IxQixPQUFPSyxvQkFBUCxDQUE0QnFCLFVBTnpDO0FBT1hDLGtCQUF3QjNCLE9BQU9lLE9BQVAsQ0FBZUEsT0FBZixDQUF1QkEsT0FBdkIsQ0FBK0JBLE9BQS9CLENBQXVDQztBQVBwRCxLQUFaO0FBU0E7QUFDRDs7QUFFRDs7O0FBR0E7QUFDQSxNQUFJLE9BQU9ULFlBQVAsS0FBd0IsV0FBNUIsRUFBeUM7QUFDeEMsT0FBSUEsaUJBQWlCLEVBQXJCLEVBQXlCO0FBQ3hCOzs7QUFHQSxRQUFJQSxpQkFBaUIsR0FBckIsRUFBMEI7QUFDekI7OztBQUdBLFNBQUksT0FBT1AsT0FBT0ssb0JBQVAsQ0FBNEJxQixVQUE1QixDQUF1Q0UsS0FBOUMsS0FBd0QsV0FBNUQsRUFBeUU7QUFDdkU1QixhQUFPSyxvQkFBUCxDQUE0QndCLFlBQTVCLEdBQWdEN0IsT0FBT0ssb0JBQVAsQ0FBNEJxQixVQUE1QixDQUF1Q0UsS0FBdkY7QUFDQTVCLGFBQU9LLG9CQUFQLENBQTRCSSxNQUE1QixDQUFtQ0MsU0FBbkMsR0FBK0MsSUFBL0M7QUFDQVYsYUFBT0ssb0JBQVAsQ0FBNEJHLFdBQTVCLEdBQStDLElBQS9DO0FBQ0Q7QUFDRDtBQUNEO0FBQ0Q7O0FBR0Q7Ozs7O0FBS0FYLGFBQVdHLE9BQU9lLE9BQWxCLEVBQTJCLFVBQVNlLFlBQVQsRUFBc0I7QUFDL0M7OztBQUdBLE9BQUlDLFdBQVdiLFFBQVFqQixPQUFSLENBQWdCQSxRQUFRK0IsUUFBUixHQUFtQixDQUFuQixDQUFoQixDQUFmO0FBQ0FELFlBQVNFLE1BQVQsQ0FBZ0JILFlBQWhCO0FBQ0QsR0FORDtBQVVBO0FBRUQ7O2tCQUdjekMsZ0I7UUFHZEQsNEIsR0FBQUEsNEIiLCJmaWxlIjoiNTYuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgYW5ndWxhciAqL1xuaW1wb3J0IGRkRGVjb3JDb250YWluZXJUZW1wbGF0ZSBcdFx0XHRmcm9tICcuL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JDb250YWluZXIudGVtcGxhdGUuaHRtbCc7XG5pbXBvcnQge1xuXHRERF9ERUNPUl9DT05UQUlORVJfQ09OVFJPTExFUl9OQU1FLFxuXHRERF9ERUNPUl9DT05UQUlORVJfQ09OVFJPTExFUkFTX05BTUVcbn1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckNvbnRhaW5lci5jb250cm9sbGVyJztcblxuXG5jb25zdCBERF9ERUNPUl9DT05UQUlORVJfRElSRUNUSVZFID0gJ2RkRGVjb3JDb250YWluZXInO1xuXG5cbmZ1bmN0aW9uIGRkRGVjb3JDb250YWluZXIoKXtcblx0bGV0IGRpcmVjdGl2ZSA9IHtcblx0XHRyZXN0cmljdFx0XHRcdFx0XHQ6ICdBJyxcblx0XHR0ZW1wbGF0ZVx0XHRcdFx0XHQ6IGRkRGVjb3JDb250YWluZXJUZW1wbGF0ZSxcblx0XHRzY29wZSBcdFx0XHRcdFx0XHQ6IHt9LFxuXHRcdGNvbnRyb2xsZXJcdFx0XHRcdDogRERfREVDT1JfQ09OVEFJTkVSX0NPTlRST0xMRVJfTkFNRSxcbiAgICBjb250cm9sbGVyQXNcdFx0XHQ6IEREX0RFQ09SX0NPTlRBSU5FUl9DT05UUk9MTEVSQVNfTkFNRSxcbiAgICBiaW5kVG9Db250cm9sbGVyXHQ6IHtcblx0XHRcdCdzdHlsZVBhcmFtJyAgICAgICAgICAgOiAnPWRkQ29udGFpbmVyUHJvcGVydGllcycsXG5cdFx0XHQnaXNTdGlsbENvbGxhcHNlZCcgICAgIDogJz1kZENvbnRhaW5lcklzQ29sbHBhc2VkJyxcblx0XHRcdCd2ZXJib3NlTW9kZScgICAgICAgICAgOiAnQGRkQ29udGFpbmVyVmVyYm9zZU1vZGUnLFxuXHRcdFx0J2N1cnJlbnRJbmRleCcgICAgICAgICA6ICdAZGRDb250YWluZXJDdXJyZW50SW5kZXgnLFxuXHRcdFx0J2NvbGxwYXNlQWxsJyAgICAgICAgICA6ICcmZGRDb2xsYXBzZUFsbCdcbiAgICB9LFxuXHRcdHRyYW5zY2x1ZGVcdFx0XHRcdDogdHJ1ZSxcblx0XHRsaW5rIFx0XHRcdFx0XHRcdFx0Olx0bGlua0ZjdFxuXHR9O1xuXHRyZXR1cm4gZGlyZWN0aXZlO1xuXG5cdGZ1bmN0aW9uIGxpbmtGY3QoJHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybCwgdHJhbnNjbHVkZSl7XG5cdFx0bGV0IHZlcmJvc2VNb2RlQWN0aXZlICAgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD0gJHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLnZlcmJvc2VNb2RlO1xuXHRcdGxldCBjdXJyZW50SW5kZXggICAgICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ9ICRzY29wZS5kZERlY29yQ29udGFpbmVyQ3RybC5jdXJyZW50SW5kZXg7XG5cdFx0JHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLmlzQ29sbGFwc2VkXHRcdFx0XHQ9IGZhbHNlO1xuXHRcdCRzY29wZS5kZERlY29yQ29udGFpbmVyQ3RybC5jb25maWcuaXNFbmFibGVkXHQ9IGZhbHNlO1xuXHRcdC8qKlxuXHRcdFx0KiBmb3JjZUNvbGxhcHNlIHdoZW4gOlxuXHRcdFx0KiAgZHJhZ0Ryb3BDb25maWdNb2RlbC5jb250YWluZXJDb25maWcuZGVjb3JhdGlvbi5pc0NvbGxhcHNlZCBjaGFuZ2VkIChoZXJlIGJvdW5kIHRvICRzY29wZS5pc1N0aWxsQ29sbGFwc2VkKVxuXHRcdFx0Ki9cblx0XHQkc2NvcGUuJHdhdGNoKCgpPT4gJHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLmlzU3RpbGxDb2xsYXBzZWQsKG5ld1ZhbCwgb2xkVmFsKT0+e1xuXHRcdFx0aWYgKG5ld1ZhbCAhPT0gb2xkVmFsKSB7XG5cdFx0XHRcdGlmICgkc2NvcGUuJHBhcmVudC4kcGFyZW50LiRpbmRleCA9PT0gMCkgJHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLmlzQ29sbGFwc2VkID0gbmV3VmFsO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cblx0XHQvKipcblx0XHRcdCogdmVyYm9zZSBtb2RlIGZvciBkZXZlbG9wbWVudHMgb25seVxuXHRcdFx0Ki9cblx0XHRpZiAodmVyYm9zZU1vZGVBY3RpdmUgIT09ICcnKSB7XG5cdFx0XHR2YXIgdmVyYm9zZSA9IGFuZ3VsYXIubG93ZXJjYXNlKHZlcmJvc2VNb2RlQWN0aXZlKTtcblx0XHRcdGlmICh2ZXJib3NlID09PSAndHJ1ZScgfHwgdmVyYm9zZSA9PT0gJzEnKSB7XG5cdFx0XHRcdC8qIGVzbGludCBuby1jb25zb2xlOjAgKi9cblx0XHRcdFx0Y29uc29sZS5kaXIoe1xuXHRcdFx0XHRcdHdob0FtSSAgICAgICAgICAgICAgOiAgICdJIGFtIHZlcmJvc2UgZnJvbSBkZERlY29yQ29udGFpbmVyIGxpbmsnLFxuXHRcdFx0XHRcdHZlcmJvZGVNb2RlICAgICAgICAgOiAgIHZlcmJvc2UsXG5cdFx0XHRcdFx0UGFyZW50UGFyZW50SW5kZXggICA6ICAgJHNjb3BlLiRwYXJlbnQuJHBhcmVudC4kaW5kZXgsXG5cdFx0XHRcdFx0UGFyZW50SW5kZXggICAgICAgICA6ICAgJHNjb3BlLiRwYXJlbnQuJGluZGV4LFxuXHRcdFx0XHRcdGN1cnJlbnRJbmRleCAgICAgICAgOiAgIGN1cnJlbnRJbmRleCxcblx0XHRcdFx0XHRzdHlsZVBhcmFtICAgICAgICAgIDogICAkc2NvcGUuZGREZWNvckNvbnRhaW5lckN0cmwuc3R5bGVQYXJhbSxcblx0XHRcdFx0XHRjb2x1bW5pbmRleCAgICAgICAgIDogICAkc2NvcGUuJHBhcmVudC4kcGFyZW50LiRwYXJlbnQuJHBhcmVudC4kaW5kZXhcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0XHQqIG5vIGhlYWRlciAobm8gdGl0bGUsIG5vIGNvbGxhcHNlLi4uLilcblx0XHRcdCovXG5cdFx0Ly8kc2NvcGUuZGREZWNvckNvbnRhaW5lckN0cmwuY29uZmlnLmlzRW5hYmxlZFxuXHRcdGlmICh0eXBlb2YgY3VycmVudEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0aWYgKGN1cnJlbnRJbmRleCAhPT0gJycpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0KiBzcGVjaWZpYyAxc3QgY29sdW1uXG5cdFx0XHRcdFx0Ki9cblx0XHRcdFx0aWYgKGN1cnJlbnRJbmRleCA9PT0gJzAnKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQqIGFwcGx5IHRpdGxlXG5cdFx0XHRcdFx0XHQqL1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgJHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLnN0eWxlUGFyYW0udGl0bGUgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0XHRcdCRzY29wZS5kZERlY29yQ29udGFpbmVyQ3RybC5jdXJyZW50VGl0bGUgICAgIFx0PSAkc2NvcGUuZGREZWNvckNvbnRhaW5lckN0cmwuc3R5bGVQYXJhbS50aXRsZTtcblx0XHRcdFx0XHRcdFx0JHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLmNvbmZpZy5pc0VuYWJsZWRcdD0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0JHNjb3BlLmRkRGVjb3JDb250YWluZXJDdHJsLmlzQ29sbGFwc2VkICAgICBcdD0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdC8qKlxuXHRcdFx0KiBwcmV2ZW50IHRyYW5zY2x1c2lvbiBjcmVhdGluZyBjaGlsZCBzY29wZVxuXHRcdFx0KiB3YW50IHRvIGtub3cgbW9yZSBhYm91dCB3aGF0IEknbSB0YWxraW5nIGFib3V0IDogY2hlY2sgdGhpcyBuaWNlIHRpcCBvbiB0aGUgc3ViamVjdCA6XG5cdFx0XHQqIGh0dHA6Ly9hbmd1bGFyLXRpcHMuY29tL2Jsb2cvMjAxNC8wMy90cmFuc2NsdXNpb24tYW5kLXNjb3Blcy9cblx0XHRcdCovXG5cdFx0dHJhbnNjbHVkZSgkc2NvcGUuJHBhcmVudCwgZnVuY3Rpb24oY29udGVudENsb25lKXtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0KiB0cmFuc2NsdXNpb24gd2lsbCBhcHBlbmQgY29udGVudCB0byAnPGRpdiBpZD1cImRkRGVjb3JDb250YWluZXJXaWxsVHJhbnNjbHVkZUhlcmVcIj48L2Rpdj4nXG5cdFx0XHRcdFx0Ki9cblx0XHRcdFx0dmFyIGNoaWxkRGl2ID0gYW5ndWxhci5lbGVtZW50KGVsZW1lbnQuY2hpbGRyZW4oKVsxXSk7XG5cdFx0XHRcdGNoaWxkRGl2LmFwcGVuZChjb250ZW50Q2xvbmUpO1xuXHRcdH0pO1xuXG5cblxuXHR9XG5cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBkZERlY29yQ29udGFpbmVyO1xuXG5leHBvcnQge1xuXHRERF9ERUNPUl9DT05UQUlORVJfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkRGVjb3JDb250YWluZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckNvbnRhaW5lci5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 57 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n \\n \\n  \\n {{ddDecorContainerCtrl.currentTitle}}\\n

    \\n
    \\n
    \\n
    \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckNvbnRhaW5lci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yQ29udGFpbmVyLnRlbXBsYXRlLmh0bWw/ZGFmOCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrU0FBa1MseUNBQXlDLHFDQUFxQyxRQUFRLG1DQUFtQyIsImZpbGUiOiI1Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2IG5nLWNsaWNrPVxcXCJkZERlY29yQ29udGFpbmVyQ3RybC5jb2xsYXBzZUZjdCgpXFxcIj5cXG4gICA8aDZcXG4gICAgbmctc2hvdz1cXFwiZGREZWNvckNvbnRhaW5lckN0cmwuY29uZmlnLmlzRW5hYmxlZFxcXCJcXG4gICAgY2xhc3M9XFxcImRkRGVjb3JDb250YWluZXJDdHJsLmlzQ29sbGFwc2FibGVab25lXFxcIlxcbiAgICBzdHlsZT1cXFwiY3Vyc29yOnBvaW50ZXJcXFwiPlxcbiAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgYnRuLXhzXFxcIj5cXG4gICAgICA8c3BhbiBjbGFzcz1cXFwie3tkZERlY29yQ29udGFpbmVyQ3RybC5jdXJyZW50SWNvbkNsYXNzKCl9fVxcXCI+PC9zcGFuPlxcbiAgICA8L2J1dHRvbj5cXG4gICAgJm5ic3A7XFxuICAgIHt7ZGREZWNvckNvbnRhaW5lckN0cmwuY3VycmVudFRpdGxlfX1cXG4gIDwvaDY+XFxuPC9kaXY+XFxuPGRpdiB1aWItY29sbGFwc2U9XFxcImRkRGVjb3JDb250YWluZXJDdHJsLmlzQ29sbGFwc2VkXFxcIj5cXG4gICA8ZGl2IGlkPVxcXCJkZERlY29yQ29udGFpbmVyV2lsbFRyYW5zY2x1ZGVIZXJlXFxcIj48L2Rpdj5cXG48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkRGVjb3JDb250YWluZXIvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckNvbnRhaW5lci50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA1N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 58 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/* global angular */\nvar DD_DECOR_CONTAINER_CONTROLLER_NAME = 'ddDecorContainerController';\nvar DD_DECOR_CONTAINER_CONTROLLERAS_NAME = 'ddDecorContainerCtrl';\n\nvar ddDecorContainerController = function () {\n\tfunction ddDecorContainerController() {\n\t\t_classCallCheck(this, ddDecorContainerController);\n\n\t\tthis.init();\n\t}\n\n\t_createClass(ddDecorContainerController, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tthis.config = angular.extend({}, { isEnabled: false });\n\t\t\t/**\n \t* TODO (low priority) : make icon css configurable (provider)\n \t*/\n\t\t\tthis.icons = angular.extend({}, {\n\t\t\t\tclosedClass: 'glyphicon glyphicon-eye-open',\n\t\t\t\topened: 'glyphicon glyphicon-eye-close'\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'collapseFct',\n\t\tvalue: function collapseFct() {\n\t\t\tthis.collpaseAll({ exceptThisOne: this.styleParam.WhenIndex }); //note : collpaseAll function is boundToController from directive attribute : 'collpaseAll' : '&ddCollapseAll'\n\t\t\tthis.isCollapsed = !this.isCollapsed;\n\t\t\tthis.isStillCollapsed = this.isCollapsed; //note : isStillCollapsed is boundToController from directive attribute : 'isStillCollapsed' : '=ddContainerIsCollpased',\n\t\t}\n\t}, {\n\t\tkey: 'currentIconClass',\n\t\tvalue: function currentIconClass() {\n\t\t\tif (this.isCollapsed) {\n\t\t\t\treturn this.icons.closedClass;\n\t\t\t} else {\n\t\t\t\treturn this.icons.opened;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn ddDecorContainerController;\n}();\n\nexports.default = ddDecorContainerController;\nexports.DD_DECOR_CONTAINER_CONTROLLER_NAME = DD_DECOR_CONTAINER_CONTROLLER_NAME;\nexports.DD_DECOR_CONTAINER_CONTROLLERAS_NAME = DD_DECOR_CONTAINER_CONTROLLERAS_NAME;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckNvbnRhaW5lci9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yQ29udGFpbmVyLmNvbnRyb2xsZXIuanM/OGEyMCJdLCJuYW1lcyI6WyJERF9ERUNPUl9DT05UQUlORVJfQ09OVFJPTExFUl9OQU1FIiwiRERfREVDT1JfQ09OVEFJTkVSX0NPTlRST0xMRVJBU19OQU1FIiwiZGREZWNvckNvbnRhaW5lckNvbnRyb2xsZXIiLCJpbml0IiwiY29uZmlnIiwiYW5ndWxhciIsImV4dGVuZCIsImlzRW5hYmxlZCIsImljb25zIiwiY2xvc2VkQ2xhc3MiLCJvcGVuZWQiLCJjb2xscGFzZUFsbCIsImV4Y2VwdFRoaXNPbmUiLCJzdHlsZVBhcmFtIiwiV2hlbkluZGV4IiwiaXNDb2xsYXBzZWQiLCJpc1N0aWxsQ29sbGFwc2VkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQSxJQUFNQSxxQ0FBdUMsNEJBQTdDO0FBQ0EsSUFBTUMsdUNBQXVDLHNCQUE3Qzs7SUFFTUMsMEI7QUFFTCx1Q0FBYTtBQUFBOztBQUNaLE9BQUtDLElBQUw7QUFDQTs7Ozt5QkFFSztBQUNMLFFBQUtDLE1BQUwsR0FBY0MsUUFBUUMsTUFBUixDQUFlLEVBQWYsRUFBbUIsRUFBRUMsV0FBWSxLQUFkLEVBQW5CLENBQWQ7QUFDQTs7O0FBR0EsUUFBS0MsS0FBTCxHQUFhSCxRQUFRQyxNQUFSLENBQWUsRUFBZixFQUFtQjtBQUMvQkcsaUJBQWMsOEJBRGlCO0FBRS9CQyxZQUFXO0FBRm9CLElBQW5CLENBQWI7QUFJQTs7O2dDQUVZO0FBQ1osUUFBS0MsV0FBTCxDQUFpQixFQUFDQyxlQUFlLEtBQUtDLFVBQUwsQ0FBZ0JDLFNBQWhDLEVBQWpCLEVBRFksQ0FDbUQ7QUFDL0QsUUFBS0MsV0FBTCxHQUFzQixDQUFDLEtBQUtBLFdBQTVCO0FBQ0EsUUFBS0MsZ0JBQUwsR0FBd0IsS0FBS0QsV0FBN0IsQ0FIWSxDQUc4QjtBQUMxQzs7O3FDQUVpQjtBQUNqQixPQUFJLEtBQUtBLFdBQVQsRUFBc0I7QUFDckIsV0FBTyxLQUFLUCxLQUFMLENBQVdDLFdBQWxCO0FBQ0EsSUFGRCxNQUVLO0FBQ0osV0FBTyxLQUFLRCxLQUFMLENBQVdFLE1BQWxCO0FBQ0E7QUFDRDs7Ozs7O2tCQUlhUiwwQjtRQUdkRixrQyxHQUFBQSxrQztRQUNBQyxvQyxHQUFBQSxvQyIsImZpbGUiOiI1OC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBhbmd1bGFyICovXG5jb25zdCBERF9ERUNPUl9DT05UQUlORVJfQ09OVFJPTExFUl9OQU1FIFx0XHQ9ICdkZERlY29yQ29udGFpbmVyQ29udHJvbGxlcic7XG5jb25zdCBERF9ERUNPUl9DT05UQUlORVJfQ09OVFJPTExFUkFTX05BTUVcdD0gJ2RkRGVjb3JDb250YWluZXJDdHJsJztcblxuY2xhc3MgZGREZWNvckNvbnRhaW5lckNvbnRyb2xsZXJ7XG5cdFxuXHRjb25zdHJ1Y3Rvcigpe1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdFxuXHRpbml0KCl7XG5cdFx0dGhpcy5jb25maWcgPSBhbmd1bGFyLmV4dGVuZCh7fSwgeyBpc0VuYWJsZWQgOiBmYWxzZSB9KTtcblx0XHQvKipcblx0XHRcdCogIFRPRE8gKGxvdyBwcmlvcml0eSkgOiBtYWtlIGljb24gY3NzIGNvbmZpZ3VyYWJsZSAocHJvdmlkZXIpXG5cdFx0XHQqL1x0XHRcblx0XHR0aGlzLmljb25zID0gYW5ndWxhci5leHRlbmQoe30sIHtcblx0XHRcdGNsb3NlZENsYXNzXHQ6ICdnbHlwaGljb24gZ2x5cGhpY29uLWV5ZS1vcGVuJyxcblx0XHRcdG9wZW5lZFx0XHRcdDogJ2dseXBoaWNvbiBnbHlwaGljb24tZXllLWNsb3NlJ1x0XHRcdFxuXHRcdH0pO1xuXHR9XG5cdFxuXHRjb2xsYXBzZUZjdCgpe1xuXHRcdHRoaXMuY29sbHBhc2VBbGwoe2V4Y2VwdFRoaXNPbmU6IHRoaXMuc3R5bGVQYXJhbS5XaGVuSW5kZXh9KTsgIC8vbm90ZSA6IGNvbGxwYXNlQWxsIGZ1bmN0aW9uIGlzIGJvdW5kVG9Db250cm9sbGVyIGZyb20gZGlyZWN0aXZlIGF0dHJpYnV0ZSA6ICdjb2xscGFzZUFsbCcgOiAnJmRkQ29sbGFwc2VBbGwnXG5cdFx0dGhpcy5pc0NvbGxhcHNlZCBcdFx0XHQ9ICF0aGlzLmlzQ29sbGFwc2VkO1xuXHRcdHRoaXMuaXNTdGlsbENvbGxhcHNlZFx0PSB0aGlzLmlzQ29sbGFwc2VkOyAvL25vdGUgOiBpc1N0aWxsQ29sbGFwc2VkIGlzIGJvdW5kVG9Db250cm9sbGVyIGZyb20gZGlyZWN0aXZlIGF0dHJpYnV0ZSA6ICdpc1N0aWxsQ29sbGFwc2VkJyA6ICc9ZGRDb250YWluZXJJc0NvbGxwYXNlZCcsXG5cdH1cdFxuXHRcblx0Y3VycmVudEljb25DbGFzcygpe1xuXHRcdGlmICh0aGlzLmlzQ29sbGFwc2VkKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pY29ucy5jbG9zZWRDbGFzcztcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiB0aGlzLmljb25zLm9wZW5lZDtcblx0XHR9XG5cdH1cdFxuXHRcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGREZWNvckNvbnRhaW5lckNvbnRyb2xsZXI7XG5cbmV4cG9ydCB7XG5cdEREX0RFQ09SX0NPTlRBSU5FUl9DT05UUk9MTEVSX05BTUUsXG5cdEREX0RFQ09SX0NPTlRBSU5FUl9DT05UUk9MTEVSQVNfTkFNRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9kcmFnZHJvcC9kZERlY29yQ29udGFpbmVyL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JDb250YWluZXIuY29udHJvbGxlci5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 59 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.DD_DECOR_DROPZONE_DIRECTIVE = undefined;\n\nvar _edaDragDropWayDragdropDdDecorDropZoneTemplate = __webpack_require__(60);\n\nvar _edaDragDropWayDragdropDdDecorDropZoneTemplate2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorDropZoneTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DD_DECOR_DROPZONE_DIRECTIVE = 'ddDecorDropZone'; /* global angular */\n\n\nfunction ddDecorDropZone() {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\ttemplate: _edaDragDropWayDragdropDdDecorDropZoneTemplate2.default,\n\t\tscope: {\n\t\t\t'styleParam': '=ddDropZoneProperties',\n\t\t\t'verboseMode': '@ddDropZoneVerboseMode',\n\t\t\t'currentIndex': '@ddDropZoneCurrentIndex',\n\t\t\t'addNewLineFct': '&ddDropZoneAddNewLine'\n\t\t},\n\t\ttransclude: true,\n\t\tlink: linkfct\n\t};\n\treturn directive;\n\n\tfunction linkfct($scope) {\n\n\t\tvar verboseModeActive = $scope.verboseMode;\n\t\tvar currentIndex = $scope.currentIndex;\n\n\t\t$scope.headerConfig = {\n\t\t\tHeaderButtonVisible: false,\n\t\t\taffixAttr: 'bs-affix',\n\t\t\taffixEnabled: false\n\t\t};\n\t\t/**\n \t* verbose mode : just for dev\n \t*/\n\t\tif (verboseModeActive !== '') {\n\t\t\tvar verbose = angular.lowercase(verboseModeActive);\n\t\t\tif (verbose === 'true' || verbose === '1') {\n\t\t\t\t/* eslint no-console:0 */\n\t\t\t\tconsole.dir({\n\t\t\t\t\twhoAmI: 'I am verbose from ddDecorDropZone link',\n\t\t\t\t\tverbodeMode: verbose,\n\t\t\t\t\tParentParentIndex: $scope.$parent.$parent.$index,\n\t\t\t\t\tParentIndex: $scope.$parent.$index,\n\t\t\t\t\tcurrentIndex: currentIndex,\n\t\t\t\t\tstyleParam: $scope.styleParam\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (typeof currentIndex !== 'undefined') {\n\t\t\tif (currentIndex !== '') {\n\t\t\t\t// apply title\n\t\t\t\tif (typeof $scope.styleParam.title !== 'undefined') $scope.currentTitle = $scope.styleParam.title;\n\t\t\t\t//apply font-awesome\n\t\t\t\tif (typeof $scope.styleParam.fontAwesomeIcon !== 'undefined') $scope.currentFontAwesome = $scope.styleParam.fontAwesomeIcon;\n\t\t\t\t//show add new line button\n\t\t\t\tif (currentIndex === '1') $scope.headerConfig.HeaderButtonVisible = true;\n\t\t\t}\n\t\t}\n\t}\n}\n\nddDecorDropZone.$inject = [];\n\nexports.default = ddDecorDropZone;\nexports.DD_DECOR_DROPZONE_DIRECTIVE = DD_DECOR_DROPZONE_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckRyb3Bab25lL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JEcm9wWm9uZS5kaXJlY3RpdmUuanM/ZjdhMSJdLCJuYW1lcyI6WyJERF9ERUNPUl9EUk9QWk9ORV9ESVJFQ1RJVkUiLCJkZERlY29yRHJvcFpvbmUiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRlbXBsYXRlIiwic2NvcGUiLCJ0cmFuc2NsdWRlIiwibGluayIsImxpbmtmY3QiLCIkc2NvcGUiLCJ2ZXJib3NlTW9kZUFjdGl2ZSIsInZlcmJvc2VNb2RlIiwiY3VycmVudEluZGV4IiwiaGVhZGVyQ29uZmlnIiwiSGVhZGVyQnV0dG9uVmlzaWJsZSIsImFmZml4QXR0ciIsImFmZml4RW5hYmxlZCIsInZlcmJvc2UiLCJhbmd1bGFyIiwibG93ZXJjYXNlIiwiY29uc29sZSIsImRpciIsIndob0FtSSIsInZlcmJvZGVNb2RlIiwiUGFyZW50UGFyZW50SW5kZXgiLCIkcGFyZW50IiwiJGluZGV4IiwiUGFyZW50SW5kZXgiLCJzdHlsZVBhcmFtIiwidGl0bGUiLCJjdXJyZW50VGl0bGUiLCJmb250QXdlc29tZUljb24iLCJjdXJyZW50Rm9udEF3ZXNvbWUiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLDhCQUE4QixpQkFBcEMsQyxDQUhBOzs7QUFLQSxTQUFTQyxlQUFULEdBQTBCO0FBQ3pCLEtBQUlDLFlBQVk7QUFDZkMsWUFBWSxHQURHO0FBRWZDLG1FQUZlO0FBR2ZDLFNBQVU7QUFDVCxpQkFBa0IsdUJBRFQ7QUFFVCxrQkFBa0Isd0JBRlQ7QUFHVCxtQkFBa0IseUJBSFQ7QUFJVCxvQkFBa0I7QUFKVCxHQUhLO0FBU2ZDLGNBQWEsSUFURTtBQVVmQyxRQUFVQztBQVZLLEVBQWhCO0FBWUEsUUFBT04sU0FBUDs7QUFFQSxVQUFTTSxPQUFULENBQWlCQyxNQUFqQixFQUF3Qjs7QUFFdkIsTUFBSUMsb0JBQXNCRCxPQUFPRSxXQUFqQztBQUNBLE1BQUlDLGVBQXNCSCxPQUFPRyxZQUFqQzs7QUFFQUgsU0FBT0ksWUFBUCxHQUFzQjtBQUNyQkMsd0JBQXNCLEtBREQ7QUFFckJDLGNBQXNCLFVBRkQ7QUFHckJDLGlCQUFzQjtBQUhELEdBQXRCO0FBS0E7OztBQUdBLE1BQUlOLHNCQUFzQixFQUExQixFQUE4QjtBQUM3QixPQUFJTyxVQUFVQyxRQUFRQyxTQUFSLENBQWtCVCxpQkFBbEIsQ0FBZDtBQUNBLE9BQUlPLFlBQVksTUFBWixJQUFzQkEsWUFBWSxHQUF0QyxFQUEyQztBQUMxQztBQUNBRyxZQUFRQyxHQUFSLENBQVk7QUFDWEMsYUFBc0Isd0NBRFg7QUFFWEMsa0JBQXNCTixPQUZYO0FBR1hPLHdCQUFzQmYsT0FBT2dCLE9BQVAsQ0FBZUEsT0FBZixDQUF1QkMsTUFIbEM7QUFJWEMsa0JBQXNCbEIsT0FBT2dCLE9BQVAsQ0FBZUMsTUFKMUI7QUFLWGQsbUJBQXNCQSxZQUxYO0FBTVhnQixpQkFBc0JuQixPQUFPbUI7QUFObEIsS0FBWjtBQVFBO0FBQ0Q7O0FBR0QsTUFBSSxPQUFPaEIsWUFBUCxLQUF3QixXQUE1QixFQUF5QztBQUN4QyxPQUFJQSxpQkFBaUIsRUFBckIsRUFBeUI7QUFDeEI7QUFDQSxRQUFJLE9BQU9ILE9BQU9tQixVQUFQLENBQWtCQyxLQUF6QixLQUFtQyxXQUF2QyxFQUFvRHBCLE9BQU9xQixZQUFQLEdBQXNCckIsT0FBT21CLFVBQVAsQ0FBa0JDLEtBQXhDO0FBQ3BEO0FBQ0EsUUFBSSxPQUFPcEIsT0FBT21CLFVBQVAsQ0FBa0JHLGVBQXpCLEtBQTZDLFdBQWpELEVBQThEdEIsT0FBT3VCLGtCQUFQLEdBQTRCdkIsT0FBT21CLFVBQVAsQ0FBa0JHLGVBQTlDO0FBQzlEO0FBQ0EsUUFBSW5CLGlCQUFpQixHQUFyQixFQUEwQkgsT0FBT0ksWUFBUCxDQUFvQkMsbUJBQXBCLEdBQTBDLElBQTFDO0FBQzFCO0FBQ0Q7QUFFRDtBQUVEOztBQUdEYixnQkFBZ0JnQyxPQUFoQixHQUEwQixFQUExQjs7a0JBRWVoQyxlO1FBR2RELDJCLEdBQUFBLDJCIiwiZmlsZSI6IjU5LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCBkZERlY29yRHJvcFpvbmVUZW1wbGF0ZSBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JEcm9wWm9uZS50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgRERfREVDT1JfRFJPUFpPTkVfRElSRUNUSVZFID0gJ2RkRGVjb3JEcm9wWm9uZSc7XG5cbmZ1bmN0aW9uIGRkRGVjb3JEcm9wWm9uZSgpe1xuXHRsZXQgZGlyZWN0aXZlID0ge1xuXHRcdHJlc3RyaWN0IFx0OiAnQScsXG5cdFx0dGVtcGxhdGUgXHQ6IGRkRGVjb3JEcm9wWm9uZVRlbXBsYXRlLFxuXHRcdHNjb3BlXHRcdFx0Olx0e1xuXHRcdFx0J3N0eWxlUGFyYW0nICAgIDogJz1kZERyb3Bab25lUHJvcGVydGllcycsXG5cdFx0XHQndmVyYm9zZU1vZGUnICAgOiAnQGRkRHJvcFpvbmVWZXJib3NlTW9kZScsXG5cdFx0XHQnY3VycmVudEluZGV4JyAgOiAnQGRkRHJvcFpvbmVDdXJyZW50SW5kZXgnLFxuXHRcdFx0J2FkZE5ld0xpbmVGY3QnIDogJyZkZERyb3Bab25lQWRkTmV3TGluZSdcblx0XHR9LFxuXHRcdHRyYW5zY2x1ZGVcdDogdHJ1ZSxcblx0XHRsaW5rXHRcdFx0XHQ6IGxpbmtmY3Rcblx0fTtcblx0cmV0dXJuIGRpcmVjdGl2ZTtcblxuXHRmdW5jdGlvbiBsaW5rZmN0KCRzY29wZSl7XG5cblx0XHRsZXQgdmVyYm9zZU1vZGVBY3RpdmUgICA9ICRzY29wZS52ZXJib3NlTW9kZTtcblx0XHRsZXQgY3VycmVudEluZGV4ICAgICAgICA9ICRzY29wZS5jdXJyZW50SW5kZXg7XG5cblx0XHQkc2NvcGUuaGVhZGVyQ29uZmlnID0ge1xuXHRcdFx0SGVhZGVyQnV0dG9uVmlzaWJsZSA6IGZhbHNlLFxuXHRcdFx0YWZmaXhBdHRyICAgICAgICAgICA6ICdicy1hZmZpeCcsXG5cdFx0XHRhZmZpeEVuYWJsZWQgICAgICAgIDogZmFsc2Vcblx0XHR9O1xuXHRcdC8qKlxuXHRcdFx0KiB2ZXJib3NlIG1vZGUgOiBqdXN0IGZvciBkZXZcblx0XHRcdCovXG5cdFx0aWYgKHZlcmJvc2VNb2RlQWN0aXZlICE9PSAnJykge1xuXHRcdFx0bGV0IHZlcmJvc2UgPSBhbmd1bGFyLmxvd2VyY2FzZSh2ZXJib3NlTW9kZUFjdGl2ZSk7XG5cdFx0XHRpZiAodmVyYm9zZSA9PT0gJ3RydWUnIHx8IHZlcmJvc2UgPT09ICcxJykge1xuXHRcdFx0XHQvKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cdFx0XHRcdGNvbnNvbGUuZGlyKHtcblx0XHRcdFx0XHR3aG9BbUkgICAgICAgICAgICAgIDogJ0kgYW0gdmVyYm9zZSBmcm9tIGRkRGVjb3JEcm9wWm9uZSBsaW5rJyxcblx0XHRcdFx0XHR2ZXJib2RlTW9kZSAgICAgICAgIDogdmVyYm9zZSxcblx0XHRcdFx0XHRQYXJlbnRQYXJlbnRJbmRleCAgIDogJHNjb3BlLiRwYXJlbnQuJHBhcmVudC4kaW5kZXgsXG5cdFx0XHRcdFx0UGFyZW50SW5kZXggICAgICAgICA6ICRzY29wZS4kcGFyZW50LiRpbmRleCxcblx0XHRcdFx0XHRjdXJyZW50SW5kZXggICAgICAgIDogY3VycmVudEluZGV4LFxuXHRcdFx0XHRcdHN0eWxlUGFyYW0gICAgICAgICAgOiAkc2NvcGUuc3R5bGVQYXJhbVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGlmICh0eXBlb2YgY3VycmVudEluZGV4ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0aWYgKGN1cnJlbnRJbmRleCAhPT0gJycpIHtcblx0XHRcdFx0Ly8gYXBwbHkgdGl0bGVcblx0XHRcdFx0aWYgKHR5cGVvZiAkc2NvcGUuc3R5bGVQYXJhbS50aXRsZSAhPT0gJ3VuZGVmaW5lZCcpICRzY29wZS5jdXJyZW50VGl0bGUgPSAkc2NvcGUuc3R5bGVQYXJhbS50aXRsZTtcblx0XHRcdFx0Ly9hcHBseSBmb250LWF3ZXNvbWVcblx0XHRcdFx0aWYgKHR5cGVvZiAkc2NvcGUuc3R5bGVQYXJhbS5mb250QXdlc29tZUljb24gIT09ICd1bmRlZmluZWQnKSAkc2NvcGUuY3VycmVudEZvbnRBd2Vzb21lID0gJHNjb3BlLnN0eWxlUGFyYW0uZm9udEF3ZXNvbWVJY29uO1xuXHRcdFx0XHQvL3Nob3cgYWRkIG5ldyBsaW5lIGJ1dHRvblxuXHRcdFx0XHRpZiAoY3VycmVudEluZGV4ID09PSAnMScpICRzY29wZS5oZWFkZXJDb25maWcuSGVhZGVyQnV0dG9uVmlzaWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdH1cblxufVxuXG5cbmRkRGVjb3JEcm9wWm9uZS4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0IGRkRGVjb3JEcm9wWm9uZTtcblxuZXhwb3J0IHtcblx0RERfREVDT1JfRFJPUFpPTkVfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkRGVjb3JEcm9wWm9uZS9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yRHJvcFpvbmUuZGlyZWN0aXZlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 60 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n

    \\n  \\n {{currentTitle}}\\n
    \\n \\n \\n  \\n add new line\\n \\n
    \\n

    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckRyb3Bab25lL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JEcm9wWm9uZS50ZW1wbGF0ZS5odG1sPzM5NWEiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsaUNBQWlDLDBCQUEwQiwyS0FBMkssb0JBQW9CLGFBQWEsY0FBYyxjQUFjLG9OQUFvTiwyRkFBMkYiLCJmaWxlIjoiNjAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJtb2R1bGUuZXhwb3J0cyA9IFwiPGRpdiBjbGFzcz1cXFwie3tzdHlsZVBhcmFtLkFwcGx5Y3NzQ2xhc3N9fVxcXCI+XFxuICA8ZGl2IGlkPVxcXCJ2aXN1YWxQYW5lbFxcXCI+XFxuICAgIDxkaXYgIGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1oZWFkaW5nXFxcIj5cXG4gICAgICAgIDxoMyBjbGFzcz1cXFwicGFuZWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICA8aSBjbGFzcz1cXFwie3tjdXJyZW50Rm9udEF3ZXNvbWV9fVxcXCI+PC9pPiZuYnNwO1xcbiAgICAgICAgICB7e2N1cnJlbnRUaXRsZX19XFxuICAgICAgICAgICA8ZGl2IG5nLXNob3c9XFxcImhlYWRlckNvbmZpZy5IZWFkZXJCdXR0b25WaXNpYmxlXFxcIj5cXG4gICAgICAgICAgICAgPGJ1dHRvblxcbiAgICAgICAgICAgICAgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBidG4teHMgYnV0dG9uSGVhZGVyQWRkTmV3TGluZSBjZW50ZXItYmxvY2tcXFwiXFxuICAgICAgICAgICAgICBuZy1jbGljaz1cXFwiYWRkTmV3TGluZUZjdCgpO1xcXCI+XFxuICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImdseXBoaWNvbiBnbHlwaGljb24tcGx1c1xcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICZuYnNwO1xcbiAgICAgICAgICAgICAgIGFkZCBuZXcgbGluZVxcbiAgICAgICAgICAgICA8L2J1dHRvbj5cXG4gICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9oMz5cXG4gICAgICA8L2Rpdj5cXG4gICAgICA8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG4gICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC1tZC0xMlxcXCIgbmctdHJhbnNjbHVkZT5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICA8L2Rpdj5cXG4gICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgPC9kaXY+XFxuPC9kaXY+XFxuXCJcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9kcmFnZHJvcC9kZERlY29yRHJvcFpvbmUvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckRyb3Bab25lLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 61 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.DRAG_DROP_DECOR_ITEM = undefined;\n\nvar _edaDragDropWayDragdropDdDecorItemTemplate = __webpack_require__(62);\n\nvar _edaDragDropWayDragdropDdDecorItemTemplate2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorItemTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAG_DROP_DECOR_ITEM = 'ddDecorItem';\n\nfunction ddDecorItem(easyFormDragWayConfig) {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\tscope: {\n\t\t\t'verboseMode': '@ddItemVerboseMode',\n\t\t\t'currentIndex': '@ddItemCurrentIndex',\n\t\t\t'parentIndex': '@ddItemParentIndex',\n\t\t\t'parentParentIndex': '@ddItemParentParentIndex',\n\t\t\t'lineItemsCount': '@ddItemsCount',\n\t\t\t'cssClass': '@ddItemCssClass'\n\t\t},\n\t\ttemplate: _edaDragDropWayDragdropDdDecorItemTemplate2.default,\n\t\ttransclude: true,\n\t\tlink: linkfct\n\t};\n\treturn directive;\n\n\tfunction linkfct($scope, element, attrs, ctrl, transclude) {\n\t\tvar verboseModeActive = $scope.verboseMode;\n\t\tvar currentIndex = $scope.currentIndex;\n\t\tvar parentIndex = $scope.parentIndex;\n\t\tvar listClass = easyFormDragWayConfig.getDistinctItemCssClass();\n\n\t\t/**\n \t* init css class\n \t*/\n\t\tangular.forEach(listClass, function (css) {\n\t\t\treturn element.removeClass(css);\n\t\t});\n\t\telement.addClass($scope.cssClass);\n\t\t/**\n \t* update css class\n \t*/\n\t\t$scope.$watch('cssClass', function (newValue, oldValue) {\n\t\t\tif (newValue !== oldValue) {\n\t\t\t\t/**\n \t* update css class\n \t*/\n\t\t\t\tangular.forEach(listClass, function (css) {\n\t\t\t\t\treturn element.removeClass(css);\n\t\t\t\t});\n\t\t\t\telement.addClass(newValue);\n\t\t\t}\n\t\t});\n\n\t\t/**\n \t* verbose mode : just for dev \n \t*/\n\t\tif (verboseModeActive !== '') {\n\t\t\tvar verbose = angular.lowercase(verboseModeActive);\n\t\t\tif (verbose === 'true' || verbose === '1') {\n\t\t\t\t/* eslint no-console:0 */\n\t\t\t\tconsole.dir({\n\t\t\t\t\twhoAmI: 'I am verbose from ddDecorItem directive link',\n\t\t\t\t\tverbodeMode: verbose,\n\t\t\t\t\tParentParentIndex: $scope.$parent.$parent.$index,\n\t\t\t\t\tParentIndex: parentIndex,\n\t\t\t\t\tparentParentIndex: $scope.parentParentIndex,\n\t\t\t\t\tcurrentIndex: currentIndex,\n\t\t\t\t\tlineItemsCount: $scope.lineItemsCount\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t/**\n \t* control column : apply css class to item\n \t*/\n\t\tif ($scope.parentParentIndex === '0') element.addClass(listClass[0]);\n\t\t/**\n \t* prevent transclusion creating child scope \n \t*\n \t*\n \t* NOTE :if you want to know more about what I'm saying : check this nice tip on the subject : \n \t* http://angular-tips.com/blog/2014/03/transclusion-and-scopes/ \n \t*/\n\t\ttransclude($scope.$parent, function (contentClone) {\n\t\t\t/**\n \t* transclusion will append content to '
    ' \n \t*/\n\t\t\tvar childDiv = angular.element(element.children()[0]);\n\t\t\tchildDiv.append(contentClone);\n\t\t});\n\t}\n}\n\nddDecorItem.$inject = ['easyFormDragWayConfig'];\n\nexports.default = ddDecorItem;\nexports.DRAG_DROP_DECOR_ITEM = DRAG_DROP_DECOR_ITEM;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0uZGlyZWN0aXZlLmpzP2MxMzAiXSwibmFtZXMiOlsiRFJBR19EUk9QX0RFQ09SX0lURU0iLCJkZERlY29ySXRlbSIsImVhc3lGb3JtRHJhZ1dheUNvbmZpZyIsImRpcmVjdGl2ZSIsInJlc3RyaWN0Iiwic2NvcGUiLCJ0ZW1wbGF0ZSIsInRyYW5zY2x1ZGUiLCJsaW5rIiwibGlua2ZjdCIsIiRzY29wZSIsImVsZW1lbnQiLCJhdHRycyIsImN0cmwiLCJ2ZXJib3NlTW9kZUFjdGl2ZSIsInZlcmJvc2VNb2RlIiwiY3VycmVudEluZGV4IiwicGFyZW50SW5kZXgiLCJsaXN0Q2xhc3MiLCJnZXREaXN0aW5jdEl0ZW1Dc3NDbGFzcyIsImFuZ3VsYXIiLCJmb3JFYWNoIiwiY3NzIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsImNzc0NsYXNzIiwiJHdhdGNoIiwibmV3VmFsdWUiLCJvbGRWYWx1ZSIsInZlcmJvc2UiLCJsb3dlcmNhc2UiLCJjb25zb2xlIiwiZGlyIiwid2hvQW1JIiwidmVyYm9kZU1vZGUiLCJQYXJlbnRQYXJlbnRJbmRleCIsIiRwYXJlbnQiLCIkaW5kZXgiLCJQYXJlbnRJbmRleCIsInBhcmVudFBhcmVudEluZGV4IiwibGluZUl0ZW1zQ291bnQiLCJjb250ZW50Q2xvbmUiLCJjaGlsZERpdiIsImNoaWxkcmVuIiwiYXBwZW5kIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSx1QkFBdUIsYUFBN0I7O0FBRUEsU0FBU0MsV0FBVCxDQUFxQkMscUJBQXJCLEVBQTJDO0FBQzFDLEtBQUlDLFlBQVk7QUFDZkMsWUFBYSxHQURFO0FBRWZDLFNBQWE7QUFDWixrQkFBbUIsb0JBRFA7QUFFWixtQkFBb0IscUJBRlI7QUFHWixrQkFBbUIsb0JBSFA7QUFJWix3QkFBc0IsMEJBSlY7QUFLWixxQkFBcUIsZUFMVDtBQU1aLGVBQWlCO0FBTkwsR0FGRTtBQVVmQywrREFWZTtBQVdmQyxjQUFhLElBWEU7QUFZZkMsUUFBVUM7QUFaSyxFQUFoQjtBQWNBLFFBQU9OLFNBQVA7O0FBRUEsVUFBU00sT0FBVCxDQUFpQkMsTUFBakIsRUFBeUJDLE9BQXpCLEVBQWtDQyxLQUFsQyxFQUF5Q0MsSUFBekMsRUFBK0NOLFVBQS9DLEVBQTBEO0FBQ3pELE1BQUlPLG9CQUFvQkosT0FBT0ssV0FBL0I7QUFDQSxNQUFJQyxlQUFvQk4sT0FBT00sWUFBL0I7QUFDQSxNQUFJQyxjQUFvQlAsT0FBT08sV0FBL0I7QUFDQSxNQUFJQyxZQUFvQmhCLHNCQUFzQmlCLHVCQUF0QixFQUF4Qjs7QUFHQTs7O0FBR0FDLFVBQVFDLE9BQVIsQ0FBZ0JILFNBQWhCLEVBQTJCLFVBQUNJLEdBQUQ7QUFBQSxVQUFPWCxRQUFRWSxXQUFSLENBQW9CRCxHQUFwQixDQUFQO0FBQUEsR0FBM0I7QUFDQVgsVUFBUWEsUUFBUixDQUFpQmQsT0FBT2UsUUFBeEI7QUFDQTs7O0FBR0FmLFNBQU9nQixNQUFQLENBQWMsVUFBZCxFQUEwQixVQUFDQyxRQUFELEVBQVdDLFFBQVgsRUFBc0I7QUFDL0MsT0FBR0QsYUFBYUMsUUFBaEIsRUFBeUI7QUFDeEI7OztBQUdBUixZQUFRQyxPQUFSLENBQWdCSCxTQUFoQixFQUEyQixVQUFDSSxHQUFEO0FBQUEsWUFBT1gsUUFBUVksV0FBUixDQUFvQkQsR0FBcEIsQ0FBUDtBQUFBLEtBQTNCO0FBQ0FYLFlBQVFhLFFBQVIsQ0FBaUJHLFFBQWpCO0FBQ0E7QUFDRCxHQVJEOztBQVVBOzs7QUFHQSxNQUFJYixzQkFBc0IsRUFBMUIsRUFBOEI7QUFDN0IsT0FBSWUsVUFBVVQsUUFBUVUsU0FBUixDQUFrQmhCLGlCQUFsQixDQUFkO0FBQ0EsT0FBSWUsWUFBWSxNQUFaLElBQXNCQSxZQUFZLEdBQXRDLEVBQTJDO0FBQzFDO0FBQ0FFLFlBQVFDLEdBQVIsQ0FBWTtBQUNYQyxhQUFzQiw4Q0FEWDtBQUVYQyxrQkFBc0JMLE9BRlg7QUFHWE0sd0JBQXNCekIsT0FBTzBCLE9BQVAsQ0FBZUEsT0FBZixDQUF1QkMsTUFIbEM7QUFJWEMsa0JBQXNCckIsV0FKWDtBQUtYc0Isd0JBQXNCN0IsT0FBTzZCLGlCQUxsQjtBQU1YdkIsbUJBQXNCQSxZQU5YO0FBT1h3QixxQkFBc0I5QixPQUFPOEI7QUFQbEIsS0FBWjtBQVNBO0FBQ0Q7QUFDRDs7O0FBR0EsTUFBSTlCLE9BQU82QixpQkFBUCxLQUE2QixHQUFqQyxFQUFzQzVCLFFBQVFhLFFBQVIsQ0FBaUJOLFVBQVUsQ0FBVixDQUFqQjtBQUN0Qzs7Ozs7OztBQU9BWCxhQUFXRyxPQUFPMEIsT0FBbEIsRUFBMkIsVUFBQ0ssWUFBRCxFQUFnQjtBQUN6Qzs7O0FBR0EsT0FBSUMsV0FBV3RCLFFBQVFULE9BQVIsQ0FBZ0JBLFFBQVFnQyxRQUFSLEdBQW1CLENBQW5CLENBQWhCLENBQWY7QUFDQUQsWUFBU0UsTUFBVCxDQUFnQkgsWUFBaEI7QUFDRCxHQU5EO0FBT0E7QUFFRDs7QUFHRHhDLFlBQVk0QyxPQUFaLEdBQXNCLENBQ3JCLHVCQURxQixDQUF0Qjs7a0JBSWU1QyxXO1FBR2RELG9CLEdBQUFBLG9CIiwiZmlsZSI6IjYxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgZHJhZ2Ryb3BJdGVtVGVtcGxhdGUgZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29ySXRlbS50ZW1wbGF0ZS5odG1sJztcblxuY29uc3QgRFJBR19EUk9QX0RFQ09SX0lURU0gPSAnZGREZWNvckl0ZW0nO1xuXG5mdW5jdGlvbiBkZERlY29ySXRlbShlYXN5Rm9ybURyYWdXYXlDb25maWcpe1xuXHRsZXQgZGlyZWN0aXZlID0ge1xuXHRcdHJlc3RyaWN0XHRcdFx0OiAnQScsXG5cdFx0c2NvcGVcdFx0XHRcdFx0OiAge1xuXHRcdFx0J3ZlcmJvc2VNb2RlJyBcdFx0XHQ6ICdAZGRJdGVtVmVyYm9zZU1vZGUnLFxuXHRcdFx0J2N1cnJlbnRJbmRleCcgXHRcdFx0OiAnQGRkSXRlbUN1cnJlbnRJbmRleCcsXG5cdFx0XHQncGFyZW50SW5kZXgnXHRcdFx0XHQ6ICdAZGRJdGVtUGFyZW50SW5kZXgnLFxuXHRcdFx0J3BhcmVudFBhcmVudEluZGV4J1x0OiAnQGRkSXRlbVBhcmVudFBhcmVudEluZGV4JywgXG5cdFx0XHQnbGluZUl0ZW1zQ291bnQnIFx0XHQ6ICdAZGRJdGVtc0NvdW50Jyxcblx0XHRcdCdjc3NDbGFzcydcdFx0XHRcdFx0OiAnQGRkSXRlbUNzc0NsYXNzJ1xuXHRcdH0sXG5cdFx0dGVtcGxhdGVcdFx0OiAgIGRyYWdkcm9wSXRlbVRlbXBsYXRlLFxuXHRcdHRyYW5zY2x1ZGVcdDogdHJ1ZSxcdFxuXHRcdGxpbmtcdFx0XHRcdDogbGlua2ZjdFx0XG5cdH07XG5cdHJldHVybiBkaXJlY3RpdmU7XG5cdFxuXHRmdW5jdGlvbiBsaW5rZmN0KCRzY29wZSwgZWxlbWVudCwgYXR0cnMsIGN0cmwsIHRyYW5zY2x1ZGUpe1xuXHRcdGxldCB2ZXJib3NlTW9kZUFjdGl2ZSA9ICRzY29wZS52ZXJib3NlTW9kZTtcblx0XHRsZXQgY3VycmVudEluZGV4ICAgICAgPSAkc2NvcGUuY3VycmVudEluZGV4O1xuXHRcdGxldCBwYXJlbnRJbmRleCAgICAgICA9ICRzY29wZS5wYXJlbnRJbmRleDtcblx0XHRsZXQgbGlzdENsYXNzICAgICAgICAgPSBlYXN5Rm9ybURyYWdXYXlDb25maWcuZ2V0RGlzdGluY3RJdGVtQ3NzQ2xhc3MoKTtcblx0XG5cdFxuXHRcdC8qKlxuXHRcdFx0KiBpbml0IGNzcyBjbGFzc1xuXHRcdFx0Ki9cblx0XHRhbmd1bGFyLmZvckVhY2gobGlzdENsYXNzLCAoY3NzKT0+ZWxlbWVudC5yZW1vdmVDbGFzcyhjc3MpKTtcblx0XHRlbGVtZW50LmFkZENsYXNzKCRzY29wZS5jc3NDbGFzcyk7ICAgICAgICAgICAgICAgIFxuXHRcdC8qKlxuXHRcdFx0KiB1cGRhdGUgY3NzIGNsYXNzXG5cdFx0XHQqL1xuXHRcdCRzY29wZS4kd2F0Y2goJ2Nzc0NsYXNzJywgKG5ld1ZhbHVlLCBvbGRWYWx1ZSk9Pntcblx0XHRcdGlmKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSl7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCogdXBkYXRlIGNzcyBjbGFzc1xuXHRcdFx0XHRcdCovXG5cdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChsaXN0Q2xhc3MsIChjc3MpPT5lbGVtZW50LnJlbW92ZUNsYXNzKGNzcykpO1xuXHRcdFx0XHRlbGVtZW50LmFkZENsYXNzKG5ld1ZhbHVlKTsgXG5cdFx0XHR9XHRcblx0XHR9KTtcblx0XG5cdFx0LyoqXG5cdFx0XHQqIHZlcmJvc2UgbW9kZSA6IGp1c3QgZm9yIGRldiBcblx0XHRcdCovXG5cdFx0aWYgKHZlcmJvc2VNb2RlQWN0aXZlICE9PSAnJykge1xuXHRcdFx0bGV0IHZlcmJvc2UgPSBhbmd1bGFyLmxvd2VyY2FzZSh2ZXJib3NlTW9kZUFjdGl2ZSk7XG5cdFx0XHRpZiAodmVyYm9zZSA9PT0gJ3RydWUnIHx8IHZlcmJvc2UgPT09ICcxJykge1xuXHRcdFx0XHQvKiBlc2xpbnQgbm8tY29uc29sZTowICovXG5cdFx0XHRcdGNvbnNvbGUuZGlyKHtcblx0XHRcdFx0XHR3aG9BbUkgICAgICAgICAgICAgIDogJ0kgYW0gdmVyYm9zZSBmcm9tIGRkRGVjb3JJdGVtIGRpcmVjdGl2ZSBsaW5rJyxcblx0XHRcdFx0XHR2ZXJib2RlTW9kZSAgICAgICAgIDogdmVyYm9zZSxcblx0XHRcdFx0XHRQYXJlbnRQYXJlbnRJbmRleCAgIDogJHNjb3BlLiRwYXJlbnQuJHBhcmVudC4kaW5kZXgsXG5cdFx0XHRcdFx0UGFyZW50SW5kZXggICAgICAgICA6IHBhcmVudEluZGV4LFxuXHRcdFx0XHRcdHBhcmVudFBhcmVudEluZGV4ICAgOiAkc2NvcGUucGFyZW50UGFyZW50SW5kZXgsXG5cdFx0XHRcdFx0Y3VycmVudEluZGV4ICAgICAgICA6IGN1cnJlbnRJbmRleCxcblx0XHRcdFx0XHRsaW5lSXRlbXNDb3VudCAgICAgIDogJHNjb3BlLmxpbmVJdGVtc0NvdW50XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSAgICAgICAgICAgICAgICAgICAgXG5cdFx0fVxuXHRcdC8qKlxuXHRcdFx0KiBjb250cm9sIGNvbHVtbiA6IGFwcGx5IGNzcyBjbGFzcyB0byBpdGVtXG5cdFx0XHQqL1xuXHRcdGlmICgkc2NvcGUucGFyZW50UGFyZW50SW5kZXggPT09ICcwJykgZWxlbWVudC5hZGRDbGFzcyhsaXN0Q2xhc3NbMF0pO1xuXHRcdC8qKlxuXHRcdFx0KiBwcmV2ZW50IHRyYW5zY2x1c2lvbiBjcmVhdGluZyBjaGlsZCBzY29wZSAgXG5cdFx0XHQqXG5cdFx0XHQqXG5cdFx0XHQqIE5PVEUgOmlmIHlvdSB3YW50IHRvIGtub3cgbW9yZSBhYm91dCB3aGF0IEknbSBzYXlpbmcgOiBjaGVjayB0aGlzIG5pY2UgdGlwIG9uIHRoZSBzdWJqZWN0IDogXG5cdFx0XHQqIGh0dHA6Ly9hbmd1bGFyLXRpcHMuY29tL2Jsb2cvMjAxNC8wMy90cmFuc2NsdXNpb24tYW5kLXNjb3Blcy8gICAgICAgIFxuXHRcdFx0Ki9cblx0XHR0cmFuc2NsdWRlKCRzY29wZS4kcGFyZW50LCAoY29udGVudENsb25lKT0+e1xuXHRcdFx0XHQvKipcblx0XHRcdFx0XHQqIHRyYW5zY2x1c2lvbiB3aWxsIGFwcGVuZCBjb250ZW50IHRvICc8ZGl2IGlkPVwiaXRlbURpcmVjdGl2ZVRyYW5zY2x1ZGVIZXJlXCI+PC9kaXY+JyBcblx0XHRcdFx0XHQqL1xuXHRcdFx0XHRsZXQgY2hpbGREaXYgPSBhbmd1bGFyLmVsZW1lbnQoZWxlbWVudC5jaGlsZHJlbigpWzBdKTsgXG5cdFx0XHRcdGNoaWxkRGl2LmFwcGVuZChjb250ZW50Q2xvbmUpO1xuXHRcdH0pOyAgIFx0XHRcblx0fVxuXHRcbn1cblxuXG5kZERlY29ySXRlbS4kaW5qZWN0ID0gW1xuXHQnZWFzeUZvcm1EcmFnV2F5Q29uZmlnJ1xuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGREZWNvckl0ZW07XG5cbmV4cG9ydCB7XG5cdERSQUdfRFJPUF9ERUNPUl9JVEVNXG59O1xuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0uZGlyZWN0aXZlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 62 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0udGVtcGxhdGUuaHRtbD9hNjljIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBIiwiZmlsZSI6IjYyLmpzIiwic291cmNlc0NvbnRlbnQiOlsibW9kdWxlLmV4cG9ydHMgPSBcIjxkaXY+XFxuICA8ZGl2IGlkPVxcXCJpdGVtRGlyZWN0aXZlVHJhbnNjbHVkZUhlcmVcXFwiPjwvZGl2PlxcbjwvZGl2PlxcblwiXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0udGVtcGxhdGUuaHRtbFxuLy8gbW9kdWxlIGlkID0gNjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 63 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DRAG_DROP_ITEM_DECOR_SERVICE = 'dragDropItemDecorationService';\n\nvar dragDropItemDecorationService = function () {\n\tfunction dragDropItemDecorationService(easyFormDragWayConfig) {\n\t\t_classCallCheck(this, dragDropItemDecorationService);\n\n\t\tthis.easyFormDragWayConfig = easyFormDragWayConfig;\n\t\tthis.init();\n\t}\n\n\t_createClass(dragDropItemDecorationService, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {\n\t\t\tthis._listItemClass = [].concat(this.easyFormDragWayConfig.getListItemCssClass());\n\t\t}\n\t}, {\n\t\tkey: 'getListClass',\n\t\tvalue: function getListClass() {\n\t\t\treturn this._listItemClass;\n\t\t}\n\t}, {\n\t\tkey: 'getCssClassWhenNumberItemsInRowIs',\n\t\tvalue: function getCssClassWhenNumberItemsInRowIs(thisNumber) {\n\t\t\treturn this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(thisNumber);\n\t\t}\n\t}, {\n\t\tkey: 'applyCssClassWholeLine',\n\t\tvalue: function applyCssClassWholeLine(model, indexColumn, indexLine, numberItems, restrictToThisIndexColumn) {\n\t\t\tif (typeof numberItems !== 'undefined' && typeof indexLine !== 'undefined' && typeof indexColumn !== 'undefined' && typeof model !== 'undefined' && typeof restrictToThisIndexColumn !== 'undefined') {\n\t\t\t\tif (indexColumn === restrictToThisIndexColumn) {\n\t\t\t\t\tfor (var i = model[indexColumn][indexLine].length - 1; i >= 0; i--) {\n\t\t\t\t\t\tmodel[indexColumn][indexLine][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(numberItems);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}, {\n\t\tkey: 'updateCssClassWholeColumn',\n\t\tvalue: function updateCssClassWholeColumn(model, indexColumn) {\n\t\t\tif (typeof indexColumn !== 'undefined' && typeof model !== 'undefined') {\n\t\t\t\tfor (var cpt = model[indexColumn].length - 1; cpt >= 0; cpt--) {\n\t\t\t\t\tfor (var i = model[indexColumn][cpt].length - 1; i >= 0; i--) {\n\t\t\t\t\t\tmodel[indexColumn][cpt][i].cssClass = this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(model[indexColumn][cpt].length);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn dragDropItemDecorationService;\n}();\n\ndragDropItemDecorationService.$inject = ['easyFormDragWayConfig'];\n\nexports.default = dragDropItemDecorationService;\nexports.DRAG_DROP_ITEM_DECOR_SERVICE = DRAG_DROP_ITEM_DECOR_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckl0ZW0vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckl0ZW0uc2VydmljZS5qcz8wMDY4Il0sIm5hbWVzIjpbIkRSQUdfRFJPUF9JVEVNX0RFQ09SX1NFUlZJQ0UiLCJkcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZSIsImVhc3lGb3JtRHJhZ1dheUNvbmZpZyIsImluaXQiLCJfbGlzdEl0ZW1DbGFzcyIsImNvbmNhdCIsImdldExpc3RJdGVtQ3NzQ2xhc3MiLCJ0aGlzTnVtYmVyIiwiZ2V0SXRlbUNzc0RlcGVuZGluZ051bWJlckl0ZW1zSW5Sb3ciLCJtb2RlbCIsImluZGV4Q29sdW1uIiwiaW5kZXhMaW5lIiwibnVtYmVySXRlbXMiLCJyZXN0cmljdFRvVGhpc0luZGV4Q29sdW1uIiwiaSIsImxlbmd0aCIsImNzc0NsYXNzIiwiY3B0IiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQU1BLCtCQUErQiwrQkFBckM7O0lBRU1DLDZCO0FBRUwsd0NBQVlDLHFCQUFaLEVBQWtDO0FBQUE7O0FBQ2pDLE9BQUtBLHFCQUFMLEdBQTZCQSxxQkFBN0I7QUFDQSxPQUFLQyxJQUFMO0FBQ0E7Ozs7eUJBRUs7QUFDTCxRQUFLQyxjQUFMLEdBQXNCLEdBQUdDLE1BQUgsQ0FBVSxLQUFLSCxxQkFBTCxDQUEyQkksbUJBQTNCLEVBQVYsQ0FBdEI7QUFDQTs7O2lDQUVhO0FBQ2IsVUFBTyxLQUFLRixjQUFaO0FBQ0E7OztvREFFaUNHLFUsRUFBVztBQUM1QyxVQUFPLEtBQUtMLHFCQUFMLENBQTJCTSxtQ0FBM0IsQ0FBK0RELFVBQS9ELENBQVA7QUFDQTs7O3lDQUVzQkUsSyxFQUFPQyxXLEVBQWFDLFMsRUFBV0MsVyxFQUFhQyx5QixFQUEwQjtBQUM1RixPQUFJLE9BQU9ELFdBQVAsS0FBdUIsV0FBdkIsSUFDRixPQUFPRCxTQUFQLEtBQXFCLFdBRG5CLElBRUYsT0FBT0QsV0FBUCxLQUF1QixXQUZyQixJQUdGLE9BQU9ELEtBQVAsS0FBaUIsV0FIZixJQUlGLE9BQU9JLHlCQUFQLEtBQXFDLFdBSnZDLEVBSW9EO0FBQ25ELFFBQUlILGdCQUFnQkcseUJBQXBCLEVBQStDO0FBQzlDLFVBQUssSUFBSUMsSUFBSUwsTUFBTUMsV0FBTixFQUFtQkMsU0FBbkIsRUFBOEJJLE1BQTlCLEdBQXVDLENBQXBELEVBQXVERCxLQUFLLENBQTVELEVBQStEQSxHQUEvRCxFQUFvRTtBQUNsRUwsWUFBTUMsV0FBTixFQUFtQkMsU0FBbkIsRUFBOEJHLENBQTlCLEVBQWlDRSxRQUFqQyxHQUE0QyxLQUFLZCxxQkFBTCxDQUEyQk0sbUNBQTNCLENBQStESSxXQUEvRCxDQUE1QztBQUNEO0FBQ0Q7QUFDRCxXQUFPLElBQVA7QUFDQSxJQVhELE1BV0s7QUFDSixXQUFPLEtBQVA7QUFDQTtBQUNEOzs7NENBRXlCSCxLLEVBQU9DLFcsRUFBWTtBQUM1QyxPQUFJLE9BQU9BLFdBQVAsS0FBdUIsV0FBdkIsSUFDRixPQUFPRCxLQUFQLEtBQWlCLFdBRG5CLEVBQ2dDO0FBQy9CLFNBQUssSUFBSVEsTUFBTVIsTUFBTUMsV0FBTixFQUFtQkssTUFBbkIsR0FBNEIsQ0FBM0MsRUFBOENFLE9BQU8sQ0FBckQsRUFBd0RBLEtBQXhELEVBQStEO0FBQzlELFVBQUssSUFBSUgsSUFBSUwsTUFBTUMsV0FBTixFQUFtQk8sR0FBbkIsRUFBd0JGLE1BQXhCLEdBQWlDLENBQTlDLEVBQWlERCxLQUFLLENBQXRELEVBQXlEQSxHQUF6RCxFQUE4RDtBQUM1REwsWUFBTUMsV0FBTixFQUFtQk8sR0FBbkIsRUFBd0JILENBQXhCLEVBQTJCRSxRQUEzQixHQUFzQyxLQUFLZCxxQkFBTCxDQUEyQk0sbUNBQTNCLENBQStEQyxNQUFNQyxXQUFOLEVBQW1CTyxHQUFuQixFQUF3QkYsTUFBdkYsQ0FBdEM7QUFDRDtBQUNEO0FBQ0QsV0FBTyxJQUFQO0FBQ0EsSUFSRCxNQVFLO0FBQ0osV0FBTyxLQUFQO0FBQ0E7QUFDRDs7Ozs7O0FBS0ZkLDhCQUE4QmlCLE9BQTlCLEdBQXdDLENBQ3ZDLHVCQUR1QyxDQUF4Qzs7a0JBSWVqQiw2QjtRQUdkRCw0QixHQUFBQSw0QiIsImZpbGUiOiI2My5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IERSQUdfRFJPUF9JVEVNX0RFQ09SX1NFUlZJQ0UgPSAnZHJhZ0Ryb3BJdGVtRGVjb3JhdGlvblNlcnZpY2UnO1xuXG5jbGFzcyBkcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZSB7XG5cdFxuXHRjb25zdHJ1Y3RvcihlYXN5Rm9ybURyYWdXYXlDb25maWcpe1xuXHRcdHRoaXMuZWFzeUZvcm1EcmFnV2F5Q29uZmlnID0gZWFzeUZvcm1EcmFnV2F5Q29uZmlnO1xuXHRcdHRoaXMuaW5pdCgpO1xuXHR9XG5cdFxuXHRpbml0KCl7XG5cdFx0dGhpcy5fbGlzdEl0ZW1DbGFzcyA9IFtdLmNvbmNhdCh0aGlzLmVhc3lGb3JtRHJhZ1dheUNvbmZpZy5nZXRMaXN0SXRlbUNzc0NsYXNzKCkpO1xuXHR9XG5cdFxuXHRnZXRMaXN0Q2xhc3MoKXtcblx0XHRyZXR1cm4gdGhpcy5fbGlzdEl0ZW1DbGFzcztcblx0fVx0XG5cdFxuXHRnZXRDc3NDbGFzc1doZW5OdW1iZXJJdGVtc0luUm93SXModGhpc051bWJlcil7XG5cdFx0cmV0dXJuIHRoaXMuZWFzeUZvcm1EcmFnV2F5Q29uZmlnLmdldEl0ZW1Dc3NEZXBlbmRpbmdOdW1iZXJJdGVtc0luUm93KHRoaXNOdW1iZXIpO1xuXHR9XG5cdFxuXHRhcHBseUNzc0NsYXNzV2hvbGVMaW5lKG1vZGVsLCBpbmRleENvbHVtbiwgaW5kZXhMaW5lLCBudW1iZXJJdGVtcywgcmVzdHJpY3RUb1RoaXNJbmRleENvbHVtbil7XG5cdFx0aWYgKHR5cGVvZiBudW1iZXJJdGVtcyAhPT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRcdFx0dHlwZW9mIGluZGV4TGluZSAhPT0gJ3VuZGVmaW5lZCcgJiZcblx0XHRcdFx0dHlwZW9mIGluZGV4Q29sdW1uICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHR0eXBlb2YgbW9kZWwgIT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRcdHR5cGVvZiByZXN0cmljdFRvVGhpc0luZGV4Q29sdW1uICE9PSAndW5kZWZpbmVkJykge1xuXHRcdFx0aWYgKGluZGV4Q29sdW1uID09PSByZXN0cmljdFRvVGhpc0luZGV4Q29sdW1uKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSBtb2RlbFtpbmRleENvbHVtbl1baW5kZXhMaW5lXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdFx0bW9kZWxbaW5kZXhDb2x1bW5dW2luZGV4TGluZV1baV0uY3NzQ2xhc3MgPSB0aGlzLmVhc3lGb3JtRHJhZ1dheUNvbmZpZy5nZXRJdGVtQ3NzRGVwZW5kaW5nTnVtYmVySXRlbXNJblJvdyhudW1iZXJJdGVtcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9ZWxzZXtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0XG5cdHVwZGF0ZUNzc0NsYXNzV2hvbGVDb2x1bW4obW9kZWwsIGluZGV4Q29sdW1uKXtcblx0XHRpZiAodHlwZW9mIGluZGV4Q29sdW1uICE9PSAndW5kZWZpbmVkJyAmJlxuXHRcdFx0XHR0eXBlb2YgbW9kZWwgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRmb3IgKGxldCBjcHQgPSBtb2RlbFtpbmRleENvbHVtbl0ubGVuZ3RoIC0gMTsgY3B0ID49IDA7IGNwdC0tKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSBtb2RlbFtpbmRleENvbHVtbl1bY3B0XS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuXHRcdFx0XHRcdFx0bW9kZWxbaW5kZXhDb2x1bW5dW2NwdF1baV0uY3NzQ2xhc3MgPSB0aGlzLmVhc3lGb3JtRHJhZ1dheUNvbmZpZy5nZXRJdGVtQ3NzRGVwZW5kaW5nTnVtYmVySXRlbXNJblJvdyhtb2RlbFtpbmRleENvbHVtbl1bY3B0XS5sZW5ndGgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XHRcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1lbHNle1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVx0XG5cdFx0XG5cdFxufVxuXG5kcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZS4kaW5qZWN0ID0gW1xuXHQnZWFzeUZvcm1EcmFnV2F5Q29uZmlnJ1xuXTtcblxuZXhwb3J0IGRlZmF1bHQgZHJhZ0Ryb3BJdGVtRGVjb3JhdGlvblNlcnZpY2U7XG5cbmV4cG9ydCB7XG5cdERSQUdfRFJPUF9JVEVNX0RFQ09SX1NFUlZJQ0Vcbn07XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9kcmFnZHJvcC9kZERlY29ySXRlbS9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29ySXRlbS5zZXJ2aWNlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 64 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.DRAG_DROP_DECOR_LINE = undefined;\n\nvar _edaDragDropWayDragdropDdDecorLineTemplate = __webpack_require__(65);\n\nvar _edaDragDropWayDragdropDdDecorLineTemplate2 = _interopRequireDefault(_edaDragDropWayDragdropDdDecorLineTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAG_DROP_DECOR_LINE = 'ddDecorLine'; /* global angular */\n\n\nfunction ddDecorLine($timeout) {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\tscope: {\n\t\t\t'verboseMode': '@ddLineVerboseMode',\n\t\t\t'currentIndex': '@ddLineCurrentIndex',\n\t\t\t'parentIndex': '@ddLineParentIndex',\n\t\t\t'removeLine': '&ddRemoveLine'\n\t\t},\n\t\ttemplate: _edaDragDropWayDragdropDdDecorLineTemplate2.default,\n\t\ttransclude: true,\n\t\tlink: linkfct\n\t};\n\treturn directive;\n\n\tfunction linkfct($scope, element, attrs, ctrl, transclude) {\n\t\tvar verboseModeActive = $scope.verboseMode;\n\t\tvar currentIndex = $scope.currentIndex;\n\t\tvar parentIndex = $scope.parentIndex;\n\t\t$scope.deleteLine = {};\n\t\t$scope.deleteLine.readyToDelete = false;\n\t\t$scope.deleteLine.dblClickCount = 0;\n\t\t$scope.isCollapsed = false;\n\t\tvar timer = void 0;\n\n\t\t// verbose mode : just for dev \n\t\tif (verboseModeActive !== '') {\n\t\t\tvar verbose = angular.lowercase(verboseModeActive);\n\t\t\tif (verbose === 'true' || verbose === '1') {\n\t\t\t\t/* eslint no-console:0 */\n\t\t\t\tconsole.dir({\n\t\t\t\t\twhoAmI: 'I am verbose from ddDecorLine directive link',\n\t\t\t\t\tverbodeMode: verbose,\n\t\t\t\t\tParentParentIndex: $scope.$parent.$parent.$index,\n\t\t\t\t\tParentIndex: parentIndex,\n\t\t\t\t\tcurrentIndex: currentIndex\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t/**\n \t* removeMe is function related to twice double click sequence to delete a line\n \t*\n \t* - addClass / remove/class ; will make line in a shake movement\n \t* - call \"removeLine function to delete the line (if it was rwice double clicked)\n \t*/\n\t\t$scope.removeMe = function (event) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\n\t\t\tif ($scope.parentIndex === '1') {\n\t\t\t\t//2nd dbl click : if is shaking so it is confirmation to delete\n\t\t\t\tif ($scope.deleteLine.dblClickCount === 1) {\n\t\t\t\t\t$scope.deleteLine.dblClickCount = 0;\n\t\t\t\t\t$scope.deleteLine.readyToDelete = false;\n\t\t\t\t\t/**\n \t* NOTE : trick in calling parent controller function with input param when directive with isolate scope\n \t* see : https://thinkster.io/egghead/isolate-scope-am\n \t*\n \t* Here should be:\n \t* \n \t*-> in html : dd-remove-line=\"removeThisLine(indexToDelete)\n \t*-> in controller : $scope.removeThisLine = function(lineIndex){\n \t*-> so in directive call it : $scope.removeLine({indexToDelete: currentIndex});\n \t*\n \t*\n \t* BUT in this case (repeats, ul> li.... complicated) \n \t* => works better (if shaking a lot of line in a row it won't mess up)\n \t*\n \t*-> in html : dd-remove-line=\"removeThisLine($index)\n \t*-> in controller : $scope.removeThisLine = function(lineIndex){\n \t*-> so in directive call it : $scope.removeLine();\n \t*/\n\t\t\t\t\t//$scope.removeLine({indexToDelete: currentIndex});\n\t\t\t\t\t$scope.removeLine();\n\t\t\t\t\t//console.warn('force timer destruction after delete!');\n\t\t\t\t\t$timeout.cancel(timer);\n\t\t\t\t}\n\n\t\t\t\t//1st dbl click : make it shake so ready to delete\n\t\t\t\tif ($scope.deleteLine.dblClickCount === 0) {\n\t\t\t\t\t$scope.deleteLine.dblClickCount = $scope.deleteLine.dblClickCount + 1;\n\t\t\t\t\t$scope.deleteLine.readyToDelete = true;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n \t* signle event will ever occur\n \t*\n \t* to prevent it to interfere with double click sequence \n \t* -> set a time out (shaking line to delete will automaticallly end shaking after timeout : 2 seconds)\n \t*/\n\t\t$scope.cancelDelete = function () {\n\t\t\t//event.preventDefault();\n\t\t\t//event.stopPropagation();\n\t\t\ttimer = $timeout(function () {\n\t\t\t\t$scope.deleteLine.dblClickCount = 0;\n\t\t\t\t$scope.deleteLine.readyToDelete = false;\n\t\t\t}, 500);\n\n\t\t\t/**\n \t* debug\n \t*/\n\t\t\t// timer.then(\n\t\t\t// () =>{\n\t\t\t// console.log( 'Timer resolved!', Date.now() );\n\t\t\t// },\n\t\t\t// () =>{\n\t\t\t// console.log( 'Timer rejected!', Date.now() );\n\t\t\t// }\n\t\t\t// );\n\t\t};\n\n\t\t/**\n \t* timer destruction to prevent from bad UI experience\n \t*/\n\t\t$scope.$on('$destroy', function () {\n\t\t\treturn $timeout.cancel(timer);\n\t\t});\n\n\t\t/**\n \t* prevent transclusion creating child scope \n \t*\n \t*\n \t* NOTE :if you want to know more about what I'm saying : check this nice tip on the subject : \n \t* http://angular-tips.com/blog/2014/03/transclusion-and-scopes/ \n \t*/\n\t\ttransclude($scope.$parent, function (contentClone) {\n\t\t\t//transclusion will append content to '
    '\n\t\t\tvar childDiv = angular.element(element.children()[0]);\n\t\t\tchildDiv.append(contentClone);\n\t\t});\n\t}\n}\n\nddDecorLine.$inject = ['$timeout'];\n\nexports.default = ddDecorLine;\nexports.DRAG_DROP_DECOR_LINE = DRAG_DROP_DECOR_LINE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckxpbmUvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckxpbmUuZGlyZWN0aXZlLmpzPzkwMGEiXSwibmFtZXMiOlsiRFJBR19EUk9QX0RFQ09SX0xJTkUiLCJkZERlY29yTGluZSIsIiR0aW1lb3V0IiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJzY29wZSIsInRlbXBsYXRlIiwidHJhbnNjbHVkZSIsImxpbmsiLCJsaW5rZmN0IiwiJHNjb3BlIiwiZWxlbWVudCIsImF0dHJzIiwiY3RybCIsInZlcmJvc2VNb2RlQWN0aXZlIiwidmVyYm9zZU1vZGUiLCJjdXJyZW50SW5kZXgiLCJwYXJlbnRJbmRleCIsImRlbGV0ZUxpbmUiLCJyZWFkeVRvRGVsZXRlIiwiZGJsQ2xpY2tDb3VudCIsImlzQ29sbGFwc2VkIiwidGltZXIiLCJ2ZXJib3NlIiwiYW5ndWxhciIsImxvd2VyY2FzZSIsImNvbnNvbGUiLCJkaXIiLCJ3aG9BbUkiLCJ2ZXJib2RlTW9kZSIsIlBhcmVudFBhcmVudEluZGV4IiwiJHBhcmVudCIsIiRpbmRleCIsIlBhcmVudEluZGV4IiwicmVtb3ZlTWUiLCJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicmVtb3ZlTGluZSIsImNhbmNlbCIsImNhbmNlbERlbGV0ZSIsIiRvbiIsImNvbnRlbnRDbG9uZSIsImNoaWxkRGl2IiwiY2hpbGRyZW4iLCJhcHBlbmQiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLHVCQUF1QixhQUE3QixDLENBSEE7OztBQU1BLFNBQVNDLFdBQVQsQ0FBcUJDLFFBQXJCLEVBQThCO0FBQzdCLEtBQUlDLFlBQVk7QUFDZkMsWUFBWSxHQURHO0FBRWZDLFNBQVc7QUFDVixrQkFBaUIsb0JBRFA7QUFFVixtQkFBaUIscUJBRlA7QUFHVixr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QWhCO0FBQ0EsR0FKRDtBQU9BO0FBRUQ7O0FBRUR6QyxZQUFZNkMsT0FBWixHQUFzQixDQUNyQixVQURxQixDQUF0Qjs7a0JBSWU3QyxXO1FBR2RELG9CLEdBQUFBLG9CIiwiZmlsZSI6IjY0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGFuZ3VsYXIgKi9cbmltcG9ydCBkZERlY29yTGluZVRlbXBsYXRlIGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckxpbmUudGVtcGxhdGUuaHRtbCc7XG5cbmNvbnN0IERSQUdfRFJPUF9ERUNPUl9MSU5FID0gJ2RkRGVjb3JMaW5lJztcblxuXG5mdW5jdGlvbiBkZERlY29yTGluZSgkdGltZW91dCl7XG5cdGxldCBkaXJlY3RpdmUgPSB7XG5cdFx0cmVzdHJpY3RcdFx0Olx0J0EnLFxuXHRcdHNjb3BlXHRcdFx0XHQ6IHtcblx0XHRcdCd2ZXJib3NlTW9kZScgIDogJ0BkZExpbmVWZXJib3NlTW9kZScsXG5cdFx0XHQnY3VycmVudEluZGV4JyA6ICdAZGRMaW5lQ3VycmVudEluZGV4Jyxcblx0XHRcdCdwYXJlbnRJbmRleCcgIDogJ0BkZExpbmVQYXJlbnRJbmRleCcsXG5cdFx0XHQncmVtb3ZlTGluZScgICA6ICcmZGRSZW1vdmVMaW5lJ1xuXHRcdH0sXHRcdFxuXHRcdHRlbXBsYXRlXHRcdDogZGREZWNvckxpbmVUZW1wbGF0ZSxcblx0XHR0cmFuc2NsdWRlXHQ6IHRydWUsXG5cdFx0bGlua1x0XHRcdFx0OiBsaW5rZmN0XHRcdFxuXHR9O1xuXHRyZXR1cm4gZGlyZWN0aXZlO1xuXHRcblx0XG5cdGZ1bmN0aW9uIGxpbmtmY3QoJHNjb3BlLCBlbGVtZW50LCBhdHRycywgY3RybCwgdHJhbnNjbHVkZSl7XG5cdFx0bGV0IHZlcmJvc2VNb2RlQWN0aXZlXHRcdFx0XHRcdFx0PSAkc2NvcGUudmVyYm9zZU1vZGU7XG5cdFx0bGV0IGN1cnJlbnRJbmRleCAgICAgIFx0XHRcdFx0XHQ9ICRzY29wZS5jdXJyZW50SW5kZXg7XG5cdFx0bGV0IHBhcmVudEluZGV4ICAgICAgIFx0XHRcdFx0XHQ9ICRzY29wZS5wYXJlbnRJbmRleDtcblx0XHQkc2NvcGUuZGVsZXRlTGluZSBcdFx0XHRcdFx0XHRcdD0ge307XG5cdFx0JHNjb3BlLmRlbGV0ZUxpbmUucmVhZHlUb0RlbGV0ZSA9IGZhbHNlO1xuXHRcdCRzY29wZS5kZWxldGVMaW5lLmRibENsaWNrQ291bnQgPSAwO1xuXHRcdCRzY29wZS5pc0NvbGxhcHNlZCBcdFx0XHRcdFx0XHRcdD0gZmFsc2U7XG5cdFx0bGV0IHRpbWVyO1xuXHRcdFxuXG5cdFx0Ly8gdmVyYm9zZSBtb2RlIDoganVzdCBmb3IgZGV2IFxuXHRcdGlmICh2ZXJib3NlTW9kZUFjdGl2ZSAhPT0gJycpIHtcblx0XHRcdGxldCB2ZXJib3NlID0gYW5ndWxhci5sb3dlcmNhc2UodmVyYm9zZU1vZGVBY3RpdmUpO1xuXHRcdFx0aWYgKHZlcmJvc2UgPT09ICd0cnVlJyB8fCB2ZXJib3NlID09PSAnMScpIHtcblx0XHRcdFx0LyogZXNsaW50IG5vLWNvbnNvbGU6MCAqL1xuXHRcdFx0XHRjb25zb2xlLmRpcih7XG5cdFx0XHRcdFx0d2hvQW1JICAgICAgICAgICAgICA6ICdJIGFtIHZlcmJvc2UgZnJvbSBkZERlY29yTGluZSBkaXJlY3RpdmUgbGluaycsXG5cdFx0XHRcdFx0dmVyYm9kZU1vZGUgICAgICAgICA6IHZlcmJvc2UsXG5cdFx0XHRcdFx0UGFyZW50UGFyZW50SW5kZXggICA6ICRzY29wZS4kcGFyZW50LiRwYXJlbnQuJGluZGV4LFxuXHRcdFx0XHRcdFBhcmVudEluZGV4ICAgICAgICAgOiBwYXJlbnRJbmRleCxcblx0XHRcdFx0XHRjdXJyZW50SW5kZXggICAgICAgIDogY3VycmVudEluZGV4XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSAgICAgICAgICAgICAgICAgICAgXG5cdFx0fVxuXHRcdFxuXG5cdFx0LyoqXG5cdFx0XHQqIHJlbW92ZU1lIGlzIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gdHdpY2UgZG91YmxlIGNsaWNrIHNlcXVlbmNlIHRvIGRlbGV0ZSBhIGxpbmVcblx0XHRcdCpcblx0XHRcdCogIC0gYWRkQ2xhc3MgLyByZW1vdmUvY2xhc3MgOyB3aWxsIG1ha2UgbGluZSBpbiBhIHNoYWtlIG1vdmVtZW50XG5cdFx0XHQqICAtIGNhbGwgXCJyZW1vdmVMaW5lIGZ1bmN0aW9uIHRvIGRlbGV0ZSB0aGUgbGluZSAoaWYgaXQgd2FzIHJ3aWNlIGRvdWJsZSBjbGlja2VkKVxuXHRcdFx0Ki9cblx0JHNjb3BlLnJlbW92ZU1lID0gKGV2ZW50KT0+e1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRpZiAoJHNjb3BlLnBhcmVudEluZGV4ID09PSAnMScpIHtcblx0XHRcdC8vMm5kIGRibCBjbGljayA6IGlmIGlzIHNoYWtpbmcgc28gaXQgaXMgY29uZmlybWF0aW9uIHRvIGRlbGV0ZVxuXHRcdFx0aWYgKCRzY29wZS5kZWxldGVMaW5lLmRibENsaWNrQ291bnQgPT09IDEpe1xuXHRcdFx0XHQkc2NvcGUuZGVsZXRlTGluZS5kYmxDbGlja0NvdW50ID0gMDtcblx0XHRcdFx0JHNjb3BlLmRlbGV0ZUxpbmUucmVhZHlUb0RlbGV0ZSA9IGZhbHNlO1xuXHRcdFx0XHQvKipcblx0XHRcdFx0XHQqIE5PVEUgOiB0cmljayBpbiBjYWxsaW5nIHBhcmVudCBjb250cm9sbGVyIGZ1bmN0aW9uIHdpdGggaW5wdXQgcGFyYW0gd2hlbiBkaXJlY3RpdmUgd2l0aCBpc29sYXRlIHNjb3BlXG5cdFx0XHRcdFx0KiBzZWUgOiBodHRwczovL3RoaW5rc3Rlci5pby9lZ2doZWFkL2lzb2xhdGUtc2NvcGUtYW1cblx0XHRcdFx0XHQqXG5cdFx0XHRcdFx0KiBIZXJlIHNob3VsZCBiZTpcblx0XHRcdFx0XHQqIFxuXHRcdFx0XHRcdCotPiBpbiBodG1sIDogICAgICAgICAgICAgICAgICAgICBkZC1yZW1vdmUtbGluZT1cInJlbW92ZVRoaXNMaW5lKGluZGV4VG9EZWxldGUpXG5cdFx0XHRcdFx0Ki0+IGluIGNvbnRyb2xsZXIgOiAgICAgICAgICAgICAgICRzY29wZS5yZW1vdmVUaGlzTGluZSA9IGZ1bmN0aW9uKGxpbmVJbmRleCl7XG5cdFx0XHRcdFx0Ki0+IHNvIGluIGRpcmVjdGl2ZSBjYWxsIGl0ICA6ICAgICRzY29wZS5yZW1vdmVMaW5lKHtpbmRleFRvRGVsZXRlOiBjdXJyZW50SW5kZXh9KTtcblx0XHRcdFx0XHQqXG5cdFx0XHRcdFx0KlxuXHRcdFx0XHRcdCogQlVUIGluIHRoaXMgY2FzZSAocmVwZWF0cywgdWw+IGxpLi4uLiBjb21wbGljYXRlZCkgXG5cdFx0XHRcdFx0KiAgPT4gd29ya3MgYmV0dGVyIChpZiBzaGFraW5nIGEgbG90IG9mIGxpbmUgaW4gYSByb3cgaXQgd29uJ3QgbWVzcyB1cClcblx0XHRcdFx0XHQqXG5cdFx0XHRcdFx0Ki0+IGluIGh0bWwgOiAgICAgICAgICAgICAgICAgICAgIGRkLXJlbW92ZS1saW5lPVwicmVtb3ZlVGhpc0xpbmUoJGluZGV4KVxuXHRcdFx0XHRcdCotPiBpbiBjb250cm9sbGVyIDogICAgICAgICAgICAgICAkc2NvcGUucmVtb3ZlVGhpc0xpbmUgPSBmdW5jdGlvbihsaW5lSW5kZXgpe1xuXHRcdFx0XHRcdCotPiBzbyBpbiBkaXJlY3RpdmUgY2FsbCBpdCAgOiAgICAkc2NvcGUucmVtb3ZlTGluZSgpO1xuXHRcdFx0XHRcdCovICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXHRcdFx0XHQvLyRzY29wZS5yZW1vdmVMaW5lKHtpbmRleFRvRGVsZXRlOiBjdXJyZW50SW5kZXh9KTtcblx0XHRcdFx0JHNjb3BlLnJlbW92ZUxpbmUoKTtcblx0XHRcdFx0Ly9jb25zb2xlLndhcm4oJ2ZvcmNlIHRpbWVyIGRlc3RydWN0aW9uIGFmdGVyIGRlbGV0ZSEnKTtcblx0XHRcdFx0JHRpbWVvdXQuY2FuY2VsKHRpbWVyKTtcblx0XHRcdH1cblx0XHRcblx0XHRcdC8vMXN0IGRibCBjbGljayA6IG1ha2UgaXQgc2hha2Ugc28gcmVhZHkgdG8gZGVsZXRlXG5cdFx0XHRpZiAoJHNjb3BlLmRlbGV0ZUxpbmUuZGJsQ2xpY2tDb3VudCA9PT0gMCkge1xuXHRcdFx0XHQkc2NvcGUuZGVsZXRlTGluZS5kYmxDbGlja0NvdW50ID0gJHNjb3BlLmRlbGV0ZUxpbmUuZGJsQ2xpY2tDb3VudCArIDE7XG5cdFx0XHRcdCRzY29wZS5kZWxldGVMaW5lLnJlYWR5VG9EZWxldGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcblx0XHR9XG5cdH07XHRcdFxuXHRcblx0XG5cdFxuXHRcdC8qKlxuXHRcdFx0KiBzaWdubGUgZXZlbnQgd2lsbCBldmVyIG9jY3VyXG5cdFx0XHQqXG5cdFx0XHQqIHRvIHByZXZlbnQgaXQgdG8gaW50ZXJmZXJlIHdpdGggZG91YmxlIGNsaWNrIHNlcXVlbmNlIFxuXHRcdFx0KiAtPiBzZXQgYSB0aW1lIG91dCAoc2hha2luZyBsaW5lIHRvIGRlbGV0ZSB3aWxsIGF1dG9tYXRpY2FsbGx5IGVuZCBzaGFraW5nIGFmdGVyIHRpbWVvdXQgOiAyIHNlY29uZHMpXG5cdFx0XHQqL1xuXHRcdCRzY29wZS5jYW5jZWxEZWxldGUgPSAoKT0+e1xuXHRcdFx0Ly9ldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0Ly9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdHRpbWVyID0gJHRpbWVvdXQoKCk9Pntcblx0XHRcdFx0JHNjb3BlLmRlbGV0ZUxpbmUuZGJsQ2xpY2tDb3VudCA9IDA7XG5cdFx0XHRcdCRzY29wZS5kZWxldGVMaW5lLnJlYWR5VG9EZWxldGUgPSBmYWxzZTsgIFx0XHRcdFx0XHRcdFx0XG5cdFx0XHR9LCA1MDApO1xuXHRcdFx0XG5cdFx0XHQvKipcblx0XHRcdFx0KiBkZWJ1Z1xuXHRcdFx0XHQqL1xuXHRcdFx0Ly8gdGltZXIudGhlbihcblx0XHRcdC8vICAgICAoKSA9Pntcblx0XHRcdC8vICAgICAgICAgY29uc29sZS5sb2coICdUaW1lciByZXNvbHZlZCEnLCBEYXRlLm5vdygpICk7XG5cdFx0XHQvLyAgICAgfSxcblx0XHRcdC8vICAgICAoKSA9Pntcblx0XHRcdC8vICAgICAgICAgY29uc29sZS5sb2coICdUaW1lciByZWplY3RlZCEnLCBEYXRlLm5vdygpICk7XG5cdFx0XHQvLyAgICAgfVxuXHRcdFx0Ly8gKTtcblx0XHR9O1x0XHRcblx0XHRcblxuXHRcdC8qKlxuXHRcdFx0KiB0aW1lciBkZXN0cnVjdGlvbiB0byBwcmV2ZW50IGZyb20gYmFkIFVJIGV4cGVyaWVuY2Vcblx0XHRcdCovXG5cdFx0JHNjb3BlLiRvbignJGRlc3Ryb3knLCAoKT0+JHRpbWVvdXQuY2FuY2VsKHRpbWVyKSk7IFxuXHRcdFx0XHRcblxuXG5cdFx0LyoqXG5cdFx0XHQqIHByZXZlbnQgdHJhbnNjbHVzaW9uIGNyZWF0aW5nIGNoaWxkIHNjb3BlICBcblx0XHRcdCpcblx0XHRcdCpcblx0XHRcdCogTk9URSA6aWYgeW91IHdhbnQgdG8ga25vdyBtb3JlIGFib3V0IHdoYXQgSSdtIHNheWluZyA6IGNoZWNrIHRoaXMgbmljZSB0aXAgb24gdGhlIHN1YmplY3QgOiBcblx0XHRcdCogaHR0cDovL2FuZ3VsYXItdGlwcy5jb20vYmxvZy8yMDE0LzAzL3RyYW5zY2x1c2lvbi1hbmQtc2NvcGVzLyAgICAgICAgXG5cdFx0XHQqL1xuXHRcdHRyYW5zY2x1ZGUoJHNjb3BlLiRwYXJlbnQsIChjb250ZW50Q2xvbmUpPT57XG5cdFx0XHQvL3RyYW5zY2x1c2lvbiB3aWxsIGFwcGVuZCBjb250ZW50IHRvICc8ZGl2IGlkPVwibGluZURpcmVjdGl2ZVRyYW5zY2x1ZGVIZXJlXCI+PC9kaXY+J1xuXHRcdFx0bGV0IGNoaWxkRGl2ID0gYW5ndWxhci5lbGVtZW50KGVsZW1lbnQuY2hpbGRyZW4oKVswXSk7IFxuXHRcdFx0Y2hpbGREaXYuYXBwZW5kKGNvbnRlbnRDbG9uZSk7XG5cdFx0fSk7IFxuXG5cblx0fVxuXHRcbn1cblxuZGREZWNvckxpbmUuJGluamVjdCA9IFtcblx0JyR0aW1lb3V0J1xuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGREZWNvckxpbmU7XG5cbmV4cG9ydCB7XG5cdERSQUdfRFJPUF9ERUNPUl9MSU5FXG59O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9kcmFnZHJvcC9kZERlY29yTGluZS9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZERlY29yTGluZS5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 65 */ +/***/ function(module, exports) { + + eval("module.exports = \"\\n \\n \\n \\n \\n
    \\n
    \\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGREZWNvckxpbmUvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGREZWNvckxpbmUudGVtcGxhdGUuaHRtbD83OGIwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNDQUFzQyw2Q0FBNkMscUNBQXFDLHNDQUFzQyIsImZpbGUiOiI2NS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8ZGl2XFxuICBuZy1jbGFzcz1cXFwie2NvbmZpcm1MaW5lRGVsZXRlIDogZGVsZXRlTGluZS5yZWFkeVRvRGVsZXRlfVxcXCJcXG4gIG5nLWRibGNsaWNrPVxcXCJyZW1vdmVNZSgkZXZlbnQpO1xcXCJcXG4gIG5nLWNsaWNrPVxcXCJjYW5jZWxEZWxldGUoJGV2ZW50KTtcXFwiPlxcbiAgPGJ1dHRvblxcbiAgICBuZy1zaG93PVxcXCJkZWxldGVMaW5lLnJlYWR5VG9EZWxldGUgPT09IHRydWVcXFwiXFxuICAgIHR5cGU9XFxcImJ1dHRvblxcXCJcXG4gICAgY2xhc3M9XFxcImJ0biBidG4tZGFuZ2VyIHB1bGwtcmlnaHQgYnV0dG9uQ2xvc2VMaW5lXFxcIiA+XFxuICAgICA8c3BhblxcbiAgICAgIGNsYXNzPVxcXCJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoXFxcIlxcbiAgICAgIGFyaWEtaGlkZGVuPVxcXCJ0cnVlXFxcIj5cXG4gICAgPC9zcGFuPlxcbiAgPC9idXR0b24+XFxuPC9kaXY+XFxuPGRpdiBpZD1cXFwibGluZURpcmVjdGl2ZVRyYW5zY2x1ZGVIZXJlXFxcIj48L2Rpdj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkRGVjb3JMaW5lL2VkYURyYWdEcm9wV2F5LmRyYWdkcm9wLmRkRGVjb3JMaW5lLnRlbXBsYXRlLmh0bWxcbi8vIG1vZHVsZSBpZCA9IDY1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 66 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nvar DRAG_DROP_NO_EDITABLE_CONTROL = 'ddNoEditableControl';\n\nfunction ddNoEditableControl() {\n\tvar directive = {\n\t\trestrict: 'A',\n\t\tlink: linkfct\n\t};\n\treturn directive;\n\n\tfunction linkfct($scope, element) {\n\t\telement.on('click', function (event) {\n\t\t\treturn event.preventDefault();\n\t\t});\n\t}\n}\n\nddNoEditableControl.$inject = [];\n\nexports.default = ddNoEditableControl;\nexports.DRAG_DROP_NO_EDITABLE_CONTROL = DRAG_DROP_NO_EDITABLE_CONTROL;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZHJhZ2Ryb3AvZGROb0VkaXRhYmxlQ29udHJvbC9lZGFEcmFnRHJvcFdheS5kcmFnZHJvcC5kZE5vRWRpdGFibGVDb250cm9sLmRpcmVjdGl2ZS5qcz82ODBmIl0sIm5hbWVzIjpbIkRSQUdfRFJPUF9OT19FRElUQUJMRV9DT05UUk9MIiwiZGROb0VkaXRhYmxlQ29udHJvbCIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwibGluayIsImxpbmtmY3QiLCIkc2NvcGUiLCJlbGVtZW50Iiwib24iLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFNQSxnQ0FBZ0MscUJBQXRDOztBQUVBLFNBQVNDLG1CQUFULEdBQStCO0FBQzlCLEtBQUlDLFlBQVk7QUFDZkMsWUFBVyxHQURJO0FBRWZDLFFBQVNDO0FBRk0sRUFBaEI7QUFJQSxRQUFPSCxTQUFQOztBQUVBLFVBQVNHLE9BQVQsQ0FBaUJDLE1BQWpCLEVBQXlCQyxPQUF6QixFQUFrQztBQUNqQ0EsVUFBUUMsRUFBUixDQUFXLE9BQVgsRUFBb0IsVUFBQ0MsS0FBRDtBQUFBLFVBQVNBLE1BQU1DLGNBQU4sRUFBVDtBQUFBLEdBQXBCO0FBQ0E7QUFDRDs7QUFFRFQsb0JBQW9CVSxPQUFwQixHQUE4QixFQUE5Qjs7a0JBRWVWLG1CO1FBR2RELDZCLEdBQUFBLDZCIiwiZmlsZSI6IjY2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRFJBR19EUk9QX05PX0VESVRBQkxFX0NPTlRST0wgPSAnZGROb0VkaXRhYmxlQ29udHJvbCc7XG5cbmZ1bmN0aW9uIGRkTm9FZGl0YWJsZUNvbnRyb2woKSB7XG5cdGxldCBkaXJlY3RpdmUgPSB7XG5cdFx0cmVzdHJpY3RcdDogJ0EnLFxuXHRcdGxpbmtcdFx0XHQ6IGxpbmtmY3Rcblx0fTtcblx0cmV0dXJuIGRpcmVjdGl2ZTtcblxuXHRmdW5jdGlvbiBsaW5rZmN0KCRzY29wZSwgZWxlbWVudCkge1xuXHRcdGVsZW1lbnQub24oJ2NsaWNrJywgKGV2ZW50KT0+ZXZlbnQucHJldmVudERlZmF1bHQoKSk7XG5cdH1cbn1cblxuZGROb0VkaXRhYmxlQ29udHJvbC4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0IGRkTm9FZGl0YWJsZUNvbnRyb2w7XG5cbmV4cG9ydCB7XG5cdERSQUdfRFJPUF9OT19FRElUQUJMRV9DT05UUk9MXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2RyYWdkcm9wL2RkTm9FZGl0YWJsZUNvbnRyb2wvZWRhRHJhZ0Ryb3BXYXkuZHJhZ2Ryb3AuZGROb0VkaXRhYmxlQ29udHJvbC5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 67 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaDragDropWayRightClick = __webpack_require__(68);\n\nvar _edaDragDropWayRightClick2 = _interopRequireDefault(_edaDragDropWayRightClick);\n\nvar _edaDragDropWayRightClick3 = __webpack_require__(69);\n\nvar _edaDragDropWayRightClick4 = _interopRequireDefault(_edaDragDropWayRightClick3);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EDA_RIGHT_CLICK_MODULE = 'eda.right.click.module';\n\nexports.default = angular.module(EDA_RIGHT_CLICK_MODULE, []).directive(_edaDragDropWayRightClick.EDA_RIGHT_CLICK_DIRECTIVE, _edaDragDropWayRightClick2.default).service(_edaDragDropWayRightClick3.EDA_RIGHT_CLICKED_MANAGER_SERVICE, _edaDragDropWayRightClick4.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3JpZ2h0Y2xpY2svZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5tb2R1bGUuanM/YzJlYSJdLCJuYW1lcyI6WyJFREFfUklHSFRfQ0xJQ0tfTU9EVUxFIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsInNlcnZpY2UiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBSUE7Ozs7OztBQUtBLElBQU1BLHlCQUF5Qix3QkFBL0I7O2tCQUdlQyxRQUNOQyxNQURNLENBQ0NGLHNCQURELEVBQ3lCLEVBRHpCLEVBRU5HLFNBRk0sMEZBR05DLE9BSE0sa0ciLCJmaWxlIjoiNjcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZWRhUmlnaHRDbGljaywge1xuXHRFREFfUklHSFRfQ0xJQ0tfRElSRUNUSVZFXG59XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5kaXJlY3RpdmUnO1xuXG5pbXBvcnQgZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlciwge1xuXHRFREFfUklHSFRfQ0xJQ0tFRF9NQU5BR0VSX1NFUlZJQ0Vcbn1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5yaWdodENsaWNrLnNlcnZpY2UnO1xuXG5cbmNvbnN0IEVEQV9SSUdIVF9DTElDS19NT0RVTEUgPSAnZWRhLnJpZ2h0LmNsaWNrLm1vZHVsZSc7XG5cblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuXHRcdFx0XHRcdFx0XHRcdC5tb2R1bGUoRURBX1JJR0hUX0NMSUNLX01PRFVMRSwgW10pXG5cdFx0XHRcdFx0XHRcdFx0LmRpcmVjdGl2ZShFREFfUklHSFRfQ0xJQ0tfRElSRUNUSVZFLCBlZGFSaWdodENsaWNrKVxuXHRcdFx0XHRcdFx0XHRcdC5zZXJ2aWNlKEVEQV9SSUdIVF9DTElDS0VEX01BTkFHRVJfU0VSVklDRSwgZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlcik7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbW1vbi9yaWdodGNsaWNrL2VkYURyYWdEcm9wV2F5LnJpZ2h0Q2xpY2subW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 68 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar EDA_RIGHT_CLICK_DIRECTIVE = 'edaRightClick';\n\nfunction edaRightClick($parse) {\n\n var directive = {\n restrict: 'A',\n link: linkFct\n };\n return directive;\n\n function linkFct(scope, element, attrs) {\n var fn = $parse(attrs.edaRightClick);\n var columnIndex = $parse(attrs.edaRightClickColIndex);\n var fctSetRightclicked = $parse(attrs.edaSetRightClicked);\n /**\n * on right click event manage\n * - open edit panel through attrs.edaRightClick function\n * - set rightCliked attribute (to true) to control (in dragDropModel)\n */\n element.on('contextmenu', function (event) {\n scope.$apply(function () {\n event.preventDefault();\n if (columnIndex(scope) === 1) fctSetRightclicked(scope, {}); //right click limited to template column (index = 1)\n if (columnIndex(scope) === 1) fn(scope, { $event: event }); //right click limited to template column (index = 1)\n });\n });\n }\n}\n\nedaRightClick.$inject = ['$parse'];\n\nexports.default = edaRightClick;\nexports.EDA_RIGHT_CLICK_DIRECTIVE = EDA_RIGHT_CLICK_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3JpZ2h0Y2xpY2svZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5kaXJlY3RpdmUuanM/MzJiMCJdLCJuYW1lcyI6WyJFREFfUklHSFRfQ0xJQ0tfRElSRUNUSVZFIiwiZWRhUmlnaHRDbGljayIsIiRwYXJzZSIsImRpcmVjdGl2ZSIsInJlc3RyaWN0IiwibGluayIsImxpbmtGY3QiLCJzY29wZSIsImVsZW1lbnQiLCJhdHRycyIsImZuIiwiY29sdW1uSW5kZXgiLCJlZGFSaWdodENsaWNrQ29sSW5kZXgiLCJmY3RTZXRSaWdodGNsaWNrZWQiLCJlZGFTZXRSaWdodENsaWNrZWQiLCJvbiIsImV2ZW50IiwiJGFwcGx5IiwicHJldmVudERlZmF1bHQiLCIkZXZlbnQiLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQU1BLDRCQUE0QixlQUFsQzs7QUFFQSxTQUFTQyxhQUFULENBQXVCQyxNQUF2QixFQUE4Qjs7QUFFN0IsTUFBSUMsWUFBWTtBQUNiQyxjQUFZLEdBREM7QUFFYkMsVUFBWUM7QUFGQyxHQUFoQjtBQUlDLFNBQU9ILFNBQVA7O0FBRUEsV0FBU0csT0FBVCxDQUFpQkMsS0FBakIsRUFBd0JDLE9BQXhCLEVBQWlDQyxLQUFqQyxFQUF1QztBQUNyQyxRQUFJQyxLQUFzQlIsT0FBT08sTUFBTVIsYUFBYixDQUExQjtBQUNBLFFBQUlVLGNBQXNCVCxPQUFPTyxNQUFNRyxxQkFBYixDQUExQjtBQUNBLFFBQUlDLHFCQUFzQlgsT0FBT08sTUFBTUssa0JBQWIsQ0FBMUI7QUFDQTs7Ozs7QUFLQU4sWUFBUU8sRUFBUixDQUFXLGFBQVgsRUFBMEIsVUFBQ0MsS0FBRCxFQUFTO0FBQ2pDVCxZQUFNVSxNQUFOLENBQWEsWUFBSztBQUNoQkQsY0FBTUUsY0FBTjtBQUNBLFlBQUlQLFlBQVlKLEtBQVosTUFBdUIsQ0FBM0IsRUFBOEJNLG1CQUFtQk4sS0FBbkIsRUFBMEIsRUFBMUIsRUFGZCxDQUU2QztBQUM3RCxZQUFJSSxZQUFZSixLQUFaLE1BQXVCLENBQTNCLEVBQThCRyxHQUFHSCxLQUFILEVBQVUsRUFBQ1ksUUFBT0gsS0FBUixFQUFWLEVBSGQsQ0FHeUM7QUFDMUQsT0FKRDtBQUtELEtBTkQ7QUFRRDtBQUVGOztBQUVEZixjQUFjbUIsT0FBZCxHQUF3QixDQUN0QixRQURzQixDQUF4Qjs7a0JBSWVuQixhO1FBSWJELHlCLEdBQUFBLHlCIiwiZmlsZSI6IjY4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRURBX1JJR0hUX0NMSUNLX0RJUkVDVElWRSA9ICdlZGFSaWdodENsaWNrJztcblxuZnVuY3Rpb24gZWRhUmlnaHRDbGljaygkcGFyc2Upe1xuICBcblx0bGV0IGRpcmVjdGl2ZSA9IHtcbiAgICByZXN0cmljdCAgOiAnQScsXG4gICAgbGluayAgICAgIDogbGlua0ZjdFxuICB9O1xuICByZXR1cm4gZGlyZWN0aXZlO1xuICBcbiAgZnVuY3Rpb24gbGlua0ZjdChzY29wZSwgZWxlbWVudCwgYXR0cnMpe1xuICAgIGxldCBmbiAgICAgICAgICAgICAgICAgID0gJHBhcnNlKGF0dHJzLmVkYVJpZ2h0Q2xpY2spO1xuICAgIGxldCBjb2x1bW5JbmRleCAgICAgICAgID0gJHBhcnNlKGF0dHJzLmVkYVJpZ2h0Q2xpY2tDb2xJbmRleCk7XG4gICAgbGV0IGZjdFNldFJpZ2h0Y2xpY2tlZCAgPSAkcGFyc2UoYXR0cnMuZWRhU2V0UmlnaHRDbGlja2VkKTsgICAgICBcbiAgICAvKipcbiAgICAgICogb24gcmlnaHQgY2xpY2sgZXZlbnQgbWFuYWdlXG4gICAgICAqIC0gb3BlbiBlZGl0IHBhbmVsIHRocm91Z2ggYXR0cnMuZWRhUmlnaHRDbGljayBmdW5jdGlvblxuICAgICAgKiAtIHNldCByaWdodENsaWtlZCBhdHRyaWJ1dGUgKHRvIHRydWUpIHRvIGNvbnRyb2wgKGluIGRyYWdEcm9wTW9kZWwpXG4gICAgICAqL1xuICAgIGVsZW1lbnQub24oJ2NvbnRleHRtZW51JywgKGV2ZW50KT0+e1xuICAgICAgc2NvcGUuJGFwcGx5KCgpID0+e1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoY29sdW1uSW5kZXgoc2NvcGUpID09PSAxKSBmY3RTZXRSaWdodGNsaWNrZWQoc2NvcGUsIHt9KTsgLy9yaWdodCBjbGljayBsaW1pdGVkIHRvIHRlbXBsYXRlIGNvbHVtbiAoaW5kZXggPSAxKVxuICAgICAgICBpZiAoY29sdW1uSW5kZXgoc2NvcGUpID09PSAxKSBmbihzY29wZSwgeyRldmVudDpldmVudH0pOyAvL3JpZ2h0IGNsaWNrIGxpbWl0ZWQgdG8gdGVtcGxhdGUgY29sdW1uIChpbmRleCA9IDEpXG4gICAgICB9KTtcbiAgICB9KTtcdFxuXG4gIH1cbiAgXG59XG5cbmVkYVJpZ2h0Q2xpY2suJGluamVjdCA9IFtcbiAgJyRwYXJzZSdcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGVkYVJpZ2h0Q2xpY2s7XG5cblxuZXhwb3J0IHtcbiAgRURBX1JJR0hUX0NMSUNLX0RJUkVDVElWRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9jb21tb24vcmlnaHRjbGljay9lZGFEcmFnRHJvcFdheS5yaWdodENsaWNrLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 69 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EDA_RIGHT_CLICKED_MANAGER_SERVICE = 'ddItemRightClickedManager';\n\nvar ddItemRightClickedManager = function () {\n\tfunction ddItemRightClickedManager() {\n\t\t_classCallCheck(this, ddItemRightClickedManager);\n\n\t\tthis.init();\n\t}\n\n\t_createClass(ddItemRightClickedManager, [{\n\t\tkey: 'init',\n\t\tvalue: function init() {}\n\n\t\t/**\n \t* setUnRightClicked \n \t* set unSelected (see edaRightClick directive)\n \t*\n \t* used in edaEditcontroller when droping control\n \t*/\n\n\t}, {\n\t\tkey: 'setUnRightClicked',\n\t\tvalue: function setUnRightClicked(dragDropModelItem) {\n\t\t\tdragDropModelItem.rightCliked = false;\n\t\t}\n\n\t\t/**\n \t* resetAllDragDropItemSelectedState\n \t*\n \t* simply reset (=set to false) all item.rightCliked \n \t* in edit column (dragable column)\n \t*\n \t* used in edaEditPanel when closeEditPanel() called\n \t*/\n\n\t}, {\n\t\tkey: 'resetAllDragDropItemSelectedState',\n\t\tvalue: function resetAllDragDropItemSelectedState(dragDropModel) {\n\t\t\tangular.forEach(dragDropModel[1], function (line) {\n\t\t\t\tangular.forEach(line, function (item) {\n\t\t\t\t\treturn item.rightCliked = false;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}]);\n\n\treturn ddItemRightClickedManager;\n}();\n\nddItemRightClickedManager.$inject = [];\n\nexports.default = ddItemRightClickedManager;\nexports.EDA_RIGHT_CLICKED_MANAGER_SERVICE = EDA_RIGHT_CLICKED_MANAGER_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3JpZ2h0Y2xpY2svZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5zZXJ2aWNlLmpzP2EzNjQiXSwibmFtZXMiOlsiRURBX1JJR0hUX0NMSUNLRURfTUFOQUdFUl9TRVJWSUNFIiwiZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlciIsImluaXQiLCJkcmFnRHJvcE1vZGVsSXRlbSIsInJpZ2h0Q2xpa2VkIiwiZHJhZ0Ryb3BNb2RlbCIsImFuZ3VsYXIiLCJmb3JFYWNoIiwibGluZSIsIml0ZW0iLCIkaW5qZWN0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBTUEsb0NBQW9DLDJCQUExQzs7SUFFTUMseUI7QUFDTCxzQ0FBYTtBQUFBOztBQUNaLE9BQUtDLElBQUw7QUFDQTs7Ozt5QkFFSyxDQUVMOztBQUVEOzs7Ozs7Ozs7b0NBTWtCQyxpQixFQUFrQjtBQUNuQ0EscUJBQWtCQyxXQUFsQixHQUFnQyxLQUFoQztBQUNBOztBQUVEOzs7Ozs7Ozs7OztvREFRa0NDLGEsRUFBYztBQUMvQ0MsV0FBUUMsT0FBUixDQUFnQkYsY0FBYyxDQUFkLENBQWhCLEVBQWtDLFVBQUNHLElBQUQsRUFBUTtBQUN6Q0YsWUFBUUMsT0FBUixDQUFnQkMsSUFBaEIsRUFBc0IsVUFBQ0MsSUFBRDtBQUFBLFlBQVFBLEtBQUtMLFdBQUwsR0FBbUIsS0FBM0I7QUFBQSxLQUF0QjtBQUNBLElBRkQ7QUFJQTs7Ozs7O0FBS0ZILDBCQUEwQlMsT0FBMUIsR0FBb0MsRUFBcEM7O2tCQUVlVCx5QjtRQUdkRCxpQyxHQUFBQSxpQyIsImZpbGUiOiI2OS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVEQV9SSUdIVF9DTElDS0VEX01BTkFHRVJfU0VSVklDRSA9ICdkZEl0ZW1SaWdodENsaWNrZWRNYW5hZ2VyJztcblxuY2xhc3MgZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlcntcblx0Y29uc3RydWN0b3IoKXtcblx0XHR0aGlzLmluaXQoKTtcdFxuXHR9XG5cdFxuXHRpbml0KCl7XG5cdFx0XG5cdH1cblx0XG5cdC8qKlxuXHRcdCogc2V0VW5SaWdodENsaWNrZWQgXG5cdFx0KiBzZXQgdW5TZWxlY3RlZCAoc2VlIGVkYVJpZ2h0Q2xpY2sgZGlyZWN0aXZlKVxuXHRcdCpcblx0XHQqIHVzZWQgaW4gZWRhRWRpdGNvbnRyb2xsZXIgd2hlbiBkcm9waW5nIGNvbnRyb2xcblx0XHQqL1x0XG5cdHNldFVuUmlnaHRDbGlja2VkKGRyYWdEcm9wTW9kZWxJdGVtKXtcblx0XHRkcmFnRHJvcE1vZGVsSXRlbS5yaWdodENsaWtlZCA9IGZhbHNlO1xuXHR9XHRcblxuXHQvKipcblx0XHQqIHJlc2V0QWxsRHJhZ0Ryb3BJdGVtU2VsZWN0ZWRTdGF0ZVxuXHRcdCpcblx0XHQqIHNpbXBseSByZXNldCAoPXNldCB0byBmYWxzZSkgYWxsIGl0ZW0ucmlnaHRDbGlrZWQgXG5cdFx0KiBpbiBlZGl0IGNvbHVtbiAoZHJhZ2FibGUgY29sdW1uKVxuXHRcdCpcblx0XHQqIHVzZWQgaW4gZWRhRWRpdFBhbmVsIHdoZW4gY2xvc2VFZGl0UGFuZWwoKSBjYWxsZWRcblx0XHQqL1x0XG5cdHJlc2V0QWxsRHJhZ0Ryb3BJdGVtU2VsZWN0ZWRTdGF0ZShkcmFnRHJvcE1vZGVsKXtcblx0XHRhbmd1bGFyLmZvckVhY2goZHJhZ0Ryb3BNb2RlbFsxXSAsKGxpbmUpPT57XG5cdFx0XHRhbmd1bGFyLmZvckVhY2gobGluZSwgKGl0ZW0pPT5pdGVtLnJpZ2h0Q2xpa2VkID0gZmFsc2UpO1xuXHRcdH0pO1xuXHRcblx0fVx0XG5cdFxuXHRcbn1cblxuZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlci4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0IGRkSXRlbVJpZ2h0Q2xpY2tlZE1hbmFnZXI7XG5cbmV4cG9ydCB7XG5cdEVEQV9SSUdIVF9DTElDS0VEX01BTkFHRVJfU0VSVklDRVxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3JpZ2h0Y2xpY2svZWRhRHJhZ0Ryb3BXYXkucmlnaHRDbGljay5zZXJ2aWNlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 70 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaDragDropWayConfigurationModelProxy = __webpack_require__(71);\n\nvar _edaDragDropWayConfigurationModelProxy2 = _interopRequireDefault(_edaDragDropWayConfigurationModelProxy);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar EDA_CONFIG_PROXY_MODULE = 'eda.config.proxy.module';\n\nexports.default = angular.module(EDA_CONFIG_PROXY_MODULE, []).service(_edaDragDropWayConfigurationModelProxy.DRAG_DROP_CONFIG_PROXY_SERVICE, _edaDragDropWayConfigurationModelProxy2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29uZmlndXJhdGlvbk1vZGVsUHJveHkvZWRhRHJhZ0Ryb3BXYXkuY29uZmlndXJhdGlvbk1vZGVsUHJveHkubW9kdWxlLmpzPzk4ODciXSwibmFtZXMiOlsiRURBX0NPTkZJR19QUk9YWV9NT0RVTEUiLCJhbmd1bGFyIiwibW9kdWxlIiwic2VydmljZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7OztBQUlBLElBQU1BLDBCQUEwQix5QkFBaEM7O2tCQUVlQyxRQUNOQyxNQURNLENBQ0NGLHVCQURELEVBQzBCLEVBRDFCLEVBRU5HLE9BRk0sd0giLCJmaWxlIjoiNzAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZSwge1xuXHREUkFHX0RST1BfQ09ORklHX1BST1hZX1NFUlZJQ0Vcbn1cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5jb25maWd1cmF0aW9uTW9kZWxQcm94eS5zZXJ2aWNlJztcblxuY29uc3QgRURBX0NPTkZJR19QUk9YWV9NT0RVTEUgPSAnZWRhLmNvbmZpZy5wcm94eS5tb2R1bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBhbmd1bGFyXG5cdFx0XHRcdFx0XHRcdFx0Lm1vZHVsZShFREFfQ09ORklHX1BST1hZX01PRFVMRSwgW10pXG5cdFx0XHRcdFx0XHRcdFx0LnNlcnZpY2UoRFJBR19EUk9QX0NPTkZJR19QUk9YWV9TRVJWSUNFLCBkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29uZmlndXJhdGlvbk1vZGVsUHJveHkvZWRhRHJhZ0Ryb3BXYXkuY29uZmlndXJhdGlvbk1vZGVsUHJveHkubW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 71 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DRAG_DROP_CONFIG_PROXY_SERVICE = 'ddModelConfModelProxyService';\n\nvar ddModelConfModelProxyService = function () {\n function ddModelConfModelProxyService(EasyFormGenFormlyBindingModels,\n // controllerModalProxy, \n // dragDropConfig, \n easyFormDragWayConfig, $parse) {\n _classCallCheck(this, ddModelConfModelProxyService);\n\n this.EasyFormGenFormlyBindingModels = EasyFormGenFormlyBindingModels;\n // this.controllerModalProxy = controllerModalProxy;\n // this.dragDropConfig = dragDropConfig;\n this.easyFormDragWayConfig = easyFormDragWayConfig;\n this.$parse = $parse;\n this.init();\n }\n\n _createClass(ddModelConfModelProxyService, [{\n key: 'init',\n value: function init() {}\n }, {\n key: 'refreshAllConfigurationFromDragAndDropModel',\n value: function refreshAllConfigurationFromDragAndDropModel(configModel, ddModel) {\n var _this = this;\n\n /**\n * TODO : prevent reset already set props\n * \n * previousConfigurationModel = a backup of configuration model 'configModel 'before resetting it\n * -> dragDrop model contains unique keys of already existing controls : these controls must not be reset / overwritten \n */\n // let previousConfigurationModel = angular.copy(configModel); \n configModel.lines = [];\n // iterates line config model\n angular.forEach(ddModel[1], function (lineValue, keyValue) {\n // add empty line 1st - if line is empty -> it will be enough \n configModel.lines.push(angular.copy(_this.EasyFormGenFormlyBindingModels.getEasyFormEmptyConfigurationLineModel()));\n // update line value field\n _this.applyThisLine(keyValue + 1, keyValue, configModel);\n // iterate through columns and add them if control exists\t\n angular.forEach(lineValue, function (colValue, colIndex) {\n // push an empty control model but relative to dradrop : model control type - (if datepicker so additionnal properties are added) \t\n var controlToBind = {\n control: angular.copy(_this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(lineValue.length, _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]).formlyType))\n };\n var formlyDetailedControlModel = _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]);\n // controls alreadys existed so do not reset it - control to bind is the previous one\t\t\n if (typeof colValue.key !== 'undefined') {\n //console.warn('debug dragdropModel show this control key : ' + colValue.key);\n controlToBind.control = angular.copy(colValue.configModelControl);\n //update cssClass depending new position:\n var newClassName = _this.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(lineValue.length, _this.getFormlyDetailedControlModelFromDragDropObject(lineValue[colIndex]).formlyType);\n controlToBind.control.className = newClassName.className;\n //test if header nee this one\n controlToBind.control.cssClass = newClassName.className;\n // get control details for this key in backup : previousConfigurationModel\n } else {\n // controls did not exists before : control to bind is a new one\n // bind dragdrop control properties to configuration model through controlToBind var\n _this.bindConfigCtrlModelFromFormlyDetailedCtrlModel(formlyDetailedControlModel, controlToBind, configModel);\n }\n // apply controlToBind var to configuration model control\n if (typeof configModel.lines[keyValue].columns[colIndex] === 'undefined') configModel.lines[keyValue].columns.push(angular.copy(_this.EasyFormGenFormlyBindingModels.getEasyFormConfigurationEmptyControlModel()));\n configModel.lines[keyValue].columns[colIndex].control = angular.copy(controlToBind.control);\n configModel.lines[keyValue].columns[colIndex].numColumn = colIndex + 1;\n configModel.lines[keyValue].columns[colIndex].exist = true;\n });\n });\n return configModel;\n }\n }, {\n key: 'refreshControlsKeys',\n value: function refreshControlsKeys(configModel, dragDropModel) {\n angular.forEach(configModel.lines, function (aConfigLine, aConfigLineIndex) {\n angular.forEach(aConfigLine.columns, function (aConfigControl, aConfigControlIndex) {\n //if last control removed from line - and dragDrop model did not already removed this line\n if (typeof dragDropModel[1][aConfigLineIndex] !== 'undefined') {\n if (dragDropModel[1][aConfigLineIndex].length > 0) {\n dragDropModel[1][aConfigLineIndex][aConfigControlIndex].key = aConfigControl.control.key;\n //need to save all in dragdropModel as it is a reference\n //configModel still needed \n // -> to keep coherence (same back model) between all version of easyForm Generator\n // -> is the back model (can be saved to dataBase)\n dragDropModel[1][aConfigLineIndex][aConfigControlIndex].configModelControl = angular.copy(aConfigControl.control);\n }\n }\n });\n });\n }\n\n /**\n * drag drop model\n * -> will be used to bind configuration model\n * \tof no key saved, configuration model controls would be reset each drop events\n * \n * -> matching key : will prevent to reset existing control\n */\n\n }, {\n key: 'loadDragDropModelFromConfigurationModel',\n value: function loadDragDropModelFromConfigurationModel(configModel, dragDropModel) {\n var _this2 = this;\n\n //reset dragdrop fields model NOT all dragDropModel!\n dragDropModel[1] = [];\n angular.forEach(configModel.lines, function (aConfigLine, aConfigLineIndex) {\n //add new line\n dragDropModel[1].push([]);\n angular.forEach(aConfigLine.columns, function (aConfigControl) {\n // get control type from configuration.control.selectedControl\n var dragdropControlRef = {\n control: 'empty',\n cssClass: 'col-xs-12',\n label: '
    '\n };\n angular.forEach(dragDropModel[0], function (groupOfCtrlRef) {\n angular.forEach(groupOfCtrlRef, function (aCtrlref) {\n if (aCtrlref.control === aConfigControl.control.selectedControl) dragdropControlRef = angular.copy(aCtrlref);\n });\n });\n dragDropModel[1][aConfigLineIndex].push(dragdropControlRef);\n //update class depending number of control per line\n var cssClassToApply = _this2.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(dragDropModel[1][aConfigLineIndex].length);\n angular.forEach(dragDropModel[1][aConfigLineIndex], function (ddControlToUpdate) {\n return ddControlToUpdate.cssClass = cssClassToApply;\n });\n });\n });\n // console.info('bindDragDropModelFromConfigurationModel');\n // console.dir(\t\n // \t\t\t\t\t\t\t{\n // \t\t\t\t\t\t\t\t\t'when' \t\t\t\t\t\t\t: 'starting',\n // \t\t\t\t\t\t\t\t\t'configModel is ' \t: angular.copy(configModel),\n // \t\t\t\t\t\t\t\t\t'dragDropModel is ' : angular.copy(dragDropModel)\n // \t\t\t\t\t\t\t}\n // \t\t\t\t\t\t); \n }\n\n /**\n * returns a control model that is more formly detailed\n * (more formly detailed : see controls property in EasyFormGenFormlyBindingModels._easyFormListControls)\n */\n\n }, {\n key: 'getFormlyDetailedControlModelFromDragDropObject',\n value: function getFormlyDetailedControlModelFromDragDropObject(dragDrapCtrlModel) {\n var controlModel = {};\n var listControl = this.EasyFormGenFormlyBindingModels.getEasyFormListControls();\n var controlsListGetter = this.$parse('controls');\n\n angular.forEach(controlsListGetter(listControl), function (ctrlListValue) {\n if (ctrlListValue.id === dragDrapCtrlModel.control) controlModel = ctrlListValue;\n });\n return controlModel;\n }\n\n /**\n * valid a control key is unique\n *\n * yes... function name already told us that, \n * -> it's just confirmation and to see if\n * you keep focus while reading it ^^\n */\n\n }, {\n key: 'validKeyUniqueness',\n value: function validKeyUniqueness(thisKey, configurationObj) {\n var isUnique = true;\n for (var i = configurationObj.lines.length - 1; i >= 0; i--) {\n for (var j = configurationObj.lines[i].columns.length - 1; j >= 0; j--) {\n if (typeof configurationObj.lines[i].columns[j].control !== 'undefined') {\n if (configurationObj.lines[i].columns[j].control.key === thisKey) {\n isUnique = false;\n }\n }\n }\n }\n return isUnique;\n }\n }, {\n key: 'createUniqueKey',\n value: function createUniqueKey(baseKeyValue, configurationObj) {\n // unique key (set only first time) in this model is formly control type + Date.now(); \n var newKey = baseKeyValue + '-' + Date.now();\n if (this.validKeyUniqueness(newKey, configurationObj) === true) {\n return newKey;\n } else {\n newKey = baseKeyValue + '-' + Date.now();\n if (this.validKeyUniqueness(newKey, configurationObj) === true) {\n return newKey;\n } else {\n newKey = baseKeyValue + '-' + Date.now();\n return newKey;\n }\n }\n }\n }, {\n key: 'applyThisLine',\n value: function applyThisLine(linevalue, lineIndex, configModel) {\n angular.forEach(configModel.lines, function (aLineValue, aLineKey) {\n if (aLineKey === lineIndex) aLineValue.line = linevalue;\n });\n }\n\n /**\n * bind formly detailed model to configuration control model\n */\n\n }, {\n key: 'bindConfigCtrlModelFromFormlyDetailedCtrlModel',\n value: function bindConfigCtrlModelFromFormlyDetailedCtrlModel(formlyDetailCtrlModel, configurationCtrlModel, configModel) {\n /**\n * TODO :properties should be served by provider \n * more configurable without pain\n */\n //set selected control :\n this.$parse('control.selectedControl').assign(configurationCtrlModel, this.$parse('selectedControl')(formlyDetailCtrlModel));\n //set type :\t\n this.$parse('control.type').assign(configurationCtrlModel, this.$parse('formlyType')(formlyDetailCtrlModel));\n //set key :\t\n this.$parse('control.key').assign(configurationCtrlModel, this.createUniqueKey(this.$parse('control.type')(configurationCtrlModel), configModel));\n //set subtype :\t\n this.$parse('control.subtype').assign(configurationCtrlModel, this.$parse('formlySubtype')(formlyDetailCtrlModel));\n //set templateOptions.label :\t\n this.$parse('control.templateOptions.label').assign(configurationCtrlModel, this.$parse('formlyLabel')(formlyDetailCtrlModel));\n //set templateOptions.required :\t\n this.$parse('control.templateOptions.required').assign(configurationCtrlModel, this.$parse('formlyRequired')(formlyDetailCtrlModel));\n //set templateOptions.required :\t\n this.$parse('control.templateOptions.description').assign(configurationCtrlModel, this.$parse('formlyDescription')(formlyDetailCtrlModel));\n //set templateOptions.required :\t\n this.$parse('control.templateOptions.placeholder').assign(configurationCtrlModel, this.$parse('formlyPlaceholder')(formlyDetailCtrlModel));\n //set templateOptions.required :\t\n this.$parse('control.templateOptions.options').assign(configurationCtrlModel, this.$parse('formlyOptions')(formlyDetailCtrlModel));\n\n if (this.$parse('control.type')(configurationCtrlModel) === 'datepicker') {\n this.$parse('control.templateOptions.datepickerPopup').assign(configurationCtrlModel, this.$parse('datepickerPopup')(formlyDetailCtrlModel));\n }\n }\n }]);\n\n return ddModelConfModelProxyService;\n}();\n\nddModelConfModelProxyService.$inject = ['EasyFormGenFormlyBindingModels',\n// 'controllerModalProxy',\n// 'dragDropConfig',\n'easyFormDragWayConfig', '$parse'];\n\nexports.default = ddModelConfModelProxyService;\nexports.DRAG_DROP_CONFIG_PROXY_SERVICE = DRAG_DROP_CONFIG_PROXY_SERVICE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29uZmlndXJhdGlvbk1vZGVsUHJveHkvZWRhRHJhZ0Ryb3BXYXkuY29uZmlndXJhdGlvbk1vZGVsUHJveHkuc2VydmljZS5qcz9iYmJmIl0sIm5hbWVzIjpbIkRSQUdfRFJPUF9DT05GSUdfUFJPWFlfU0VSVklDRSIsImRkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UiLCJFYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMiLCJlYXN5Rm9ybURyYWdXYXlDb25maWciLCIkcGFyc2UiLCJpbml0IiwiY29uZmlnTW9kZWwiLCJkZE1vZGVsIiwibGluZXMiLCJhbmd1bGFyIiwiZm9yRWFjaCIsImxpbmVWYWx1ZSIsImtleVZhbHVlIiwicHVzaCIsImNvcHkiLCJnZXRFYXN5Rm9ybUVtcHR5Q29uZmlndXJhdGlvbkxpbmVNb2RlbCIsImFwcGx5VGhpc0xpbmUiLCJjb2xWYWx1ZSIsImNvbEluZGV4IiwiY29udHJvbFRvQmluZCIsImNvbnRyb2wiLCJnZXRGb3JtbHlDb250cm9sVGVtcGxhdGVGb3JOY29sdW1uTGluZSIsImxlbmd0aCIsImdldEZvcm1seURldGFpbGVkQ29udHJvbE1vZGVsRnJvbURyYWdEcm9wT2JqZWN0IiwiZm9ybWx5VHlwZSIsImZvcm1seURldGFpbGVkQ29udHJvbE1vZGVsIiwia2V5IiwiY29uZmlnTW9kZWxDb250cm9sIiwibmV3Q2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwiY3NzQ2xhc3MiLCJiaW5kQ29uZmlnQ3RybE1vZGVsRnJvbUZvcm1seURldGFpbGVkQ3RybE1vZGVsIiwiY29sdW1ucyIsImdldEVhc3lGb3JtQ29uZmlndXJhdGlvbkVtcHR5Q29udHJvbE1vZGVsIiwibnVtQ29sdW1uIiwiZXhpc3QiLCJkcmFnRHJvcE1vZGVsIiwiYUNvbmZpZ0xpbmUiLCJhQ29uZmlnTGluZUluZGV4IiwiYUNvbmZpZ0NvbnRyb2wiLCJhQ29uZmlnQ29udHJvbEluZGV4IiwiZHJhZ2Ryb3BDb250cm9sUmVmIiwibGFiZWwiLCJncm91cE9mQ3RybFJlZiIsImFDdHJscmVmIiwic2VsZWN0ZWRDb250cm9sIiwiY3NzQ2xhc3NUb0FwcGx5IiwiZ2V0SXRlbUNzc0RlcGVuZGluZ051bWJlckl0ZW1zSW5Sb3ciLCJkZENvbnRyb2xUb1VwZGF0ZSIsImRyYWdEcmFwQ3RybE1vZGVsIiwiY29udHJvbE1vZGVsIiwibGlzdENvbnRyb2wiLCJnZXRFYXN5Rm9ybUxpc3RDb250cm9scyIsImNvbnRyb2xzTGlzdEdldHRlciIsImN0cmxMaXN0VmFsdWUiLCJpZCIsInRoaXNLZXkiLCJjb25maWd1cmF0aW9uT2JqIiwiaXNVbmlxdWUiLCJpIiwiaiIsImJhc2VLZXlWYWx1ZSIsIm5ld0tleSIsIkRhdGUiLCJub3ciLCJ2YWxpZEtleVVuaXF1ZW5lc3MiLCJsaW5ldmFsdWUiLCJsaW5lSW5kZXgiLCJhTGluZVZhbHVlIiwiYUxpbmVLZXkiLCJsaW5lIiwiZm9ybWx5RGV0YWlsQ3RybE1vZGVsIiwiY29uZmlndXJhdGlvbkN0cmxNb2RlbCIsImFzc2lnbiIsImNyZWF0ZVVuaXF1ZUtleSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNQSxpQ0FBaUMsOEJBQXZDOztJQUVNQyw0QjtBQUVKLHdDQUNFQyw4QkFERjtBQUVFO0FBQ0E7QUFDQUMsdUJBSkYsRUFLRUMsTUFMRixFQUtTO0FBQUE7O0FBQ1AsU0FBS0YsOEJBQUwsR0FBc0NBLDhCQUF0QztBQUNBO0FBQ0E7QUFDQSxTQUFLQyxxQkFBTCxHQUFzQ0EscUJBQXRDO0FBQ0EsU0FBS0MsTUFBTCxHQUFzQ0EsTUFBdEM7QUFDQSxTQUFLQyxJQUFMO0FBQ0Q7Ozs7MkJBRUssQ0FFTDs7O2dFQUUyQ0MsVyxFQUFhQyxPLEVBQVE7QUFBQTs7QUFDL0Q7Ozs7OztBQU1BO0FBQ0FELGtCQUFZRSxLQUFaLEdBQW9CLEVBQXBCO0FBQ0E7QUFDQUMsY0FBUUMsT0FBUixDQUFnQkgsUUFBUSxDQUFSLENBQWhC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MUQsRUFBa0YsS0FBS3BFLE1BQUwsQ0FBWSxtQkFBWixFQUFpQ21FLHFCQUFqQyxDQUFsRjtBQUNBO0FBQ0EsV0FBS25FLE1BQUwsQ0FBWSxpQ0FBWixFQUErQ3FFLE1BQS9DLENBQXNERCxzQkFBdEQsRUFBOEUsS0FBS3BFLE1BQUwsQ0FBWSxlQUFaLEVBQTZCbUUscUJBQTdCLENBQTlFOztBQUVBLFVBQUksS0FBS25FLE1BQUwsQ0FBWSxjQUFaLEVBQTRCb0Usc0JBQTVCLE1BQXdELFlBQTVELEVBQTBFO0FBQ3hFLGFBQUtwRSxNQUFMLENBQVkseUNBQVosRUFBdURxRSxNQUF2RCxDQUE4REQsc0JBQTlELEVBQXNGLEtBQUtwRSxNQUFMLENBQVksaUJBQVosRUFBK0JtRSxxQkFBL0IsQ0FBdEY7QUFDRDtBQUNGOzs7Ozs7QUFLSHRFLDZCQUE2QjBFLE9BQTdCLEdBQXVDLENBQ3JDLGdDQURxQztBQUVyQztBQUNBO0FBQ0EsdUJBSnFDLEVBS3JDLFFBTHFDLENBQXZDOztrQkFRZTFFLDRCO1FBRWJELDhCLEdBQUFBLDhCIiwiZmlsZSI6IjcxLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgRFJBR19EUk9QX0NPTkZJR19QUk9YWV9TRVJWSUNFID0gJ2RkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UnO1xuXG5jbGFzcyBkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNle1xuICBcbiAgY29uc3RydWN0b3IoXG4gICAgRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLCAgXG4gICAgLy8gY29udHJvbGxlck1vZGFsUHJveHksIFxuICAgIC8vIGRyYWdEcm9wQ29uZmlnLCBcbiAgICBlYXN5Rm9ybURyYWdXYXlDb25maWcsXG4gICAgJHBhcnNlKXtcbiAgICB0aGlzLkVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscyA9IEVhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscztcbiAgICAvLyB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5ICAgICAgICAgICA9IGNvbnRyb2xsZXJNb2RhbFByb3h5O1xuICAgIC8vIHRoaXMuZHJhZ0Ryb3BDb25maWcgICAgICAgICAgICAgICAgID0gZHJhZ0Ryb3BDb25maWc7XG4gICAgdGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcgICAgICAgICAgPSBlYXN5Rm9ybURyYWdXYXlDb25maWc7XG4gICAgdGhpcy4kcGFyc2UgICAgICAgICAgICAgICAgICAgICAgICAgPSAkcGFyc2U7XG4gICAgdGhpcy5pbml0KCk7ICBcbiAgfVxuICBcbiAgaW5pdCgpe1xuICAgIFxuICB9XG5cbiAgcmVmcmVzaEFsbENvbmZpZ3VyYXRpb25Gcm9tRHJhZ0FuZERyb3BNb2RlbChjb25maWdNb2RlbCwgZGRNb2RlbCl7XG4gICAgLyoqXG4gICAgICogVE9ETyA6IHByZXZlbnQgcmVzZXQgYWxyZWFkeSBzZXQgcHJvcHNcbiAgICAgKiBcbiAgICAgKiBwcmV2aW91c0NvbmZpZ3VyYXRpb25Nb2RlbCA9IGEgYmFja3VwIG9mIGNvbmZpZ3VyYXRpb24gbW9kZWwgJ2NvbmZpZ01vZGVsICdiZWZvcmUgcmVzZXR0aW5nIGl0XG4gICAgICogLT4gZHJhZ0Ryb3AgbW9kZWwgY29udGFpbnMgdW5pcXVlIGtleXMgb2YgYWxyZWFkeSBleGlzdGluZyBjb250cm9scyA6IHRoZXNlIGNvbnRyb2xzIG11c3Qgbm90IGJlIHJlc2V0IC8gb3ZlcndyaXR0ZW4gIFxuICAgICAqL1xuICAgIC8vIGxldCBwcmV2aW91c0NvbmZpZ3VyYXRpb25Nb2RlbCA9IGFuZ3VsYXIuY29weShjb25maWdNb2RlbCk7IFxuICAgIGNvbmZpZ01vZGVsLmxpbmVzID0gW107XG4gICAgLy8gaXRlcmF0ZXMgbGluZSBjb25maWcgbW9kZWxcbiAgICBhbmd1bGFyLmZvckVhY2goZGRNb2RlbFsxXSwgKGxpbmVWYWx1ZSwga2V5VmFsdWUpPT57XG4gICAgICAvLyBhZGQgZW1wdHkgbGluZSAxc3QgLSBpZiBsaW5lIGlzIGVtcHR5IC0+IGl0IHdpbGwgYmUgZW5vdWdoIFxuICAgICAgY29uZmlnTW9kZWwubGluZXMucHVzaChhbmd1bGFyLmNvcHkodGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0RWFzeUZvcm1FbXB0eUNvbmZpZ3VyYXRpb25MaW5lTW9kZWwoKSkpO1xuICAgICAgLy8gdXBkYXRlIGxpbmUgdmFsdWUgZmllbGRcbiAgICAgIHRoaXMuYXBwbHlUaGlzTGluZShrZXlWYWx1ZSArIDEsIGtleVZhbHVlLCBjb25maWdNb2RlbCk7XG4gICAgICAvLyBpdGVyYXRlIHRocm91Z2ggY29sdW1ucyBhbmQgYWRkIHRoZW0gaWYgY29udHJvbCBleGlzdHNcdFxuICAgICAgYW5ndWxhci5mb3JFYWNoKGxpbmVWYWx1ZSwgKGNvbFZhbHVlLCBjb2xJbmRleCk9PntcbiAgICAgICAgLy8gcHVzaCBhbiBlbXB0eSBjb250cm9sIG1vZGVsIGJ1dCByZWxhdGl2ZSB0byBkcmFkcm9wIDogbW9kZWwgY29udHJvbCB0eXBlIC0gKGlmIGRhdGVwaWNrZXIgc28gYWRkaXRpb25uYWwgcHJvcGVydGllcyBhcmUgYWRkZWQpIFx0XG4gICAgICAgIGxldCBjb250cm9sVG9CaW5kID0ge1xuICAgICAgICAgIGNvbnRyb2wgOiBhbmd1bGFyLmNvcHkodGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0Rm9ybWx5Q29udHJvbFRlbXBsYXRlRm9yTmNvbHVtbkxpbmUobGluZVZhbHVlLmxlbmd0aCwgdGhpcy5nZXRGb3JtbHlEZXRhaWxlZENvbnRyb2xNb2RlbEZyb21EcmFnRHJvcE9iamVjdChsaW5lVmFsdWVbY29sSW5kZXhdKS5mb3JtbHlUeXBlKSlcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IGZvcm1seURldGFpbGVkQ29udHJvbE1vZGVsID0gdGhpcy5nZXRGb3JtbHlEZXRhaWxlZENvbnRyb2xNb2RlbEZyb21EcmFnRHJvcE9iamVjdChsaW5lVmFsdWVbY29sSW5kZXhdKTtcbiAgICAgICAgLy8gY29udHJvbHMgYWxyZWFkeXMgZXhpc3RlZCBzbyBkbyBub3QgcmVzZXQgaXQgLSBjb250cm9sIHRvIGJpbmQgaXMgdGhlIHByZXZpb3VzIG9uZVx0XHRcbiAgICAgICAgaWYodHlwZW9mIGNvbFZhbHVlLmtleSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgIC8vY29uc29sZS53YXJuKCdkZWJ1ZyBkcmFnZHJvcE1vZGVsIHNob3cgdGhpcyBjb250cm9sIGtleSA6ICcgKyBjb2xWYWx1ZS5rZXkpO1xuICAgICAgICAgIGNvbnRyb2xUb0JpbmQuY29udHJvbCA9IGFuZ3VsYXIuY29weShjb2xWYWx1ZS5jb25maWdNb2RlbENvbnRyb2wpO1xuICAgICAgICAgIC8vdXBkYXRlIGNzc0NsYXNzIGRlcGVuZGluZyBuZXcgcG9zaXRpb246XG4gICAgICAgICAgdmFyIG5ld0NsYXNzTmFtZSA9IHRoaXMuRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLmdldEZvcm1seUNvbnRyb2xUZW1wbGF0ZUZvck5jb2x1bW5MaW5lKGxpbmVWYWx1ZS5sZW5ndGgsIHRoaXMuZ2V0Rm9ybWx5RGV0YWlsZWRDb250cm9sTW9kZWxGcm9tRHJhZ0Ryb3BPYmplY3QobGluZVZhbHVlW2NvbEluZGV4XSkuZm9ybWx5VHlwZSk7XG4gICAgICAgICAgY29udHJvbFRvQmluZC5jb250cm9sLmNsYXNzTmFtZSA9IG5ld0NsYXNzTmFtZS5jbGFzc05hbWU7XG4gICAgICAgICAgLy90ZXN0IGlmIGhlYWRlciBuZWUgdGhpcyBvbmVcbiAgICAgICAgICBjb250cm9sVG9CaW5kLmNvbnRyb2wuY3NzQ2xhc3MgPSBuZXdDbGFzc05hbWUuY2xhc3NOYW1lO1xuICAgICAgICAgIC8vIGdldCBjb250cm9sIGRldGFpbHMgZm9yIHRoaXMga2V5IGluIGJhY2t1cCA6IHByZXZpb3VzQ29uZmlndXJhdGlvbk1vZGVsXG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAvLyBjb250cm9scyBkaWQgbm90IGV4aXN0cyBiZWZvcmUgOiBjb250cm9sIHRvIGJpbmQgaXMgYSBuZXcgb25lXG4gICAgICAgICAgICAvLyBiaW5kIGRyYWdkcm9wIGNvbnRyb2wgcHJvcGVydGllcyB0byBjb25maWd1cmF0aW9uIG1vZGVsIHRocm91Z2ggY29udHJvbFRvQmluZCB2YXJcbiAgICAgICAgICAgIHRoaXMuYmluZENvbmZpZ0N0cmxNb2RlbEZyb21Gb3JtbHlEZXRhaWxlZEN0cmxNb2RlbChmb3JtbHlEZXRhaWxlZENvbnRyb2xNb2RlbCwgY29udHJvbFRvQmluZCwgY29uZmlnTW9kZWwpO1xuICAgICAgICAgIH1cdFxuICAgICAgICAgIC8vIGFwcGx5IGNvbnRyb2xUb0JpbmQgdmFyIHRvIGNvbmZpZ3VyYXRpb24gbW9kZWwgY29udHJvbFxuICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnTW9kZWwubGluZXNba2V5VmFsdWVdLmNvbHVtbnNbY29sSW5kZXhdID09PSAndW5kZWZpbmVkJykgY29uZmlnTW9kZWwubGluZXNba2V5VmFsdWVdLmNvbHVtbnMucHVzaChhbmd1bGFyLmNvcHkodGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0RWFzeUZvcm1Db25maWd1cmF0aW9uRW1wdHlDb250cm9sTW9kZWwoKSkpOyBcbiAgICAgICAgICBjb25maWdNb2RlbC5saW5lc1trZXlWYWx1ZV0uY29sdW1uc1tjb2xJbmRleF0uY29udHJvbCBcdD0gYW5ndWxhci5jb3B5KGNvbnRyb2xUb0JpbmQuY29udHJvbCk7XG4gICAgICAgICAgY29uZmlnTW9kZWwubGluZXNba2V5VmFsdWVdLmNvbHVtbnNbY29sSW5kZXhdLm51bUNvbHVtbiA9IGNvbEluZGV4ICsgMTtcbiAgICAgICAgICBjb25maWdNb2RlbC5saW5lc1trZXlWYWx1ZV0uY29sdW1uc1tjb2xJbmRleF0uZXhpc3QgXHRcdD0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb25maWdNb2RlbDtcbiAgfSBcbiAgXG4gICBcbiAgcmVmcmVzaENvbnRyb2xzS2V5cyhjb25maWdNb2RlbCwgZHJhZ0Ryb3BNb2RlbCl7XHRcdFx0XHRcbiAgICBhbmd1bGFyLmZvckVhY2goY29uZmlnTW9kZWwubGluZXMsIChhQ29uZmlnTGluZSwgYUNvbmZpZ0xpbmVJbmRleCk9PntcdFx0XHRcdFx0XHRcbiAgICAgICAgYW5ndWxhci5mb3JFYWNoKGFDb25maWdMaW5lLmNvbHVtbnMsIChhQ29uZmlnQ29udHJvbCwgYUNvbmZpZ0NvbnRyb2xJbmRleCk9PntcbiAgICAgICAgICAvL2lmIGxhc3QgY29udHJvbCByZW1vdmVkIGZyb20gbGluZSAtIGFuZCBkcmFnRHJvcCBtb2RlbCBkaWQgbm90IGFscmVhZHkgcmVtb3ZlZCB0aGlzIGxpbmVcbiAgICAgICAgICBpZih0eXBlb2YgZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgaWYoZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XS5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XVthQ29uZmlnQ29udHJvbEluZGV4XS5rZXkgPSBhQ29uZmlnQ29udHJvbC5jb250cm9sLmtleTtcbiAgICAgICAgICAgICAgLy9uZWVkIHRvIHNhdmUgYWxsIGluIGRyYWdkcm9wTW9kZWwgYXMgaXQgaXMgYSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgLy9jb25maWdNb2RlbCBzdGlsbCBuZWVkZWQgXG4gICAgICAgICAgICAgIC8vIC0+IHRvIGtlZXAgY29oZXJlbmNlIChzYW1lIGJhY2sgbW9kZWwpIGJldHdlZW4gYWxsIHZlcnNpb24gb2YgZWFzeUZvcm0gR2VuZXJhdG9yXG4gICAgICAgICAgICAgIC8vIC0+IGlzIHRoZSBiYWNrIG1vZGVsIChjYW4gYmUgc2F2ZWQgdG8gZGF0YUJhc2UpXG4gICAgICAgICAgICAgIGRyYWdEcm9wTW9kZWxbMV1bYUNvbmZpZ0xpbmVJbmRleF1bYUNvbmZpZ0NvbnRyb2xJbmRleF0uY29uZmlnTW9kZWxDb250cm9sID0gYW5ndWxhci5jb3B5KGFDb25maWdDb250cm9sLmNvbnRyb2wpO1x0XHRcdFx0XHRcdFx0XHRcdFx0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgICAgIFxuICB9XG5cblxuICAvKipcbiAgICogZHJhZyBkcm9wIG1vZGVsXG4gICAqIC0+IHdpbGwgYmUgdXNlZCB0byBiaW5kIGNvbmZpZ3VyYXRpb24gbW9kZWxcbiAgICogXHRvZiBubyBrZXkgc2F2ZWQsIGNvbmZpZ3VyYXRpb24gbW9kZWwgY29udHJvbHMgd291bGQgYmUgcmVzZXQgZWFjaCBkcm9wIGV2ZW50c1xuICAgKiBcbiAgICogLT4gbWF0Y2hpbmcga2V5IDogd2lsbCBwcmV2ZW50IHRvIHJlc2V0IGV4aXN0aW5nIGNvbnRyb2xcbiAgICovXG4gIGxvYWREcmFnRHJvcE1vZGVsRnJvbUNvbmZpZ3VyYXRpb25Nb2RlbChjb25maWdNb2RlbCwgZHJhZ0Ryb3BNb2RlbCl7XHRcdFx0XHRcbiAgICAvL3Jlc2V0IGRyYWdkcm9wIGZpZWxkcyBtb2RlbCBOT1QgYWxsIGRyYWdEcm9wTW9kZWwhXG4gICAgZHJhZ0Ryb3BNb2RlbFsxXSA9IFtdO1xuICAgIGFuZ3VsYXIuZm9yRWFjaChjb25maWdNb2RlbC5saW5lcywgKGFDb25maWdMaW5lLCBhQ29uZmlnTGluZUluZGV4KT0+e1xuICAgICAgLy9hZGQgbmV3IGxpbmVcbiAgICAgIGRyYWdEcm9wTW9kZWxbMV0ucHVzaChbXSk7XG4gICAgICBhbmd1bGFyLmZvckVhY2goYUNvbmZpZ0xpbmUuY29sdW1ucywgKGFDb25maWdDb250cm9sKT0+e1xuICAgICAgICAvLyBnZXQgY29udHJvbCB0eXBlIGZyb20gY29uZmlndXJhdGlvbi5jb250cm9sLnNlbGVjdGVkQ29udHJvbFxuICAgICAgICBsZXQgZHJhZ2Ryb3BDb250cm9sUmVmID0ge1xuICAgICAgICAgIGNvbnRyb2wgICA6ICdlbXB0eScsXG4gICAgICAgICAgY3NzQ2xhc3MgIDogJ2NvbC14cy0xMicsXG4gICAgICAgICAgbGFiZWwgICAgIDogJzxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj4gPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj4gPGRpdiBjbGFzcz1cIlwiPiA8L2Rpdj4gPC9kaXY+PC9kaXY+J1xuICAgICAgICB9O1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goZHJhZ0Ryb3BNb2RlbFswXSwgKGdyb3VwT2ZDdHJsUmVmKT0+e1xuICAgICAgICAgIGFuZ3VsYXIuZm9yRWFjaChncm91cE9mQ3RybFJlZiwgKGFDdHJscmVmKT0+e1xuICAgICAgICAgICAgaWYgKGFDdHJscmVmLmNvbnRyb2wgPT09IGFDb25maWdDb250cm9sLmNvbnRyb2wuc2VsZWN0ZWRDb250cm9sKSBkcmFnZHJvcENvbnRyb2xSZWYgPSBhbmd1bGFyLmNvcHkoYUN0cmxyZWYpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XS5wdXNoKGRyYWdkcm9wQ29udHJvbFJlZik7XG4gICAgICAgIC8vdXBkYXRlIGNsYXNzIGRlcGVuZGluZyBudW1iZXIgb2YgY29udHJvbCBwZXIgbGluZVxuICAgICAgICBsZXQgY3NzQ2xhc3NUb0FwcGx5ID0gdGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuZ2V0SXRlbUNzc0RlcGVuZGluZ051bWJlckl0ZW1zSW5Sb3coZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XS5sZW5ndGgpO1xuICAgICAgICBhbmd1bGFyLmZvckVhY2goZHJhZ0Ryb3BNb2RlbFsxXVthQ29uZmlnTGluZUluZGV4XSwgKGRkQ29udHJvbFRvVXBkYXRlKT0+ZGRDb250cm9sVG9VcGRhdGUuY3NzQ2xhc3MgPSBjc3NDbGFzc1RvQXBwbHkpO1xuICAgICAgfSk7XHQgICAgICAgICAgICBcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmluZm8oJ2JpbmREcmFnRHJvcE1vZGVsRnJvbUNvbmZpZ3VyYXRpb25Nb2RlbCcpO1xuICAgIC8vIGNvbnNvbGUuZGlyKFx0XG4gICAgLy8gXHRcdFx0XHRcdFx0XHR7XG4gICAgLy8gXHRcdFx0XHRcdFx0XHRcdFx0J3doZW4nIFx0XHRcdFx0XHRcdFx0OiAnc3RhcnRpbmcnLFxuICAgIC8vIFx0XHRcdFx0XHRcdFx0XHRcdCdjb25maWdNb2RlbCBpcyAnIFx0OiBhbmd1bGFyLmNvcHkoY29uZmlnTW9kZWwpLFxuICAgIC8vIFx0XHRcdFx0XHRcdFx0XHRcdCdkcmFnRHJvcE1vZGVsIGlzICcgOiBhbmd1bGFyLmNvcHkoZHJhZ0Ryb3BNb2RlbClcbiAgICAvLyBcdFx0XHRcdFx0XHRcdH1cbiAgICAvLyBcdFx0XHRcdFx0XHQpOyAgICAgXG4gIH1cblxuXG5cblxuICAvKipcbiAgICogcmV0dXJucyBhIGNvbnRyb2wgbW9kZWwgdGhhdCBpcyBtb3JlIGZvcm1seSBkZXRhaWxlZFxuICAgKiAobW9yZSBmb3JtbHkgZGV0YWlsZWQgOiBzZWUgY29udHJvbHMgcHJvcGVydHkgaW4gRWFzeUZvcm1HZW5Gb3JtbHlCaW5kaW5nTW9kZWxzLl9lYXN5Rm9ybUxpc3RDb250cm9scylcbiAgICovXG4gIGdldEZvcm1seURldGFpbGVkQ29udHJvbE1vZGVsRnJvbURyYWdEcm9wT2JqZWN0KGRyYWdEcmFwQ3RybE1vZGVsKXtcbiAgICBsZXQgY29udHJvbE1vZGVsICAgICAgICA9IHt9O1xuICAgIGxldCBsaXN0Q29udHJvbCAgICAgICAgID0gdGhpcy5FYXN5Rm9ybUdlbkZvcm1seUJpbmRpbmdNb2RlbHMuZ2V0RWFzeUZvcm1MaXN0Q29udHJvbHMoKTtcbiAgICBsZXQgY29udHJvbHNMaXN0R2V0dGVyICA9IHRoaXMuJHBhcnNlKCdjb250cm9scycpO1xuICAgIFxuICAgIGFuZ3VsYXIuZm9yRWFjaChjb250cm9sc0xpc3RHZXR0ZXIobGlzdENvbnRyb2wpLCAoY3RybExpc3RWYWx1ZSk9PntcbiAgICAgIGlmIChjdHJsTGlzdFZhbHVlLmlkID09PSBkcmFnRHJhcEN0cmxNb2RlbC5jb250cm9sKSAgY29udHJvbE1vZGVsID0gY3RybExpc3RWYWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29udHJvbE1vZGVsO1xuICB9XG4gIFxuICAvKipcbiAgICogdmFsaWQgYSBjb250cm9sIGtleSBpcyB1bmlxdWVcbiAgICpcbiAgICAqIHllcy4uLiBmdW5jdGlvbiBuYW1lIGFscmVhZHkgdG9sZCB1cyB0aGF0LCBcbiAgICAqIC0+IGl0J3MganVzdCBjb25maXJtYXRpb24gYW5kIHRvIHNlZSBpZlxuICAgICogICAgeW91IGtlZXAgZm9jdXMgd2hpbGUgcmVhZGluZyBpdCBeXlxuICAgICovXG4gdmFsaWRLZXlVbmlxdWVuZXNzKHRoaXNLZXksIGNvbmZpZ3VyYXRpb25PYmope1xuICAgIGxldCBpc1VuaXF1ZSA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IGNvbmZpZ3VyYXRpb25PYmoubGluZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGZvciAodmFyIGogPSBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2ldLmNvbHVtbnMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWd1cmF0aW9uT2JqLmxpbmVzW2ldLmNvbHVtbnNbal0uY29udHJvbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBpZiAoY29uZmlndXJhdGlvbk9iai5saW5lc1tpXS5jb2x1bW5zW2pdLmNvbnRyb2wua2V5ID09PSB0aGlzS2V5KSB7XG4gICAgICAgICAgICBpc1VuaXF1ZSA9IGZhbHNlO1xuICAgICAgICAgIH1cdFx0XHQgICAgXHRcdFxuICAgICAgICB9XG4gICAgICB9IFxuICAgIH1cbiAgICByZXR1cm4gaXNVbmlxdWU7ICBcbiAgfSAgXG4gIFxuICBcbiAgY3JlYXRlVW5pcXVlS2V5KGJhc2VLZXlWYWx1ZSwgY29uZmlndXJhdGlvbk9iail7XG4gICAgLy8gdW5pcXVlIGtleSAoc2V0IG9ubHkgZmlyc3QgdGltZSkgaW4gdGhpcyBtb2RlbCBpcyBmb3JtbHkgY29udHJvbCB0eXBlICsgRGF0ZS5ub3coKTsgXG4gICAgbGV0IG5ld0tleSA9IGJhc2VLZXlWYWx1ZSArICctJyArIERhdGUubm93KCk7XG4gICAgaWYgKHRoaXMudmFsaWRLZXlVbmlxdWVuZXNzKG5ld0tleSwgY29uZmlndXJhdGlvbk9iaikgPT09IHRydWUpe1xuICAgICAgcmV0dXJuIG5ld0tleTtcbiAgICB9ZWxzZXtcbiAgICAgIG5ld0tleSA9IGJhc2VLZXlWYWx1ZSArICctJyArIERhdGUubm93KCk7XG4gICAgICBpZiAodGhpcy52YWxpZEtleVVuaXF1ZW5lc3MobmV3S2V5LCBjb25maWd1cmF0aW9uT2JqKSA9PT0gdHJ1ZSl7XG4gICAgICAgIHJldHVybiBuZXdLZXk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgbmV3S2V5ID0gYmFzZUtleVZhbHVlICsgJy0nICsgRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIG5ld0tleTtcbiAgICAgIH1cbiAgICB9IFxuICB9ICBcbiBcblxuICBhcHBseVRoaXNMaW5lKGxpbmV2YWx1ZSwgbGluZUluZGV4LCBjb25maWdNb2RlbCl7XG4gICAgYW5ndWxhci5mb3JFYWNoKGNvbmZpZ01vZGVsLmxpbmVzLCAoYUxpbmVWYWx1ZSwgYUxpbmVLZXkpPT57XG4gICAgICBpZiAoYUxpbmVLZXkgPT09IGxpbmVJbmRleCkgYUxpbmVWYWx1ZS5saW5lID0gbGluZXZhbHVlO1xuICAgIH0pO1xuICB9ICBcbiAgXG5cbiAgLyoqXG4gICAqIGJpbmQgZm9ybWx5IGRldGFpbGVkIG1vZGVsIHRvIGNvbmZpZ3VyYXRpb24gY29udHJvbCBtb2RlbFxuICAgKi9cbiAgYmluZENvbmZpZ0N0cmxNb2RlbEZyb21Gb3JtbHlEZXRhaWxlZEN0cmxNb2RlbChmb3JtbHlEZXRhaWxDdHJsTW9kZWwsIGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIGNvbmZpZ01vZGVsKXtcbiAgICAvKipcbiAgICAgICogVE9ETyA6cHJvcGVydGllcyBzaG91bGQgYmUgc2VydmVkIGJ5IHByb3ZpZGVyIFxuICAgICAgKiBtb3JlIGNvbmZpZ3VyYWJsZSB3aXRob3V0IHBhaW5cbiAgICAgICovXG4gICAgLy9zZXQgc2VsZWN0ZWQgY29udHJvbCA6XG4gICAgdGhpcy4kcGFyc2UoJ2NvbnRyb2wuc2VsZWN0ZWRDb250cm9sJykuYXNzaWduKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIHRoaXMuJHBhcnNlKCdzZWxlY3RlZENvbnRyb2wnKShmb3JtbHlEZXRhaWxDdHJsTW9kZWwpKTtcbiAgICAvL3NldCB0eXBlIDpcdFxuICAgIHRoaXMuJHBhcnNlKCdjb250cm9sLnR5cGUnKS5hc3NpZ24oY29uZmlndXJhdGlvbkN0cmxNb2RlbCwgdGhpcy4kcGFyc2UoJ2Zvcm1seVR5cGUnKShmb3JtbHlEZXRhaWxDdHJsTW9kZWwpKTtcbiAgICAvL3NldCBrZXkgOlx0XG4gICAgdGhpcy4kcGFyc2UoJ2NvbnRyb2wua2V5JykuYXNzaWduKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIHRoaXMuY3JlYXRlVW5pcXVlS2V5KHRoaXMuJHBhcnNlKCdjb250cm9sLnR5cGUnKShjb25maWd1cmF0aW9uQ3RybE1vZGVsKSwgY29uZmlnTW9kZWwpKTtcbiAgICAvL3NldCBzdWJ0eXBlIDpcdFxuICAgIHRoaXMuJHBhcnNlKCdjb250cm9sLnN1YnR5cGUnKS5hc3NpZ24oY29uZmlndXJhdGlvbkN0cmxNb2RlbCwgdGhpcy4kcGFyc2UoJ2Zvcm1seVN1YnR5cGUnKShmb3JtbHlEZXRhaWxDdHJsTW9kZWwpKTtcbiAgICAvL3NldCB0ZW1wbGF0ZU9wdGlvbnMubGFiZWwgOlx0XG4gICAgdGhpcy4kcGFyc2UoJ2NvbnRyb2wudGVtcGxhdGVPcHRpb25zLmxhYmVsJykuYXNzaWduKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIHRoaXMuJHBhcnNlKCdmb3JtbHlMYWJlbCcpKGZvcm1seURldGFpbEN0cmxNb2RlbCkpO1x0XHRcdFx0XHRcbiAgICAvL3NldCB0ZW1wbGF0ZU9wdGlvbnMucmVxdWlyZWQgOlx0XG4gICAgdGhpcy4kcGFyc2UoJ2NvbnRyb2wudGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkJykuYXNzaWduKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIHRoaXMuJHBhcnNlKCdmb3JtbHlSZXF1aXJlZCcpKGZvcm1seURldGFpbEN0cmxNb2RlbCkpO1x0XG4gICAgLy9zZXQgdGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkIDpcdFxuICAgIHRoaXMuJHBhcnNlKCdjb250cm9sLnRlbXBsYXRlT3B0aW9ucy5kZXNjcmlwdGlvbicpLmFzc2lnbihjb25maWd1cmF0aW9uQ3RybE1vZGVsLCB0aGlzLiRwYXJzZSgnZm9ybWx5RGVzY3JpcHRpb24nKShmb3JtbHlEZXRhaWxDdHJsTW9kZWwpKTtcdFxuICAgIC8vc2V0IHRlbXBsYXRlT3B0aW9ucy5yZXF1aXJlZCA6XHRcbiAgICB0aGlzLiRwYXJzZSgnY29udHJvbC50ZW1wbGF0ZU9wdGlvbnMucGxhY2Vob2xkZXInKS5hc3NpZ24oY29uZmlndXJhdGlvbkN0cmxNb2RlbCwgdGhpcy4kcGFyc2UoJ2Zvcm1seVBsYWNlaG9sZGVyJykoZm9ybWx5RGV0YWlsQ3RybE1vZGVsKSk7XG4gICAgLy9zZXQgdGVtcGxhdGVPcHRpb25zLnJlcXVpcmVkIDpcdFxuICAgIHRoaXMuJHBhcnNlKCdjb250cm9sLnRlbXBsYXRlT3B0aW9ucy5vcHRpb25zJykuYXNzaWduKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwsIHRoaXMuJHBhcnNlKCdmb3JtbHlPcHRpb25zJykoZm9ybWx5RGV0YWlsQ3RybE1vZGVsKSk7XG5cbiAgICBpZiAodGhpcy4kcGFyc2UoJ2NvbnRyb2wudHlwZScpKGNvbmZpZ3VyYXRpb25DdHJsTW9kZWwpID09PSAnZGF0ZXBpY2tlcicpIHtcbiAgICAgIHRoaXMuJHBhcnNlKCdjb250cm9sLnRlbXBsYXRlT3B0aW9ucy5kYXRlcGlja2VyUG9wdXAnKS5hc3NpZ24oY29uZmlndXJhdGlvbkN0cmxNb2RlbCwgdGhpcy4kcGFyc2UoJ2RhdGVwaWNrZXJQb3B1cCcpKGZvcm1seURldGFpbEN0cmxNb2RlbCkpO1xuICAgIH0gICAgXG4gIH0gIFxuICBcbiAgXG59XG5cbmRkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UuJGluamVjdCA9IFtcbiAgJ0Vhc3lGb3JtR2VuRm9ybWx5QmluZGluZ01vZGVscycsXG4gIC8vICdjb250cm9sbGVyTW9kYWxQcm94eScsXG4gIC8vICdkcmFnRHJvcENvbmZpZycsXG4gICdlYXN5Rm9ybURyYWdXYXlDb25maWcnLFxuICAnJHBhcnNlJyAgXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlO1xuZXhwb3J0IHtcbiAgRFJBR19EUk9QX0NPTkZJR19QUk9YWV9TRVJWSUNFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25Nb2RlbFByb3h5L2VkYURyYWdEcm9wV2F5LmNvbmZpZ3VyYXRpb25Nb2RlbFByb3h5LnNlcnZpY2UuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 72 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _dragAndDropListDndlist = __webpack_require__(73);\n\nvar _dragAndDropListDndlist2 = _interopRequireDefault(_dragAndDropListDndlist);\n\nvar _dragAndDropListDndDraggable = __webpack_require__(74);\n\nvar _dragAndDropListDndDraggable2 = _interopRequireDefault(_dragAndDropListDndDraggable);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAG_DROP_LIST_MODULE = 'dndLists.module';\n\nexports.default = angular.module(DRAG_DROP_LIST_MODULE, []).directive(_dragAndDropListDndlist.DNDLIST_DIRECTIVE, _dragAndDropListDndlist2.default).directive(_dragAndDropListDndDraggable.DNDDRAGGABLE_DIRECTIVE, _dragAndDropListDndDraggable2.default).factory('dndDragTypeWorkaround', function () {\n return {};\n}).factory('dndDropEffectWorkaround', function () {\n return {};\n});//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2RyYWdBbmREcm9wTGlzdC9kcmFnQW5kRHJvcExpc3QubW9kdWxlLmpzP2NiOGUiXSwibmFtZXMiOlsiRFJBR19EUk9QX0xJU1RfTU9EVUxFIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsImZhY3RvcnkiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBSUE7Ozs7OztBQUlBLElBQU1BLHdCQUF3QixpQkFBOUI7O2tCQUVlQyxRQUNFQyxNQURGLENBQ1NGLHFCQURULEVBQ2dDLEVBRGhDLEVBRUVHLFNBRkYsOEVBR0VBLFNBSEYsNkZBSUVDLE9BSkYsQ0FJVSx1QkFKVixFQUltQyxZQUFVO0FBQUUsU0FBTyxFQUFQO0FBQVksQ0FKM0QsRUFLRUEsT0FMRixDQUtVLHlCQUxWLEVBS3FDLFlBQVU7QUFBRSxTQUFPLEVBQVA7QUFBWSxDQUw3RCxDIiwiZmlsZSI6IjcyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRuZExpc3QsIHtcbiAgRE5ETElTVF9ESVJFQ1RJVkVcbn0gICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4vZHJhZ0FuZERyb3BMaXN0LmRuZGxpc3QuZGlyZWN0aXZlJztcblxuaW1wb3J0IGRuZERyYWdnYWJsZSwge1xuICBETkREUkFHR0FCTEVfRElSRUNUSVZFXG59ICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2RyYWdBbmREcm9wTGlzdC5kbmREcmFnZ2FibGUuZGlyZWN0aXZlJztcblxuY29uc3QgRFJBR19EUk9QX0xJU1RfTU9EVUxFID0gJ2RuZExpc3RzLm1vZHVsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGFuZ3VsYXJcbiAgICAgICAgICAgICAgICAubW9kdWxlKERSQUdfRFJPUF9MSVNUX01PRFVMRSwgW10pXG4gICAgICAgICAgICAgICAgLmRpcmVjdGl2ZShETkRMSVNUX0RJUkVDVElWRSwgZG5kTGlzdClcbiAgICAgICAgICAgICAgICAuZGlyZWN0aXZlKERORERSQUdHQUJMRV9ESVJFQ1RJVkUsIGRuZERyYWdnYWJsZSlcbiAgICAgICAgICAgICAgICAuZmFjdG9yeSgnZG5kRHJhZ1R5cGVXb3JrYXJvdW5kJywgZnVuY3Rpb24oKXsgcmV0dXJuIHt9OyB9KVxuICAgICAgICAgICAgICAgIC5mYWN0b3J5KCdkbmREcm9wRWZmZWN0V29ya2Fyb3VuZCcsIGZ1bmN0aW9uKCl7IHJldHVybiB7fTsgfSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2RyYWdBbmREcm9wTGlzdC9kcmFnQW5kRHJvcExpc3QubW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 73 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar DNDLIST_DIRECTIVE = 'dndList';\n\nfunction dndList($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) {\n var directive = {\n link: linkFct\n };\n return directive;\n\n function linkFct(scope, element, attr) {\n // While an element is dragged over the list, this placeholder element is inserted\n // at the location where the element would be inserted after dropping\n var placeholder = angular.element('
  • ');\n var placeholderNode = placeholder[0];\n var listNode = element[0];\n var horizontal = attr.dndHorizontalList && scope.$eval(attr.dndHorizontalList);\n var externalSources = attr.dndExternalSources && scope.$eval(attr.dndExternalSources);\n\n /**\n * The dragover event is triggered \"every few hundred milliseconds\" while an element\n * is being dragged over our list, or over an child element.\n */\n element.on('dragover', function (event) {\n event = event.originalEvent || event;\n if (!isDropAllowed(event)) return true;\n // First of all, make sure that the placeholder is shown\n // This is especially important if the list is empty\n if (placeholderNode.parentNode != listNode) {\n element.append(placeholder);\n }\n if (event.target !== listNode) {\n // Try to find the node direct directly below the list node.\n var listItemNode = event.target;\n while (listItemNode.parentNode !== listNode && listItemNode.parentNode) {\n listItemNode = listItemNode.parentNode;\n }\n if (listItemNode.parentNode === listNode && listItemNode !== placeholderNode) {\n // If the mouse pointer is in the upper half of the child element,\n // we place it before the child element, otherwise below it.\n if (isMouseInFirstHalf(event, listItemNode)) {\n listNode.insertBefore(placeholderNode, listItemNode);\n } else {\n listNode.insertBefore(placeholderNode, listItemNode.nextSibling);\n }\n }\n } else {\n // This branch is reached when we are dragging directly over the list element.\n // Usually we wouldn't need to do anything here, but the IE does not fire it's\n // events for the child element, only for the list directly. Therefore we repeat\n // the positioning algorithm for IE here.\n if (isMouseInFirstHalf(event, placeholderNode, true)) {\n // Check if we should move the placeholder element one spot towards the top.\n // Note that display none elements will have offsetTop and offsetHeight set to\n // zero, therefore we need a special check for them.\n while (placeholderNode.previousElementSibling && (isMouseInFirstHalf(event, placeholderNode.previousElementSibling, true) || placeholderNode.previousElementSibling.offsetHeight === 0)) {\n listNode.insertBefore(placeholderNode, placeholderNode.previousElementSibling);\n }\n } else {\n // Check if we should move the placeholder element one spot towards the bottom\n while (placeholderNode.nextElementSibling && !isMouseInFirstHalf(event, placeholderNode.nextElementSibling, true)) {\n listNode.insertBefore(placeholderNode, placeholderNode.nextElementSibling.nextElementSibling);\n }\n }\n }\n\n // At this point we invoke the callback, which still can disallow the drop.\n // We can't do this earlier because we want to pass the index of the placeholder.\n if (attr.dndDragover && !invokeCallback(attr.dndDragover, event)) {\n return stopDragover();\n }\n element.addClass('dndDragover');\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n\n /**\n * When the element is dropped, we use the position of the placeholder element as the\n * position where we insert the transferred data. This assumes that the list has exactly\n * one child element per array element.\n */\n element.on('drop', function (event) {\n event = event.originalEvent || event;\n if (!isDropAllowed(event)) return true;\n // The default behavior in Firefox is to interpret the dropped element as URL and\n // forward to it. We want to prevent that even if our drop is aborted.\n event.preventDefault();\n // Unserialize the data that was serialized in dragstart. According to the HTML5 specs,\n // the \"Text\" drag type will be converted to text/plain, but IE does not do that.\n var data = event.dataTransfer.getData('Text') || event.dataTransfer.getData('text/plain');\n var transferredObject;\n try {\n transferredObject = JSON.parse(data);\n } catch (e) {\n return stopDragover();\n }\n // Invoke the callback, which can transform the transferredObject and even abort the drop.\n if (attr.dndDrop) {\n transferredObject = invokeCallback(attr.dndDrop, event, transferredObject);\n if (!transferredObject) {\n return stopDragover();\n }\n }\n // Retrieve the JSON array and insert the transferred object into it.\n var targetArray = scope.$eval(attr.dndList);\n scope.$apply(function () {\n targetArray.splice(getPlaceholderIndex(), 0, transferredObject);\n });\n // In Chrome on Windows the dropEffect will always be none...\n // We have to determine the actual effect manually from the allowed effects\n if (event.dataTransfer.dropEffect === 'none') {\n if (event.dataTransfer.effectAllowed === 'copy' || event.dataTransfer.effectAllowed === 'move') {\n dndDropEffectWorkaround.dropEffect = event.dataTransfer.effectAllowed;\n } else {\n dndDropEffectWorkaround.dropEffect = event.ctrlKey ? 'copy' : 'move';\n }\n } else {\n dndDropEffectWorkaround.dropEffect = event.dataTransfer.dropEffect;\n }\n // Clean up\n stopDragover();\n event.stopPropagation();\n return false;\n });\n\n /**\n * We have to remove the placeholder when the element is no longer dragged over our list. The\n * problem is that the dragleave event is not only fired when the element leaves our list,\n * but also when it leaves a child element -- so practically it's fired all the time. As a\n * workaround we wait a few milliseconds and then check if the dndDragover class was added\n * again. If it is there, dragover must have been called in the meantime, i.e. the element\n * is still dragging over the list. If you know a better way of doing this, please tell me!\n */\n element.on('dragleave', function (event) {\n event = event.originalEvent || event;\n\n element.removeClass('dndDragover');\n $timeout(function () {\n if (!element.hasClass('dndDragover')) {\n placeholder.remove();\n }\n }, 100);\n });\n\n /**\n * Checks whether the mouse pointer is in the first half of the given target element.\n *\n * In Chrome we can just use offsetY, but in Firefox we have to use layerY, which only\n * works if the child element has position relative. In IE the events are only triggered\n * on the listNode instead of the listNodeItem, therefore the mouse positions are\n * relative to the parent element of targetNode.\n */\n function isMouseInFirstHalf(event, targetNode, relativeToParent) {\n var mousePointer = horizontal ? event.offsetX || event.layerX : event.offsetY || event.layerY;\n var targetSize = horizontal ? targetNode.offsetWidth : targetNode.offsetHeight;\n var targetPosition = horizontal ? targetNode.offsetLeft : targetNode.offsetTop;\n targetPosition = relativeToParent ? targetPosition : 0;\n return mousePointer < targetPosition + targetSize / 2;\n }\n\n /**\n * We use the position of the placeholder node to determine at which position of the array the\n * object needs to be inserted\n */\n function getPlaceholderIndex() {\n return Array.prototype.indexOf.call(listNode.children, placeholderNode);\n }\n\n /**\n * Checks various conditions that must be fulfilled for a drop to be allowed\n */\n function isDropAllowed(event) {\n // Disallow drop from external source unless it's allowed explicitly.\n if (!dndDragTypeWorkaround.isDragging && !externalSources) return false;\n // Check mimetype. Usually we would use a custom drag type instead of Text, but IE doesn't\n // support that.\n if (!hasTextMimetype(event.dataTransfer.types)) return false;\n // Now check the dnd-allowed-types against the type of the incoming element. For drops from\n // external sources we don't know the type, so it will need to be checked via dnd-drop.\n if (attr.dndAllowedTypes && dndDragTypeWorkaround.isDragging) {\n var allowed = scope.$eval(attr.dndAllowedTypes);\n if (angular.isArray(allowed) && allowed.indexOf(dndDragTypeWorkaround.dragType) === -1) {\n return false;\n }\n }\n // Check whether droping is disabled completely\n if (attr.dndDisableIf && scope.$eval(attr.dndDisableIf)) return false;\n return true;\n }\n\n /**\n * Small helper function that cleans up if we aborted a drop.\n */\n function stopDragover() {\n placeholder.remove();\n element.removeClass('dndDragover');\n return true;\n }\n\n /**\n * Invokes a callback with some interesting parameters and returns the callbacks return value.\n */\n function invokeCallback(expression, event, item) {\n return $parse(expression)(scope, {\n event: event,\n index: getPlaceholderIndex(),\n item: item || undefined,\n external: !dndDragTypeWorkaround.isDragging,\n type: dndDragTypeWorkaround.isDragging ? dndDragTypeWorkaround.dragType : undefined\n });\n }\n\n /**\n * Check if the dataTransfer object contains a drag type that we can handle. In old versions\n * of IE the types collection will not even be there, so we just assume a drop is possible.\n */\n function hasTextMimetype(types) {\n if (!types) return true;\n for (var i = 0; i < types.length; i++) {\n if (types[i] === 'Text' || types[i] === 'text/plain') return true;\n }\n return false;\n }\n }\n}\n\nvar TO_INJECT = ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround'];\n\ndndList.$inject = TO_INJECT;\n\nexports.default = dndList;\nexports.DNDLIST_DIRECTIVE = DNDLIST_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2RyYWdBbmREcm9wTGlzdC9kcmFnQW5kRHJvcExpc3QuZG5kbGlzdC5kaXJlY3RpdmUuanM/YjQyZiJdLCJuYW1lcyI6WyJETkRMSVNUX0RJUkVDVElWRSIsImRuZExpc3QiLCIkcGFyc2UiLCIkdGltZW91dCIsImRuZERyb3BFZmZlY3RXb3JrYXJvdW5kIiwiZG5kRHJhZ1R5cGVXb3JrYXJvdW5kIiwiZGlyZWN0aXZlIiwibGluayIsImxpbmtGY3QiLCJzY29wZSIsImVsZW1lbnQiLCJhdHRyIiwicGxhY2Vob2xkZXIiLCJhbmd1bGFyIiwicGxhY2Vob2xkZXJOb2RlIiwibGlzdE5vZGUiLCJob3Jpem9udGFsIiwiZG5kSG9yaXpvbnRhbExpc3QiLCIkZXZhbCIsImV4dGVybmFsU291cmNlcyIsImRuZEV4dGVybmFsU291cmNlcyIsIm9uIiwiZXZlbnQiLCJvcmlnaW5hbEV2ZW50IiwiaXNEcm9wQWxsb3dlZCIsInBhcmVudE5vZGUiLCJhcHBlbmQiLCJ0YXJnZXQiLCJsaXN0SXRlbU5vZGUiLCJpc01vdXNlSW5GaXJzdEhhbGYiLCJpbnNlcnRCZWZvcmUiLCJuZXh0U2libGluZyIsInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCJvZmZzZXRIZWlnaHQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJkbmREcmFnb3ZlciIsImludm9rZUNhbGxiYWNrIiwic3RvcERyYWdvdmVyIiwiYWRkQ2xhc3MiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImRhdGEiLCJkYXRhVHJhbnNmZXIiLCJnZXREYXRhIiwidHJhbnNmZXJyZWRPYmplY3QiLCJKU09OIiwicGFyc2UiLCJlIiwiZG5kRHJvcCIsInRhcmdldEFycmF5IiwiJGFwcGx5Iiwic3BsaWNlIiwiZ2V0UGxhY2Vob2xkZXJJbmRleCIsImRyb3BFZmZlY3QiLCJlZmZlY3RBbGxvd2VkIiwiY3RybEtleSIsInJlbW92ZUNsYXNzIiwiaGFzQ2xhc3MiLCJyZW1vdmUiLCJ0YXJnZXROb2RlIiwicmVsYXRpdmVUb1BhcmVudCIsIm1vdXNlUG9pbnRlciIsIm9mZnNldFgiLCJsYXllclgiLCJvZmZzZXRZIiwibGF5ZXJZIiwidGFyZ2V0U2l6ZSIsIm9mZnNldFdpZHRoIiwidGFyZ2V0UG9zaXRpb24iLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJpbmRleE9mIiwiY2FsbCIsImNoaWxkcmVuIiwiaXNEcmFnZ2luZyIsImhhc1RleHRNaW1ldHlwZSIsInR5cGVzIiwiZG5kQWxsb3dlZFR5cGVzIiwiYWxsb3dlZCIsImlzQXJyYXkiLCJkcmFnVHlwZSIsImRuZERpc2FibGVJZiIsImV4cHJlc3Npb24iLCJpdGVtIiwiaW5kZXgiLCJ1bmRlZmluZWQiLCJleHRlcm5hbCIsInR5cGUiLCJpIiwibGVuZ3RoIiwiVE9fSU5KRUNUIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFNQSxvQkFBb0IsU0FBMUI7O0FBRUEsU0FBU0MsT0FBVCxDQUFpQkMsTUFBakIsRUFBeUJDLFFBQXpCLEVBQW1DQyx1QkFBbkMsRUFBNERDLHFCQUE1RCxFQUFtRjtBQUNqRixNQUFJQyxZQUFZO0FBQ2RDLFVBQU9DO0FBRE8sR0FBaEI7QUFHQSxTQUFPRixTQUFQOztBQUVBLFdBQVNFLE9BQVQsQ0FBaUJDLEtBQWpCLEVBQXdCQyxPQUF4QixFQUFpQ0MsSUFBakMsRUFBdUM7QUFDckM7QUFDQTtBQUNBLFFBQUlDLGNBQWtCQyxRQUFRSCxPQUFSLENBQWdCLGtDQUFoQixDQUF0QjtBQUNBLFFBQUlJLGtCQUFrQkYsWUFBWSxDQUFaLENBQXRCO0FBQ0EsUUFBSUcsV0FBa0JMLFFBQVEsQ0FBUixDQUF0QjtBQUNBLFFBQUlNLGFBQWtCTCxLQUFLTSxpQkFBTCxJQUEwQlIsTUFBTVMsS0FBTixDQUFZUCxLQUFLTSxpQkFBakIsQ0FBaEQ7QUFDQSxRQUFJRSxrQkFBa0JSLEtBQUtTLGtCQUFM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QU4sTUFBYSxZQUF4QyxFQUFzRCxPQUFPLElBQVA7QUFDdkQ7QUFDRCxhQUFPLEtBQVA7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsSUFBTUUsWUFBWSxDQUNoQixRQURnQixFQUVoQixVQUZnQixFQUdoQix5QkFIZ0IsRUFJaEIsdUJBSmdCLENBQWxCOztBQU9BM0YsUUFBUTRGLE9BQVIsR0FBa0JELFNBQWxCOztrQkFFZTNGLE87UUFHYkQsaUIsR0FBQUEsaUIiLCJmaWxlIjoiNzMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBETkRMSVNUX0RJUkVDVElWRSA9ICdkbmRMaXN0JztcblxuZnVuY3Rpb24gZG5kTGlzdCgkcGFyc2UsICR0aW1lb3V0LCBkbmREcm9wRWZmZWN0V29ya2Fyb3VuZCwgZG5kRHJhZ1R5cGVXb3JrYXJvdW5kKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgbGluayA6IGxpbmtGY3RcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcblxuICBmdW5jdGlvbiBsaW5rRmN0KHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgLy8gV2hpbGUgYW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgdGhlIGxpc3QsIHRoaXMgcGxhY2Vob2xkZXIgZWxlbWVudCBpcyBpbnNlcnRlZFxuICAgIC8vIGF0IHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgZWxlbWVudCB3b3VsZCBiZSBpbnNlcnRlZCBhZnRlciBkcm9wcGluZ1xuICAgIGxldCBwbGFjZWhvbGRlciAgICAgPSBhbmd1bGFyLmVsZW1lbnQoJzxsaSBjbGFzcz1cImRuZFBsYWNlaG9sZGVyXCI+PC9saT4nKTtcbiAgICBsZXQgcGxhY2Vob2xkZXJOb2RlID0gcGxhY2Vob2xkZXJbMF07XG4gICAgbGV0IGxpc3ROb2RlICAgICAgICA9IGVsZW1lbnRbMF07XG4gICAgbGV0IGhvcml6b250YWwgICAgICA9IGF0dHIuZG5kSG9yaXpvbnRhbExpc3QgJiYgc2NvcGUuJGV2YWwoYXR0ci5kbmRIb3Jpem9udGFsTGlzdCk7XG4gICAgbGV0IGV4dGVybmFsU291cmNlcyA9IGF0dHIuZG5kRXh0ZXJuYWxTb3VyY2VzICYmIHNjb3BlLiRldmFsKGF0dHIuZG5kRXh0ZXJuYWxTb3VyY2VzKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkcmFnb3ZlciBldmVudCBpcyB0cmlnZ2VyZWQgXCJldmVyeSBmZXcgaHVuZHJlZCBtaWxsaXNlY29uZHNcIiB3aGlsZSBhbiBlbGVtZW50XG4gICAgICogaXMgYmVpbmcgZHJhZ2dlZCBvdmVyIG91ciBsaXN0LCBvciBvdmVyIGFuIGNoaWxkIGVsZW1lbnQuXG4gICAgICovXG4gICAgZWxlbWVudC5vbignZHJhZ292ZXInLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbiAgICAgIGlmICghaXNEcm9wQWxsb3dlZChldmVudCkpIHJldHVybiB0cnVlO1xuICAgICAgLy8gRmlyc3Qgb2YgYWxsLCBtYWtlIHN1cmUgdGhhdCB0aGUgcGxhY2Vob2xkZXIgaXMgc2hvd25cbiAgICAgIC8vIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgaWYgdGhlIGxpc3QgaXMgZW1wdHlcbiAgICAgIGlmIChwbGFjZWhvbGRlck5vZGUucGFyZW50Tm9kZSAhPSBsaXN0Tm9kZSkge1xuICAgICAgICBlbGVtZW50LmFwcGVuZChwbGFjZWhvbGRlcik7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBsaXN0Tm9kZSkge1xuICAgICAgICAvLyBUcnkgdG8gZmluZCB0aGUgbm9kZSBkaXJlY3QgZGlyZWN0bHkgYmVsb3cgdGhlIGxpc3Qgbm9kZS5cbiAgICAgICAgdmFyIGxpc3RJdGVtTm9kZSA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgd2hpbGUgKGxpc3RJdGVtTm9kZS5wYXJlbnROb2RlICE9PSBsaXN0Tm9kZSAmJiBsaXN0SXRlbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgIGxpc3RJdGVtTm9kZSA9IGxpc3RJdGVtTm9kZS5wYXJlbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaXN0SXRlbU5vZGUucGFyZW50Tm9kZSA9PT0gbGlzdE5vZGUgJiYgbGlzdEl0ZW1Ob2RlICE9PSBwbGFjZWhvbGRlck5vZGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgbW91c2UgcG9pbnRlciBpcyBpbiB0aGUgdXBwZXIgaGFsZiBvZiB0aGUgY2hpbGQgZWxlbWVudCxcbiAgICAgICAgICAvLyB3ZSBwbGFjZSBpdCBiZWZvcmUgdGhlIGNoaWxkIGVsZW1lbnQsIG90aGVyd2lzZSBiZWxvdyBpdC5cbiAgICAgICAgICBpZiAoaXNNb3VzZUluRmlyc3RIYWxmKGV2ZW50LCBsaXN0SXRlbU5vZGUpKSB7XG4gICAgICAgICAgICBsaXN0Tm9kZS5pbnNlcnRCZWZvcmUocGxhY2Vob2xkZXJOb2RlLCBsaXN0SXRlbU5vZGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaXN0Tm9kZS5pbnNlcnRCZWZvcmUocGxhY2Vob2xkZXJOb2RlLCBsaXN0SXRlbU5vZGUubmV4dFNpYmxpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBicmFuY2ggaXMgcmVhY2hlZCB3aGVuIHdlIGFyZSBkcmFnZ2luZyBkaXJlY3RseSBvdmVyIHRoZSBsaXN0IGVsZW1lbnQuXG4gICAgICAgIC8vIFVzdWFsbHkgd2Ugd291bGRuJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLCBidXQgdGhlIElFIGRvZXMgbm90IGZpcmUgaXQnc1xuICAgICAgICAvLyBldmVudHMgZm9yIHRoZSBjaGlsZCBlbGVtZW50LCBvbmx5IGZvciB0aGUgbGlzdCBkaXJlY3RseS4gVGhlcmVmb3JlIHdlIHJlcGVhdFxuICAgICAgICAvLyB0aGUgcG9zaXRpb25pbmcgYWxnb3JpdGhtIGZvciBJRSBoZXJlLlxuICAgICAgICBpZiAoaXNNb3VzZUluRmlyc3RIYWxmKGV2ZW50LCBwbGFjZWhvbGRlck5vZGUsIHRydWUpKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIG1vdmUgdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgb25lIHNwb3QgdG93YXJkcyB0aGUgdG9wLlxuICAgICAgICAgIC8vIE5vdGUgdGhhdCBkaXNwbGF5IG5vbmUgZWxlbWVudHMgd2lsbCBoYXZlIG9mZnNldFRvcCBhbmQgb2Zmc2V0SGVpZ2h0IHNldCB0b1xuICAgICAgICAgIC8vIHplcm8sIHRoZXJlZm9yZSB3ZSBuZWVkIGEgc3BlY2lhbCBjaGVjayBmb3IgdGhlbS5cbiAgICAgICAgICB3aGlsZSAocGxhY2Vob2xkZXJOb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgJiYgKGlzTW91c2VJbkZpcnN0SGFsZihldmVudCwgcGxhY2Vob2xkZXJOb2RlLnByZXZpb3VzRWxlbWVudFNpYmxpbmcsIHRydWUpIHx8IHBsYWNlaG9sZGVyTm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLm9mZnNldEhlaWdodCA9PT0gMCkpIHtcbiAgICAgICAgICAgIGxpc3ROb2RlLmluc2VydEJlZm9yZShwbGFjZWhvbGRlck5vZGUsIHBsYWNlaG9sZGVyTm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIG1vdmUgdGhlIHBsYWNlaG9sZGVyIGVsZW1lbnQgb25lIHNwb3QgdG93YXJkcyB0aGUgYm90dG9tXG4gICAgICAgICAgd2hpbGUgKHBsYWNlaG9sZGVyTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcgJiZcbiAgICAgICAgICAgICAgICFpc01vdXNlSW5GaXJzdEhhbGYoZXZlbnQsIHBsYWNlaG9sZGVyTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcsIHRydWUpKSB7XG4gICAgICAgICAgICBsaXN0Tm9kZS5pbnNlcnRCZWZvcmUocGxhY2Vob2xkZXJOb2RlLFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyTm9kZS5uZXh0RWxlbWVudFNpYmxpbmcubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQXQgdGhpcyBwb2ludCB3ZSBpbnZva2UgdGhlIGNhbGxiYWNrLCB3aGljaCBzdGlsbCBjYW4gZGlzYWxsb3cgdGhlIGRyb3AuXG4gICAgICAvLyBXZSBjYW4ndCBkbyB0aGlzIGVhcmxpZXIgYmVjYXVzZSB3ZSB3YW50IHRvIHBhc3MgdGhlIGluZGV4IG9mIHRoZSBwbGFjZWhvbGRlci5cbiAgICAgIGlmIChhdHRyLmRuZERyYWdvdmVyICYmICFpbnZva2VDYWxsYmFjayhhdHRyLmRuZERyYWdvdmVyLCBldmVudCkpIHtcbiAgICAgICAgcmV0dXJuIHN0b3BEcmFnb3ZlcigpO1xuICAgICAgfVxuICAgICAgZWxlbWVudC5hZGRDbGFzcygnZG5kRHJhZ292ZXInKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGVsZW1lbnQgaXMgZHJvcHBlZCwgd2UgdXNlIHRoZSBwb3NpdGlvbiBvZiB0aGUgcGxhY2Vob2xkZXIgZWxlbWVudCBhcyB0aGVcbiAgICAgKiBwb3NpdGlvbiB3aGVyZSB3ZSBpbnNlcnQgdGhlIHRyYW5zZmVycmVkIGRhdGEuIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBsaXN0IGhhcyBleGFjdGx5XG4gICAgICogb25lIGNoaWxkIGVsZW1lbnQgcGVyIGFycmF5IGVsZW1lbnQuXG4gICAgICovXG4gICAgZWxlbWVudC5vbignZHJvcCcsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQgPSBldmVudC5vcmlnaW5hbEV2ZW50IHx8IGV2ZW50O1xuICAgICAgaWYgKCFpc0Ryb3BBbGxvd2VkKGV2ZW50KSkgcmV0dXJuIHRydWU7XG4gICAgICAvLyBUaGUgZGVmYXVsdCBiZWhhdmlvciBpbiBGaXJlZm94IGlzIHRvIGludGVycHJldCB0aGUgZHJvcHBlZCBlbGVtZW50IGFzIFVSTCBhbmRcbiAgICAgIC8vIGZvcndhcmQgdG8gaXQuIFdlIHdhbnQgdG8gcHJldmVudCB0aGF0IGV2ZW4gaWYgb3VyIGRyb3AgaXMgYWJvcnRlZC5cbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAvLyBVbnNlcmlhbGl6ZSB0aGUgZGF0YSB0aGF0IHdhcyBzZXJpYWxpemVkIGluIGRyYWdzdGFydC4gQWNjb3JkaW5nIHRvIHRoZSBIVE1MNSBzcGVjcyxcbiAgICAgIC8vIHRoZSBcIlRleHRcIiBkcmFnIHR5cGUgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGV4dC9wbGFpbiwgYnV0IElFIGRvZXMgbm90IGRvIHRoYXQuXG4gICAgICB2YXIgZGF0YSA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCdUZXh0JykgfHwgZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoJ3RleHQvcGxhaW4nKTtcbiAgICAgIHZhciB0cmFuc2ZlcnJlZE9iamVjdDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRyYW5zZmVycmVkT2JqZWN0ID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICByZXR1cm4gc3RvcERyYWdvdmVyKCk7XG4gICAgICB9XG4gICAgICAvLyBJbnZva2UgdGhlIGNhbGxiYWNrLCB3aGljaCBjYW4gdHJhbnNmb3JtIHRoZSB0cmFuc2ZlcnJlZE9iamVjdCBhbmQgZXZlbiBhYm9ydCB0aGUgZHJvcC5cbiAgICAgIGlmIChhdHRyLmRuZERyb3ApIHtcbiAgICAgICAgdHJhbnNmZXJyZWRPYmplY3QgPSBpbnZva2VDYWxsYmFjayhhdHRyLmRuZERyb3AsIGV2ZW50LCB0cmFuc2ZlcnJlZE9iamVjdCk7XG4gICAgICAgIGlmICghdHJhbnNmZXJyZWRPYmplY3QpIHtcbiAgICAgICAgICByZXR1cm4gc3RvcERyYWdvdmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJldHJpZXZlIHRoZSBKU09OIGFycmF5IGFuZCBpbnNlcnQgdGhlIHRyYW5zZmVycmVkIG9iamVjdCBpbnRvIGl0LlxuICAgICAgdmFyIHRhcmdldEFycmF5ID0gc2NvcGUuJGV2YWwoYXR0ci5kbmRMaXN0KTtcbiAgICAgIHNjb3BlLiRhcHBseSgoKSA9PiB7XG4gICAgICAgIHRhcmdldEFycmF5LnNwbGljZShnZXRQbGFjZWhvbGRlckluZGV4KCksIDAsIHRyYW5zZmVycmVkT2JqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLy8gSW4gQ2hyb21lIG9uIFdpbmRvd3MgdGhlIGRyb3BFZmZlY3Qgd2lsbCBhbHdheXMgYmUgbm9uZS4uLlxuICAgICAgLy8gV2UgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBlZmZlY3QgbWFudWFsbHkgZnJvbSB0aGUgYWxsb3dlZCBlZmZlY3RzXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPT09ICdub25lJykge1xuICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPT09ICdjb3B5JyB8fFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPT09ICdtb3ZlJykge1xuICAgICAgICAgIGRuZERyb3BFZmZlY3RXb3JrYXJvdW5kLmRyb3BFZmZlY3QgPSBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkbmREcm9wRWZmZWN0V29ya2Fyb3VuZC5kcm9wRWZmZWN0ID0gZXZlbnQuY3RybEtleSA/ICdjb3B5JyA6ICdtb3ZlJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG5kRHJvcEVmZmVjdFdvcmthcm91bmQuZHJvcEVmZmVjdCA9IGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0O1xuICAgICAgfVxuICAgICAgLy8gQ2xlYW4gdXBcbiAgICAgIHN0b3BEcmFnb3ZlcigpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBXZSBoYXZlIHRvIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIgd2hlbiB0aGUgZWxlbWVudCBpcyBubyBsb25nZXIgZHJhZ2dlZCBvdmVyIG91ciBsaXN0LiBUaGVcbiAgICAgKiBwcm9ibGVtIGlzIHRoYXQgdGhlIGRyYWdsZWF2ZSBldmVudCBpcyBub3Qgb25seSBmaXJlZCB3aGVuIHRoZSBlbGVtZW50IGxlYXZlcyBvdXIgbGlzdCxcbiAgICAgKiBidXQgYWxzbyB3aGVuIGl0IGxlYXZlcyBhIGNoaWxkIGVsZW1lbnQgLS0gc28gcHJhY3RpY2FsbHkgaXQncyBmaXJlZCBhbGwgdGhlIHRpbWUuIEFzIGFcbiAgICAgKiB3b3JrYXJvdW5kIHdlIHdhaXQgYSBmZXcgbWlsbGlzZWNvbmRzIGFuZCB0aGVuIGNoZWNrIGlmIHRoZSBkbmREcmFnb3ZlciBjbGFzcyB3YXMgYWRkZWRcbiAgICAgKiBhZ2Fpbi4gSWYgaXQgaXMgdGhlcmUsIGRyYWdvdmVyIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBpbiB0aGUgbWVhbnRpbWUsIGkuZS4gdGhlIGVsZW1lbnRcbiAgICAgKiBpcyBzdGlsbCBkcmFnZ2luZyBvdmVyIHRoZSBsaXN0LiBJZiB5b3Uga25vdyBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcywgcGxlYXNlIHRlbGwgbWUhXG4gICAgICovXG4gICAgZWxlbWVudC5vbignZHJhZ2xlYXZlJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG5cbiAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2RuZERyYWdvdmVyJyk7XG4gICAgICAkdGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZWxlbWVudC5oYXNDbGFzcygnZG5kRHJhZ292ZXInKSkge1xuICAgICAgICAgIHBsYWNlaG9sZGVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIG1vdXNlIHBvaW50ZXIgaXMgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIGdpdmVuIHRhcmdldCBlbGVtZW50LlxuICAgICAqXG4gICAgICogSW4gQ2hyb21lIHdlIGNhbiBqdXN0IHVzZSBvZmZzZXRZLCBidXQgaW4gRmlyZWZveCB3ZSBoYXZlIHRvIHVzZSBsYXllclksIHdoaWNoIG9ubHlcbiAgICAgKiB3b3JrcyBpZiB0aGUgY2hpbGQgZWxlbWVudCBoYXMgcG9zaXRpb24gcmVsYXRpdmUuIEluIElFIHRoZSBldmVudHMgYXJlIG9ubHkgdHJpZ2dlcmVkXG4gICAgICogb24gdGhlIGxpc3ROb2RlIGluc3RlYWQgb2YgdGhlIGxpc3ROb2RlSXRlbSwgdGhlcmVmb3JlIHRoZSBtb3VzZSBwb3NpdGlvbnMgYXJlXG4gICAgICogcmVsYXRpdmUgdG8gdGhlIHBhcmVudCBlbGVtZW50IG9mIHRhcmdldE5vZGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNNb3VzZUluRmlyc3RIYWxmKGV2ZW50LCB0YXJnZXROb2RlLCByZWxhdGl2ZVRvUGFyZW50KSB7XG4gICAgICB2YXIgbW91c2VQb2ludGVyID0gaG9yaXpvbnRhbCA/IChldmVudC5vZmZzZXRYIHx8IGV2ZW50LmxheWVyWClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGV2ZW50Lm9mZnNldFkgfHwgZXZlbnQubGF5ZXJZKTtcbiAgICAgIHZhciB0YXJnZXRTaXplID0gaG9yaXpvbnRhbCA/IHRhcmdldE5vZGUub2Zmc2V0V2lkdGggOiB0YXJnZXROb2RlLm9mZnNldEhlaWdodDtcbiAgICAgIHZhciB0YXJnZXRQb3NpdGlvbiA9IGhvcml6b250YWwgPyB0YXJnZXROb2RlLm9mZnNldExlZnQgOiB0YXJnZXROb2RlLm9mZnNldFRvcDtcbiAgICAgIHRhcmdldFBvc2l0aW9uID0gcmVsYXRpdmVUb1BhcmVudCA/IHRhcmdldFBvc2l0aW9uIDogMDtcbiAgICAgIHJldHVybiBtb3VzZVBvaW50ZXIgPCB0YXJnZXRQb3NpdGlvbiArIHRhcmdldFNpemUgLyAyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlIHVzZSB0aGUgcG9zaXRpb24gb2YgdGhlIHBsYWNlaG9sZGVyIG5vZGUgdG8gZGV0ZXJtaW5lIGF0IHdoaWNoIHBvc2l0aW9uIG9mIHRoZSBhcnJheSB0aGVcbiAgICAgKiBvYmplY3QgbmVlZHMgdG8gYmUgaW5zZXJ0ZWRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQbGFjZWhvbGRlckluZGV4KCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwobGlzdE5vZGUuY2hpbGRyZW4sIHBsYWNlaG9sZGVyTm9kZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHZhcmlvdXMgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgZnVsZmlsbGVkIGZvciBhIGRyb3AgdG8gYmUgYWxsb3dlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzRHJvcEFsbG93ZWQoZXZlbnQpIHtcbiAgICAgIC8vIERpc2FsbG93IGRyb3AgZnJvbSBleHRlcm5hbCBzb3VyY2UgdW5sZXNzIGl0J3MgYWxsb3dlZCBleHBsaWNpdGx5LlxuICAgICAgaWYgKCFkbmREcmFnVHlwZVdvcmthcm91bmQuaXNEcmFnZ2luZyAmJiAhZXh0ZXJuYWxTb3VyY2VzKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBDaGVjayBtaW1ldHlwZS4gVXN1YWxseSB3ZSB3b3VsZCB1c2UgYSBjdXN0b20gZHJhZyB0eXBlIGluc3RlYWQgb2YgVGV4dCwgYnV0IElFIGRvZXNuJ3RcbiAgICAgIC8vIHN1cHBvcnQgdGhhdC5cbiAgICAgIGlmICghaGFzVGV4dE1pbWV0eXBlKGV2ZW50LmRhdGFUcmFuc2Zlci50eXBlcykpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIE5vdyBjaGVjayB0aGUgZG5kLWFsbG93ZWQtdHlwZXMgYWdhaW5zdCB0aGUgdHlwZSBvZiB0aGUgaW5jb21pbmcgZWxlbWVudC4gRm9yIGRyb3BzIGZyb21cbiAgICAgIC8vIGV4dGVybmFsIHNvdXJjZXMgd2UgZG9uJ3Qga25vdyB0aGUgdHlwZSwgc28gaXQgd2lsbCBuZWVkIHRvIGJlIGNoZWNrZWQgdmlhIGRuZC1kcm9wLlxuICAgICAgaWYgKGF0dHIuZG5kQWxsb3dlZFR5cGVzICYmIGRuZERyYWdUeXBlV29ya2Fyb3VuZC5pc0RyYWdnaW5nKSB7XG4gICAgICAgIHZhciBhbGxvd2VkID0gc2NvcGUuJGV2YWwoYXR0ci5kbmRBbGxvd2VkVHlwZXMpO1xuICAgICAgICBpZiAoYW5ndWxhci5pc0FycmF5KGFsbG93ZWQpICYmIGFsbG93ZWQuaW5kZXhPZihkbmREcmFnVHlwZVdvcmthcm91bmQuZHJhZ1R5cGUpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgd2hldGhlciBkcm9waW5nIGlzIGRpc2FibGVkIGNvbXBsZXRlbHlcbiAgICAgIGlmIChhdHRyLmRuZERpc2FibGVJZiAmJiBzY29wZS4kZXZhbChhdHRyLmRuZERpc2FibGVJZikpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNtYWxsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGNsZWFucyB1cCBpZiB3ZSBhYm9ydGVkIGEgZHJvcC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdG9wRHJhZ292ZXIoKSB7XG4gICAgICBwbGFjZWhvbGRlci5yZW1vdmUoKTtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQ2xhc3MoJ2RuZERyYWdvdmVyJyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIGEgY2FsbGJhY2sgd2l0aCBzb21lIGludGVyZXN0aW5nIHBhcmFtZXRlcnMgYW5kIHJldHVybnMgdGhlIGNhbGxiYWNrcyByZXR1cm4gdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soZXhwcmVzc2lvbiwgZXZlbnQsIGl0ZW0pIHtcbiAgICAgIHJldHVybiAkcGFyc2UoZXhwcmVzc2lvbikoc2NvcGUsIHtcbiAgICAgICAgZXZlbnQgICA6IGV2ZW50LFxuICAgICAgICBpbmRleCAgIDogZ2V0UGxhY2Vob2xkZXJJbmRleCgpLFxuICAgICAgICBpdGVtICAgIDogaXRlbSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGV4dGVybmFsOiAhZG5kRHJhZ1R5cGVXb3JrYXJvdW5kLmlzRHJhZ2dpbmcsXG4gICAgICAgIHR5cGUgICAgOiBkbmREcmFnVHlwZVdvcmthcm91bmQuaXNEcmFnZ2luZyA/IGRuZERyYWdUeXBlV29ya2Fyb3VuZC5kcmFnVHlwZSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdGhlIGRhdGFUcmFuc2ZlciBvYmplY3QgY29udGFpbnMgYSBkcmFnIHR5cGUgdGhhdCB3ZSBjYW4gaGFuZGxlLiBJbiBvbGQgdmVyc2lvbnNcbiAgICAgKiBvZiBJRSB0aGUgdHlwZXMgY29sbGVjdGlvbiB3aWxsIG5vdCBldmVuIGJlIHRoZXJlLCBzbyB3ZSBqdXN0IGFzc3VtZSBhIGRyb3AgaXMgcG9zc2libGUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzVGV4dE1pbWV0eXBlKHR5cGVzKSB7XG4gICAgICBpZiAoIXR5cGVzKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHR5cGVzW2ldID09PSAnVGV4dCcgfHwgdHlwZXNbaV0gPT09ICd0ZXh0L3BsYWluJykgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAgICBcbiAgfVxufVxuXG5jb25zdCBUT19JTkpFQ1QgPSBbXG4gICckcGFyc2UnLCBcbiAgJyR0aW1lb3V0JywgXG4gICdkbmREcm9wRWZmZWN0V29ya2Fyb3VuZCcsIFxuICAnZG5kRHJhZ1R5cGVXb3JrYXJvdW5kJ1xuXTtcblxuZG5kTGlzdC4kaW5qZWN0ID0gVE9fSU5KRUNUO1xuXG5leHBvcnQgZGVmYXVsdCBkbmRMaXN0O1xuXG5leHBvcnQge1xuICBETkRMSVNUX0RJUkVDVElWRVxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9jb21tb24vZHJhZ0FuZERyb3BMaXN0L2RyYWdBbmREcm9wTGlzdC5kbmRsaXN0LmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 74 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar DNDDRAGGABLE_DIRECTIVE = 'dndDraggable';\n\nfunction dndDraggable($parse, $timeout, dndDropEffectWorkaround, dndDragTypeWorkaround) {\n var directive = {\n link: linkFct\n };\n return directive;\n\n function linkFct(scope, element, attr) {\n var _this = this;\n\n // Set the HTML5 draggable attribute on the element\n element.attr('draggable', 'true');\n\n // If the dnd-disable-if attribute is set, we have to watch that\n if (attr.dndDisableIf) {\n scope.$watch(attr.dndDisableIf, function (disabled) {\n return element.attr('draggable', !disabled);\n });\n }\n\n /**\n * When the drag operation is started we have to prepare the dataTransfer object,\n * which is the primary way we communicate with the target element\n */\n element.on('dragstart', function (event) {\n event = event.originalEvent || event;\n // Serialize the data associated with this element. IE only supports the Text drag type\n event.dataTransfer.setData('Text', angular.toJson(scope.$eval(attr.dndDraggable)));\n // Only allow actions specified in dnd-effect-allowed attribute\n event.dataTransfer.effectAllowed = attr.dndEffectAllowed || 'move';\n // Add CSS classes. See documentation above\n element.addClass('dndDragging');\n $timeout(function () {\n element.addClass('dndDraggingSource');\n }, 0);\n // Workarounds for stupid browsers, see description below\n dndDropEffectWorkaround.dropEffect = 'none';\n dndDragTypeWorkaround.isDragging = true;\n // Save type of item in global state. Usually, this would go into the dataTransfer\n // typename, but we have to use \"Text\" there to support IE\n dndDragTypeWorkaround.dragType = attr.dndType ? scope.$eval(attr.dndType) : undefined;\n // Invoke callback\n $parse(attr.dndDragstart)(scope, { event: event });\n event.stopPropagation();\n });\n\n /**\n * The dragend event is triggered when the element was dropped or when the drag\n * operation was aborted (e.g. hit escape button). Depending on the executed action\n * we will invoke the callbacks specified with the dnd-moved or dnd-copied attribute.\n */\n element.on('dragend', function (event) {\n event = event.originalEvent || event;\n\n // Invoke callbacks. Usually we would use event.dataTransfer.dropEffect to determine\n // the used effect, but Chrome has not implemented that field correctly. On Windows\n // it always sets it to 'none', while Chrome on Linux sometimes sets it to something\n // else when it's supposed to send 'none' (drag operation aborted).\n var dropEffect = dndDropEffectWorkaround.dropEffect;\n scope.$apply(function () {\n switch (dropEffect) {\n case 'move':\n $parse(attr.dndMoved)(scope, { event: event });\n break;\n\n case 'copy':\n $parse(attr.dndCopied)(scope, { event: event });\n break;\n }\n });\n\n // Clean up\n element.removeClass('dndDragging');\n element.removeClass('dndDraggingSource');\n dndDragTypeWorkaround.isDragging = false;\n event.stopPropagation();\n });\n\n /**\n * When the element is clicked we invoke the callback function\n * specified with the dnd-selected attribute.\n */\n element.on('click', function (event) {\n event = event.originalEvent || event;\n scope.$apply(function () {\n return $parse(attr.dndSelected)(scope, { event: event });\n });\n event.stopPropagation();\n });\n\n /**\n * Workaround to make element draggable in IE9\n */\n element.on('selectstart', function () {\n if (_this.dragDrop) _this.dragDrop();\n return false;\n });\n }\n}\n\nvar TO_INJECT = ['$parse', '$timeout', 'dndDropEffectWorkaround', 'dndDragTypeWorkaround'];\n\ndndDraggable.$inject = TO_INJECT;\n\nexports.default = dndDraggable;\nexports.DNDDRAGGABLE_DIRECTIVE = DNDDRAGGABLE_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2RyYWdBbmREcm9wTGlzdC9kcmFnQW5kRHJvcExpc3QuZG5kRHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcz82OTliIl0sIm5hbWVzIjpbIkRORERSQUdHQUJMRV9ESVJFQ1RJVkUiLCJkbmREcmFnZ2FibGUiLCIkcGFyc2UiLCIkdGltZW91dCIsImRuZERyb3BFZmZlY3RXb3JrYXJvdW5kIiwiZG5kRHJhZ1R5cGVXb3JrYXJvdW5kIiwiZGlyZWN0aXZlIiwibGluayIsImxpbmtGY3QiLCJzY29wZSIsImVsZW1lbnQiLCJhdHRyIiwiZG5kRGlzYWJsZUlmIiwiJHdhdGNoIiwiZGlzYWJsZWQiLCJvbiIsImV2ZW50Iiwib3JpZ2luYWxFdmVudCIsImRhdGFUcmFuc2ZlciIsInNldERhdGEiLCJhbmd1bGFyIiwidG9Kc29uIiwiJGV2YWwiLCJlZmZlY3RBbGxvd2VkIiwiZG5kRWZmZWN0QWxsb3dlZCIsImFkZENsYXNzIiwiZHJvcEVmZmVjdCIsImlzRHJhZ2dpbmciLCJkcmFnVHlwZSIsImRuZFR5cGUiLCJ1bmRlZmluZWQiLCJkbmREcmFnc3RhcnQiLCJzdG9wUHJvcGFnYXRpb24iLCIkYXBwbHkiLCJkbmRNb3ZlZCIsImRuZENvcGllZCIsInJlbW92ZUNsYXNzIiwiZG5kU2VsZWN0ZWQiLCJkcmFnRHJvcCIsIlRPX0lOSkVDVCIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBTUEseUJBQXlCLGNBQS9COztBQUVBLFNBQVNDLFlBQVQsQ0FBc0JDLE1BQXRCLEVBQThCQyxRQUE5QixFQUF3Q0MsdUJBQXhDLEVBQWlFQyxxQkFBakUsRUFBd0Y7QUFDdEYsTUFBSUMsWUFBWTtBQUNkQyxVQUFPQztBQURPLEdBQWhCO0FBR0EsU0FBT0YsU0FBUDs7QUFFQSxXQUFTRSxPQUFULENBQWlCQyxLQUFqQixFQUF3QkMsT0FBeEIsRUFBaUNDLElBQWpDLEVBQXVDO0FBQUE7O0FBQ3JDO0FBQ0FELFlBQVFDLElBQVIsQ0FBYSxXQUFiLEVBQTBCLE1BQTFCOztBQUVBO0FBQ0EsUUFBSUEsS0FBS0MsWUFBVCxFQUF1QjtBQUNyQkgsWUFBTUksTUFBTixDQUFhRixLQUFLQyxZQUFsQixFQUFnQyxVQUFDRSxRQUFEO0FBQUEsZUFBY0osUUFBUUMsSUFBUixDQUFhLFdBQWIsRUFBMEIsQ0FBQ0csUUFBM0IsQ0FBZDtBQUFBLE9BQWhDO0FBQ0Q7O0FBRUQ7Ozs7QUFJQUosWUFBUUssRUFBUixDQUFXLFdBQVgsRUFBd0IsVUFBQ0MsS0FBRCxFQUFXO0FBQ2pDQSxjQUFRQSxNQUFNQyxhQUFOLElBQXVCRCxLQUEvQjtBQUNBO0FBQ0FBLFlBQU1FLFlBQU4sQ0FBbUJDLE9BQW5CLENBQTJCLE1BQTNCLEVBQW1DQyxRQUFRQyxNQUFSLENBQWVaLE1BQU1hLEtBQU4sQ0FBWVgsS0FBS1YsWUFBakIsQ0FBZixDQUFuQztBQUNBO0FBQ0FlLFlBQU1FLFlBQU4sQ0FBbUJLLGFBQW5CLEdBQXNDWixLQUFLYSxnQkFBTCxJQUF5QixNQUEvRDtBQUNBO0FBQ0FkLGNBQVFlLFFBQVIsQ0FBaUIsYUFBakI7QUFDQXRCLGVBQVMsWUFBTTtBQUFFTyxnQkFBUWUsUUFBUixDQUFpQixtQkFBakI7QUFBd0MsT0FBekQsRUFBMkQsQ0FBM0Q7QUFDQTtBQUNBckIsOEJBQXdCc0IsVUFBeEIsR0FBc0MsTUFBdEM7QUFDQXJCLDRCQUFzQnNCLFVBQXRCLEdBQXNDLElBQXRDO0FBQ0E7QUFDQTtBQUNBdEIsNEJBQXNCdUIsUUFBdEIsR0FBc0NqQixLQUFLa0IsT0FBTCxHQUFlcEIsTUFBTWEsS0FBTixDQUFZWCxLQUFLa0IsT0FBakIsQ0FBZixHQUEyQ0MsU0FBakY7QUFDQTtBQUNBNUIsYUFBT1MsS0FBS29CLFlBQVosRUFBMEJ0QixLQUExQixFQUFpQyxFQUFDTyxPQUFPQSxLQUFSLEVBQWpDO0FBQ0FBLFlBQU1nQixlQUFOO0FBQ0QsS0FsQkQ7O0FBb0JBOzs7OztBQUtBdEIsWUFBUUssRUFBUixDQUFXLFNBQVgsRUFBc0IsVUFBQ0MsS0FBRCxFQUFXO0FBQy9CQSxjQUFRQSxNQUFNQyxhQUFOLElBQXVCRCxLQUEvQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQUlVLGFBQWF0Qix3QkFBd0JzQixVQUF6QztBQUNBakIsWUFBTXdCLE1BQU4sQ0FBYSxZQUFNO0FBQ2pCLGdCQUFRUCxVQUFSO0FBQ0EsZUFBSyxNQUFMO0FBQ0V4QixtQkFBT1MsS0FBS3VCLFFBQVosRUFBc0J6QixLQUF0QixFQUE2QixFQUFDTyxPQUFPQSxLQUFSLEVBQTdCO0FBQ0E7O0FBRUYsZUFBSyxNQUFMO0FBQ0VkLG1CQUFPUyxLQUFLd0IsU0FBWixFQUF1QjFCLEtBQXZCLEVBQThCLEVBQUNPLE9BQU9BLEtBQVIsRUFBOUI7QUFDQTtBQVBGO0FBU0QsT0FWRDs7QUFZQTtBQUNBTixjQUFRMEIsV0FBUixDQUFvQixhQUFwQjtBQUNBMUIsY0FBUTBCLFdBQVIsQ0FBb0IsbUJBQXBCO0FBQ0EvQiw0QkFBc0JzQixVQUF0QixHQUFtQyxLQUFuQztBQUNBWCxZQUFNZ0IsZUFBTjtBQUNELEtBekJEOztBQTJCQTs7OztBQUlBdEIsWUFBUUssRUFBUixDQUFXLE9BQVgsRUFBb0IsVUFBQ0MsS0FBRCxFQUFXO0FBQzdCQSxjQUFRQSxNQUFNQyxhQUFOLElBQXVCRCxLQUEvQjtBQUNBUCxZQUFNd0IsTUFBTixDQUFhO0FBQUEsZUFBTS9CLE9BQU9TLEtBQUswQixXQUFaLEVBQXlCNUIsS0FBekIsRUFBZ0MsRUFBQ08sT0FBT0EsS0FBUixFQUFoQyxDQUFOO0FBQUEsT0FBYjtBQUNBQSxZQUFNZ0IsZUFBTjtBQUNELEtBSkQ7O0FBTUE7OztBQUdBdEIsWUFBUUssRUFBUixDQUFXLGFBQVgsRUFBMEIsWUFBTTtBQUM5QixVQUFJLE1BQUt1QixRQUFULEVBQW1CLE1BQUtBLFFBQUw7QUFDbkIsYUFBTyxLQUFQO0FBQ0QsS0FIRDtBQUlEO0FBQ0Y7O0FBR0QsSUFBTUMsWUFBWSxDQUNoQixRQURnQixFQUVoQixVQUZnQixFQUdoQix5QkFIZ0IsRUFJaEIsdUJBSmdCLENBQWxCOztBQVFBdEMsYUFBYXVDLE9BQWIsR0FBdUJELFNBQXZCOztrQkFFZXRDLFk7UUFHYkQsc0IsR0FBQUEsc0IiLCJmaWxlIjoiNzQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBETkREUkFHR0FCTEVfRElSRUNUSVZFID0gJ2RuZERyYWdnYWJsZSc7XG5cbmZ1bmN0aW9uIGRuZERyYWdnYWJsZSgkcGFyc2UsICR0aW1lb3V0LCBkbmREcm9wRWZmZWN0V29ya2Fyb3VuZCwgZG5kRHJhZ1R5cGVXb3JrYXJvdW5kKSB7XG4gIGxldCBkaXJlY3RpdmUgPSB7XG4gICAgbGluayA6IGxpbmtGY3RcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcblxuICBmdW5jdGlvbiBsaW5rRmN0KHNjb3BlLCBlbGVtZW50LCBhdHRyKSB7XG4gICAgLy8gU2V0IHRoZSBIVE1MNSBkcmFnZ2FibGUgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50XG4gICAgZWxlbWVudC5hdHRyKCdkcmFnZ2FibGUnLCAndHJ1ZScpO1xuXG4gICAgLy8gSWYgdGhlIGRuZC1kaXNhYmxlLWlmIGF0dHJpYnV0ZSBpcyBzZXQsIHdlIGhhdmUgdG8gd2F0Y2ggdGhhdFxuICAgIGlmIChhdHRyLmRuZERpc2FibGVJZikge1xuICAgICAgc2NvcGUuJHdhdGNoKGF0dHIuZG5kRGlzYWJsZUlmLCAoZGlzYWJsZWQpID0+IGVsZW1lbnQuYXR0cignZHJhZ2dhYmxlJywgIWRpc2FibGVkKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgZHJhZyBvcGVyYXRpb24gaXMgc3RhcnRlZCB3ZSBoYXZlIHRvIHByZXBhcmUgdGhlIGRhdGFUcmFuc2ZlciBvYmplY3QsXG4gICAgICogd2hpY2ggaXMgdGhlIHByaW1hcnkgd2F5IHdlIGNvbW11bmljYXRlIHdpdGggdGhlIHRhcmdldCBlbGVtZW50XG4gICAgICovXG4gICAgZWxlbWVudC5vbignZHJhZ3N0YXJ0JywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG4gICAgICAvLyBTZXJpYWxpemUgdGhlIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZWxlbWVudC4gSUUgb25seSBzdXBwb3J0cyB0aGUgVGV4dCBkcmFnIHR5cGVcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCdUZXh0JywgYW5ndWxhci50b0pzb24oc2NvcGUuJGV2YWwoYXR0ci5kbmREcmFnZ2FibGUpKSk7XG4gICAgICAvLyBPbmx5IGFsbG93IGFjdGlvbnMgc3BlY2lmaWVkIGluIGRuZC1lZmZlY3QtYWxsb3dlZCBhdHRyaWJ1dGVcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkICAgID0gYXR0ci5kbmRFZmZlY3RBbGxvd2VkIHx8ICdtb3ZlJztcbiAgICAgIC8vIEFkZCBDU1MgY2xhc3Nlcy4gU2VlIGRvY3VtZW50YXRpb24gYWJvdmVcbiAgICAgIGVsZW1lbnQuYWRkQ2xhc3MoJ2RuZERyYWdnaW5nJyk7XG4gICAgICAkdGltZW91dCgoKSA9PiB7IGVsZW1lbnQuYWRkQ2xhc3MoJ2RuZERyYWdnaW5nU291cmNlJyk7IH0sIDApO1xuICAgICAgLy8gV29ya2Fyb3VuZHMgZm9yIHN0dXBpZCBicm93c2Vycywgc2VlIGRlc2NyaXB0aW9uIGJlbG93XG4gICAgICBkbmREcm9wRWZmZWN0V29ya2Fyb3VuZC5kcm9wRWZmZWN0ICA9ICdub25lJztcbiAgICAgIGRuZERyYWdUeXBlV29ya2Fyb3VuZC5pc0RyYWdnaW5nICAgID0gdHJ1ZTtcbiAgICAgIC8vIFNhdmUgdHlwZSBvZiBpdGVtIGluIGdsb2JhbCBzdGF0ZS4gVXN1YWxseSwgdGhpcyB3b3VsZCBnbyBpbnRvIHRoZSBkYXRhVHJhbnNmZXJcbiAgICAgIC8vIHR5cGVuYW1lLCBidXQgd2UgaGF2ZSB0byB1c2UgXCJUZXh0XCIgdGhlcmUgdG8gc3VwcG9ydCBJRVxuICAgICAgZG5kRHJhZ1R5cGVXb3JrYXJvdW5kLmRyYWdUeXBlICAgICAgPSBhdHRyLmRuZFR5cGUgPyBzY29wZS4kZXZhbChhdHRyLmRuZFR5cGUpIDogdW5kZWZpbmVkO1xuICAgICAgLy8gSW52b2tlIGNhbGxiYWNrXG4gICAgICAkcGFyc2UoYXR0ci5kbmREcmFnc3RhcnQpKHNjb3BlLCB7ZXZlbnQ6IGV2ZW50fSk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBkcmFnZW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB3aGVuIHRoZSBlbGVtZW50IHdhcyBkcm9wcGVkIG9yIHdoZW4gdGhlIGRyYWdcbiAgICAgKiBvcGVyYXRpb24gd2FzIGFib3J0ZWQgKGUuZy4gaGl0IGVzY2FwZSBidXR0b24pLiBEZXBlbmRpbmcgb24gdGhlIGV4ZWN1dGVkIGFjdGlvblxuICAgICAqIHdlIHdpbGwgaW52b2tlIHRoZSBjYWxsYmFja3Mgc3BlY2lmaWVkIHdpdGggdGhlIGRuZC1tb3ZlZCBvciBkbmQtY29waWVkIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBlbGVtZW50Lm9uKCdkcmFnZW5kJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudCA9IGV2ZW50Lm9yaWdpbmFsRXZlbnQgfHwgZXZlbnQ7XG5cbiAgICAgIC8vIEludm9rZSBjYWxsYmFja3MuIFVzdWFsbHkgd2Ugd291bGQgdXNlIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0IHRvIGRldGVybWluZVxuICAgICAgLy8gdGhlIHVzZWQgZWZmZWN0LCBidXQgQ2hyb21lIGhhcyBub3QgaW1wbGVtZW50ZWQgdGhhdCBmaWVsZCBjb3JyZWN0bHkuIE9uIFdpbmRvd3NcbiAgICAgIC8vIGl0IGFsd2F5cyBzZXRzIGl0IHRvICdub25lJywgd2hpbGUgQ2hyb21lIG9uIExpbnV4IHNvbWV0aW1lcyBzZXRzIGl0IHRvIHNvbWV0aGluZ1xuICAgICAgLy8gZWxzZSB3aGVuIGl0J3Mgc3VwcG9zZWQgdG8gc2VuZCAnbm9uZScgKGRyYWcgb3BlcmF0aW9uIGFib3J0ZWQpLlxuICAgICAgdmFyIGRyb3BFZmZlY3QgPSBkbmREcm9wRWZmZWN0V29ya2Fyb3VuZC5kcm9wRWZmZWN0O1xuICAgICAgc2NvcGUuJGFwcGx5KCgpID0+IHtcbiAgICAgICAgc3dpdGNoIChkcm9wRWZmZWN0KSB7XG4gICAgICAgIGNhc2UgJ21vdmUnOlxuICAgICAgICAgICRwYXJzZShhdHRyLmRuZE1vdmVkKShzY29wZSwge2V2ZW50OiBldmVudH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NvcHknOlxuICAgICAgICAgICRwYXJzZShhdHRyLmRuZENvcGllZCkoc2NvcGUsIHtldmVudDogZXZlbnR9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENsZWFuIHVwXG4gICAgICBlbGVtZW50LnJlbW92ZUNsYXNzKCdkbmREcmFnZ2luZycpO1xuICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcygnZG5kRHJhZ2dpbmdTb3VyY2UnKTtcbiAgICAgIGRuZERyYWdUeXBlV29ya2Fyb3VuZC5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFdoZW4gdGhlIGVsZW1lbnQgaXMgY2xpY2tlZCB3ZSBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAgICogc3BlY2lmaWVkIHdpdGggdGhlIGRuZC1zZWxlY3RlZCBhdHRyaWJ1dGUuXG4gICAgICovXG4gICAgZWxlbWVudC5vbignY2xpY2snLCAoZXZlbnQpID0+IHtcbiAgICAgIGV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudCB8fCBldmVudDtcbiAgICAgIHNjb3BlLiRhcHBseSgoKSA9PiAkcGFyc2UoYXR0ci5kbmRTZWxlY3RlZCkoc2NvcGUsIHtldmVudDogZXZlbnR9KSk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFdvcmthcm91bmQgdG8gbWFrZSBlbGVtZW50IGRyYWdnYWJsZSBpbiBJRTlcbiAgICAgKi9cbiAgICBlbGVtZW50Lm9uKCdzZWxlY3RzdGFydCcsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLmRyYWdEcm9wKSB0aGlzLmRyYWdEcm9wKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuXG5jb25zdCBUT19JTkpFQ1QgPSBbXG4gICckcGFyc2UnLCBcbiAgJyR0aW1lb3V0JywgXG4gICdkbmREcm9wRWZmZWN0V29ya2Fyb3VuZCcsIFxuICAnZG5kRHJhZ1R5cGVXb3JrYXJvdW5kJ1xuXTtcblxuXG5kbmREcmFnZ2FibGUuJGluamVjdCA9IFRPX0lOSkVDVDtcblxuZXhwb3J0IGRlZmF1bHQgZG5kRHJhZ2dhYmxlO1xuXG5leHBvcnQge1xuICBETkREUkFHR0FCTEVfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbW1vbi9kcmFnQW5kRHJvcExpc3QvZHJhZ0FuZERyb3BMaXN0LmRuZERyYWdnYWJsZS5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 75 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _pageslide = __webpack_require__(76);\n\nvar _pageslide2 = _interopRequireDefault(_pageslide);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar PAGE_SLIDE_MODULE = 'pageslide.module';\n\nexports.default = angular.module(PAGE_SLIDE_MODULE, []).directive(_pageslide.PAGE_SLIDE_DIRECTIVE, _pageslide2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3BhZ2VzbGlkZS9wYWdlc2xpZGUubW9kdWxlLmpzPzQ0NzciXSwibmFtZXMiOlsiUEFHRV9TTElERV9NT0RVTEUiLCJhbmd1bGFyIiwibW9kdWxlIiwiZGlyZWN0aXZlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7O0FBS0EsSUFBTUEsb0JBQW9CLGtCQUExQjs7a0JBRWVDLFFBQ0VDLE1BREYsQ0FDU0YsaUJBRFQsRUFDNEIsRUFENUIsRUFFRUcsU0FGRixzRCIsImZpbGUiOiI3NS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYWdlc2xpZGUsIHtcbiAgUEFHRV9TTElERV9ESVJFQ1RJVkVcbn0gZnJvbSAnLi9wYWdlc2xpZGUuZGlyZWN0aXZlJztcblxuXG5jb25zdCBQQUdFX1NMSURFX01PRFVMRSA9ICdwYWdlc2xpZGUubW9kdWxlJztcblxuZXhwb3J0IGRlZmF1bHQgYW5ndWxhclxuICAgICAgICAgICAgICAgIC5tb2R1bGUoUEFHRV9TTElERV9NT0RVTEUsIFtdKVxuICAgICAgICAgICAgICAgIC5kaXJlY3RpdmUoUEFHRV9TTElERV9ESVJFQ1RJVkUsIHBhZ2VzbGlkZSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3BhZ2VzbGlkZS9wYWdlc2xpZGUubW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 76 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar PAGE_SLIDE_DIRECTIVE = 'pageslide';\n\nfunction pageslide() {\n var directive = {\n restrict: 'EAC',\n transclude: false,\n scope: {\n psOpen: '=?',\n psAutoClose: '=?',\n psSide: '@',\n psSpeed: '@',\n psClass: '@',\n psSize: '@',\n psSqueeze: '@',\n psCloak: '@',\n psPush: '@',\n psContainer: '@'\n },\n link: linkFct\n };\n return directive;\n\n function linkFct($scope, el, attrs) {\n /* Inspect */\n //console.log($scope);\n //console.log(el);\n //console.log(attrs);\n\n /* Parameters */\n var param = {};\n\n param.side = $scope.psSide || 'right';\n param.speed = $scope.psSpeed || '0.5';\n param.size = $scope.psSize || '300px';\n param.zindex = 1000; // Override with custom CSS\n param.className = $scope.psClass || 'ng-pageslide';\n param.cloak = $scope.psCloak && $scope.psCloak.toLowerCase() == 'false' ? false : true;\n param.squeeze = Boolean($scope.psSqueeze) || false;\n param.push = Boolean($scope.psPush) || false;\n param.container = $scope.psContainer || false;\n\n // Apply Class\n el.addClass(param.className);\n\n /* DOM manipulation */\n var content = null;\n var slider = null;\n var body = param.container ? document.getElementById(param.container) : document.body;\n\n slider = el[0];\n\n // Check for div tag\n if (slider.tagName.toLowerCase() !== 'div' && slider.tagName.toLowerCase() !== 'pageslide') throw new Error('Pageslide can only be applied to
    or elements');\n\n // Check for content\n if (slider.children.length === 0) throw new Error('You have to content inside the ');\n\n content = angular.element(slider.children);\n\n /* Append */\n body.appendChild(slider);\n\n /* Style setup */\n slider.style.zIndex = param.zindex;\n slider.style.position = param.container !== false ? 'absolute' : 'fixed';\n slider.style.width = 0;\n slider.style.height = 0;\n slider.style.overflow = 'hidden';\n slider.style.transitionDuration = param.speed + 's';\n slider.style.webkitTransitionDuration = param.speed + 's';\n slider.style.transitionProperty = 'width, height';\n if (param.squeeze) {\n body.style.position = 'absolute';\n body.style.transitionDuration = param.speed + 's';\n body.style.webkitTransitionDuration = param.speed + 's';\n body.style.transitionProperty = 'top, bottom, left, right';\n }\n\n switch (param.side) {\n case 'right':\n slider.style.height = attrs.psCustomHeight || '100%';\n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n case 'left':\n slider.style.height = attrs.psCustomHeight || '100%';\n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.left = attrs.psCustomLeft || '0px';\n break;\n case 'top':\n slider.style.width = attrs.psCustomWidth || '100%';\n slider.style.left = attrs.psCustomLeft || '0px';\n slider.style.top = attrs.psCustomTop || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n case 'bottom':\n slider.style.width = attrs.psCustomWidth || '100%';\n slider.style.bottom = attrs.psCustomBottom || '0px';\n slider.style.left = attrs.psCustomLeft || '0px';\n slider.style.right = attrs.psCustomRight || '0px';\n break;\n }\n\n /* Closed */\n function psClose(slider, param) {\n if (slider && slider.style.width !== 0 && slider.style.width !== 0) {\n if (param.cloak) content.css('display', 'none');\n switch (param.side) {\n case 'right':\n slider.style.width = '0px';\n if (param.squeeze) body.style.right = '0px';\n if (param.push) {\n body.style.right = '0px';\n body.style.left = '0px';\n }\n break;\n case 'left':\n slider.style.width = '0px';\n if (param.squeeze) body.style.left = '0px';\n if (param.push) {\n body.style.left = '0px';\n body.style.right = '0px';\n }\n break;\n case 'top':\n slider.style.height = '0px';\n if (param.squeeze) body.style.top = '0px';\n if (param.push) {\n body.style.top = '0px';\n body.style.bottom = '0px';\n }\n break;\n case 'bottom':\n slider.style.height = '0px';\n if (param.squeeze) body.style.bottom = '0px';\n if (param.push) {\n body.style.bottom = '0px';\n body.style.top = '0px';\n }\n break;\n }\n }\n $scope.psOpen = false;\n }\n\n /* Open */\n function psOpen(slider, param) {\n if (slider.style.width !== 0 && slider.style.width !== 0) {\n switch (param.side) {\n case 'right':\n slider.style.width = param.size;\n if (param.squeeze) body.style.right = param.size;\n if (param.push) {\n body.style.right = param.size;\n body.style.left = '-' + param.size;\n }\n break;\n case 'left':\n slider.style.width = param.size;\n if (param.squeeze) body.style.left = param.size;\n if (param.push) {\n body.style.left = param.size;\n body.style.right = '-' + param.size;\n }\n break;\n case 'top':\n slider.style.height = param.size;\n if (param.squeeze) body.style.top = param.size;\n if (param.push) {\n body.style.top = param.size;\n body.style.bottom = '-' + param.size;\n }\n break;\n case 'bottom':\n slider.style.height = param.size;\n if (param.squeeze) body.style.bottom = param.size;\n if (param.push) {\n body.style.bottom = param.size;\n body.style.top = '-' + param.size;\n }\n break;\n }\n setTimeout(function () {\n if (param.cloak) content.css('display', 'block');\n }, param.speed * 1000);\n }\n }\n\n // function isFunction(functionToCheck) {\n // var getType = {};\n // return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n // }\n\n /*\n * Watchers\n * */\n\n $scope.$watch('psOpen', function (value) {\n /* eslint no-extra-boolean-cast:0 */\n if (!!value) {\n // Open\n psOpen(slider, param);\n } else {\n // Close\n psClose(slider, param);\n }\n });\n\n /*\n * Events\n * */\n\n $scope.$on('$destroy', function () {\n return body.removeChild(slider);\n });\n\n if ($scope.psAutoClose) {\n $scope.$on('$locationChangeStart', function () {\n return psClose(slider, param);\n });\n $scope.$on('$stateChangeStart', function () {\n return psClose(slider, param);\n });\n }\n }\n}\n\npageslide.$inject = [];\n\nexports.default = pageslide;\nexports.PAGE_SLIDE_DIRECTIVE = PAGE_SLIDE_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL3BhZ2VzbGlkZS9wYWdlc2xpZGUuZGlyZWN0aXZlLmpzP2U0ZjAiXSwibmFtZXMiOlsiUEFHRV9TTElERV9ESVJFQ1RJVkUiLCJwYWdlc2xpZGUiLCJkaXJlY3RpdmUiLCJyZXN0cmljdCIsInRyYW5zY2x1ZGUiLCJzY29wZSIsInBzT3BlbiIsInBzQXV0b0Nsb3NlIiwicHNTaWRlIiwicHNTcGVlZCIsInBzQ2xhc3MiLCJwc1NpemUiLCJwc1NxdWVlemUiLCJwc0Nsb2FrIiwicHNQdXNoIiwicHNDb250YWluZXIiLCJsaW5rIiwibGlua0ZjdCIsIiRzY29wZSIsImVsIiwiYXR0cnMiLCJwYXJhbSIsInNpZGUiLCJzcGVlZCIsInNpemUiLCJ6aW5kZXgiLCJjbGFzc05hbWUiLCJjbG9hayIsInRvTG93ZXJDYXNlIiwic3F1ZWV6ZSIsIkJvb2xlYW4iLCJwdXNoIiwiY29udGFpbmVyIiwiYWRkQ2xhc3MiLCJjb250ZW50Iiwic2xpZGVyIiwiYm9keSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJ0YWdOYW1lIiwiRXJyb3IiLCJjaGlsZHJlbiIsImxlbmd0aCIsImFuZ3VsYXIiLCJlbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJzdHlsZSIsInpJbmRleCIsInBvc2l0aW9uIiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsInRyYW5zaXRpb25EdXJhdGlvbiIsIndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiIsInRyYW5zaXRpb25Qcm9wZXJ0eSIsInBzQ3VzdG9tSGVpZ2h0IiwidG9wIiwicHNDdXN0b21Ub3AiLCJib3R0b20iLCJwc0N1c3RvbUJvdHRvbSIsInJpZ2h0IiwicHNDdXN0b21SaWdodCIsImxlZnQiLCJwc0N1c3RvbUxlZnQiLCJwc0N1c3RvbVdpZHRoIiwicHNDbG9zZSIsImNzcyIsInNldFRpbWVvdXQiLCIkd2F0Y2giLCJ2YWx1ZSIsIiRvbiIs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LGVBQU1MLFFBQVE5QixNQUFSLEVBQWdCZCxLQUFoQixDQUFOO0FBQUEsT0FBbkM7QUFDQUgsYUFBT29ELEdBQVAsQ0FBVyxtQkFBWCxFQUFnQztBQUFBLGVBQU1MLFFBQVE5QixNQUFSLEVBQWdCZCxLQUFoQixDQUFOO0FBQUEsT0FBaEM7QUFDRDtBQUNGO0FBRUY7O0FBRURwQixVQUFVdUUsT0FBVixHQUFvQixFQUFwQjs7a0JBRWV2RSxTO1FBR2JELG9CLEdBQUFBLG9CIiwiZmlsZSI6Ijc2LmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgUEFHRV9TTElERV9ESVJFQ1RJVkUgPSAncGFnZXNsaWRlJztcblxuZnVuY3Rpb24gcGFnZXNsaWRlKCkge1xuICBsZXQgZGlyZWN0aXZlID0ge1xuICAgIHJlc3RyaWN0ICAgIDogJ0VBQycsXG4gICAgdHJhbnNjbHVkZSAgOiBmYWxzZSxcbiAgICBzY29wZSA6IHtcbiAgICAgICAgcHNPcGVuICAgICAgOiAnPT8nLFxuICAgICAgICBwc0F1dG9DbG9zZSA6ICc9PycsXG4gICAgICAgIHBzU2lkZSAgICAgIDogJ0AnLFxuICAgICAgICBwc1NwZWVkICAgICA6ICdAJyxcbiAgICAgICAgcHNDbGFzcyAgICAgOiAnQCcsXG4gICAgICAgIHBzU2l6ZSAgICAgIDogJ0AnLFxuICAgICAgICBwc1NxdWVlemUgICA6ICdAJyxcbiAgICAgICAgcHNDbG9hayAgICAgOiAnQCcsXG4gICAgICAgIHBzUHVzaCAgICAgIDogJ0AnLFxuICAgICAgICBwc0NvbnRhaW5lciA6ICdAJ1xuICAgIH0sXG4gICAgbGluayA6IGxpbmtGY3RcbiAgfTtcbiAgcmV0dXJuIGRpcmVjdGl2ZTtcblxuICBmdW5jdGlvbiBsaW5rRmN0KCRzY29wZSwgZWwsIGF0dHJzKSB7XG4gICAgLyogSW5zcGVjdCAqL1xuICAgIC8vY29uc29sZS5sb2coJHNjb3BlKTtcbiAgICAvL2NvbnNvbGUubG9nKGVsKTtcbiAgICAvL2NvbnNvbGUubG9nKGF0dHJzKTtcblxuICAgIC8qIFBhcmFtZXRlcnMgKi9cbiAgICB2YXIgcGFyYW0gICAgICAgPSB7fTtcblxuICAgIHBhcmFtLnNpZGUgICAgICA9ICRzY29wZS5wc1NpZGUgfHwgJ3JpZ2h0JztcbiAgICBwYXJhbS5zcGVlZCAgICAgPSAkc2NvcGUucHNTcGVlZCB8fCAnMC41JztcbiAgICBwYXJhbS5zaXplICAgICAgPSAkc2NvcGUucHNTaXplIHx8ICczMDBweCc7XG4gICAgcGFyYW0uemluZGV4ICAgID0gMTAwMDsgLy8gT3ZlcnJpZGUgd2l0aCBjdXN0b20gQ1NTXG4gICAgcGFyYW0uY2xhc3NOYW1lID0gJHNjb3BlLnBzQ2xhc3MgfHwgJ25nLXBhZ2VzbGlkZSc7XG4gICAgcGFyYW0uY2xvYWsgICAgID0gJHNjb3BlLnBzQ2xvYWsgJiYgJHNjb3BlLnBzQ2xvYWsudG9Mb3dlckNhc2UoKSA9PSAnZmFsc2UnID8gZmFsc2UgOiB0cnVlO1xuICAgIHBhcmFtLnNxdWVlemUgICA9IEJvb2xlYW4oJHNjb3BlLnBzU3F1ZWV6ZSkgfHwgZmFsc2U7XG4gICAgcGFyYW0ucHVzaCAgICAgID0gQm9vbGVhbigkc2NvcGUucHNQdXNoKSB8fCBmYWxzZTtcbiAgICBwYXJhbS5jb250YWluZXIgPSAkc2NvcGUucHNDb250YWluZXIgfHwgZmFsc2U7IFxuXG4gICAgLy8gQXBwbHkgQ2xhc3NcbiAgICBlbC5hZGRDbGFzcyhwYXJhbS5jbGFzc05hbWUpO1xuXG4gICAgLyogRE9NIG1hbmlwdWxhdGlvbiAqL1xuICAgIGxldCBjb250ZW50ID0gbnVsbDtcbiAgICBsZXQgc2xpZGVyICA9IG51bGw7XG4gICAgbGV0IGJvZHkgICAgPSBwYXJhbS5jb250YWluZXIgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbS5jb250YWluZXIpIDogZG9jdW1lbnQuYm9keTtcblxuICAgIHNsaWRlciAgICAgID0gZWxbMF07XG5cbiAgICAvLyBDaGVjayBmb3IgZGl2IHRhZ1xuICAgIGlmIChzbGlkZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnZGl2JyAmJlxuICAgICAgICBzbGlkZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAncGFnZXNsaWRlJylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYWdlc2xpZGUgY2FuIG9ubHkgYmUgYXBwbGllZCB0byA8ZGl2PiBvciA8cGFnZXNsaWRlPiBlbGVtZW50cycpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIGNvbnRlbnRcbiAgICBpZiAoc2xpZGVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBjb250ZW50IGluc2lkZSB0aGUgPHBhZ2VzbGlkZT4nKTtcblxuICAgIGNvbnRlbnQgPSBhbmd1bGFyLmVsZW1lbnQoc2xpZGVyLmNoaWxkcmVuKTtcblxuICAgIC8qIEFwcGVuZCAqL1xuICAgIGJvZHkuYXBwZW5kQ2hpbGQoc2xpZGVyKTtcblxuICAgIC8qIFN0eWxlIHNldHVwICovXG4gICAgc2xpZGVyLnN0eWxlLnpJbmRleCAgICAgICAgICAgICAgICAgICA9IHBhcmFtLnppbmRleDtcbiAgICBzbGlkZXIuc3R5bGUucG9zaXRpb24gICAgICAgICAgICAgICAgID0gcGFyYW0uY29udGFpbmVyICE9PSBmYWxzZSA/ICdhYnNvbHV0ZScgOiAnZml4ZWQnO1xuICAgIHNsaWRlci5zdHlsZS53aWR0aCAgICAgICAgICAgICAgICAgICAgPSAwO1xuICAgIHNsaWRlci5zdHlsZS5oZWlnaHQgICAgICAgICAgICAgICAgICAgPSAwO1xuICAgIHNsaWRlci5zdHlsZS5vdmVyZmxvdyAgICAgICAgICAgICAgICAgPSAnaGlkZGVuJztcbiAgICBzbGlkZXIuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uICAgICAgID0gcGFyYW0uc3BlZWQgKyAncyc7XG4gICAgc2xpZGVyLnN0eWxlLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtLnNwZWVkICsgJ3MnO1xuICAgIHNsaWRlci5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHkgICAgICAgPSAnd2lkdGgsIGhlaWdodCc7XG4gICAgaWYgKHBhcmFtLnNxdWVlemUpIHtcbiAgICAgIGJvZHkuc3R5bGUucG9zaXRpb24gICAgICAgICAgICAgICAgID0gJ2Fic29sdXRlJztcbiAgICAgIGJvZHkuc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uICAgICAgID0gcGFyYW0uc3BlZWQgKyAncyc7XG4gICAgICBib2R5LnN0eWxlLndlYmtpdFRyYW5zaXRpb25EdXJhdGlvbiA9IHBhcmFtLnNwZWVkICsgJ3MnO1xuICAgICAgYm9keS5zdHlsZS50cmFuc2l0aW9uUHJvcGVydHkgICAgICAgPSAndG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0JztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHBhcmFtLnNpZGUpIHtcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBzbGlkZXIuc3R5bGUuaGVpZ2h0ID0gYXR0cnMucHNDdXN0b21IZWlnaHQgfHwgJzEwMCUnO1xuICAgICAgc2xpZGVyLnN0eWxlLnRvcCAgICA9IGF0dHJzLnBzQ3VzdG9tVG9wIHx8ICcwcHgnO1xuICAgICAgc2xpZGVyLnN0eWxlLmJvdHRvbSA9IGF0dHJzLnBzQ3VzdG9tQm90dG9tIHx8ICcwcHgnO1xuICAgICAgc2xpZGVyLnN0eWxlLnJpZ2h0ICA9IGF0dHJzLnBzQ3VzdG9tUmlnaHQgfHwgJzBweCc7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHNsaWRlci5zdHlsZS5oZWlnaHQgPSBhdHRycy5wc0N1c3RvbUhlaWdodCB8fCAnMTAwJSc7XG4gICAgICBzbGlkZXIuc3R5bGUudG9wICAgID0gYXR0cnMucHNDdXN0b21Ub3AgfHwgJzBweCc7XG4gICAgICBzbGlkZXIuc3R5bGUuYm90dG9tID0gYXR0cnMucHNDdXN0b21Cb3R0b20gfHwgJzBweCc7XG4gICAgICBzbGlkZXIuc3R5bGUubGVmdCAgID0gYXR0cnMucHNDdXN0b21MZWZ0IHx8ICcwcHgnO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIHNsaWRlci5zdHlsZS53aWR0aCAgPSBhdHRycy5wc0N1c3RvbVdpZHRoIHx8ICcxMDAlJztcbiAgICAgIHNsaWRlci5zdHlsZS5sZWZ0ICAgPSBhdHRycy5wc0N1c3RvbUxlZnQgfHwgJzBweCc7XG4gICAgICBzbGlkZXIuc3R5bGUudG9wICAgID0gYXR0cnMucHNDdXN0b21Ub3AgfHwgJzBweCc7XG4gICAgICBzbGlkZXIuc3R5bGUucmlnaHQgID0gYXR0cnMucHNDdXN0b21SaWdodCB8fCAnMHB4JztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBzbGlkZXIuc3R5bGUud2lkdGggID0gYXR0cnMucHNDdXN0b21XaWR0aCB8fCAnMTAwJSc7XG4gICAgICBzbGlkZXIuc3R5bGUuYm90dG9tID0gYXR0cnMucHNDdXN0b21Cb3R0b20gfHwgJzBweCc7XG4gICAgICBzbGlkZXIuc3R5bGUubGVmdCAgID0gYXR0cnMucHNDdXN0b21MZWZ0IHx8ICcwcHgnO1xuICAgICAgc2xpZGVyLnN0eWxlLnJpZ2h0ICA9IGF0dHJzLnBzQ3VzdG9tUmlnaHQgfHwgJzBweCc7XG4gICAgICBicmVhaztcbiAgICB9XG5cblxuICAgIC8qIENsb3NlZCAqL1xuICAgIGZ1bmN0aW9uIHBzQ2xvc2Uoc2xpZGVyLCBwYXJhbSkge1xuICAgICAgaWYgKHNsaWRlciAmJiBzbGlkZXIuc3R5bGUud2lkdGggIT09IDAgJiYgc2xpZGVyLnN0eWxlLndpZHRoICE9PSAwKSB7XG4gICAgICAgIGlmIChwYXJhbS5jbG9haykgY29udGVudC5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpO1xuICAgICAgICBzd2l0Y2ggKHBhcmFtLnNpZGUpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIHNsaWRlci5zdHlsZS53aWR0aCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChwYXJhbS5zcXVlZXplKSBib2R5LnN0eWxlLnJpZ2h0ID0gJzBweCc7XG4gICAgICAgICAgaWYgKHBhcmFtLnB1c2gpIHtcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5yaWdodCAgPSAnMHB4JztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5sZWZ0ICAgPSAnMHB4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIHNsaWRlci5zdHlsZS53aWR0aCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChwYXJhbS5zcXVlZXplKSBib2R5LnN0eWxlLmxlZnQgPSAnMHB4JztcbiAgICAgICAgICBpZiAocGFyYW0ucHVzaCkge1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmxlZnQgICA9ICcwcHgnO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLnJpZ2h0ICA9ICcwcHgnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBzbGlkZXIuc3R5bGUuaGVpZ2h0ID0gJzBweCc7XG4gICAgICAgICAgaWYgKHBhcmFtLnNxdWVlemUpIGJvZHkuc3R5bGUudG9wID0gJzBweCc7XG4gICAgICAgICAgaWYgKHBhcmFtLnB1c2gpIHtcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS50b3AgICAgPSAnMHB4JztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5ib3R0b20gPSAnMHB4JztcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgc2xpZGVyLnN0eWxlLmhlaWdodCA9ICcwcHgnO1xuICAgICAgICAgIGlmIChwYXJhbS5zcXVlZXplKSBib2R5LnN0eWxlLmJvdHRvbSA9ICcwcHgnO1xuICAgICAgICAgIGlmIChwYXJhbS5wdXNoKSB7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuYm90dG9tID0gJzBweCc7IFxuICAgICAgICAgICAgICBib2R5LnN0eWxlLnRvcCAgICA9ICcwcHgnOyBcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgICRzY29wZS5wc09wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBPcGVuICovXG4gICAgZnVuY3Rpb24gcHNPcGVuKHNsaWRlciwgcGFyYW0pIHtcbiAgICAgICAgaWYgKHNsaWRlci5zdHlsZS53aWR0aCAhPT0gMCAmJiBzbGlkZXIuc3R5bGUud2lkdGggIT09IDApIHtcbiAgICAgICAgICAgIHN3aXRjaCAocGFyYW0uc2lkZSkge1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICBzbGlkZXIuc3R5bGUud2lkdGggPSBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICBpZiAocGFyYW0uc3F1ZWV6ZSkgYm9keS5zdHlsZS5yaWdodCA9IHBhcmFtLnNpemU7XG4gICAgICAgICAgICAgIGlmIChwYXJhbS5wdXNoKSB7XG4gICAgICAgICAgICAgICAgICBib2R5LnN0eWxlLnJpZ2h0ID0gcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgICAgIGJvZHkuc3R5bGUubGVmdCA9ICctJyArIHBhcmFtLnNpemU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgc2xpZGVyLnN0eWxlLndpZHRoID0gcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtLnNxdWVlemUpIGJvZHkuc3R5bGUubGVmdCA9IHBhcmFtLnNpemU7XG4gICAgICAgICAgICAgIGlmIChwYXJhbS5wdXNoKSB7XG4gICAgICAgICAgICAgICAgICBib2R5LnN0eWxlLmxlZnQgPSBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICAgICAgYm9keS5zdHlsZS5yaWdodCA9ICctJyArIHBhcmFtLnNpemU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICBzbGlkZXIuc3R5bGUuaGVpZ2h0ID0gcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtLnNxdWVlemUpIGJvZHkuc3R5bGUudG9wID0gcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgaWYgKHBhcmFtLnB1c2gpIHtcbiAgICAgICAgICAgICAgICAgIGJvZHkuc3R5bGUudG9wID0gcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgICAgIGJvZHkuc3R5bGUuYm90dG9tID0gJy0nICsgcGFyYW0uc2l6ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgIHNsaWRlci5zdHlsZS5oZWlnaHQgPSBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICBpZiAocGFyYW0uc3F1ZWV6ZSkgYm9keS5zdHlsZS5ib3R0b20gPSBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICBpZiAocGFyYW0ucHVzaCkge1xuICAgICAgICAgICAgICAgICAgYm9keS5zdHlsZS5ib3R0b20gPSBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICAgICAgYm9keS5zdHlsZS50b3AgPSAnLScgKyBwYXJhbS5zaXplO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChwYXJhbS5jbG9haykgY29udGVudC5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTtcbiAgICAgICAgICAgIH0sIChwYXJhbS5zcGVlZCAqIDEwMDApKTtcblxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZnVuY3Rpb24gaXNGdW5jdGlvbihmdW5jdGlvblRvQ2hlY2spIHtcbiAgICAvLyAgIHZhciBnZXRUeXBlID0ge307XG4gICAgLy8gICByZXR1cm4gZnVuY3Rpb25Ub0NoZWNrICYmIGdldFR5cGUudG9TdHJpbmcuY2FsbChmdW5jdGlvblRvQ2hlY2spID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICAgIC8vIH1cblxuICAgIC8qXG4gICAgKiBXYXRjaGVyc1xuICAgICogKi9cblxuICAgICRzY29wZS4kd2F0Y2goJ3BzT3BlbicsICh2YWx1ZSkgPT4ge1xuICAgICAgLyogZXNsaW50IG5vLWV4dHJhLWJvb2xlYW4tY2FzdDowICovXG4gICAgICBpZiAoISF2YWx1ZSkge1xuICAgICAgICAvLyBPcGVuXG4gICAgICAgIHBzT3BlbihzbGlkZXIsIHBhcmFtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENsb3NlXG4gICAgICAgIHBzQ2xvc2Uoc2xpZGVyLCBwYXJhbSk7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICAgIC8qXG4gICAgKiBFdmVudHNcbiAgICAqICovXG5cbiAgICAkc2NvcGUuJG9uKCckZGVzdHJveScsICgpID0+IGJvZHkucmVtb3ZlQ2hpbGQoc2xpZGVyKSk7XG5cbiAgICBpZiAoJHNjb3BlLnBzQXV0b0Nsb3NlKSB7XG4gICAgICAkc2NvcGUuJG9uKCckbG9jYXRpb25DaGFuZ2VTdGFydCcsICgpID0+IHBzQ2xvc2Uoc2xpZGVyLCBwYXJhbSkpO1xuICAgICAgJHNjb3BlLiRvbignJHN0YXRlQ2hhbmdlU3RhcnQnLCAoKSA9PiBwc0Nsb3NlKHNsaWRlciwgcGFyYW0pKTtcbiAgICB9XG4gIH1cblxufVxuXG5wYWdlc2xpZGUuJGluamVjdCA9IFtdO1xuXG5leHBvcnQgZGVmYXVsdCBwYWdlc2xpZGU7XG5cbmV4cG9ydCB7XG4gIFBBR0VfU0xJREVfRElSRUNUSVZFXG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbW1vbi9wYWdlc2xpZGUvcGFnZXNsaWRlLmRpcmVjdGl2ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 77 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen = __webpack_require__(78);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen2 = _interopRequireDefault(_edaDragDropWayEdaDragdropWayEasyFormGen);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen3 = __webpack_require__(80);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen4 = _interopRequireDefault(_edaDragDropWayEdaDragdropWayEasyFormGen3);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen5 = __webpack_require__(82);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen6 = _interopRequireDefault(_edaDragDropWayEdaDragdropWayEasyFormGen5);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar DRAGDROP_MODULE = 'edaDragDropWay.main.module'; /* global angular */\n\nexports.default = angular.module(DRAGDROP_MODULE, []).provider(_edaDragDropWayEdaDragdropWayEasyFormGen.EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME, _edaDragDropWayEdaDragdropWayEasyFormGen2.default).controller(_edaDragDropWayEdaDragdropWayEasyFormGen3.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER, _edaDragDropWayEdaDragdropWayEasyFormGen4.default).directive(_edaDragDropWayEdaDragdropWayEasyFormGen5.EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE, _edaDragDropWayEdaDragdropWayEasyFormGen6.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLm1vZHVsZS5qcz80NjNlIl0sIm5hbWVzIjpbIkRSQUdEUk9QX01PRFVMRSIsImFuZ3VsYXIiLCJtb2R1bGUiLCJwcm92aWRlciIsImNvbnRyb2xsZXIiLCJkaXJlY3RpdmUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBOzs7O0FBR0E7Ozs7QUFHQTs7Ozs7O0FBS0EsSUFBTUEsa0JBQWtCLDRCQUF4QixDLENBYkE7O2tCQWVlQyxRQUNOQyxNQURNLENBQ0NGLGVBREQsRUFDa0IsRUFEbEIsRUFFTkcsUUFGTSxrSUFHTkMsVUFITSxzSUFJTkMsU0FKTSx1SSIsImZpbGUiOiI3Ny5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBhbmd1bGFyICovXG5cbmltcG9ydCBlYXN5Rm9ybURyYWdXYXlDb25maWcsIHtcblx0RUFTWV9GT1JNX0RSQUdfRFJPUF9XQVlfQ09ORklHX05BTUVcbn0gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLnByb3ZpZGVyJztcbmltcG9ydCBlZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuQ3RybCwge1xuXHREUkFHX0RST1BfV0FZX0VBU1lfRk9STV9HRU5fQ09OVFJPTExFUlxufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmNvbnRyb2xsZXInO1xuaW1wb3J0IGVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4sIHtcblx0RURBX0RSQUdEUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0RJUkVDVElWRVxufVx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZnJvbSAnLi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmRpcmVjdGl2ZSc7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5jb25zdCBEUkFHRFJPUF9NT0RVTEUgPSAnZWRhRHJhZ0Ryb3BXYXkubWFpbi5tb2R1bGUnO1xuXG5leHBvcnQgZGVmYXVsdCBhbmd1bGFyXG5cdFx0XHRcdFx0XHRcdFx0Lm1vZHVsZShEUkFHRFJPUF9NT0RVTEUsIFtdKVxuXHRcdFx0XHRcdFx0XHRcdC5wcm92aWRlcihFQVNZX0ZPUk1fRFJBR19EUk9QX1dBWV9DT05GSUdfTkFNRSwgZWFzeUZvcm1EcmFnV2F5Q29uZmlnKVxuXHRcdFx0XHRcdFx0XHRcdC5jb250cm9sbGVyKERSQUdfRFJPUF9XQVlfRUFTWV9GT1JNX0dFTl9DT05UUk9MTEVSLCBlZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuQ3RybClcblx0XHRcdFx0XHRcdFx0XHQuZGlyZWN0aXZlKEVEQV9EUkFHRFJPUF9XQVlfRUFTWV9GT1JNX0dFTl9ESVJFQ1RJVkUsIGVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9lZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuL2VkYURyYWdEcm9wV2F5LmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4ubW9kdWxlLmpzIl0sInNvdXJjZVJvb3QiOiIifQ=="); + +/***/ }, +/* 78 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME = undefined;\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGenProvider = __webpack_require__(79);\n\nvar EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME = 'easyFormDragWayConfig'; // TODO : Add here configs from ES5 dragDropConfigProvider\n\nfunction easyFormDragWayConfig() {\n\n\tvar _listDragDropItemCssClasses = [].concat(_edaDragDropWayEdaDragdropWayEasyFormGenProvider.LIST_DRAG_DROP_ITEM_CSS_CLASSES);\n\tvar _dragDropConfigModel = angular.copy(_edaDragDropWayEdaDragdropWayEasyFormGenProvider.DRAG_DROP_CONFIG_MODEL);\n\tvar _dragDropPresentationModel = [].concat(_edaDragDropWayEdaDragdropWayEasyFormGenProvider.DRAG_DROP_PRESENTATION_MODEL);\n\tvar _itemsNotToCountFoReal = angular.copy(_edaDragDropWayEdaDragdropWayEasyFormGenProvider.ITEMS_NOT_TO_COUNT_FOR_REAL);\n\n\tvar _configuration = defaultConfig();\n\tvar _controlsList = controlsList();\n\t// let _defaultLanguage\t\t= getDefaultLanguage();\n\t// let _currentLanguage\t\t= initDefaultLanguage();\n\tvar _showPreviewPanel = getDefaultshowPreviewPanel();\n\tvar _showPreviewModels = getDefaultShowPreviewModel();\n\t/* jshint validthis:true */\n\tthis.$get = easyFormDragDropWayConfigGET;\n\tthis.setModalAnimation = setModalAnimation;\n\tthis.getModalAnimation = getModalAnimation;\n\tthis.configuration = _configuration;\n\tthis.getEnabledControls = getEnabledControls;\n\tthis.disableControl = disableControl;\n\tthis.enableControl = enableControl;\n\t// this.setLanguage\t\t\t\t= setLanguage;\n\t// this.getCurrentLanguage\t= getCurrentLanguage;\n\tthis.showPreviewPanel = showPreviewPanel;\n\tthis.showPreviewModels = showPreviewModels;\n\n\tthis.setListItemCssClass = setListItemCssClass;\n\tthis.getItemsNotTocount = getItemsNotTocount;\n\tthis.setItemsNotTocount = setItemsNotTocount;\n\tthis.addControlToDragDropPresentationModel = addControlToDragDropPresentationModel;\n\tthis.getDragDropPresentationModel = getDragDropPresentationModel;\n\n\tfunction setListItemCssClass(fromConfig) {\n\t\t_listDragDropItemCssClasses = [].concat(fromConfig);\n\t}\n\n\tfunction getItemsNotTocount() {\n\t\treturn _itemsNotToCountFoReal;\n\t}\n\n\tfunction setItemsNotTocount(fromConfig) {\n\t\t_itemsNotToCountFoReal = angular.copy(fromConfig);\n\t}\n\n\t//set default config\n\tfunction defaultConfig() {\n\t\tvar _defaultConfiguration = {\n\t\t\tmodalAnimated: false\n\t\t};\n\t\treturn _defaultConfiguration;\n\t}\n\n\tfunction addControlToDragDropPresentationModel(controlToAdd, groupToAdd) {\n\t\tif (typeof controlToAdd !== 'undefined' && typeof groupToAdd !== 'undefined') {\n\t\t\taddToGroupControl(controlToAdd, groupToAdd);\n\t\t}\n\t}\n\n\tfunction getDragDropPresentationModel() {\n\t\treturn _dragDropPresentationModel;\n\t}\n\n\t//show preview panel by default\n\tfunction getDefaultshowPreviewPanel() {\n\t\treturn true;\n\t}\n\n\t//show preview data, fields models in preview panel\n\tfunction getDefaultShowPreviewModel() {\n\t\treturn true;\n\t}\n\n\t// function getCurrentLanguage(){\n\t// \t\treturn _currentLanguage;\n\t// }\t\n\n\t//list of controls\n\tfunction controlsList() {\n\t\tvar controls = [{ name: 'empty', enabled: true }, { name: 'Header', enabled: true }, { name: 'Subtitle', enabled: true }, { name: 'TextInput', enabled: true }, { name: 'Password', enabled: true }, { name: 'Email', enabled: true }, { name: 'Date', enabled: true }, { name: 'Texarea', enabled: true }, { name: 'RichTextEditor', enabled: true }, { name: 'Radio', enabled: true }, { name: 'Checkbox', enabled: true }, { name: 'BasicSelect', enabled: true }, { name: 'GroupedSelect', enabled: true }];\n\t\treturn controls;\n\t}\n\n\tfunction showPreviewPanel(wantToShow) {\n\t\tif (angular.isDefined(wantToShow)) {\n\t\t\tif (wantToShow === true) _showPreviewPanel = true;\n\t\t\tif (wantToShow === false) _showPreviewPanel = false;\n\t\t}\n\t}\n\n\tfunction showPreviewModels(wantToShow) {\n\t\tif (angular.isDefined(wantToShow)) {\n\t\t\tif (wantToShow === true) _showPreviewModels = true;\n\t\t\tif (wantToShow === false) _showPreviewModels = false;\n\t\t}\n\t}\n\n\t// //language : set default to english\n\t// function getDefaultLanguage(){\n\t// \tlet lang = 'en';\n\t// \treturn lang;\n\t// }\n\n\t// function setDefaultLanguage(){\n\t// \t_currentLanguage = _defaultLanguage;\n\t// \t$translateProvider.preferredLanguage(_currentLanguage);\n\t// \treturn _currentLanguage;\n\t// }\t\n\n\t// function setLanguage(language){\t\t\t\t\n\t// \tif (angular.isString(language)) {\n\t// \t\t_currentLanguage = language;\n\t// \t\t$translateProvider.preferredLanguage(language);\n\t// \t}else{\n\t// \t\tsetDefaultLanguage();\n\t// \t}\n\t// }\n\n\t// function initDefaultLanguage(){\n\t// \t$translateProvider.useSanitizeValueStrategy('escape'); \t//security : Enable escaping of HTML\n\t// \t$translateProvider.fallbackLanguage(_defaultLanguage);\t//fallback language to default language\n\t// \t$translateProvider.preferredLanguage(_defaultLanguage);\n\t// \treturn _defaultLanguage;\n\t// }\n\n\tfunction getEnabledControls() {\n\t\treturn _controlsList;\n\t}\n\n\tfunction disableControl(controlName) {\n\t\tif (angular.isString(controlName)) {\n\t\t\tangular.forEach(_controlsList, function (aControl) {\n\t\t\t\tif (aControl.name === controlName) aControl.enabled = false;\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction enableControl(controlName) {\n\t\tif (angular.isString(controlName)) {\n\t\t\tangular.forEach(_controlsList, function (aControl) {\n\t\t\t\tif (aControl.name === controlName) aControl.enabled = true;\n\t\t\t});\n\t\t}\n\t}\n\n\tfunction setModalAnimation(flagConfig) {\n\t\tvar valueToApply = flagConfig === true ? flagConfig : flagConfig === false ? flagConfig : _configuration.modalAnimated;\n\n\t\t_configuration.modalAnimated = valueToApply;\n\t}\n\n\tfunction getModalAnimation() {\n\t\treturn _configuration.modalAnimated;\n\t}\n\n\t//$get implementation :\n\t// easyFormDragDropWayConfigGET.$inject = ['$translate'];\n\t// function easyFormDragDropWayConfigGET($translate){\n\teasyFormDragDropWayConfigGET.$inject = [];\n\tfunction easyFormDragDropWayConfigGET() {\n\n\t\tvar service = {\n\t\t\tsetModalAnimation: setModalAnimationFct,\n\t\t\tgetModalAnimationValue: getModalAnimationValue,\n\t\t\tgetListEnabledControl: getListEnabledControl,\n\t\t\t// setLanguage \t\t\t\t\t\t\t\t\t\t\t: switchLanguage,\n\t\t\t// getCurrentLanguage\t\t\t\t\t\t\t\t: getCurrentLanguage,\n\t\t\tisPreviewPanelVisible: isPreviewPanelVisible,\n\t\t\tarePreviewModelsVisible: arePreviewModelsVisible,\n\n\t\t\tgetListItemCssClass: getListItemCssClass,\n\t\t\tgetItemsNotToCount: getItemsNotToCount,\n\t\t\tgetItemCssDependingNumberItemsInRow: getItemCssDependingNumberItemsInRow,\n\t\t\tgetDistinctItemCssClass: getDistinctItemCssClass,\n\t\t\tgetDragDropConfigModel: getDragDropConfigModel,\n\t\t\tgetDragDropPresentationModel: getDragDropPresentationModel,\n\t\t\tsetDragDropConfigContainerDecorationCollapse: setDragDropConfigContainerDecorationCollapse\n\t\t};\n\t\treturn service;\n\n\t\tfunction getDragDropPresentationModel() {\n\t\t\treturn _dragDropPresentationModel;\n\t\t}\n\n\t\tfunction setDragDropConfigContainerDecorationCollapse(dragDropConfigModel, indexValue, isCollapsedBool) {\n\t\t\tif (typeof indexValue !== 'undefined' && typeof isCollapsedBool !== 'undefined') {\n\t\t\t\tif (indexValue === parseInt(indexValue, 10)) {\n\t\t\t\t\tdragDropConfigModel.containerConfig.decoration[indexValue].isCollapsed = isCollapsedBool;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction getDragDropConfigModel() {\n\t\t\treturn _dragDropConfigModel;\n\t\t}\n\n\t\tfunction getDistinctItemCssClass() {\n\t\t\tvar distinctCssClass = [];\n\t\t\tangular.forEach(_listDragDropItemCssClasses, function (valueRef) {\n\n\t\t\t\tvar cssClassRef = valueRef.cssClass;\n\n\t\t\t\tif (distinctCssClass.length === 0) {\n\t\t\t\t\tdistinctCssClass.push(cssClassRef);\n\t\t\t\t} else {\n\t\t\t\t\tvar canAdd = true;\n\t\t\t\t\tangular.forEach(distinctCssClass, function (valueProc) {\n\t\t\t\t\t\tvar cssClassProc = valueProc;\n\t\t\t\t\t\tif (cssClassRef === cssClassProc) {\n\t\t\t\t\t\t\tcanAdd = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (canAdd) distinctCssClass.push(cssClassRef);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn distinctCssClass;\n\t\t}\n\n\t\tfunction getItemCssDependingNumberItemsInRow(numberOfItems) {\n\t\t\tif (typeof numberOfItems !== 'undefined') {\n\t\t\t\tvar classToReturn = '';\n\t\t\t\tfor (var i = _listDragDropItemCssClasses.length - 1; i >= 0; i--) {\n\t\t\t\t\tif (_listDragDropItemCssClasses[i].numberItemPerRow === numberOfItems) {\n\t\t\t\t\t\tclassToReturn = _listDragDropItemCssClasses[i].cssClass;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn classToReturn;\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\n\t\tfunction getListItemCssClass() {\n\t\t\treturn _listDragDropItemCssClasses;\n\t\t}\n\n\t\tfunction getItemsNotToCount() {\n\t\t\treturn _itemsNotToCountFoReal;\n\t\t}\n\n\t\tfunction getModalAnimationValue() {\n\t\t\treturn _configuration.modalAnimated;\n\t\t}\n\n\t\tfunction setModalAnimationFct(value) {\n\t\t\tsetModalAnimation(value);\n\t\t}\n\n\t\tfunction getListEnabledControl() {\n\t\t\treturn angular.copy(_controlsList);\n\t\t}\n\n\t\t// function switchLanguage(language){\n\t\t// \tif (angular.isString(language)) {\n\t\t// \t\t_currentLanguage = language;\n\t\t// \t\t$translate.use(language);\n\t\t// \t}else{\n\t\t// \t\tsetDefaultLanguage();\n\t\t// \t}\n\t\t// }\t\t\t\t\t\n\n\t\tfunction isPreviewPanelVisible() {\n\t\t\treturn _showPreviewPanel;\n\t\t}\n\n\t\tfunction arePreviewModelsVisible() {\n\t\t\treturn _showPreviewModels;\n\t\t}\n\t}\n\n\t/**\n * addToGroupControl : add control to _dragDropPresentationModel\n * @param {[type]} thisControl : control to add\n * @param {[type]} thisGroup : groupId wher this control should be added\n *\n * NOTE : if _dragDropPresentationModel wrong initialized it will create list of group conforming to \n * configModel\n */\n\tfunction addToGroupControl(thisControl, thisGroup) {\n\t\t/**\n * search group if already exists\n */\n\t\tif (_dragDropPresentationModel[0].length > 0) {\n\t\t\t/**\n * case when _dragDropConfigModel.containerConfig.decoration.length is > to _dragDropPresentationModel[0].length\n *\n * for instance : initialization _dragDropPresentationModel[0] in between\n */\n\t\t\tif (_dragDropPresentationModel[0].length < _dragDropConfigModel.containerConfig.decoration.length) {\n\t\t\t\tvar missingGroupNumber = _dragDropConfigModel.containerConfig.decoration.length - _dragDropPresentationModel[0].length;\n\n\t\t\t\tfor (var i = 0; i < missingGroupNumber; i++) {\n\t\t\t\t\t_dragDropPresentationModel[0].push([]);\n\t\t\t\t}\n\t\t\t}\n\t\t\t/**\n * push control to right index \n * (deduced by _dragDropConfigModel.containerConfig.decoration.WhenIndex value for groupId === thisGroup)\n */\n\t\t\t_dragDropConfigModel.containerConfig.decoration.forEach(function (groupConfig) {\n\t\t\t\tif (thisGroup.addToGroupCtrl === groupConfig.groupId) {\n\t\t\t\t\t_dragDropPresentationModel[0][groupConfig.WhenIndex].push(thisControl);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t/**\n * no group no control\n *\n * initialize _dragDropConfigModel.containerConfig.decoration list\n */\n\t\t\t_dragDropConfigModel.containerConfig.decoration.forEach(function () {\n\t\t\t\treturn _dragDropPresentationModel[0].push([]);\n\t\t\t});\n\t\t\t/**\n * push control to right index \n * (deduced by _dragDropConfigModel.containerConfig.decoration.WhenIndex value for groupId === thisGroup)\n */\n\t\t\t_dragDropConfigModel.containerConfig.decoration.forEach(function (groupConfig) {\n\t\t\t\tif (thisGroup.addToGroupCtrl === groupConfig.groupId) {\n\t\t\t\t\t_dragDropPresentationModel[0][groupConfig.WhenIndex].push(thisControl);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n\n// easyFormDragWayConfig.$inject = ['$translateProvider'];\n\neasyFormDragWayConfig.$inject = [];\n\nexports.default = easyFormDragWayConfig;\nexports.EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME = EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLnByb3ZpZGVyLmpzPzE0MDIiXSwibmFtZXMiOlsiRUFTWV9GT1JNX0RSQUdfRFJPUF9XQVlfQ09ORklHX05BTUUiLCJlYXN5Rm9ybURyYWdXYXlDb25maWciLCJfbGlzdERyYWdEcm9wSXRlbUNzc0NsYXNzZXMiLCJjb25jYXQiLCJfZHJhZ0Ryb3BDb25maWdNb2RlbCIsImFuZ3VsYXIiLCJjb3B5IiwiX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwiLCJfaXRlbXNOb3RUb0NvdW50Rm9SZWFsIiwiX2NvbmZpZ3VyYXRpb24iLCJkZWZhdWx0Q29uZmlnIiwiX2NvbnRyb2xzTGlzdCIsImNvbnRyb2xzTGlzdCIsIl9zaG93UHJldmlld1BhbmVsIiwiZ2V0RGVmYXVsdHNob3dQcmV2aWV3UGFuZWwiLCJfc2hvd1ByZXZpZXdNb2RlbHMiLCJnZXREZWZhdWx0U2hvd1ByZXZpZXdNb2RlbCIsIiRnZXQiLCJlYXN5Rm9ybURyYWdEcm9wV2F5Q29uZmlnR0VUIiwic2V0TW9kYWxBbmltYXRpb24iLCJnZXRNb2RhbEFuaW1hdGlvbiIsImNvbmZpZ3VyYXRpb24iLCJnZXRFbmFibGVkQ29udHJvbHMiLCJkaXNhYmxlQ29udHJvbCIsImVuYWJsZUNvbnRyb2wiLCJzaG93UHJldmlld1BhbmVsIiwic2hvd1ByZXZpZXdNb2RlbHMiLCJzZXRMaXN0SXRlbUNzc0NsYXNzIiwiZ2V0SXRlbXNOb3RUb2NvdW50Iiwic2V0SXRlbXNOb3RUb2NvdW50IiwiYWRkQ29udHJvbFRvRHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCIsImdldERyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwiLCJmcm9tQ29uZmlnIiwiX2RlZmF1bHRDb25maWd1cmF0aW9uIiwibW9kYWxBbmltYXRlZCIsImNvbnRyb2xUb0FkZCIsImdyb3VwVG9BZGQiLCJhZGRUb0dyb3VwQ29udHJvbCIsImNvbnRyb2xzIiwibmFtZSIsImVuYWJsZWQiLCJ3YW50VG9TaG93IiwiaXNEZWZpbmVkIiwiY29udHJvbE5hbWUiLCJpc1N0cmluZyIsImZvckVhY2giLCJhQ29udHJvbCIsImZsYWdDb25maWciLCJ2YWx1ZVRvQXBwbHkiLCIkaW5qZWN0Iiwic2VydmljZSIsInNldE1vZGFsQW5pbWF0aW9uRmN0IiwiZ2V0TW9kYWxBbmltYXRpb25WYWx1ZSIsImdldExpc3RFbmFibGVkQ29udHJvbCIsImlzUHJldmlld1BhbmVsVmlzaWJsZSIsImFyZVByZXZpZXdNb2RlbHNWaXNpYmxlIiwiZ2V0TGlzdEl0ZW1Dc3NDbGFzcyIsImdldEl0ZW1zTm90VG9Db3VudCIsImdldEl0ZW1Dc3NEZXBlbmRpbmdOdW1iZXJJdGVtc0luUm93IiwiZ2V0RGlzdGluY3RJdGVtQ3NzQ2xhc3MiLCJnZXREcmFnRHJvcENvbmZpZ01vZGVsIiwic2V0RHJhZ0Ryb3BDb25maWdDb250YWluZXJEZWNvcmF0aW9uQ29sbGFwc2UiLCJkcmFnRHJvcENvbmZpZ01vZGVsIiwiaW5kZXhWYWx1ZSIsImlzQ29sbGFwc2VkQm9vbCIsInBhcnNlSW50IiwiY29udGFpbmVyQ29uZmlnIiwiZGVjb3JhdGlvbiIsImlzQ29sbGFwc2VkIiwiZGlzdGluY3RDc3NDbGFzcyIsInZhbHVlUmVmIiwiY3NzQ2xhc3NSZWYiLCJjc3NDbGFzcyIsImxlbmd0aCIsInB1c2giLCJjYW5BZGQiLCJ2YWx1ZVByb2MiLCJjc3NDbGFzc1Byb2MiLCJudW1iZXJPZkl0ZW1zIiwiY2xhc3NUb1JldHVybiIsImkiLCJudW1iZXJJdGVtUGVyUm93IiwidmFsdWUiLCJ0aGlzQ29udHJvbCIsInRoaXNHcm91cCIsIm1pc3NpbmdHcm91cE51bWJlciIsImdyb3VwQ29uZmlnIiwiYWRkVG9Hcm91cEN0cmwiLCJncm91cElkIiwiV2hlbkluZGV4Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUE7O0FB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QUFxRGYsSUFBckQsQ0FBMERTLFdBQTFEO0FBQ0Q7QUFDRCxJQUpEO0FBS0Y7QUFDRjtBQUVGOztBQUVEOztBQUVBbEYsc0JBQXNCZ0QsT0FBdEIsR0FBZ0MsRUFBaEM7O2tCQUVlaEQscUI7UUFFUEQsbUMsR0FBQUEsbUMiLCJmaWxlIjoiNzguanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPIDogQWRkIGhlcmUgY29uZmlncyBmcm9tIEVTNSBkcmFnRHJvcENvbmZpZ1Byb3ZpZGVyXG5cbmltcG9ydCB7XG4gIExJU1RfRFJBR19EUk9QX0lURU1fQ1NTX0NMQVNTRVMsXG4gIERSQUdfRFJPUF9DT05GSUdfTU9ERUwsXG4gIERSQUdfRFJPUF9QUkVTRU5UQVRJT05fTU9ERUwsXG4gIElURU1TX05PVF9UT19DT1VOVF9GT1JfUkVBTFxufSBcdGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi5wcm92aWRlci5oZWxwZXJzJztcblxuY29uc3QgRUFTWV9GT1JNX0RSQUdfRFJPUF9XQVlfQ09ORklHX05BTUUgPSAnZWFzeUZvcm1EcmFnV2F5Q29uZmlnJztcblxuZnVuY3Rpb24gZWFzeUZvcm1EcmFnV2F5Q29uZmlnKCkge1xuXG5cdGxldCBfbGlzdERyYWdEcm9wSXRlbUNzc0NsYXNzZXMgXHRcdFx0XHRcdFx0PSBbXS5jb25jYXQoTElTVF9EUkFHX0RST1BfSVRFTV9DU1NfQ0xBU1NFUyk7XG5cdGxldCBfZHJhZ0Ryb3BDb25maWdNb2RlbCBcdFx0XHRcdFx0XHRcdFx0XHRcdD0gYW5ndWxhci5jb3B5KERSQUdfRFJPUF9DT05GSUdfTU9ERUwpO1xuXHRsZXQgX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwgXHRcdFx0XHRcdFx0XHQ9IFtdLmNvbmNhdChEUkFHX0RST1BfUFJFU0VOVEFUSU9OX01PREVMKTtcblx0bGV0IF9pdGVtc05vdFRvQ291bnRGb1JlYWwgXHRcdFx0XHRcdFx0XHRcdFx0PSBhbmd1bGFyLmNvcHkoSVRFTVNfTk9UX1RPX0NPVU5UX0ZPUl9SRUFMKTtcblxuXHRsZXQgX2NvbmZpZ3VyYXRpb24gXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ9IGRlZmF1bHRDb25maWcoKTtcblx0bGV0IF9jb250cm9sc0xpc3RcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PSBjb250cm9sc0xpc3QoKTtcblx0Ly8gbGV0IF9kZWZhdWx0TGFuZ3VhZ2VcdFx0PSBnZXREZWZhdWx0TGFuZ3VhZ2UoKTtcblx0Ly8gbGV0IF9jdXJyZW50TGFuZ3VhZ2VcdFx0PSBpbml0RGVmYXVsdExhbmd1YWdlKCk7XG5cdGxldCBfc2hvd1ByZXZpZXdQYW5lbFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD0gZ2V0RGVmYXVsdHNob3dQcmV2aWV3UGFuZWwoKTtcblx0bGV0IF9zaG93UHJldmlld01vZGVsc1x0XHRcdFx0XHRcdFx0XHRcdFx0XHQ9IGdldERlZmF1bHRTaG93UHJldmlld01vZGVsKCk7XHRcblx0LyoganNoaW50IHZhbGlkdGhpczp0cnVlICovXG5cdHRoaXMuJGdldCBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PSBlYXN5Rm9ybURyYWdEcm9wV2F5Q29uZmlnR0VUO1xuXHR0aGlzLnNldE1vZGFsQW5pbWF0aW9uIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ9IHNldE1vZGFsQW5pbWF0aW9uO1xuXHR0aGlzLmdldE1vZGFsQW5pbWF0aW9uXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD0gZ2V0TW9kYWxBbmltYXRpb247XG5cdHRoaXMuY29uZmlndXJhdGlvblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PSBfY29uZmlndXJhdGlvbjtcblx0dGhpcy5nZXRFbmFibGVkQ29udHJvbHMgXHRcdFx0XHRcdFx0XHRcdFx0XHQ9IGdldEVuYWJsZWRDb250cm9scztcblx0dGhpcy5kaXNhYmxlQ29udHJvbFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PSBkaXNhYmxlQ29udHJvbDtcblx0dGhpcy5lbmFibGVDb250cm9sXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ9IGVuYWJsZUNvbnRyb2w7XG5cdC8vIHRoaXMuc2V0TGFuZ3VhZ2VcdFx0XHRcdD0gc2V0TGFuZ3VhZ2U7XG5cdC8vIHRoaXMuZ2V0Q3VycmVudExhbmd1YWdlXHQ9IGdldEN1cnJlbnRMYW5ndWFnZTtcblx0dGhpcy5zaG93UHJldmlld1BhbmVsXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PSBzaG93UHJldmlld1BhbmVsO1xuXHR0aGlzLnNob3dQcmV2aWV3TW9kZWxzXHRcdFx0XHRcdFx0XHRcdFx0XHRcdD0gc2hvd1ByZXZpZXdNb2RlbHM7XHRcblxuXHR0aGlzLnNldExpc3RJdGVtQ3NzQ2xhc3MgXHRcdFx0XHRcdFx0XHRcdFx0XHQ9IHNldExpc3RJdGVtQ3NzQ2xhc3M7XG5cdHRoaXMuZ2V0SXRlbXNOb3RUb2NvdW50XHQgXHRcdFx0XHRcdFx0XHRcdFx0XHQ9IGdldEl0ZW1zTm90VG9jb3VudDtcblx0dGhpcy5zZXRJdGVtc05vdFRvY291bnQgXHRcdFx0XHRcdFx0XHRcdFx0XHQ9IHNldEl0ZW1zTm90VG9jb3VudDtcblx0dGhpcy5hZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsIFx0PSBhZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsO1xuXHR0aGlzLmdldERyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwgXHRcdFx0XHRcdD0gZ2V0RHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbDtcblxuXHRmdW5jdGlvbiBzZXRMaXN0SXRlbUNzc0NsYXNzKGZyb21Db25maWcpIHtcblx0XHRfbGlzdERyYWdEcm9wSXRlbUNzc0NsYXNzZXMgPSBbXS5jb25jYXQoZnJvbUNvbmZpZyk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRJdGVtc05vdFRvY291bnQoKSB7XG5cdFx0cmV0dXJuIF9pdGVtc05vdFRvQ291bnRGb1JlYWw7XG5cdH1cblxuXHRmdW5jdGlvbiBzZXRJdGVtc05vdFRvY291bnQoZnJvbUNvbmZpZykge1xuXHRcdF9pdGVtc05vdFRvQ291bnRGb1JlYWwgPSBhbmd1bGFyLmNvcHkoZnJvbUNvbmZpZyk7XHRcblx0fVxuXG5cdC8vc2V0IGRlZmF1bHQgY29uZmlnXG5cdGZ1bmN0aW9uIGRlZmF1bHRDb25maWcoKSB7XG5cdFx0bGV0ICBfZGVmYXVsdENvbmZpZ3VyYXRpb24gPSB7XG5cdFx0XHRtb2RhbEFuaW1hdGVkIDogZmFsc2Vcblx0XHR9O1xuXHRcdHJldHVybiBfZGVmYXVsdENvbmZpZ3VyYXRpb247XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb250cm9sVG9EcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsKGNvbnRyb2xUb0FkZCwgZ3JvdXBUb0FkZCkge1xuICAgIGlmICh0eXBlb2YgY29udHJvbFRvQWRkICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZ3JvdXBUb0FkZCAgICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgYWRkVG9Hcm91cENvbnRyb2woY29udHJvbFRvQWRkLCBncm91cFRvQWRkKTtcbiAgICB9XHRcdFxuXHR9XG5cbiAgZnVuY3Rpb24gZ2V0RHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCgpe1xuICAgIHJldHVybiBfZHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbDtcbiAgfVx0XG5cdFxuXHQvL3Nob3cgcHJldmlldyBwYW5lbCBieSBkZWZhdWx0XG5cdGZ1bmN0aW9uIGdldERlZmF1bHRzaG93UHJldmlld1BhbmVsKCl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cdFxuXHRcblx0Ly9zaG93IHByZXZpZXcgZGF0YSwgZmllbGRzIG1vZGVscyBpbiBwcmV2aWV3IHBhbmVsXG5cdGZ1bmN0aW9uIGdldERlZmF1bHRTaG93UHJldmlld01vZGVsKCl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cdFxuXHRcblx0Ly8gZnVuY3Rpb24gZ2V0Q3VycmVudExhbmd1YWdlKCl7XG5cdC8vIFx0XHRyZXR1cm4gX2N1cnJlbnRMYW5ndWFnZTtcblx0Ly8gfVx0XG5cdFxuXHQvL2xpc3Qgb2YgY29udHJvbHNcblx0ZnVuY3Rpb24gY29udHJvbHNMaXN0KCl7XG5cdFx0bGV0IGNvbnRyb2xzID0gW1xuXHRcdFx0e25hbWU6ICdlbXB0eScsIFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlfSxcblx0XHRcdHtuYW1lOiAnSGVhZGVyJywgXHRcdFx0XHRcdGVuYWJsZWQ6IHRydWV9LFxuXHRcdFx0e25hbWU6ICdTdWJ0aXRsZScsIFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ1RleHRJbnB1dCcsIFx0XHRcdGVuYWJsZWQ6IHRydWV9LFxuXHRcdFx0e25hbWU6ICdQYXNzd29yZCcsIFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ0VtYWlsJywgXHRcdFx0XHRcdGVuYWJsZWQ6IHRydWV9LFxuXHRcdFx0e25hbWU6ICdEYXRlJywgXHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ1RleGFyZWEnLFx0IFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ1JpY2hUZXh0RWRpdG9yJywgXHRlbmFibGVkOiB0cnVlfSxcblx0XHRcdHtuYW1lOiAnUmFkaW8nLCBcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ0NoZWNrYm94JywgXHRcdFx0XHRlbmFibGVkOiB0cnVlfSxcblx0XHRcdHtuYW1lOiAnQmFzaWNTZWxlY3QnLCBcdFx0ZW5hYmxlZDogdHJ1ZX0sXG5cdFx0XHR7bmFtZTogJ0dyb3VwZWRTZWxlY3QnLCBcdGVuYWJsZWQ6IHRydWV9XG5cdFx0XTtcblx0XHRyZXR1cm4gY29udHJvbHM7XG5cdH1cblx0XG5cdGZ1bmN0aW9uIHNob3dQcmV2aWV3UGFuZWwod2FudFRvU2hvdyl7XG5cdFx0aWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHdhbnRUb1Nob3cpKSB7XG5cdFx0XHRpZih3YW50VG9TaG93ID09PSB0cnVlKSBcdF9zaG93UHJldmlld1BhbmVsIFx0PSB0cnVlO1xuXHRcdFx0aWYod2FudFRvU2hvdyA9PT0gZmFsc2UpIFx0X3Nob3dQcmV2aWV3UGFuZWwgXHQ9IGZhbHNlO1xuXHRcdH1cblx0fVxuXHRcblx0ZnVuY3Rpb24gc2hvd1ByZXZpZXdNb2RlbHMod2FudFRvU2hvdyl7XG5cdFx0aWYgKGFuZ3VsYXIuaXNEZWZpbmVkKHdhbnRUb1Nob3cpKSB7XG5cdFx0XHRpZih3YW50VG9TaG93ID09PSB0cnVlKSBcdF9zaG93UHJldmlld01vZGVscyBcdD0gdHJ1ZTtcblx0XHRcdGlmKHdhbnRUb1Nob3cgPT09IGZhbHNlKSBcdF9zaG93UHJldmlld01vZGVscyBcdD0gZmFsc2U7XG5cdFx0fVx0XHRcdFx0XG5cdH1cdFx0XG5cdFxuXHQvLyAvL2xhbmd1YWdlIDogc2V0IGRlZmF1bHQgdG8gZW5nbGlzaFxuXHQvLyBmdW5jdGlvbiBnZXREZWZhdWx0TGFuZ3VhZ2UoKXtcblx0Ly8gXHRsZXQgbGFuZyA9ICdlbic7XG5cdC8vIFx0cmV0dXJuIGxhbmc7XG5cdC8vIH1cblx0XG5cdC8vIGZ1bmN0aW9uIHNldERlZmF1bHRMYW5ndWFnZSgpe1xuXHQvLyBcdF9jdXJyZW50TGFuZ3VhZ2UgPSBfZGVmYXVsdExhbmd1YWdlO1xuXHQvLyBcdCR0cmFuc2xhdGVQcm92aWRlci5wcmVmZXJyZWRMYW5ndWFnZShfY3VycmVudExhbmd1YWdlKTtcblx0Ly8gXHRyZXR1cm4gX2N1cnJlbnRMYW5ndWFnZTtcblx0Ly8gfVx0XG5cdFxuXHQvLyBmdW5jdGlvbiBzZXRMYW5ndWFnZShsYW5ndWFnZSl7XHRcdFx0XHRcblx0Ly8gXHRpZiAoYW5ndWxhci5pc1N0cmluZyhsYW5ndWFnZSkpIHtcblx0Ly8gXHRcdF9jdXJyZW50TGFuZ3VhZ2UgPSBsYW5ndWFnZTtcblx0Ly8gXHRcdCR0cmFuc2xhdGVQcm92aWRlci5wcmVmZXJyZWRMYW5ndWFnZShsYW5ndWFnZSk7XG5cdC8vIFx0fWVsc2V7XG5cdC8vIFx0XHRzZXREZWZhdWx0TGFuZ3VhZ2UoKTtcblx0Ly8gXHR9XG5cdC8vIH1cblx0XG5cdC8vIGZ1bmN0aW9uIGluaXREZWZhdWx0TGFuZ3VhZ2UoKXtcblx0Ly8gXHQkdHJhbnNsYXRlUHJvdmlkZXIudXNlU2FuaXRpemVWYWx1ZVN0cmF0ZWd5KCdlc2NhcGUnKTsgXHQvL3NlY3VyaXR5IDogRW5hYmxlIGVzY2FwaW5nIG9mIEhUTUxcblx0Ly8gXHQkdHJhbnNsYXRlUHJvdmlkZXIuZmFsbGJhY2tMYW5ndWFnZShfZGVmYXVsdExhbmd1YWdlKTtcdC8vZmFsbGJhY2sgbGFuZ3VhZ2UgdG8gZGVmYXVsdCBsYW5ndWFnZVxuXHQvLyBcdCR0cmFuc2xhdGVQcm92aWRlci5wcmVmZXJyZWRMYW5ndWFnZShfZGVmYXVsdExhbmd1YWdlKTtcblx0Ly8gXHRyZXR1cm4gX2RlZmF1bHRMYW5ndWFnZTtcblx0Ly8gfVxuXHRcblx0ZnVuY3Rpb24gZ2V0RW5hYmxlZENvbnRyb2xzKCkge1xuXHRcdHJldHVybiBfY29udHJvbHNMaXN0O1xuXHR9XG5cdFxuXHRmdW5jdGlvbiBkaXNhYmxlQ29udHJvbChjb250cm9sTmFtZSkge1xuXHRcdGlmIChhbmd1bGFyLmlzU3RyaW5nKGNvbnRyb2xOYW1lKSkge1xuXHRcdFx0YW5ndWxhci5mb3JFYWNoKF9jb250cm9sc0xpc3QsIChhQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRpZiAoYUNvbnRyb2wubmFtZSA9PT0gY29udHJvbE5hbWUpIGFDb250cm9sLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH0pO1x0XHRcdFx0XHRcdFxuXHRcdH1cblx0fVxuXHRcblx0ZnVuY3Rpb24gZW5hYmxlQ29udHJvbChjb250cm9sTmFtZSkge1xuXHRcdGlmIChhbmd1bGFyLmlzU3RyaW5nKGNvbnRyb2xOYW1lKSkge1xuXHRcdFx0YW5ndWxhci5mb3JFYWNoKF9jb250cm9sc0xpc3QsIChhQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRpZiAoYUNvbnRyb2wubmFtZSA9PT0gY29udHJvbE5hbWUpIGFDb250cm9sLmVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fSk7XHRcdFx0XHRcdFx0XG5cdFx0fVx0XHRcdFx0XG5cdH1cdFx0XHRcdFx0XHRcblx0XG5cdGZ1bmN0aW9uIHNldE1vZGFsQW5pbWF0aW9uKGZsYWdDb25maWcpIHtcblx0XHRsZXQgdmFsdWVUb0FwcGx5ID0gKGZsYWdDb25maWcgPT09IHRydWUpID8gXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZsYWdDb25maWcgIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiAoZmxhZ0NvbmZpZyA9PT0gZmFsc2UgPyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmbGFnQ29uZmlnIFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IF9jb25maWd1cmF0aW9uLm1vZGFsQW5pbWF0ZWQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0X2NvbmZpZ3VyYXRpb24ubW9kYWxBbmltYXRlZCA9IHZhbHVlVG9BcHBseTtcblx0fVxuXHRcblx0ZnVuY3Rpb24gZ2V0TW9kYWxBbmltYXRpb24oKSB7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdHJldHVybiBfY29uZmlndXJhdGlvbi5tb2RhbEFuaW1hdGVkO1xuXHR9XHRcdFxuXHRcblx0XG5cdC8vJGdldCBpbXBsZW1lbnRhdGlvbiA6XG5cdC8vIGVhc3lGb3JtRHJhZ0Ryb3BXYXlDb25maWdHRVQuJGluamVjdCA9IFsnJHRyYW5zbGF0ZSddO1xuXHQvLyBmdW5jdGlvbiBlYXN5Rm9ybURyYWdEcm9wV2F5Q29uZmlnR0VUKCR0cmFuc2xhdGUpe1xuXHRlYXN5Rm9ybURyYWdEcm9wV2F5Q29uZmlnR0VULiRpbmplY3QgPSBbXTtcblx0ZnVuY3Rpb24gZWFzeUZvcm1EcmFnRHJvcFdheUNvbmZpZ0dFVCgpe1x0XHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRsZXQgc2VydmljZSA9IHtcblx0XHRcdHNldE1vZGFsQW5pbWF0aW9uIFx0XHRcdFx0XHRcdFx0XHRcdDogc2V0TW9kYWxBbmltYXRpb25GY3QsXG5cdFx0XHRnZXRNb2RhbEFuaW1hdGlvblZhbHVlIFx0XHRcdFx0XHRcdFx0OiBnZXRNb2RhbEFuaW1hdGlvblZhbHVlLFxuXHRcdFx0Z2V0TGlzdEVuYWJsZWRDb250cm9sXHRcdFx0XHRcdFx0XHRcdDogZ2V0TGlzdEVuYWJsZWRDb250cm9sLFxuXHRcdFx0Ly8gc2V0TGFuZ3VhZ2UgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogc3dpdGNoTGFuZ3VhZ2UsXG5cdFx0XHQvLyBnZXRDdXJyZW50TGFuZ3VhZ2VcdFx0XHRcdFx0XHRcdFx0OiBnZXRDdXJyZW50TGFuZ3VhZ2UsXG5cdFx0XHRpc1ByZXZpZXdQYW5lbFZpc2libGVcdFx0XHRcdFx0XHRcdFx0OiBpc1ByZXZpZXdQYW5lbFZpc2libGUsXG5cdFx0XHRhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZVx0XHRcdFx0XHRcdFx0OiBhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZSxcblx0XHRcdFxuXHRcdFx0Z2V0TGlzdEl0ZW1Dc3NDbGFzcyBcdFx0XHRcdFx0XHRcdFx0OiBnZXRMaXN0SXRlbUNzc0NsYXNzLFxuXHRcdFx0Z2V0SXRlbXNOb3RUb0NvdW50IFx0XHRcdFx0XHRcdFx0XHRcdDogZ2V0SXRlbXNOb3RUb0NvdW50LFxuXHRcdFx0Z2V0SXRlbUNzc0RlcGVuZGluZ051bWJlckl0ZW1zSW5Sb3cgOiBnZXRJdGVtQ3NzRGVwZW5kaW5nTnVtYmVySXRlbXNJblJvdyxcblx0XHRcdGdldERpc3RpbmN0SXRlbUNzc0NsYXNzIFx0XHRcdFx0XHRcdDogZ2V0RGlzdGluY3RJdGVtQ3NzQ2xhc3MsXG5cdFx0XHRnZXREcmFnRHJvcENvbmZpZ01vZGVsIFx0XHRcdFx0XHRcdFx0OiBnZXREcmFnRHJvcENvbmZpZ01vZGVsLFxuXHRcdFx0Z2V0RHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCBcdFx0XHRcdDogZ2V0RHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCxcblx0XHRcdHNldERyYWdEcm9wQ29uZmlnQ29udGFpbmVyRGVjb3JhdGlvbkNvbGxhcHNlIDogc2V0RHJhZ0Ryb3BDb25maWdDb250YWluZXJEZWNvcmF0aW9uQ29sbGFwc2Vcblx0XHR9O1xuXHRcdHJldHVybiBzZXJ2aWNlO1xuXHRcdFxuXHRcdGZ1bmN0aW9uIGdldERyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwoKSB7XG5cdFx0XHRyZXR1cm4gX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gc2V0RHJhZ0Ryb3BDb25maWdDb250YWluZXJEZWNvcmF0aW9uQ29sbGFwc2UoZHJhZ0Ryb3BDb25maWdNb2RlbCwgaW5kZXhWYWx1ZSwgaXNDb2xsYXBzZWRCb29sKSB7XG4gICAgICBpZiAodHlwZW9mIGluZGV4VmFsdWUgICAgICAgIT09ICd1bmRlZmluZWQnICYmXG5cdFx0XHRcdFx0dHlwZW9mIGlzQ29sbGFwc2VkQm9vbCAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmIChpbmRleFZhbHVlID09PSBwYXJzZUludChpbmRleFZhbHVlLCAxMCkpIHtcbiAgICAgICAgICBkcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uW2luZGV4VmFsdWVdLmlzQ29sbGFwc2VkID0gaXNDb2xsYXBzZWRCb29sO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgcmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcblxuXHRcdGZ1bmN0aW9uIGdldERyYWdEcm9wQ29uZmlnTW9kZWwoKSB7XG5cdFx0XHRyZXR1cm4gX2RyYWdEcm9wQ29uZmlnTW9kZWw7XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gZ2V0RGlzdGluY3RJdGVtQ3NzQ2xhc3MoKSB7XG4gICAgICBsZXQgZGlzdGluY3RDc3NDbGFzcyA9IFtdO1xuICAgICAgYW5ndWxhci5mb3JFYWNoKF9saXN0RHJhZ0Ryb3BJdGVtQ3NzQ2xhc3NlcywgKHZhbHVlUmVmKT0+e1xuXG4gICAgICAgIGxldCBjc3NDbGFzc1JlZiA9IHZhbHVlUmVmLmNzc0NsYXNzO1xuXG4gICAgICAgIGlmIChkaXN0aW5jdENzc0NsYXNzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgZGlzdGluY3RDc3NDbGFzcy5wdXNoKGNzc0NsYXNzUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgY2FuQWRkID0gdHJ1ZTtcbiAgICAgICAgICBhbmd1bGFyLmZvckVhY2goZGlzdGluY3RDc3NDbGFzcywgKHZhbHVlUHJvYyk9PntcbiAgICAgICAgICAgIGxldCBjc3NDbGFzc1Byb2MgPSB2YWx1ZVByb2M7XG4gICAgICAgICAgICBpZiAoY3NzQ2xhc3NSZWYgPT09IGNzc0NsYXNzUHJvYykge1xuICAgICAgICAgICAgICBjYW5BZGQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoY2FuQWRkKSBkaXN0aW5jdENzc0NsYXNzLnB1c2goY3NzQ2xhc3NSZWYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkaXN0aW5jdENzc0NsYXNzO1x0XHRcdFxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEl0ZW1Dc3NEZXBlbmRpbmdOdW1iZXJJdGVtc0luUm93KG51bWJlck9mSXRlbXMpIHtcbiAgICAgIGlmKHR5cGVvZiBudW1iZXJPZkl0ZW1zICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgIGxldCBjbGFzc1RvUmV0dXJuID0gJyc7XG4gICAgICAgIGZvciAobGV0ICBpID0gX2xpc3REcmFnRHJvcEl0ZW1Dc3NDbGFzc2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKF9saXN0RHJhZ0Ryb3BJdGVtQ3NzQ2xhc3Nlc1tpXS5udW1iZXJJdGVtUGVyUm93ID09PSBudW1iZXJPZkl0ZW1zKSB7XG4gICAgICAgICAgICBjbGFzc1RvUmV0dXJuID0gX2xpc3REcmFnRHJvcEl0ZW1Dc3NDbGFzc2VzW2ldLmNzc0NsYXNzOyAgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc1RvUmV0dXJuO1xuICAgICAgfWVsc2V7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cdFx0XHRcblx0XHR9XG5cblx0XHRmdW5jdGlvbiBnZXRMaXN0SXRlbUNzc0NsYXNzKCkge1xuXHRcdFx0cmV0dXJuIF9saXN0RHJhZ0Ryb3BJdGVtQ3NzQ2xhc3NlcztcdFxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldEl0ZW1zTm90VG9Db3VudCgpIHtcblx0XHRcdHJldHVybiBfaXRlbXNOb3RUb0NvdW50Rm9SZWFsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGdldE1vZGFsQW5pbWF0aW9uVmFsdWUoKXtcblx0XHRcdHJldHVybiBfY29uZmlndXJhdGlvbi5tb2RhbEFuaW1hdGVkO1xuXHRcdH1cdFx0XHRcdFxuXHRcdFxuXHRcdGZ1bmN0aW9uIHNldE1vZGFsQW5pbWF0aW9uRmN0KHZhbHVlKXtcblx0XHRcdHNldE1vZGFsQW5pbWF0aW9uKHZhbHVlKTtcblx0XHR9XG5cdFx0XG5cdFx0ZnVuY3Rpb24gZ2V0TGlzdEVuYWJsZWRDb250cm9sKCl7XG5cdFx0XHRyZXR1cm4gYW5ndWxhci5jb3B5KF9jb250cm9sc0xpc3QpO1xuXHRcdH1cblx0XHRcblx0XHQvLyBmdW5jdGlvbiBzd2l0Y2hMYW5ndWFnZShsYW5ndWFnZSl7XG5cdFx0Ly8gXHRpZiAoYW5ndWxhci5pc1N0cmluZyhsYW5ndWFnZSkpIHtcblx0XHQvLyBcdFx0X2N1cnJlbnRMYW5ndWFnZSA9IGxhbmd1YWdlO1xuXHRcdC8vIFx0XHQkdHJhbnNsYXRlLnVzZShsYW5ndWFnZSk7XG5cdFx0Ly8gXHR9ZWxzZXtcblx0XHQvLyBcdFx0c2V0RGVmYXVsdExhbmd1YWdlKCk7XG5cdFx0Ly8gXHR9XG5cdFx0Ly8gfVx0XHRcdFx0XHRcblxuXHRcdGZ1bmN0aW9uIGlzUHJldmlld1BhbmVsVmlzaWJsZSgpe1xuXHRcdFx0cmV0dXJuIF9zaG93UHJldmlld1BhbmVsO1xuXHRcdH1cblx0XHRcblx0XHRmdW5jdGlvbiBhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZSgpe1xuXHRcdFx0cmV0dXJuIF9zaG93UHJldmlld01vZGVscztcblx0XHR9XHRcdFx0XHRcblx0fVxuXG4gIC8qKlxuICAgKiBhZGRUb0dyb3VwQ29udHJvbCA6IGFkZCBjb250cm9sIHRvIF9kcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsXG4gICAqIEBwYXJhbSB7W3R5cGVdfSB0aGlzQ29udHJvbCA6IGNvbnRyb2wgdG8gYWRkXG4gICAqIEBwYXJhbSB7W3R5cGVdfSB0aGlzR3JvdXAgICA6IGdyb3VwSWQgd2hlciB0aGlzIGNvbnRyb2wgc2hvdWxkIGJlIGFkZGVkXG4gICAqXG4gICAqIE5PVEUgOiBpZiBfZHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCB3cm9uZyBpbml0aWFsaXplZCBpdCB3aWxsIGNyZWF0ZSBsaXN0IG9mIGdyb3VwIGNvbmZvcm1pbmcgdG8gXG4gICAqIGNvbmZpZ01vZGVsXG4gICAqL1xuICBmdW5jdGlvbiBhZGRUb0dyb3VwQ29udHJvbCh0aGlzQ29udHJvbCwgdGhpc0dyb3VwKXtcbiAgICAvKipcbiAgICAgKiBzZWFyY2ggZ3JvdXAgaWYgYWxyZWFkeSBleGlzdHNcbiAgICAgKi9cbiAgICBpZiAoX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF0ubGVuZ3RoID4gMCkge1xuICAgICAgLyoqXG4gICAgICAgKiBjYXNlIHdoZW4gX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24ubGVuZ3RoIGlzID4gdG8gX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF0ubGVuZ3RoXG4gICAgICAgKlxuICAgICAgICogZm9yIGluc3RhbmNlIDogaW5pdGlhbGl6YXRpb24gX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF0gaW4gYmV0d2VlblxuICAgICAgICovXG4gICAgICBpZiAoX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF0ubGVuZ3RoIDwgX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24ubGVuZ3RoKSB7XG4gICAgICAgIGxldCBtaXNzaW5nR3JvdXBOdW1iZXIgPSBfZHJhZ0Ryb3BDb25maWdNb2RlbC5jb250YWluZXJDb25maWcuZGVjb3JhdGlvbi5sZW5ndGggLSBfZHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbFswXS5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtaXNzaW5nR3JvdXBOdW1iZXI7IGkrKykge1xuICAgICAgICAgIF9kcmFnRHJvcFByZXNlbnRhdGlvbk1vZGVsWzBdLnB1c2goW10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIHB1c2ggY29udHJvbCB0byByaWdodCBpbmRleCBcbiAgICAgICAqIChkZWR1Y2VkIGJ5IF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uLldoZW5JbmRleCB2YWx1ZSBmb3IgZ3JvdXBJZCA9PT0gdGhpc0dyb3VwKVxuICAgICAgICovXG4gICAgICAgX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24uZm9yRWFjaCgoZ3JvdXBDb25maWcpPT57XG4gICAgICAgIGlmICh0aGlzR3JvdXAuYWRkVG9Hcm91cEN0cmwgPT09IGdyb3VwQ29uZmlnLmdyb3VwSWQpIHtcbiAgICAgICAgICBfZHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbFswXVtncm91cENvbmZpZy5XaGVuSW5kZXhdLnB1c2godGhpc0NvbnRyb2wpO1xuICAgICAgICB9XG4gICAgICAgfSk7XG4gICAgfWVsc2V7XG4gICAgICAvKipcbiAgICAgICAqIG5vIGdyb3VwIG5vIGNvbnRyb2xcbiAgICAgICAqXG4gICAgICAgKiBpbml0aWFsaXplIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uIGxpc3RcbiAgICAgICAqL1xuICAgICAgX2RyYWdEcm9wQ29uZmlnTW9kZWwuY29udGFpbmVyQ29uZmlnLmRlY29yYXRpb24uZm9yRWFjaCgoKT0+X2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF0ucHVzaChbXSkpO1xuICAgICAgLyoqXG4gICAgICAgKiBwdXNoIGNvbnRyb2wgdG8gcmlnaHQgaW5kZXggXG4gICAgICAgKiAoZGVkdWNlZCBieSBfZHJhZ0Ryb3BDb25maWdNb2RlbC5jb250YWluZXJDb25maWcuZGVjb3JhdGlvbi5XaGVuSW5kZXggdmFsdWUgZm9yIGdyb3VwSWQgPT09IHRoaXNHcm91cClcbiAgICAgICAqL1xuICAgICAgIF9kcmFnRHJvcENvbmZpZ01vZGVsLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uLmZvckVhY2goKGdyb3VwQ29uZmlnKT0+e1xuICAgICAgICBpZiAodGhpc0dyb3VwLmFkZFRvR3JvdXBDdHJsID09PSBncm91cENvbmZpZy5ncm91cElkKSB7XG4gICAgICAgICAgX2RyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWxbMF1bZ3JvdXBDb25maWcuV2hlbkluZGV4XS5wdXNoKHRoaXNDb250cm9sKTtcbiAgICAgICAgfVxuICAgICAgIH0pOyBcbiAgICB9XG4gIH0gXHRcblxufVxuXG4vLyBlYXN5Rm9ybURyYWdXYXlDb25maWcuJGluamVjdCA9IFsnJHRyYW5zbGF0ZVByb3ZpZGVyJ107XG5cbmVhc3lGb3JtRHJhZ1dheUNvbmZpZy4kaW5qZWN0ID0gW107XG5cbmV4cG9ydCBkZWZhdWx0IGVhc3lGb3JtRHJhZ1dheUNvbmZpZztcblxuZXhwb3J0IHtFQVNZX0ZPUk1fRFJBR19EUk9QX1dBWV9DT05GSUdfTkFNRX07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2VkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi5wcm92aWRlci5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 79 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar LIST_DRAG_DROP_ITEM_CSS_CLASSES = [{\n cssClass: 'col-md-12',\n numberItemPerRow: 0\n}, {\n cssClass: 'col-md-12',\n numberItemPerRow: 1\n}, {\n cssClass: 'col-md-6',\n numberItemPerRow: 2\n}, {\n cssClass: 'col-md-4',\n numberItemPerRow: 3\n}];\n\nvar DRAG_DROP_CONFIG_MODEL = {\n dropZoneConfig: {\n decoration: [{\n WhenIndex: 0,\n ApplycssClass: 'col-md-4',\n fontAwesomeIcon: 'fa fa-level-up',\n title: 'Drag control from here : '\n }, {\n WhenIndex: 1,\n ApplycssClass: 'col-md-8',\n fontAwesomeIcon: 'fa fa-level-down',\n title: 'Drop control into here : '\n }],\n verboseMode: false\n },\n containerConfig: {\n decoration: [{\n WhenIndex: 0,\n ApplycssClass: 'col-md-12',\n title: 'Blank : ',\n groupId: 'blank',\n isCollapsed: true\n }, {\n WhenIndex: 1,\n ApplycssClass: 'col-md-12',\n title: 'Headers : ',\n groupId: 'headers',\n isCollapsed: true\n }, {\n WhenIndex: 2,\n ApplycssClass: 'col-md-12',\n title: 'Text inputs : ',\n groupId: 'inputs',\n isCollapsed: true\n }, {\n WhenIndex: 3,\n ApplycssClass: 'col-md-12',\n title: 'Textareas : ',\n groupId: 'textareas',\n isCollapsed: true\n }, {\n WhenIndex: 4,\n ApplycssClass: 'col-md-12',\n title: 'Radios : ',\n groupId: 'radios',\n isCollapsed: true\n }, {\n WhenIndex: 5,\n ApplycssClass: 'col-md-12',\n title: 'Checkboxes : ',\n groupId: 'checkboxes',\n isCollapsed: true\n }, {\n WhenIndex: 6,\n ApplycssClass: 'col-md-12',\n title: 'Selects : ',\n groupId: 'selects',\n isCollapsed: true\n }],\n verboseMode: false,\n collapseEnabled: true,\n collapseCtrl: [{\n atIndex: 0,\n collapse: true\n }, {\n atIndex: 1,\n collapse: true\n }]\n },\n itemConfig: {\n verboseMode: false\n }\n};\n\nvar DRAG_DROP_PRESENTATION_MODEL = [\n//1 column here is control selection column\n[], [\n//empty 1st line at initialisation\n[]]];\n\nvar ITEMS_NOT_TO_COUNT_FOR_REAL = {\n //placeholder : '',\n itemBeingDragged: ''\n};\n\nexports.LIST_DRAG_DROP_ITEM_CSS_CLASSES = LIST_DRAG_DROP_ITEM_CSS_CLASSES;\nexports.DRAG_DROP_CONFIG_MODEL = DRAG_DROP_CONFIG_MODEL;\nexports.DRAG_DROP_PRESENTATION_MODEL = DRAG_DROP_PRESENTATION_MODEL;\nexports.ITEMS_NOT_TO_COUNT_FOR_REAL = ITEMS_NOT_TO_COUNT_FOR_REAL;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLnByb3ZpZGVyLmhlbHBlcnMuanM/MGFjMCJdLCJuYW1lcyI6WyJMSVNUX0RSQUdfRFJPUF9JVEVNX0NTU19DTEFTU0VTIiwiY3NzQ2xhc3MiLCJudW1iZXJJdGVtUGVyUm93IiwiRFJBR19EUk9QX0NPTkZJR19NT0RFTCIsImRyb3Bab25lQ29uZmlnIiwiZGVjb3JhdGlvbiIsIldoZW5JbmRleCIsIkFwcGx5Y3NzQ2xhc3MiLCJmb250QXdlc29tZUljb24iLCJ0aXRsZSIsInZlcmJvc2VNb2RlIiwiY29udGFpbmVyQ29uZmlnIiwiZ3JvdXBJZCIsImlzQ29sbGFwc2VkIiwiY29sbGFwc2VFbmFibGVkIiwiY29sbGFwc2VDdHJsIiwiYXRJbmRleCIsImNvbGxhcHNlIiwiaXRlbUNvbmZpZyIsIkRSQUdfRFJPUF9QUkVTRU5UQVRJT05fTU9ERUwiLCJJVEVNU19OT1RfVE9fQ09VTlRfRk9SX1JFQUwiLCJpdGVtQmVpbmdEcmFnZ2VkIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQU1BLGtDQUFrQyxDQUN0QztBQUNFQyxZQUFXLFdBRGI7QUFFRUMsb0JBQWtCO0FBRnBCLENBRHNDLEVBS3RDO0FBQ0VELFlBQVcsV0FEYjtBQUVFQyxvQkFBa0I7QUFGcEIsQ0FMc0MsRUFTdEM7QUFDRUQsWUFBVyxVQURiO0FBRUVDLG9CQUFrQjtBQUZwQixDQVRzQyxFQWF0QztBQUNFRCxZQUFXLFVBRGI7QUFFRUMsb0JBQWtCO0FBRnBCLENBYnNDLENBQXhDOztBQW1CQSxJQUFNQyx5QkFBMEI7QUFDOUJDLGtCQUFpQjtBQUNmQyxnQkFBYyxDQUNkO0FBQ0VDLGlCQUFXLENBRGI7QUFFRUMscUJBQWUsVUFGakI7QUFHRUMsdUJBQWlCLGdCQUhuQjtBQUlFQyxhQUFPO0FBSlQsS0FEYyxFQU9kO0FBQ0VILGlCQUFXLENBRGI7QUFFRUMscUJBQWUsVUFGakI7QUFHRUMsdUJBQWlCLGtCQUhuQjtBQUlFQyxhQUFPO0FBSlQsS0FQYyxDQURDO0FBZWpCQyxpQkFBYztBQWZHLEdBRGE7QUFrQjlCQyxtQkFBa0I7QUFDaEJOLGdCQUFnQixDQUNkO0FBQ0VDLGlCQUFnQixDQURsQjtBQUVFQyxxQkFBZ0IsV0FGbEI7QUFHRUUsYUFBZ0IsVUFIbEI7QUFJRUcsZUFBZ0IsT0FKbEI7QUFLRUMsbUJBQWdCO0FBTGxCLEtBRGMsRUFRZDtBQUNFUCxpQkFBZ0IsQ0FEbEI7QUFFRUMscUJBQWdCLFdBRmxCO0FBR0VFLGFBQWdCLFlBSGxCO0FBSUVHLGVBQWdCLFNBSmxCO0FBS0VDLG1CQUFnQjtBQUxsQixLQVJjLEVBZWQ7QUFDRVAsaUJBQWdCLENBRGxCO0FBRUVDLHFCQUFnQixXQUZsQjtBQUdFRSxhQUFnQixnQkFIbEI7QUFJRUcsZUFBZ0IsUUFKbEI7QUFLRUMsbUJBQWdCO0FBTGxCLEtBZmMsRUFzQmQ7QUFDRVAsaUJBQWdCLENBRGxCO0FBRUVDLHFCQUFnQixXQUZsQjtBQUdFRSxhQUFnQixjQUhsQjtBQUlFRyxlQUFnQixXQUpsQjtBQUtFQyxtQkFBZ0I7QUFMbEIsS0F0QmMsRUE2QmQ7QUFDRVAsaUJBQWdCLENBRGxCO0FBRUVDLHFCQUFnQixXQUZsQjtBQUdFRSxhQUFnQixXQUhsQjtBQUlFRyxlQUFnQixRQUpsQjtBQUtFQyxtQkFBZ0I7QUFMbEIsS0E3QmMsRUFvQ2Q7QUFDRVAsaUJBQWdCLENBRGxCO0FBRUVDLHFCQUFnQixXQUZsQjtBQUdFRSxhQUFnQixlQUhsQjtBQUlFRyxlQUFnQixZQUpsQjtBQUtFQyxtQkFBZ0I7QUFMbEIsS0FwQ2MsRUEyQ2Q7QUFDRVAsaUJBQWdCLENBRGxCO0FBRUVDLHFCQUFnQixXQUZsQjtBQUdFRSxhQUFnQixZQUhsQjtBQUlFRyxlQUFnQixTQUpsQjtBQUtFQyxtQkFBZ0I7QUFMbEIsS0EzQ2MsQ0FEQTtBQW9EaEJILGlCQUFrQixLQXBERjtBQXFEaEJJLHFCQUFrQixJQXJERjtBQXNEaEJDLGtCQUFrQixDQUNoQjtBQUNFQyxlQUFVLENBRFo7QUFFRUMsZ0JBQVc7QUFGYixLQURnQixFQUtoQjtBQUNFRCxlQUFVLENBRFo7QUFFRUMsZ0JBQVc7QUFGYixLQUxnQjtBQXRERixHQWxCWTtBQW1GOUJDLGNBQWtCO0FBQ2xCUixpQkFBYztBQURJO0FBbkZZLENBQWhDOztBQXdGQSxJQUFNUywrQkFBK0I7QUFDbkM7QUFDQSxFQUZtQyxFQUduQztBQUNFO0FBQ0EsRUFGRixDQUhtQyxDQUFyQzs7QUFTQSxJQUFNQyw4QkFBOEI7QUFDbEM7QUFDQUMsb0JBQXNCO0FBRlksQ0FBcEM7O1FBTUVyQiwrQixHQUFBQSwrQjtRQUNBRyxzQixHQUFBQSxzQjtRQUNBZ0IsNEIsR0FBQUEsNEI7UUFDQUMsMkIsR0FBQUEsMkIiLCJmaWxlIjoiNzkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBMSVNUX0RSQUdfRFJPUF9JVEVNX0NTU19DTEFTU0VTID0gW1xuICB7XG4gICAgY3NzQ2xhc3MgOiAnY29sLW1kLTEyJywgXG4gICAgbnVtYmVySXRlbVBlclJvdzogMFxuICB9LFxuICB7XG4gICAgY3NzQ2xhc3MgOiAnY29sLW1kLTEyJywgXG4gICAgbnVtYmVySXRlbVBlclJvdzogMVxuICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAge1xuICAgIGNzc0NsYXNzIDogJ2NvbC1tZC02JywgXG4gICAgbnVtYmVySXRlbVBlclJvdzogMlxuICB9LFxuICB7XG4gICAgY3NzQ2xhc3MgOiAnY29sLW1kLTQnLCBcbiAgICBudW1iZXJJdGVtUGVyUm93OiAzXG4gIH1cbl07IFxuXG5jb25zdCBEUkFHX0RST1BfQ09ORklHX01PREVMID0gIHtcbiAgZHJvcFpvbmVDb25maWcgOiB7XG4gICAgZGVjb3JhdGlvbiA6ICBbXG4gICAge1xuICAgICAgV2hlbkluZGV4OiAwLFxuICAgICAgQXBwbHljc3NDbGFzczogJ2NvbC1tZC00JywgXG4gICAgICBmb250QXdlc29tZUljb246ICdmYSBmYS1sZXZlbC11cCcsXG4gICAgICB0aXRsZTogJ0RyYWcgY29udHJvbCBmcm9tIGhlcmUgOiAnXG4gICAgfSxcbiAgICB7XG4gICAgICBXaGVuSW5kZXg6IDEsXG4gICAgICBBcHBseWNzc0NsYXNzOiAnY29sLW1kLTgnLCBcbiAgICAgIGZvbnRBd2Vzb21lSWNvbjogJ2ZhIGZhLWxldmVsLWRvd24nLFxuICAgICAgdGl0bGU6ICdEcm9wIGNvbnRyb2wgaW50byBoZXJlIDogJ1xuICAgIH1cbiAgXSxcbiAgdmVyYm9zZU1vZGUgOiBmYWxzZVxufSxcbiAgY29udGFpbmVyQ29uZmlnIDoge1xuICAgIGRlY29yYXRpb24gOiAgICBbXG4gICAgICB7XG4gICAgICAgIFdoZW5JbmRleCAgICAgOiAwLFxuICAgICAgICBBcHBseWNzc0NsYXNzIDogJ2NvbC1tZC0xMicsIFxuICAgICAgICB0aXRsZSAgICAgICAgIDogJ0JsYW5rIDogJyxcbiAgICAgICAgZ3JvdXBJZCAgICAgICA6ICdibGFuaycsXG4gICAgICAgIGlzQ29sbGFwc2VkICAgOiB0cnVlIFxuICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAge1xuICAgICAgICBXaGVuSW5kZXggICAgIDogMSxcbiAgICAgICAgQXBwbHljc3NDbGFzcyA6ICdjb2wtbWQtMTInLCBcbiAgICAgICAgdGl0bGUgICAgICAgICA6ICdIZWFkZXJzIDogJyxcbiAgICAgICAgZ3JvdXBJZCAgICAgICA6ICdoZWFkZXJzJyxcbiAgICAgICAgaXNDb2xsYXBzZWQgICA6IHRydWUgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBXaGVuSW5kZXggICAgIDogMixcbiAgICAgICAgQXBwbHljc3NDbGFzcyA6ICdjb2wtbWQtMTInLCBcbiAgICAgICAgdGl0bGUgICAgICAgICA6ICdUZXh0IGlucHV0cyA6ICcsXG4gICAgICAgIGdyb3VwSWQgICAgICAgOiAnaW5wdXRzJyAsXG4gICAgICAgIGlzQ29sbGFwc2VkICAgOiB0cnVlXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBXaGVuSW5kZXggICAgIDogMyxcbiAgICAgICAgQXBwbHljc3NDbGFzcyA6ICdjb2wtbWQtMTInLFxuICAgICAgICB0aXRsZSAgICAgICAgIDogJ1RleHRhcmVhcyA6ICcsXG4gICAgICAgIGdyb3VwSWQgICAgICAgOiAndGV4dGFyZWFzJyxcbiAgICAgICAgaXNDb2xsYXBzZWQgICA6IHRydWUgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBXaGVuSW5kZXggICAgIDogNCxcbiAgICAgICAgQXBwbHljc3NDbGFzcyA6ICdjb2wtbWQtMTInLFxuICAgICAgICB0aXRsZSAgICAgICAgIDogJ1JhZGlvcyA6ICcsXG4gICAgICAgIGdyb3VwSWQgICAgICAgOiAncmFkaW9zJyxcbiAgICAgICAgaXNDb2xsYXBzZWQgICA6IHRydWUgXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBXaGVuSW5kZXggICAgIDogNSxcbiAgICAgICAgQXBwbHljc3NDbGFzcyA6ICdjb2wtbWQtMTInLFxuICAgICAgICB0aXRsZSAgICAgICAgIDogJ0NoZWNrYm94ZXMgOiAnLFxuICAgICAgICBncm91cElkICAgICAgIDogJ2NoZWNrYm94ZXMnLFxuICAgICAgICBpc0NvbGxhcHNlZCAgIDogdHJ1ZSBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIFdoZW5JbmRleCAgICAgOiA2LFxuICAgICAgICBBcHBseWNzc0NsYXNzIDogJ2NvbC1tZC0xMicsXG4gICAgICAgIHRpdGxlICAgICAgICAgOiAnU2VsZWN0cyA6ICcsXG4gICAgICAgIGdyb3VwSWQgICAgICAgOiAnc2VsZWN0cycsXG4gICAgICAgIGlzQ29sbGFwc2VkICAgOiB0cnVlIFxuICAgICAgfSBcbiAgICBdLFxuICAgIHZlcmJvc2VNb2RlICAgICA6IGZhbHNlLCBcbiAgICBjb2xsYXBzZUVuYWJsZWQgOiB0cnVlLFxuICAgIGNvbGxhcHNlQ3RybCAgICA6IFtcbiAgICAgIHtcbiAgICAgICAgYXRJbmRleCA6IDAsXG4gICAgICAgIGNvbGxhcHNlIDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYXRJbmRleCA6IDEsXG4gICAgICAgIGNvbGxhcHNlIDogdHJ1ZVxuICAgICAgfVxuICAgIF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgfSxcbiAgaXRlbUNvbmZpZyAgICA6ICAge1xuICB2ZXJib3NlTW9kZSA6IGZhbHNlXG4gIH0gICAgICAgICAgICAgICAgICBcbn07ICBcblxuY29uc3QgRFJBR19EUk9QX1BSRVNFTlRBVElPTl9NT0RFTCA9IFtcbiAgLy8xIGNvbHVtbiBoZXJlIGlzIGNvbnRyb2wgc2VsZWN0aW9uIGNvbHVtblxuICBbXSxcbiAgW1xuICAgIC8vZW1wdHkgMXN0IGxpbmUgYXQgaW5pdGlhbGlzYXRpb25cbiAgICBbXVxuICBdXG5dO1xuXG5jb25zdCBJVEVNU19OT1RfVE9fQ09VTlRfRk9SX1JFQUwgPSB7XG4gIC8vcGxhY2Vob2xkZXIgOiAgICAgICAgICcnLFxuICBpdGVtQmVpbmdEcmFnZ2VkIDogICAgJydcbn07XG5cbmV4cG9ydCB7XG4gIExJU1RfRFJBR19EUk9QX0lURU1fQ1NTX0NMQVNTRVMsXG4gIERSQUdfRFJPUF9DT05GSUdfTU9ERUwsXG4gIERSQUdfRFJPUF9QUkVTRU5UQVRJT05fTU9ERUwsXG4gIElURU1TX05PVF9UT19DT1VOVF9GT1JfUkVBTFxufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9lZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuL2VkYURyYWdEcm9wV2F5LmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4ucHJvdmlkZXIuaGVscGVycy5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 80 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS = exports.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* global angular */\n\n///////////////////////////////////////////////////////////////////////\n// TODO :\n// - check no use methods that come from step way and delete if not needed\n// - check other TODO (a lot of fixes are needed)\n///////////////////////////////////////////////////////////////////////\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGenControllerHelpers = __webpack_require__(81);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = 'edaDragDropWayEasyFormGenCtrl';\nvar DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS = 'vm';\n\nvar edaDragDropWayEasyFormGenCtrl = function () {\n function edaDragDropWayEasyFormGenCtrl($scope, easyFormGenVersion, $filter, $anchorScroll, toaster, $timeout, $log, formFieldManage, controllerModalProxy, dragDropItemDecorationService, ddModelConfModelProxyService, ddItemRightClickedManager, easyFormDragWayConfig) {\n _classCallCheck(this, edaDragDropWayEasyFormGenCtrl);\n\n this.$scope = $scope;\n this.easyFormGenVersion = easyFormGenVersion;\n this.$filter = $filter;\n this.$anchorScroll = $anchorScroll;\n this.toaster = toaster;\n this.$timeout = $timeout;\n this.$log = $log;\n this.formFieldManage = formFieldManage;\n this.controllerModalProxy = controllerModalProxy;\n this.dragDropItemDecorationService = dragDropItemDecorationService;\n // this.dragDropConfig = dragDropConfig;\n this.ddModelConfModelProxyService = ddModelConfModelProxyService;\n this.ddItemRightClickedManager = ddItemRightClickedManager;\n this.easyFormDragWayConfig = easyFormDragWayConfig;\n\n this.init();\n }\n\n _createClass(edaDragDropWayEasyFormGenCtrl, [{\n key: 'init',\n value: function init() {\n this.easyFormGeneratorVERSION = this.easyFormGenVersion;\n this.tab = (0, _edaDragDropWayEdaDragdropWayEasyFormGenControllerHelpers.initTabModel)(this.easyFormDragWayConfig.isPreviewPanelVisible(), this.easyFormDragWayConfig.arePreviewModelsVisible());\n this.returnSaveEvent = false;\n this.dataModel = {}; //was vm.model in ES5 version\n this.wfFormFields = [];\n this.wfFormFieldsOnlyNeededProperties = [];\n this.ihm = (0, _edaDragDropWayEdaDragdropWayEasyFormGenControllerHelpers.initIhmModel)();\n this.easyFormDragDropProperties = this.easyFormDragWayConfig.getDragDropConfigModel();\n this.dragDropModel = [].concat(this.easyFormDragWayConfig.getDragDropPresentationModel());\n this.numberOfColumns = 1;\n this.MaxNumberOfColumns = 3;\n this.MinNumberOfColumns = 1;\n this.configuration = {};\n this.animationsEnabled = this.easyFormDragWayConfig.getModalAnimationValue();\n this.editPanelModel = { toggle: false };\n this.debugProxyModel = this.controllerModalProxy.ProxyModel;\n this.model = [];\n\n this.formFieldManage.initConfigurationEditFromScratch(this.configuration, false);\n this.controllerModalProxy.initProxyModel();\n }\n }, {\n key: 'collapseAllGroupControl',\n value: function collapseAllGroupControl(allExceptThisGroupIndex) {\n var _this = this;\n\n angular.forEach(this.easyFormDragDropProperties.containerConfig.decoration, function (value) {\n if (value.WhenIndex !== allExceptThisGroupIndex) _this.easyFormDragWayConfig.setDragDropConfigContainerDecorationCollapse(_this.easyFormDragDropProperties, value.WhenIndex, true);\n });\n }\n }, {\n key: 'onSubmit',\n value: function onSubmit() {\n this.toaster.pop({\n type: 'info',\n timeout: 2000,\n title: 'should save data model if it were not a static example',\n body: 'data :' + this.$filter('json')(this.dataModel, 4),\n showCloseButton: true\n });\n }\n }, {\n key: 'resetToZeroModel',\n value: function resetToZeroModel() {\n this.configuration.activeLine = 1;\n if (this.configuration.lines.length > 1) this.configuration.lines.splice(1, this.configuration.lines.length - 2);\n return this.countConfigurationModelLines();\n }\n\n //TO CHECK if does not come from step way :\n\n }, {\n key: 'countConfigurationModelLines',\n value: function countConfigurationModelLines() {\n return this.configuration.lines.length;\n }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // setActiveLineNumber(lineNumber){\n // if (lineNumber <= this.countConfigurationModelLines()) this.configuration.activeLine = lineNumber;\n // }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // upThisLine(indexLine){\n // if (indexLine > -1) {\n // if (this.configuration.lines[indexLine - 1]) {\n // let currentLineObj = this.configuration.lines[indexLine];\n // this.configuration.lines.splice(indexLine , 1);\n // this.configuration.lines.splice((indexLine - 1), 0, currentLineObj);\n // this.configuration.activeLine = 1;\n // }\n // }\n //\n // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // downThisLine(indexLine){\n // if (indexLine > -1) {\n // if (this.configuration.lines[indexLine + 1]) {\n // let currentLineObj = this.configuration.lines[indexLine];\n // this.configuration.lines.splice(indexLine , 1);\n // this.configuration.lines.splice((indexLine + 1), 0, currentLineObj);\n // this.configuration.activeLine = 1;\n // }\n // }\n // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // removeThisLine(index){\n // if (index > -1) {\n // if (this.configuration.lines.length > 1) {\n // if (this.configuration.activeLine === index + 1) this.configuration.activeLine = 1;\n // this.configuration.lines.splice(index, 1);\n // }else{\n // this.$timeout(()=>{\n // this.toaster.pop({\n // type : 'warning',\n // title : 'Last line' ,\n // body : 'Can\\'t delete the last line',\n // showCloseButton : true\n // });\n // }, 100);\n // }\n // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }\n // }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // increaseNumberOfColumns(){\n // if (this.configuration.lines[this.configuration.activeLine -1].columns.length < this.MaxNumberOfColumns) {\n // let newNumberOfColumns = this.configuration.lines[this.configuration.activeLine -1].columns.push(initColumnTemplate());\n // this.configuration.lines[this.configuration.activeLine -1].columns[newNumberOfColumns - 1].numColumn = newNumberOfColumns;\n // }\n // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }\n\n // //TO CHECK THEN TO DELETE : should come from step way...\n // decreaseNumberOfColumns(indexLine, indexColumn){\n // if (this.configuration.lines[this.configuration.activeLine -1].columns.length > 1) {\n // this.configuration.lines[this.configuration.activeLine -1].columns.splice(this.configuration.lines[this.configuration.activeLine -1].columns.length -1, 1);\n // }\n // this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }\n\n }, {\n key: 'saveThisForm',\n value: function saveThisForm() {\n if (typeof this.configuration.formName === 'undefined') {\n this.toaster.pop({\n type: 'warning',\n timeout: 2000,\n title: 'Form name is undefined',\n body: 'Form has not been saved.',\n showCloseButton: true\n });\n return false;\n }\n if (this.configuration.formName === '') {\n this.toaster.pop({\n type: 'warning',\n timeout: 2000,\n title: 'Form name is required',\n body: 'Form has not been saved.',\n showCloseButton: true\n });\n return false;\n }\n this.toaster.pop({\n type: 'wait',\n timeout: 10000,\n title: 'Form is being saved',\n body: 'Wait.',\n showCloseButton: true\n });\n this.toaster.clear();\n this.returnSaveEvent = true;\n return true;\n }\n }, {\n key: 'dragoverCallbackContainer',\n value: function dragoverCallbackContainer(parentparentIndex, parentIndex, index) {\n //prevent container in layout column to be drag to control select contianer\n if (index === 0) return false;\n return true;\n }\n }, {\n key: 'dropCallback',\n value: function dropCallback(event, index, item, external, type, allowedType) {\n var _this2 = this;\n\n if (external) {\n if (allowedType === 'itemType' && !item.label) return false;\n if (allowedType === 'containerType' && !angular.isArray(item)) return false;\n }\n //set a timeout befire binding since ddModel may not be called when already full updated\n var timerRefreshDDToConfig = this.$timeout(function () {\n _this2.configuration = angular.copy(_this2.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(_this2.configuration, _this2.dragDropModel));\n _this2.formFieldManage.applyConfigurationToformlyModel(_this2.configuration, _this2.wfFormFields, _this2.dataModel);\n _this2.wfFormFieldsOnlyNeededProperties = angular.copy(_this2.wfFormFields);\n _this2.ddModelConfModelProxyService.refreshControlsKeys(_this2.configuration, _this2.dragDropModel);\n }, 200);\n this.$scope.$on('$destroy', function () {\n return _this2.$timeout.cancel(timerRefreshDDToConfig);\n });\n return item;\n }\n }, {\n key: 'dndItemMoved',\n value: function dndItemMoved(parentParentIndex, parentIndex, itemIndex) {\n //prevent item from first container to disapear when dropped on other container\n if (parentParentIndex > 0) this.dragDropModel[parentParentIndex][parentIndex].splice(itemIndex, 1);\n }\n }, {\n key: 'dragoverCallbackItems',\n value: function dragoverCallbackItems(ParentParentIndex, parentIndex) {\n //prevent items in layout column to be drag to control select\n if (parentIndex === 0) return false;\n return true;\n }\n\n //TODO : will replace in html : dnd-disable-if=\"items.length > 2\"\n\n }, {\n key: 'disableItemDropIf',\n value: function disableItemDropIf() {}\n }, {\n key: 'dropCallbackItems',\n value: function dropCallbackItems(event, index, realIndex, parentIndex, parentParentIndex, parentParentParentIndex, item, external, type, allowedType) {\n var _this3 = this;\n\n if (external) {\n if (allowedType === 'itemType' && !item.label) return false;\n if (allowedType === 'containerType' && !angular.isArray(item)) return false;\n }\n //set a timeout before binding since ddModel may not be called when already full updated\n var timerRefreshDDToConfig = this.$timeout(function () {\n _this3.configuration = angular.copy(_this3.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(_this3.configuration, _this3.dragDropModel));\n _this3.formFieldManage.applyConfigurationToformlyModel(_this3.configuration, _this3.wfFormFields, _this3.dataModel);\n _this3.wfFormFieldsOnlyNeededProperties = angular.copy(_this3.wfFormFields);\n // refresh controls key in dragDrop Model to persist already exists controls between refreshes when item drop events\n _this3.ddModelConfModelProxyService.refreshControlsKeys(_this3.configuration, _this3.dragDropModel);\n }, 200);\n // add/set rightCliked property to false (will help edaRightClick directive)\n this.ddItemRightClickedManager.setUnRightClicked(item);\n // timerRefreshDDToConfig timer destruction\n this.$scope.$on('$destroy', function () {\n return _this3.$timeout.cancel(timerRefreshDDToConfig);\n });\n return item;\n }\n }, {\n key: 'saveFromEditPanel',\n value: function saveFromEditPanel() {\n /**\n * TODO :\n * should be called from edit panel\n *\n * AND\n *\n * should call all these methods\n *\n * need to get :\n *\n * - line index\n * - column index\n * - basicSelectRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service\n * - groupedSelectRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service\n * - radioRowCollection (from edpitpanelcontroller) --> maybe in controllerModalProxy service\n */\n this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel();\n //save config to control\n //controllerModalProxy.applyConfigToSelectedControl(self.proxyModel);\n //return current model to parent controller :\n\n //update configuration model and formly model\n this.controllerModalProxy.bindConfigurationModelFromProxyModel(this.controllerModalProxy.getEditPanelModelLineIndex(), this.controllerModalProxy.getEditPanelModelColumnIndex(), this.configuration);\n this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n this.ddModelConfModelProxyService.refreshControlsKeys(this.configuration, this.dragDropModel);\n this.controllerModalProxy.setEditPanelModelToggle(false);\n this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle();\n this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel);\n }\n }, {\n key: 'closeEditPanel',\n value: function closeEditPanel() {\n // reset all rightClicked control properties to false\n this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel);\n\n /**\n * TODO : refresh configuration model\n * uncomment after update these next 3 lines\n *\n * NOTE : indexLine AND numcolumn should be stored in service and\n * updated when togle sidepanel\n */\n //this.controllerModalProxy.bindConfigurationModelFromProxyModel(indexLine, numcolumn, modalAddCtrlModel, this.configuration);\n //this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n //this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n\n this.controllerModalProxy.setEditPanelModelToggle(false);\n this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle();\n }\n }, {\n key: 'setRightClicked',\n value: function setRightClicked(previousState, item) {\n item.rightCliked = true;\n }\n }, {\n key: 'toggleEditPanel',\n value: function toggleEditPanel(event, lineIndex, colIndex, item) {\n var _this4 = this;\n\n this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel);\n // already opened (could be another control edit)\n if (this.controllerModalProxy.getEditPanelModelToggle()) {\n // -> immediate close and refresh configuration model + formly model\n this.controllerModalProxy.setEditPanelModelToggle(false);\n this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle();\n\n //TODO : for refreshing\n //this.controllerModalProxy.bindConfigurationModelFromProxyModel(indexLine, numcolumn, modalAddCtrlModel, this.configuration);\n //this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n //this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n\n // check if new control right clicked otherwise just toggle side panel\n if (typeof this.controllerModalProxy.getEditPanelModelLineIndex() !== 'undefined' && typeof this.controllerModalProxy.getEditPanelModelColumnIndex() !== 'undefined' && typeof this.controllerModalProxy.getEditPanelModelControl() !== 'undefined') {\n if (this.controllerModalProxy.getEditPanelModelLineIndex() === lineIndex && this.controllerModalProxy.getEditPanelModelColumnIndex() === colIndex && angular.equals(this.controllerModalProxy.getEditPanelModelControl(), item)) {\n //console.info('already opened for SAME ctrl : so close - no re-open');\n } else {\n (function () {\n //console.info('already opened for DIFFERENT ctrl : so re-open');\n item.rightCliked = true;\n // set a timeout before re-opening, 500ms is ok for a ps-size=\"400px\"\n var timerCloseOpenedEditPanel = _this4.$timeout(function () {\n _this4.controllerModalProxy.setEditPanelModelLineIndex(lineIndex);\n _this4.controllerModalProxy.setEditPanelModelColumnIndex(colIndex);\n _this4.controllerModalProxy.setEditPanelModelControl(item);\n // control model passed to Service : controllerModalProxy\n _this4.controllerModalProxy.setProxyModelFromConfigurationSelection(_this4.configuration, lineIndex, colIndex);\n _this4.controllerModalProxy.setEditPanelModelToggle(true);\n _this4.$scope.editPanelModel.toggle = _this4.controllerModalProxy.getEditPanelModelToggle();\n }, 200);\n _this4.$scope.$on('$destroy', function () {\n return _this4.$timeout.cancel(timerCloseOpenedEditPanel);\n });\n })();\n }\n }\n } else {\n // previous state = closed = immediate open\n // console.info('NOT already opened : so open');\n item.rightCliked = true;\n\n this.controllerModalProxy.setEditPanelModelLineIndex(lineIndex);\n this.controllerModalProxy.setEditPanelModelColumnIndex(colIndex);\n this.controllerModalProxy.setEditPanelModelControl(item);\n // control model passed to Service : controllerModalProxy\n this.controllerModalProxy.setProxyModelFromConfigurationSelection(this.configuration, lineIndex, colIndex);\n this.controllerModalProxy.setEditPanelModelToggle(true);\n this.editPanelModel.toggle = this.controllerModalProxy.getEditPanelModelToggle();\n }\n\n // console.info('after toggleLeftPanel check :');\n // console.dir({\n // 'this.editPanelModel' : angular.copy(this.editPanelModel),\n // 'controllerModalProxy.editPanelModel' : angular.copy(this.controllerModalProxy.editPanelModel)\n // });\n }\n\n // // refreshModels : to call after drag and drop events\n // refreshModels(){\n // this.$timeout(()=>{\n // console.info('refreshing models');\n // formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n // this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n // }, 10);\n // }\n\n\n }, {\n key: 'removeThisLine',\n value: function removeThisLine(lineIndex) {\n this.dragDropModel[1].splice(lineIndex, 1);\n }\n\n //TODO : to fix\n\n }, {\n key: 'addNewline',\n value: function addNewline() {\n // re-render formfield\n // TODO : to fix\n this.formFieldManage.applyConfigurationToformlyModel(this.configuration, this.wfFormFields, this.dataModel);\n this.wfFormFieldsOnlyNeededProperties = angular.copy(this.wfFormFields);\n }\n }, {\n key: 'insertNewLine',\n value: function insertNewLine() {\n this.addNewline();\n this.dragDropModel[1].push([]);\n }\n }]);\n\n return edaDragDropWayEasyFormGenCtrl;\n}();\n\nedaDragDropWayEasyFormGenCtrl.$inject = ['$scope', 'easyFormGenVersion', '$filter', '$anchorScroll', 'toaster', '$timeout', '$log', 'formFieldManage', 'controllerModalProxy', 'dragDropItemDecorationService', 'ddModelConfModelProxyService', 'ddItemRightClickedManager', 'easyFormDragWayConfig'];\n\nexports.default = edaDragDropWayEasyFormGenCtrl;\nexports.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER = DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER;\nexports.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS = DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmNvbnRyb2xsZXIuanM/NGRkMiJdLCJuYW1lcyI6WyJEUkFHX0RST1BfV0FZX0VBU1lfRk9STV9HRU5fQ09OVFJPTExFUiIsIkRSQUdfRFJPUF9XQVlfRUFTWV9GT1JNX0dFTl9DT05UUk9MTEVSQVMiLCJlZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuQ3RybCIsIiRzY29wZSIsImVhc3lGb3JtR2VuVmVyc2lvbiIsIiRmaWx0ZXIiLCIkYW5jaG9yU2Nyb2xsIiwidG9hc3RlciIsIiR0aW1lb3V0IiwiJGxvZyIsImZvcm1GaWVsZE1hbmFnZSIsImNvbnRyb2xsZXJNb2RhbFByb3h5IiwiZHJhZ0Ryb3BJdGVtRGVjb3JhdGlvblNlcnZpY2UiLCJkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlIiwiZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlciIsImVhc3lGb3JtRHJhZ1dheUNvbmZpZyIsImluaXQiLCJlYXN5Rm9ybUdlbmVyYXRvclZFUlNJT04iLCJ0YWIiLCJpc1ByZXZpZXdQYW5lbFZpc2libGUiLCJhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZSIsInJldHVyblNhdmVFdmVudCIsImRhdGFNb2RlbCIsIndmRm9ybUZpZWxkcyIsIndmRm9ybUZpZWxkc09ubHlOZWVkZWRQcm9wZXJ0aWVzIiwiaWhtIiwiZWFzeUZvcm1EcmFnRHJvcFByb3BlcnRpZXMiLCJnZXREcmFnRHJvcENvbmZpZ01vZGVsIiwiZHJhZ0Ryb3BNb2RlbCIsImNvbmNhdCIsImdldERyYWdEcm9wUHJlc2VudGF0aW9uTW9kZWwiLCJudW1iZXJPZkNvbHVtbnMiLCJNYXhOdW1iZXJPZkNvbHVtbnMiLCJNaW5OdW1iZXJPZkNvbHVtbnMiLCJjb25maWd1cmF0aW9uIiwiYW5pbWF0aW9uc0VuYWJsZWQiLCJnZXRNb2RhbEFuaW1hdGlvblZhbHVlIiwiZWRpdFBhbmVsTW9kZWwiLCJ0b2dnbGUiLCJkZWJ1Z1Byb3h5TW9kZWwiLCJQcm94eU1vZGVsIiwibW9kZWwiLCJpbml0Q29uZmlndXJhdGlvbkVkaXRGcm9tU2NyYXRjaCIsImluaXRQcm94eU1vZGVsIiwiYWxsRXhjZXB0VGhpc0dyb3VwSW5kZXgiLCJhbmd1bGFyIiwiZm9yRWFjaCIsImNvbnRhaW5lckNvbmZpZyIsImRlY29yYXRpb24iLCJ2YWx1ZSIsIldoZW5JbmRleCIsInNldERyYWdEcm9wQ29uZmlnQ29udGFpbmVyRGVjb3JhdGlvbkNvbGxhcHNlIiwicG9wIiwidHlwZSIsInRpbWVvdXQiLCJ0aXRsZSIsImJvZHkiLCJzaG93Q2xvc2VCdXR0b24iLCJhY3RpdmVMaW5lIiwibGluZXMiLCJsZW5ndGgiLCJzcGxpY2UiLCJjb3VudENvbmZpZ3VyYXRpb25Nb2RlbExpbmVzIiwiZm9ybU5hbWUiLCJjbGVhciIsInBhcmVudHBhcmVudEluZGV4IiwicGFyZW50SW5kZXgiLCJpbmRleCIsImV2ZW50IiwiaXRlbSIsImV4dGVybmFsIiwiYWxsb3dlZFR5cGUiLCJsYWJlbCIsImlzQXJyYXkiLCJ0aW1lclJlZnJlc2hERFRvQ29uZmlnIiwiY29weSIsInJlZnJlc2hBbGxDb25maWd1cmF0aW9uRnJvbURyYWdBbmREcm9wTW9kZWwiLCJhcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsIiwicmVmcmVzaENvbnRyb2xzS2V5cyIsIiRvbiIsImNhbmNlbCIsInBhcmVudFBhcmVudEluZGV4IiwiaXRlbUluZGV4IiwiUGFyZW50UGFyZW50SW5kZXgiLCJyZWFsSW5kZXgiLCJwYXJlbnRQYXJlbnRQYXJlbnRJbmRleCIsInNldFVuUmlnaHRDbGlja2VkIiwiYmluZFNwZWNpYWxDdHJsVGVtcG9yeU1vZGVsc1RvUHJveHlNb2RlbCIsImJpbmRDb25maWd1cmF0aW9uTW9kZWxGcm9tUHJveHlNb2RlbCIsImdldEVkaXRQYW5lbE1vZGVsTGluZUluZGV4IiwiZ2V0RWRpdFBhbmVsTW9kZWxDb2x1bW5JbmRleCIsInNldEVkaXRQYW5lbE1vZGVsVG9nZ2xlIiwiZ2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUiLCJyZXNldEFsbERyYWdEcm9wSXRlbVNlbGVjdGVkU3RhdGUiLCJwcmV2aW91c1N0YXRlIiwicmlnaHRDbGlrZWQiLCJsaW5lSW5kZXgiLCJjb2xJbmRleCIsImdldEVkaXRQYW5lbE1vZGVsQ29udHJvbCIsImVxdWFscyIsInRpbWVyQ2xvc2VPcGVuZWRFZGl0UGFuZWwiLCJzZXRFZGl0UGFuZWxNb2RlbExpbmVJbmRleCIsInNldEVkaXRQYW5lbE1vZGVsQ29sdW1uSW5kZXgiLCJzZXRFZGl0UGFuZWxNb2RlbENvbnRyb2wiLCJzZXRQcm94eU1vZGVsRnJvbUNvbmZpZ3VyYXRpb25TZWxlY3Rpb24iLCJhZGROZXdsaW5lIiwicHVzaCIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7cWpCQUFBOztBQUVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUY7Ozs7QUFLQSxJQUFNQSx5Q0FBNEMsK0JBQWxEO0FBQ0EsSUFBTUMsMkNBQTRDLElBQWxEOztJQUdNQyw2QjtBQUVKLHlDQUNFQyxNQURGLEVBRUVDLGtCQUZGLEVBR0VDLE9BSEYsRUFJRUMsYUFKRixFQUtFQyxPQUxGLEVBTUVDLFFBTkYsRUFPRUMsSUFQRixFQVFFQyxlQVJGLEVBU0VDLG9CQVRGLEVBVUVDLDZCQVZGLEVBV0VDLDRCQVhGLEVBWUVDLHlCQVpGLEVBYUVDLHFCQWJGLEVBY0M7QUFBQTs7QUFDQyxTQUFLWixNQUFMLEdBQXdDQSxNQUF4QztBQUNBLFNBQUtDLGtCQUFMLEdBQXdDQSxrQkFBeEM7QUFDQSxTQUFLQyxPQUFMLEdBQXdDQSxPQUF4QztBQUNBLFNBQUtDLGFBQUwsR0FBd0NBLGFBQXhDO0FBQ0EsU0FBS0MsT0FBTCxHQUF3Q0EsT0FBeEM7QUFDQSxTQUFLQyxRQUFMLEdBQXdDQSxRQUF4QztBQUNBLFNBQUtDLElBQUwsR0FBd0NBLElBQXhDO0FBQ0EsU0FB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bG9iYWwgYW5ndWxhciAqL1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFRPRE8gOlxuICAvLyAtIGNoZWNrIG5vIHVzZSBtZXRob2RzIHRoYXQgY29tZSBmcm9tIHN0ZXAgd2F5IGFuZCBkZWxldGUgaWYgbm90IG5lZWRlZFxuICAvLyAtIGNoZWNrIG90aGVyIFRPRE8gKGEgbG90IG9mIGZpeGVzIGFyZSBuZWVkZWQpXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbmltcG9ydCB7XG4gIGluaXRUYWJNb2RlbCxcbiAgaW5pdElobU1vZGVsXG59ICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuL2VkYURyYWdEcm9wV2F5LmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4uY29udHJvbGxlci5oZWxwZXJzLmpzJztcblxuY29uc3QgRFJBR19EUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0NPTlRST0xMRVIgICAgPSAnZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbkN0cmwnO1xuY29uc3QgRFJBR19EUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0NPTlRST0xMRVJBUyAgPSAndm0nO1xuXG5cbmNsYXNzIGVkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW5DdHJse1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICRzY29wZSxcbiAgICBlYXN5Rm9ybUdlblZlcnNpb24sXG4gICAgJGZpbHRlcixcbiAgICAkYW5jaG9yU2Nyb2xsLFxuICAgIHRvYXN0ZXIsXG4gICAgJHRpbWVvdXQsXG4gICAgJGxvZyxcbiAgICBmb3JtRmllbGRNYW5hZ2UsXG4gICAgY29udHJvbGxlck1vZGFsUHJveHksXG4gICAgZHJhZ0Ryb3BJdGVtRGVjb3JhdGlvblNlcnZpY2UsXG4gICAgZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZSxcbiAgICBkZEl0ZW1SaWdodENsaWNrZWRNYW5hZ2VyLFxuICAgIGVhc3lGb3JtRHJhZ1dheUNvbmZpZ1xuICApe1xuICAgIHRoaXMuJHNjb3BlICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkc2NvcGU7XG4gICAgdGhpcy5lYXN5Rm9ybUdlblZlcnNpb24gICAgICAgICAgICAgICA9IGVhc3lGb3JtR2VuVmVyc2lvbjtcbiAgICB0aGlzLiRmaWx0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgID0gJGZpbHRlcjtcbiAgICB0aGlzLiRhbmNob3JTY3JvbGwgICAgICAgICAgICAgICAgICAgID0gJGFuY2hvclNjcm9sbDtcbiAgICB0aGlzLnRvYXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgID0gdG9hc3RlcjtcbiAgICB0aGlzLiR0aW1lb3V0ICAgICAgICAgICAgICAgICAgICAgICAgID0gJHRpbWVvdXQ7XG4gICAgdGhpcy4kbG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRsb2c7XG4gICAgdGhpcy5mb3JtRmllbGRNYW5hZ2UgICAgICAgICAgICAgICAgICA9IGZvcm1GaWVsZE1hbmFnZTtcbiAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5ICAgICAgICAgICAgID0gY29udHJvbGxlck1vZGFsUHJveHk7XG4gICAgdGhpcy5kcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZSAgICA9IGRyYWdEcm9wSXRlbURlY29yYXRpb25TZXJ2aWNlO1xuICAgIC8vIHRoaXMuZHJhZ0Ryb3BDb25maWcgICAgICAgICAgICAgICAgICAgPSBkcmFnRHJvcENvbmZpZztcbiAgICB0aGlzLmRkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UgICAgID0gZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZTtcbiAgICB0aGlzLmRkSXRlbVJpZ2h0Q2xpY2tlZE1hbmFnZXIgICAgICAgID0gZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlcjtcbiAgICB0aGlzLmVhc3lGb3JtRHJhZ1dheUNvbmZpZyAgICAgICAgICAgID0gZWFzeUZvcm1EcmFnV2F5Q29uZmlnO1xuXG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuXG4gIGluaXQoKXtcbiAgICB0aGlzLmVhc3lGb3JtR2VuZXJhdG9yVkVSU0lPTiAgICAgICAgID0gdGhpcy5lYXN5Rm9ybUdlblZlcnNpb247XG4gICAgdGhpcy50YWIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGluaXRUYWJNb2RlbCh0aGlzLmVhc3lGb3JtRHJhZ1dheUNvbmZpZy5pc1ByZXZpZXdQYW5lbFZpc2libGUoKSwgdGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuYXJlUHJldmlld01vZGVsc1Zpc2libGUoKSk7XG4gICAgdGhpcy5yZXR1cm5TYXZlRXZlbnQgICAgICAgICAgICAgICAgICA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YU1vZGVsICAgICAgICAgICAgICAgICAgICAgICAgPSB7fTsgLy93YXMgdm0ubW9kZWwgaW4gRVM1IHZlcnNpb25cbiAgICB0aGlzLndmRm9ybUZpZWxkcyAgICAgICAgICAgICAgICAgICAgID0gW107XG4gICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IFtdO1xuICAgIHRoaXMuaWhtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpbml0SWhtTW9kZWwoKTtcbiAgICB0aGlzLmVhc3lGb3JtRHJhZ0Ryb3BQcm9wZXJ0aWVzICAgICAgID0gdGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuZ2V0RHJhZ0Ryb3BDb25maWdNb2RlbCgpO1xuICAgIHRoaXMuZHJhZ0Ryb3BNb2RlbCAgICAgICAgICAgICAgICAgICAgPSBbXS5jb25jYXQodGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuZ2V0RHJhZ0Ryb3BQcmVzZW50YXRpb25Nb2RlbCgpKTtcbiAgICB0aGlzLm51bWJlck9mQ29sdW1ucyAgICAgICAgICAgICAgICAgID0gMTtcbiAgICB0aGlzLk1heE51bWJlck9mQ29sdW1ucyAgICAgICAgICAgICAgID0gMztcbiAgICB0aGlzLk1pbk51bWJlck9mQ29sdW1ucyAgICAgICAgICAgICAgID0gMTtcbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgID0ge307XG4gICAgdGhpcy5hbmltYXRpb25zRW5hYmxlZCAgICAgICAgICAgICAgICA9IHRoaXMuZWFzeUZvcm1EcmFnV2F5Q29uZmlnLmdldE1vZGFsQW5pbWF0aW9uVmFsdWUoKTtcbiAgICB0aGlzLmVkaXRQYW5lbE1vZGVsICAgICAgICAgICAgICAgICAgID0geyB0b2dnbGUgOiBmYWxzZSB9O1xuICAgIHRoaXMuZGVidWdQcm94eU1vZGVsICAgICAgICAgICAgICAgICAgPSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LlByb3h5TW9kZWw7XG4gICAgdGhpcy5tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IFtdO1xuXG4gICAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuaW5pdENvbmZpZ3VyYXRpb25FZGl0RnJvbVNjcmF0Y2godGhpcy5jb25maWd1cmF0aW9uICwgZmFsc2UpO1xuICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuaW5pdFByb3h5TW9kZWwoKTtcbiAgfVxuXG5cbiAgY29sbGFwc2VBbGxHcm91cENvbnRyb2woYWxsRXhjZXB0VGhpc0dyb3VwSW5kZXgpe1xuICAgIGFuZ3VsYXIuZm9yRWFjaCh0aGlzLmVhc3lGb3JtRHJhZ0Ryb3BQcm9wZXJ0aWVzLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uLCAodmFsdWUpPT57XG4gICAgICBpZiAodmFsdWUuV2hlbkluZGV4ICE9PSBhbGxFeGNlcHRUaGlzR3JvdXBJbmRleCkgdGhpcy5lYXN5Rm9ybURyYWdXYXlDb25maWcuc2V0RHJhZ0Ryb3BDb25maWdDb250YWluZXJEZWNvcmF0aW9uQ29sbGFwc2UodGhpcy5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcywgdmFsdWUuV2hlbkluZGV4LCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgb25TdWJtaXQoKSB7XG4gICAgdGhpcy50b2FzdGVyLnBvcCh7XG4gICAgICB0eXBlICAgICAgICAgICAgOiAnaW5mbycsXG4gICAgICB0aW1lb3V0ICAgICAgICAgOiAyMDAwLFxuICAgICAgdGl0bGUgICAgICAgICAgIDogJ3Nob3VsZCBzYXZlIGRhdGEgbW9kZWwgaWYgaXQgd2VyZSBub3QgYSBzdGF0aWMgZXhhbXBsZScsXG4gICAgICBib2R5ICAgICAgICAgICAgOiAnZGF0YSA6JyArIHRoaXMuJGZpbHRlcignanNvbicpKHRoaXMuZGF0YU1vZGVsLCA0KSxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbiA6IHRydWVcbiAgICB9KTtcbiAgfVxuXG5cbiAgcmVzZXRUb1plcm9Nb2RlbCgpe1xuICAgIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmVMaW5lID0gMTtcbiAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmxpbmVzLmxlbmd0aCA+IDEpIHRoaXMuY29uZmlndXJhdGlvbi5saW5lcy5zcGxpY2UoMSwgdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzLmxlbmd0aCAtIDIpO1xuICAgIHJldHVybiB0aGlzLmNvdW50Q29uZmlndXJhdGlvbk1vZGVsTGluZXMoKTtcbiAgfVxuXG4gIC8vVE8gQ0hFQ0sgaWYgZG9lcyBub3QgY29tZSBmcm9tIHN0ZXAgd2F5IDpcbiAgY291bnRDb25maWd1cmF0aW9uTW9kZWxMaW5lcygpe1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXMubGVuZ3RoO1xuICB9XG5cbiAgLy8gIC8vVE8gQ0hFQ0sgVEhFTiBUTyBERUxFVEUgOiBzaG91bGQgY29tZSBmcm9tIHN0ZXAgd2F5Li4uXG4gIC8vIHNldEFjdGl2ZUxpbmVOdW1iZXIobGluZU51bWJlcil7XG4gIC8vICBpZiAobGluZU51bWJlciA8PSB0aGlzLmNvdW50Q29uZmlndXJhdGlvbk1vZGVsTGluZXMoKSkgdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgPSBsaW5lTnVtYmVyO1xuICAvLyB9XG5cbi8vICAvL1RPIENIRUNLIFRIRU4gVE8gREVMRVRFIDogc2hvdWxkIGNvbWUgZnJvbSBzdGVwIHdheS4uLlxuLy8gIHVwVGhpc0xpbmUoaW5kZXhMaW5lKXtcbi8vICAgIGlmIChpbmRleExpbmUgPiAtMSkge1xuLy8gICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmxpbmVzW2luZGV4TGluZSAtIDFdKSB7XG4vLyAgICAgICAgbGV0IGN1cnJlbnRMaW5lT2JqID0gdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzW2luZGV4TGluZV07XG4vLyAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzLnNwbGljZShpbmRleExpbmUgLCAxKTtcbi8vICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXMuc3BsaWNlKChpbmRleExpbmUgLSAxKSwgMCwgY3VycmVudExpbmVPYmopO1xuLy8gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmVMaW5lID0gMTtcbi8vICAgICAgfVxuLy8gICAgfVxuLy9cbi8vICAgIHRoaXMuZm9ybUZpZWxkTWFuYWdlLmFwcGx5Q29uZmlndXJhdGlvblRvZm9ybWx5TW9kZWwodGhpcy5jb25maWd1cmF0aW9uLCB0aGlzLndmRm9ybUZpZWxkcywgdGhpcy5kYXRhTW9kZWwpO1xuLy8gICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4vLyAgfVxuXG4gIC8vICAvL1RPIENIRUNLIFRIRU4gVE8gREVMRVRFIDogc2hvdWxkIGNvbWUgZnJvbSBzdGVwIHdheS4uLlxuICAvLyBkb3duVGhpc0xpbmUoaW5kZXhMaW5lKXtcbiAgLy8gIGlmIChpbmRleExpbmUgPiAtMSkge1xuICAvLyAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmxpbmVzW2luZGV4TGluZSArIDFdKSB7XG4gIC8vICAgICAgbGV0IGN1cnJlbnRMaW5lT2JqID0gdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzW2luZGV4TGluZV07XG4gIC8vICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzLnNwbGljZShpbmRleExpbmUgLCAxKTtcbiAgLy8gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXMuc3BsaWNlKChpbmRleExpbmUgKyAxKSwgMCwgY3VycmVudExpbmVPYmopO1xuICAvLyAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hY3RpdmVMaW5lID0gMTtcbiAgLy8gICAgfVxuICAvLyAgfVxuICAvLyAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gIC8vICB0aGlzLndmRm9ybUZpZWxkc09ubHlOZWVkZWRQcm9wZXJ0aWVzID0gYW5ndWxhci5jb3B5KHRoaXMud2ZGb3JtRmllbGRzKTtcbiAgLy8gfVxuXG4vLyAgLy9UTyBDSEVDSyBUSEVOIFRPIERFTEVURSA6IHNob3VsZCBjb21lIGZyb20gc3RlcCB3YXkuLi5cbi8vICByZW1vdmVUaGlzTGluZShpbmRleCl7XG4vLyAgICBpZiAoaW5kZXggPiAtMSkge1xuLy8gICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmxpbmVzLmxlbmd0aCA+IDEpIHtcbi8vICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgPT09IGluZGV4ICsgMSkgdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgPSAxO1xuLy8gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5saW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xuLy8gICAgICB9ZWxzZXtcbi8vICAgICAgICB0aGlzLiR0aW1lb3V0KCgpPT57XG4vLyAgICAgICAgICB0aGlzLnRvYXN0ZXIucG9wKHtcbi8vICAgICAgICAgICAgdHlwZSAgICAgICAgICAgIDogJ3dhcm5pbmcnLFxuLy8gICAgICAgICAgICB0aXRsZSAgICAgICAgICAgOiAnTGFzdCBsaW5lJyAsXG4vLyAgICAgICAgICAgIGJvZHkgICAgICAgICAgICA6ICdDYW5cXCd0IGRlbGV0ZSB0aGUgbGFzdCBsaW5lJyxcbi8vICAgICAgICAgICAgc2hvd0Nsb3NlQnV0dG9uIDogdHJ1ZVxuLy8gICAgICAgICAgfSk7XG4vLyAgICAgICAgfSwgMTAwKTtcbi8vICAgICAgfVxuLy8gICAgICB0aGlzLmZvcm1GaWVsZE1hbmFnZS5hcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsKHRoaXMuY29uZmlndXJhdGlvbiwgdGhpcy53ZkZvcm1GaWVsZHMsIHRoaXMuZGF0YU1vZGVsKTtcbi8vICAgICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4vLyAgICB9XG4vLyAgfVxuXG4gIC8vICAvL1RPIENIRUNLIFRIRU4gVE8gREVMRVRFIDogc2hvdWxkIGNvbWUgZnJvbSBzdGVwIHdheS4uLlxuICAvLyBpbmNyZWFzZU51bWJlck9mQ29sdW1ucygpe1xuICAvLyAgaWYgKHRoaXMuY29uZmlndXJhdGlvbi5saW5lc1t0aGlzLmNvbmZpZ3VyYXRpb24uYWN0aXZlTGluZSAtMV0uY29sdW1ucy5sZW5ndGggPCB0aGlzLk1heE51bWJlck9mQ29sdW1ucykge1xuICAvLyAgICBsZXQgbmV3TnVtYmVyT2ZDb2x1bW5zID0gdGhpcy5jb25maWd1cmF0aW9uLmxpbmVzW3RoaXMuY29uZmlndXJhdGlvbi5hY3RpdmVMaW5lIC0xXS5jb2x1bW5zLnB1c2goaW5pdENvbHVtblRlbXBsYXRlKCkpO1xuICAvLyAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXNbdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgLTFdLmNvbHVtbnNbbmV3TnVtYmVyT2ZDb2x1bW5zIC0gMV0ubnVtQ29sdW1uID0gbmV3TnVtYmVyT2ZDb2x1bW5zO1xuICAvLyAgfVxuICAvLyAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gIC8vICB0aGlzLndmRm9ybUZpZWxkc09ubHlOZWVkZWRQcm9wZXJ0aWVzID0gYW5ndWxhci5jb3B5KHRoaXMud2ZGb3JtRmllbGRzKTtcbiAgLy8gfVxuXG4gIC8vICAvL1RPIENIRUNLIFRIRU4gVE8gREVMRVRFIDogc2hvdWxkIGNvbWUgZnJvbSBzdGVwIHdheS4uLlxuICAvLyBkZWNyZWFzZU51bWJlck9mQ29sdW1ucyhpbmRleExpbmUsIGluZGV4Q29sdW1uKXtcbiAgLy8gIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXNbdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgLTFdLmNvbHVtbnMubGVuZ3RoID4gMSkge1xuICAvLyAgICB0aGlzLmNvbmZpZ3VyYXRpb24ubGluZXNbdGhpcy5jb25maWd1cmF0aW9uLmFjdGl2ZUxpbmUgLTFdLmNvbHVtbnMuc3BsaWNlKHRoaXMuY29uZmlndXJhdGlvbi5saW5lc1t0aGlzLmNvbmZpZ3VyYXRpb24uYWN0aXZlTGluZSAtMV0uY29sdW1ucy5sZW5ndGggLTEsIDEpO1xuICAvLyAgfVxuICAvLyAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gIC8vICB0aGlzLndmRm9ybUZpZWxkc09ubHlOZWVkZWRQcm9wZXJ0aWVzID0gYW5ndWxhci5jb3B5KHRoaXMud2ZGb3JtRmllbGRzKTtcbiAgLy8gfVxuXG4gIHNhdmVUaGlzRm9ybSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5mb3JtTmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aGlzLnRvYXN0ZXIucG9wKHtcbiAgICAgICAgdHlwZSAgICA6ICd3YXJuaW5nJyxcbiAgICAgICAgdGltZW91dCA6IDIwMDAsXG4gICAgICAgIHRpdGxlICAgOiAnRm9ybSBuYW1lIGlzIHVuZGVmaW5lZCcsXG4gICAgICAgIGJvZHkgICAgOiAnRm9ybSBoYXMgbm90IGJlZW4gc2F2ZWQuJyxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uIDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24uZm9ybU5hbWUgPT09ICcnKSB7XG4gICAgdGhpcy50b2FzdGVyLnBvcCh7XG4gICAgICAgIHR5cGUgICAgOiAnd2FybmluZycsXG4gICAgICAgIHRpbWVvdXQgOiAyMDAwLFxuICAgICAgICB0aXRsZSAgIDogJ0Zvcm0gbmFtZSBpcyByZXF1aXJlZCcsXG4gICAgICAgIGJvZHkgICAgOiAnRm9ybSBoYXMgbm90IGJlZW4gc2F2ZWQuJyxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uIDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMudG9hc3Rlci5wb3Aoe1xuICAgICAgdHlwZSAgICA6ICd3YWl0JyxcbiAgICAgIHRpbWVvdXQgOiAxMDAwMCxcbiAgICAgIHRpdGxlICAgOiAnRm9ybSBpcyBiZWluZyBzYXZlZCcsXG4gICAgICBib2R5ICAgIDogJ1dhaXQuJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbiA6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLnRvYXN0ZXIuY2xlYXIoKTtcbiAgICB0aGlzLnJldHVyblNhdmVFdmVudCA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIGRyYWdvdmVyQ2FsbGJhY2tDb250YWluZXIocGFyZW50cGFyZW50SW5kZXgsIHBhcmVudEluZGV4LCBpbmRleCl7XG4gICAgLy9wcmV2ZW50IGNvbnRhaW5lciBpbiBsYXlvdXQgY29sdW1uIHRvIGJlIGRyYWcgdG8gY29udHJvbCBzZWxlY3QgY29udGlhbmVyXG4gICAgaWYgKGluZGV4ID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIGRyb3BDYWxsYmFjayhldmVudCwgaW5kZXgsIGl0ZW0sIGV4dGVybmFsLCB0eXBlLCBhbGxvd2VkVHlwZSkge1xuICAgIGlmIChleHRlcm5hbCkge1xuICAgICAgICBpZiAoYWxsb3dlZFR5cGUgPT09ICdpdGVtVHlwZScgICAgICAmJiAhaXRlbS5sYWJlbCkgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoYWxsb3dlZFR5cGUgPT09ICdjb250YWluZXJUeXBlJyAmJiAhYW5ndWxhci5pc0FycmF5KGl0ZW0pKSAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL3NldCBhIHRpbWVvdXQgYmVmaXJlIGJpbmRpbmcgc2luY2UgZGRNb2RlbCBtYXkgbm90IGJlIGNhbGxlZCB3aGVuIGFscmVhZHkgZnVsbCB1cGRhdGVkXG4gICAgbGV0IHRpbWVyUmVmcmVzaEREVG9Db25maWcgPSB0aGlzLiR0aW1lb3V0KCgpPT57XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBhbmd1bGFyLmNvcHkodGhpcy5kZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlLnJlZnJlc2hBbGxDb25maWd1cmF0aW9uRnJvbURyYWdBbmREcm9wTW9kZWwodGhpcy5jb25maWd1cmF0aW9uLCB0aGlzLmRyYWdEcm9wTW9kZWwpKTtcbiAgICAgIHRoaXMuZm9ybUZpZWxkTWFuYWdlLmFwcGx5Q29uZmlndXJhdGlvblRvZm9ybWx5TW9kZWwodGhpcy5jb25maWd1cmF0aW9uLCB0aGlzLndmRm9ybUZpZWxkcywgdGhpcy5kYXRhTW9kZWwpO1xuICAgICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4gICAgICB0aGlzLmRkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UucmVmcmVzaENvbnRyb2xzS2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMuZHJhZ0Ryb3BNb2RlbCk7XG4gICAgfSwgMjAwKTtcbiAgICB0aGlzLiRzY29wZS4kb24oJyRkZXN0cm95JywgKCk9PnRoaXMuJHRpbWVvdXQuY2FuY2VsKHRpbWVyUmVmcmVzaEREVG9Db25maWcpKTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIGRuZEl0ZW1Nb3ZlZChwYXJlbnRQYXJlbnRJbmRleCwgcGFyZW50SW5kZXgsIGl0ZW1JbmRleCl7XG4gICAgLy9wcmV2ZW50IGl0ZW0gZnJvbSBmaXJzdCBjb250YWluZXIgdG8gZGlzYXBlYXIgd2hlbiBkcm9wcGVkIG9uIG90aGVyIGNvbnRhaW5lclxuICAgIGlmIChwYXJlbnRQYXJlbnRJbmRleCA+IDApIHRoaXMuZHJhZ0Ryb3BNb2RlbFtwYXJlbnRQYXJlbnRJbmRleF1bcGFyZW50SW5kZXhdLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICB9XG5cbiAgZHJhZ292ZXJDYWxsYmFja0l0ZW1zKFBhcmVudFBhcmVudEluZGV4LCBwYXJlbnRJbmRleCl7XG4gICAgLy9wcmV2ZW50IGl0ZW1zIGluIGxheW91dCBjb2x1bW4gdG8gYmUgZHJhZyB0byBjb250cm9sIHNlbGVjdFxuICAgIGlmIChwYXJlbnRJbmRleCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy9UT0RPIDogd2lsbCByZXBsYWNlIGluIGh0bWwgOiBkbmQtZGlzYWJsZS1pZj1cIml0ZW1zLmxlbmd0aCA+IDJcIlxuICBkaXNhYmxlSXRlbURyb3BJZigpe1xuXG4gIH1cblxuICBkcm9wQ2FsbGJhY2tJdGVtcyhldmVudCwgaW5kZXgsIHJlYWxJbmRleCwgcGFyZW50SW5kZXgsIHBhcmVudFBhcmVudEluZGV4LCBwYXJlbnRQYXJlbnRQYXJlbnRJbmRleCwgaXRlbSwgZXh0ZXJuYWwsIHR5cGUsIGFsbG93ZWRUeXBlKXtcbiAgICBpZiAoZXh0ZXJuYWwpIHtcbiAgICAgIGlmIChhbGxvd2VkVHlwZSA9PT0gJ2l0ZW1UeXBlJyAmJiAhaXRlbS5sYWJlbCkgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBpZiAoYWxsb3dlZFR5cGUgPT09ICdjb250YWluZXJUeXBlJyAmJiAhYW5ndWxhci5pc0FycmF5KGl0ZW0pKSAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL3NldCBhIHRpbWVvdXQgYmVmb3JlIGJpbmRpbmcgc2luY2UgZGRNb2RlbCBtYXkgbm90IGJlIGNhbGxlZCB3aGVuIGFscmVhZHkgZnVsbCB1cGRhdGVkXG4gICAgbGV0IHRpbWVyUmVmcmVzaEREVG9Db25maWcgPSB0aGlzLiR0aW1lb3V0KCgpPT57XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGFuZ3VsYXIuY29weSh0aGlzLmRkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UucmVmcmVzaEFsbENvbmZpZ3VyYXRpb25Gcm9tRHJhZ0FuZERyb3BNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMuZHJhZ0Ryb3BNb2RlbCkpO1xuICAgICAgICB0aGlzLmZvcm1GaWVsZE1hbmFnZS5hcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsKHRoaXMuY29uZmlndXJhdGlvbiwgdGhpcy53ZkZvcm1GaWVsZHMsIHRoaXMuZGF0YU1vZGVsKTtcbiAgICAgICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4gICAgICAgIC8vIHJlZnJlc2ggY29udHJvbHMga2V5IGluIGRyYWdEcm9wIE1vZGVsIHRvIHBlcnNpc3QgYWxyZWFkeSBleGlzdHMgY29udHJvbHMgYmV0d2VlbiByZWZyZXNoZXMgd2hlbiBpdGVtIGRyb3AgZXZlbnRzXG4gICAgICAgIHRoaXMuZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZS5yZWZyZXNoQ29udHJvbHNLZXlzKHRoaXMuY29uZmlndXJhdGlvbiwgdGhpcy5kcmFnRHJvcE1vZGVsKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgLy8gYWRkL3NldCByaWdodENsaWtlZCBwcm9wZXJ0eSB0byBmYWxzZSAod2lsbCBoZWxwIGVkYVJpZ2h0Q2xpY2sgZGlyZWN0aXZlKVxuICAgIHRoaXMuZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlci5zZXRVblJpZ2h0Q2xpY2tlZChpdGVtKTtcbiAgICAvLyB0aW1lclJlZnJlc2hERFRvQ29uZmlnIHRpbWVyIGRlc3RydWN0aW9uXG4gICAgdGhpcy4kc2NvcGUuJG9uKCckZGVzdHJveScsICgpPT50aGlzLiR0aW1lb3V0LmNhbmNlbCh0aW1lclJlZnJlc2hERFRvQ29uZmlnKSk7XG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuXG4gIHNhdmVGcm9tRWRpdFBhbmVsKCkge1xuICAgIC8qKlxuICAgICogVE9ETyA6XG4gICAgKiBzaG91bGQgYmUgY2FsbGVkIGZyb20gZWRpdCBwYW5lbFxuICAgICpcbiAgICAqIEFORFxuICAgICpcbiAgICAqIHNob3VsZCBjYWxsIGFsbCB0aGVzZSBtZXRob2RzXG4gICAgKlxuICAgICogbmVlZCB0byBnZXQgIDpcbiAgICAqXG4gICAgKiAtIGxpbmUgaW5kZXhcbiAgICAqIC0gY29sdW1uIGluZGV4XG4gICAgKiAtIGJhc2ljU2VsZWN0Um93Q29sbGVjdGlvbiAoZnJvbSBlZHBpdHBhbmVsY29udHJvbGxlcikgICAtLT4gbWF5YmUgaW4gY29udHJvbGxlck1vZGFsUHJveHkgc2VydmljZVxuICAgICogLSBncm91cGVkU2VsZWN0Um93Q29sbGVjdGlvbiAoZnJvbSBlZHBpdHBhbmVsY29udHJvbGxlcikgLS0+IG1heWJlIGluIGNvbnRyb2xsZXJNb2RhbFByb3h5IHNlcnZpY2VcbiAgICAqIC0gcmFkaW9Sb3dDb2xsZWN0aW9uIChmcm9tIGVkcGl0cGFuZWxjb250cm9sbGVyKSAgICAgICAgIC0tPiBtYXliZSBpbiBjb250cm9sbGVyTW9kYWxQcm94eSBzZXJ2aWNlXG4gICAgKi9cbiAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmJpbmRTcGVjaWFsQ3RybFRlbXBvcnlNb2RlbHNUb1Byb3h5TW9kZWwoKTtcbiAgICAvL3NhdmUgY29uZmlnIHRvIGNvbnRyb2xcbiAgICAvL2NvbnRyb2xsZXJNb2RhbFByb3h5LmFwcGx5Q29uZmlnVG9TZWxlY3RlZENvbnRyb2woc2VsZi5wcm94eU1vZGVsKTtcbiAgICAvL3JldHVybiBjdXJyZW50IG1vZGVsIHRvIHBhcmVudCBjb250cm9sbGVyIDpcblxuICAgIC8vdXBkYXRlIGNvbmZpZ3VyYXRpb24gbW9kZWwgYW5kIGZvcm1seSBtb2RlbFxuICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuYmluZENvbmZpZ3VyYXRpb25Nb2RlbEZyb21Qcm94eU1vZGVsKHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuZ2V0RWRpdFBhbmVsTW9kZWxMaW5lSW5kZXgoKSwgdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5nZXRFZGl0UGFuZWxNb2RlbENvbHVtbkluZGV4KCksIHRoaXMuY29uZmlndXJhdGlvbik7XG4gICAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4gICAgdGhpcy5kZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlLnJlZnJlc2hDb250cm9sc0tleXModGhpcy5jb25maWd1cmF0aW9uLCB0aGlzLmRyYWdEcm9wTW9kZWwpO1xuICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUoZmFsc2UpO1xuICAgIHRoaXMuZWRpdFBhbmVsTW9kZWwudG9nZ2xlID0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5nZXRFZGl0UGFuZWxNb2RlbFRvZ2dsZSgpO1xuICAgIHRoaXMuZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlci5yZXNldEFsbERyYWdEcm9wSXRlbVNlbGVjdGVkU3RhdGUodGhpcy5kcmFnRHJvcE1vZGVsKTtcbiAgfVxuXG5cbiAgY2xvc2VFZGl0UGFuZWwoKXtcbiAgICAvLyByZXNldCBhbGwgcmlnaHRDbGlja2VkIGNvbnRyb2wgcHJvcGVydGllcyB0byBmYWxzZVxuICAgIHRoaXMuZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlci5yZXNldEFsbERyYWdEcm9wSXRlbVNlbGVjdGVkU3RhdGUodGhpcy5kcmFnRHJvcE1vZGVsKTtcblxuICAgIC8qKlxuICAgICogVE9ETyA6IHJlZnJlc2ggY29uZmlndXJhdGlvbiBtb2RlbFxuICAgICogdW5jb21tZW50IGFmdGVyIHVwZGF0ZSB0aGVzZSBuZXh0IDMgbGluZXNcbiAgICAqXG4gICAgKiBOT1RFIDogaW5kZXhMaW5lIEFORCAgbnVtY29sdW1uIHNob3VsZCBiZSBzdG9yZWQgaW4gc2VydmljZSBhbmRcbiAgICAqIHVwZGF0ZWQgd2hlbiB0b2dsZSBzaWRlcGFuZWxcbiAgICAqL1xuICAgIC8vdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5iaW5kQ29uZmlndXJhdGlvbk1vZGVsRnJvbVByb3h5TW9kZWwoaW5kZXhMaW5lLCBudW1jb2x1bW4sIG1vZGFsQWRkQ3RybE1vZGVsLCB0aGlzLmNvbmZpZ3VyYXRpb24pO1xuICAgIC8vdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gICAgLy90aGlzLndmRm9ybUZpZWxkc09ubHlOZWVkZWRQcm9wZXJ0aWVzID0gYW5ndWxhci5jb3B5KHRoaXMud2ZGb3JtRmllbGRzKTtcblxuICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUoZmFsc2UpO1xuICAgIHRoaXMuZWRpdFBhbmVsTW9kZWwudG9nZ2xlID0gdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5nZXRFZGl0UGFuZWxNb2RlbFRvZ2dsZSgpO1xuICB9XG5cblxuICBzZXRSaWdodENsaWNrZWQocHJldmlvdXNTdGF0ZSwgaXRlbSl7XG4gICAgaXRlbS5yaWdodENsaWtlZCA9IHRydWU7XG4gIH1cblxuICB0b2dnbGVFZGl0UGFuZWwoZXZlbnQsIGxpbmVJbmRleCwgY29sSW5kZXgsIGl0ZW0pe1xuICAgIHRoaXMuZGRJdGVtUmlnaHRDbGlja2VkTWFuYWdlci5yZXNldEFsbERyYWdEcm9wSXRlbVNlbGVjdGVkU3RhdGUodGhpcy5kcmFnRHJvcE1vZGVsKTtcbiAgICAvLyBhbHJlYWR5IG9wZW5lZCAoY291bGQgYmUgYW5vdGhlciBjb250cm9sIGVkaXQpXG4gICAgaWYgKHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuZ2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUoKSkge1xuICAgICAgLy8gLT4gaW1tZWRpYXRlIGNsb3NlIGFuZCByZWZyZXNoIGNvbmZpZ3VyYXRpb24gbW9kZWwgKyBmb3JtbHkgbW9kZWxcbiAgICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUoZmFsc2UpO1xuICAgICAgdGhpcy5lZGl0UGFuZWxNb2RlbC50b2dnbGUgPSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsVG9nZ2xlKCk7XG5cbiAgICAgIC8vVE9ETyA6IGZvciByZWZyZXNoaW5nXG4gICAgICAvL3RoaXMuY29udHJvbGxlck1vZGFsUHJveHkuYmluZENvbmZpZ3VyYXRpb25Nb2RlbEZyb21Qcm94eU1vZGVsKGluZGV4TGluZSwgbnVtY29sdW1uLCBtb2RhbEFkZEN0cmxNb2RlbCwgdGhpcy5jb25maWd1cmF0aW9uKTtcbiAgICAgIC8vdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gICAgICAvL3RoaXMud2ZGb3JtRmllbGRzT25seU5lZWRlZFByb3BlcnRpZXMgPSBhbmd1bGFyLmNvcHkodGhpcy53ZkZvcm1GaWVsZHMpO1xuXG4gICAgICAvLyBjaGVjayBpZiBuZXcgY29udHJvbCByaWdodCBjbGlja2VkIG90aGVyd2lzZSBqdXN0IHRvZ2dsZSBzaWRlIHBhbmVsXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuZ2V0RWRpdFBhbmVsTW9kZWxMaW5lSW5kZXgoKSAgICAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICB0eXBlb2YgdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5nZXRFZGl0UGFuZWxNb2RlbENvbHVtbkluZGV4KCkgICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHR5cGVvZiB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsQ29udHJvbCgpICAgICAgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsTGluZUluZGV4KCkgICA9PT0gbGluZUluZGV4ICYmXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsQ29sdW1uSW5kZXgoKSA9PT0gY29sSW5kZXggICYmXG4gICAgICAgICAgYW5ndWxhci5lcXVhbHModGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5nZXRFZGl0UGFuZWxNb2RlbENvbnRyb2woKSwgaXRlbSkpIHtcbiAgICAgICAgICAvL2NvbnNvbGUuaW5mbygnYWxyZWFkeSBvcGVuZWQgZm9yIFNBTUUgY3RybCA6IHNvIGNsb3NlIC0gbm8gcmUtb3BlbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vY29uc29sZS5pbmZvKCdhbHJlYWR5IG9wZW5lZCBmb3IgRElGRkVSRU5UIGN0cmwgOiBzbyByZS1vcGVuJyk7XG4gICAgICAgICAgaXRlbS5yaWdodENsaWtlZCA9IHRydWU7XG4gICAgICAgICAgLy8gc2V0IGEgdGltZW91dCBiZWZvcmUgcmUtb3BlbmluZywgNTAwbXMgaXMgb2sgZm9yIGEgcHMtc2l6ZT1cIjQwMHB4XCJcbiAgICAgICAgICBsZXQgdGltZXJDbG9zZU9wZW5lZEVkaXRQYW5lbCA9IHRoaXMuJHRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxMaW5lSW5kZXgobGluZUluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxDb2x1bW5JbmRleChjb2xJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNldEVkaXRQYW5lbE1vZGVsQ29udHJvbChpdGVtKTtcbiAgICAgICAgICAgIC8vIGNvbnRyb2wgbW9kZWwgcGFzc2VkIHRvIFNlcnZpY2UgOiBjb250cm9sbGVyTW9kYWxQcm94eVxuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5zZXRQcm94eU1vZGVsRnJvbUNvbmZpZ3VyYXRpb25TZWxlY3Rpb24odGhpcy5jb25maWd1cmF0aW9uLCBsaW5lSW5kZXgsIGNvbEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0RWRpdFBhbmVsTW9kZWxUb2dnbGUodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLiRzY29wZS5lZGl0UGFuZWxNb2RlbC50b2dnbGUgPSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsVG9nZ2xlKCk7XG4gICAgICAgICAgfSwgMjAwKTtcbiAgICAgICAgICB0aGlzLiRzY29wZS4kb24oJyRkZXN0cm95JywgKCk9PnRoaXMuJHRpbWVvdXQuY2FuY2VsKHRpbWVyQ2xvc2VPcGVuZWRFZGl0UGFuZWwpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBwcmV2aW91cyBzdGF0ZSA9IGNsb3NlZCA9IGltbWVkaWF0ZSBvcGVuXG4gICAgICAvLyBjb25zb2xlLmluZm8oJ05PVCBhbHJlYWR5IG9wZW5lZCA6IHNvIG9wZW4nKTtcbiAgICAgIGl0ZW0ucmlnaHRDbGlrZWQgPSB0cnVlO1xuXG4gICAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNldEVkaXRQYW5lbE1vZGVsTGluZUluZGV4KGxpbmVJbmRleCk7XG4gICAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNldEVkaXRQYW5lbE1vZGVsQ29sdW1uSW5kZXgoY29sSW5kZXgpO1xuICAgICAgdGhpcy5jb250cm9sbGVyTW9kYWxQcm94eS5zZXRFZGl0UGFuZWxNb2RlbENvbnRyb2woaXRlbSk7XG4gICAgICAvLyBjb250cm9sIG1vZGVsIHBhc3NlZCB0byBTZXJ2aWNlIDogY29udHJvbGxlck1vZGFsUHJveHlcbiAgICAgIHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuc2V0UHJveHlNb2RlbEZyb21Db25maWd1cmF0aW9uU2VsZWN0aW9uKHRoaXMuY29uZmlndXJhdGlvbiwgbGluZUluZGV4LCBjb2xJbmRleCk7XG4gICAgICB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LnNldEVkaXRQYW5lbE1vZGVsVG9nZ2xlKHRydWUpO1xuICAgICAgdGhpcy5lZGl0UGFuZWxNb2RlbC50b2dnbGUgPSB0aGlzLmNvbnRyb2xsZXJNb2RhbFByb3h5LmdldEVkaXRQYW5lbE1vZGVsVG9nZ2xlKCk7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5pbmZvKCdhZnRlciB0b2dnbGVMZWZ0UGFuZWwgY2hlY2sgOicpO1xuICAgIC8vIGNvbnNvbGUuZGlyKHtcbiAgICAvLyAgICd0aGlzLmVkaXRQYW5lbE1vZGVsJyAgICAgICAgICAgICAgICAgOiBhbmd1bGFyLmNvcHkodGhpcy5lZGl0UGFuZWxNb2RlbCksXG4gICAgLy8gICAnY29udHJvbGxlck1vZGFsUHJveHkuZWRpdFBhbmVsTW9kZWwnIDogYW5ndWxhci5jb3B5KHRoaXMuY29udHJvbGxlck1vZGFsUHJveHkuZWRpdFBhbmVsTW9kZWwpXG4gICAgLy8gfSk7XG4gIH1cblxuICAvLyAvLyByZWZyZXNoTW9kZWxzIDogdG8gY2FsbCBhZnRlciBkcmFnIGFuZCBkcm9wIGV2ZW50c1xuICAvLyByZWZyZXNoTW9kZWxzKCl7XG4gIC8vICAgdGhpcy4kdGltZW91dCgoKT0+e1xuICAvLyAgICBjb25zb2xlLmluZm8oJ3JlZnJlc2hpbmcgbW9kZWxzJyk7XG4gIC8vICAgIGZvcm1GaWVsZE1hbmFnZS5hcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsKHRoaXMuY29uZmlndXJhdGlvbiwgdGhpcy53ZkZvcm1GaWVsZHMsIHRoaXMuZGF0YU1vZGVsKTtcbiAgLy8gICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4gIC8vICAgfSwgMTApO1xuICAvLyB9XG5cblxuICByZW1vdmVUaGlzTGluZShsaW5lSW5kZXgpe1xuICAgIHRoaXMuZHJhZ0Ryb3BNb2RlbFsxXS5zcGxpY2UobGluZUluZGV4LDEpO1xuICB9XG5cblxuICAvL1RPRE8gOiB0byBmaXhcbiAgYWRkTmV3bGluZSgpe1xuICAgIC8vIHJlLXJlbmRlciBmb3JtZmllbGRcbiAgICAvLyBUT0RPIDogdG8gZml4XG4gICAgdGhpcy5mb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbCh0aGlzLmNvbmZpZ3VyYXRpb24sIHRoaXMud2ZGb3JtRmllbGRzLCB0aGlzLmRhdGFNb2RlbCk7XG4gICAgdGhpcy53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weSh0aGlzLndmRm9ybUZpZWxkcyk7XG4gIH1cblxuICBpbnNlcnROZXdMaW5lKCl7XG4gICAgdGhpcy5hZGROZXdsaW5lKCk7XG4gICAgdGhpcy5kcmFnRHJvcE1vZGVsWzFdLnB1c2goW10pO1xuICB9XG5cblxuXG5cbn1cblxuZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbkN0cmwuJGluamVjdCA9IFtcbiAgICAnJHNjb3BlJyxcbiAgICAnZWFzeUZvcm1HZW5WZXJzaW9uJyxcbiAgICAnJGZpbHRlcicsXG4gICAgJyRhbmNob3JTY3JvbGwnLFxuICAgICd0b2FzdGVyJyxcbiAgICAnJHRpbWVvdXQnLFxuICAgICckbG9nJyxcbiAgICAnZm9ybUZpZWxkTWFuYWdlJyxcbiAgICAnY29udHJvbGxlck1vZGFsUHJveHknLFxuICAgICdkcmFnRHJvcEl0ZW1EZWNvcmF0aW9uU2VydmljZScsXG4gICAgJ2RkTW9kZWxDb25mTW9kZWxQcm94eVNlcnZpY2UnLFxuICAgICdkZEl0ZW1SaWdodENsaWNrZWRNYW5hZ2VyJyAsXG4gICAgJ2Vhc3lGb3JtRHJhZ1dheUNvbmZpZydcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGVkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW5DdHJsO1xuXG5leHBvcnQge1xuICBEUkFHX0RST1BfV0FZX0VBU1lfRk9STV9HRU5fQ09OVFJPTExFUixcbiAgRFJBR19EUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0NPTlRST0xMRVJBU1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9hcHAvZHJhZ2Ryb3B3YXkvY29tcG9uZW50cy9lZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuL2VkYURyYWdEcm9wV2F5LmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4uY29udHJvbGxlci5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 81 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/* global angular */\nvar DEBUG_MODEL = {\n\tshowDebug: false,\n\tconfigurationModelNumberofLines: 1\n};\nvar initDebugModel = function initDebugModel() {\n\treturn angular.copy(DEBUG_MODEL);\n};\n\nvar DEFAULT_TAB_MODEL = {\n\teditTab: {\n\t\tactive: true\n\t},\n\tpreviewTab: {\n\t\tactive: false,\n\t\ttabVisible: true,\n\t\tmodelsVisible: true\n\t}\n};\n\nvar initTabModel = function initTabModel(isPreviewPanelVisible, arePreviewModelsVisible) {\n\tvar _tabModel = angular.copy(DEFAULT_TAB_MODEL);\n\tangular.extend(_tabModel.previewTab, {\n\t\ttabVisible: isPreviewPanelVisible,\n\t\tmodelsVisible: arePreviewModelsVisible\n\t});\n\treturn _tabModel;\n};\n\nvar COLUMN_TEMPLATE = {\n\tnumColumn: -1,\n\texist: true,\n\tcontrol: {\n\t\ttype: 'none',\n\t\tkey: 'none',\n\t\tsubtype: 'none'\n\t\t// templateOptions: {\n\t\t// label: 'none',\n\t\t// placeholder: 'none',\n\t\t// required: false,\n\t\t// description: 'Descriptive text'\n\t\t// }\n\t}\n};\nvar initColumnTemplate = function initColumnTemplate() {\n\treturn angular.copy(COLUMN_TEMPLATE);\n};\n\nvar LINE_TEMPLATE = {\n\tline: -1,\n\tactiveColumn: 1,\n\tcolumns: [{\n\t\tnumColumn: 1,\n\t\texist: true,\n\t\tcontrol: {\n\t\t\ttype: 'none',\n\t\t\tkey: 'none'\n\t\t\t// templateOptions: {\n\t\t\t// label: 'none',\n\t\t\t// placeholder: 'none',\n\t\t\t// required: false,\n\t\t\t// description: 'Descriptive text'\n\t\t\t// }\n\t\t}\n\t}]\n};\nvar initLineTemplate = function initLineTemplate() {\n\treturn angular.copy(LINE_TEMPLATE);\n};\n\nvar DEFAULT_IHM_MODEL = {\n\tpreview: {\n\t\tformlyModelViewExpanded: true,\n\t\tformlyFieldsViewExpanded: true,\n\t\tcustomizeFormButtonsExpanded: true,\n\t\tsaveThisFormExpanded: true\n\t}\n};\n\nvar initIhmModel = function initIhmModel() {\n\treturn angular.copy(DEFAULT_IHM_MODEL);\n};\n\nexports.initDebugModel = initDebugModel;\nexports.initTabModel = initTabModel;\nexports.initColumnTemplate = initColumnTemplate;\nexports.initLineTemplate = initLineTemplate;\nexports.initIhmModel = initIhmModel;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmNvbnRyb2xsZXIuaGVscGVycy5qcz82YWJmIl0sIm5hbWVzIjpbIkRFQlVHX01PREVMIiwic2hvd0RlYnVnIiwiY29uZmlndXJhdGlvbk1vZGVsTnVtYmVyb2ZMaW5lcyIsImluaXREZWJ1Z01vZGVsIiwiYW5ndWxhciIsImNvcHkiLCJERUZBVUxUX1RBQl9NT0RFTCIsImVkaXRUYWIiLCJhY3RpdmUiLCJwcmV2aWV3VGFiIiwidGFiVmlzaWJsZSIsIm1vZGVsc1Zpc2libGUiLCJpbml0VGFiTW9kZWwiLCJpc1ByZXZpZXdQYW5lbFZpc2libGUiLCJhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZSIsIl90YWJNb2RlbCIsImV4dGVuZCIsIkNPTFVNTl9URU1QTEFURSIsIm51bUNvbHVtbiIsImV4aXN0IiwiY29udHJvbCIsInR5cGUiLCJrZXkiLCJzdWJ0eXBlIiwiaW5pdENvbHVtblRlbXBsYXRlIiwiTElORV9URU1QTEFURSIsImxpbmUiLCJhY3RpdmVDb2x1bW4iLCJjb2x1bW5zIiwiaW5pdExpbmVUZW1wbGF0ZSIsIkRFRkFVTFRfSUhNX01PREVMIiwicHJldmlldyIsImZvcm1seU1vZGVsVmlld0V4cGFuZGVkIiwiZm9ybWx5RmllbGRzVmlld0V4cGFuZGVkIiwiY3VzdG9taXplRm9ybUJ1dHRvbnNFeHBhbmRlZCIsInNhdmVUaGlzRm9ybUV4cGFuZGVkIiwiaW5pdElobU1vZGVsIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBO0FBQ0EsSUFBTUEsY0FBYztBQUNuQkMsWUFBWSxLQURPO0FBRW5CQyxrQ0FBa0M7QUFGZixDQUFwQjtBQUlBLElBQU1DLGlCQUFpQixTQUFqQkEsY0FBaUI7QUFBQSxRQUFNQyxRQUFRQyxJQUFSLENBQWFMLFdBQWIsQ0FBTjtBQUFBLENBQXZCOztBQUlBLElBQU1NLG9CQUFvQjtBQUN6QkMsVUFBWTtBQUNYQyxVQUFTO0FBREUsRUFEYTtBQUl6QkMsYUFBYztBQUNiRCxVQUFhLEtBREE7QUFFYkUsY0FBZSxJQUZGO0FBR2JDLGlCQUFnQjtBQUhIO0FBSlcsQ0FBMUI7O0FBV0EsSUFBTUMsZUFBZSxTQUFmQSxZQUFlLENBQUNDLHFCQUFELEVBQXdCQyx1QkFBeEIsRUFBb0Q7QUFDeEUsS0FBSUMsWUFBWVgsUUFBUUMsSUFBUixDQUFhQyxpQkFBYixDQUFoQjtBQUNBRixTQUFRWSxNQUFSLENBQWVELFVBQVVOLFVBQXpCLEVBQXFDO0FBQ3BDQyxjQUFlRyxxQkFEcUI7QUFFcENGLGlCQUFnQkc7QUFGb0IsRUFBckM7QUFJQSxRQUFPQyxTQUFQO0FBQ0EsQ0FQRDs7QUFVQSxJQUFNRSxrQkFBbUI7QUFDeEJDLFlBQWEsQ0FBQyxDQURVO0FBRXhCQyxRQUFVLElBRmM7QUFHeEJDLFVBQVk7QUFDWEMsUUFBTyxNQURJO0FBRVhDLE9BQVEsTUFGRztBQUdYQyxXQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBVFc7QUFIWSxDQUF6QjtBQWVBLElBQU1DLHFCQUFxQixTQUFyQkEsa0JBQXFCO0FBQUEsUUFBTXBCLFFBQVFDLElBQVIsQ0FBYVksZUFBYixDQUFOO0FBQUEsQ0FBM0I7O0FBR0EsSUFBTVEsZ0JBQWdCO0FBQ3JCQyxPQUFLLENBQUMsQ0FEZTtBQUVyQkMsZUFBZSxDQUZNO0FBR3JCQyxVQUFTLENBQ1I7QUFDQ1YsYUFBVyxDQURaO0FBRUNDLFNBQU0sSUFGUDtBQUdDQyxXQUFTO0FBQ1JDLFNBQUssTUFERztBQUVSQyxRQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBUlE7QUFIVixFQURRO0FBSFksQ0FBdEI7QUFvQkEsSUFBTU8sbUJBQW1CLFNBQW5CQSxnQkFBbUI7QUFBQSxRQUFNekIsUUFBUUMsSUFBUixDQUFhb0IsYUFBYixDQUFOO0FBQUEsQ0FBekI7O0FBR0EsSUFBTUssb0JBQW9CO0FBQ3pCQyxVQUFVO0FBQ1JDLDJCQUE2QixJQURyQjtBQUVSQyw0QkFBOEIsSUFGdEI7QUFHUkMsZ0NBQWdDLElBSHhCO0FBSVJDLHdCQUE0QjtBQUpwQjtBQURlLENBQTFCOztBQVVBLElBQU1DLGVBQWUsU0FBZkEsWUFBZTtBQUFBLFFBQU1oQyxRQUFRQyxJQUFSLENBQWF5QixpQkFBYixDQUFOO0FBQUEsQ0FBckI7O1FBR0MzQixjLEdBQUFBLGM7UUFDQVMsWSxHQUFBQSxZO1FBQ0FZLGtCLEdBQUFBLGtCO1FBQ0FLLGdCLEdBQUFBLGdCO1FBQ0FPLFksR0FBQUEsWSIsImZpbGUiOiI4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBhbmd1bGFyICovXG5jb25zdCBERUJVR19NT0RFTCA9IHtcblx0c2hvd0RlYnVnIDogZmFsc2UsXG5cdGNvbmZpZ3VyYXRpb25Nb2RlbE51bWJlcm9mTGluZXMgOiAxICAgICAgICBcbn07XG5jb25zdCBpbml0RGVidWdNb2RlbCA9ICgpID0+IGFuZ3VsYXIuY29weShERUJVR19NT0RFTCk7XG5cblxuXG5jb25zdCBERUZBVUxUX1RBQl9NT0RFTCA9IHtcblx0ZWRpdFRhYlx0XHRcdDoge1xuXHRcdGFjdGl2ZSA6IHRydWVcblx0fSxcblx0cHJldmlld1RhYiBcdDoge1xuXHRcdGFjdGl2ZSBcdFx0XHRcdDogZmFsc2UsXG5cdFx0dGFiVmlzaWJsZSBcdFx0OiB0cnVlLFxuXHRcdG1vZGVsc1Zpc2libGUgOiB0cnVlXG5cdH1cbn07XG5cbmNvbnN0IGluaXRUYWJNb2RlbCA9IChpc1ByZXZpZXdQYW5lbFZpc2libGUsIGFyZVByZXZpZXdNb2RlbHNWaXNpYmxlKSA9PiB7XG5cdGxldCBfdGFiTW9kZWwgPSBhbmd1bGFyLmNvcHkoREVGQVVMVF9UQUJfTU9ERUwpO1xuXHRhbmd1bGFyLmV4dGVuZChfdGFiTW9kZWwucHJldmlld1RhYiwge1xuXHRcdHRhYlZpc2libGUgXHRcdDogaXNQcmV2aWV3UGFuZWxWaXNpYmxlLFxuXHRcdG1vZGVsc1Zpc2libGUgOiBhcmVQcmV2aWV3TW9kZWxzVmlzaWJsZVx0XHRcblx0fSk7XG5cdHJldHVybiBfdGFiTW9kZWw7XG59O1xuXG5cbmNvbnN0IENPTFVNTl9URU1QTEFURSA9ICB7XG5cdG51bUNvbHVtblx0XHQ6IC0xLFxuXHRleGlzdFx0XHRcdFx0OnRydWUsIFxuXHRjb250cm9sXHRcdFx0OiB7XG5cdFx0dHlwZVx0XHQ6J25vbmUnLFxuXHRcdGtleVx0XHRcdDogJ25vbmUnLFxuXHRcdHN1YnR5cGVcdDogJ25vbmUnXG5cdFx0Ly8gdGVtcGxhdGVPcHRpb25zOiB7XG5cdFx0Ly8gICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ25vbmUnLFxuXHRcdC8vICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdub25lJyxcblx0XHQvLyAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcblx0XHQvLyAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpdmUgdGV4dCdcblx0XHQvLyAgICAgICAgICAgICAgICAgICB9XG5cdH1cbn07IFxuY29uc3QgaW5pdENvbHVtblRlbXBsYXRlID0gKCkgPT4gYW5ndWxhci5jb3B5KENPTFVNTl9URU1QTEFURSk7XG5cblxuY29uc3QgTElORV9URU1QTEFURSA9IHtcblx0bGluZTotMSwgXG5cdGFjdGl2ZUNvbHVtbiA6IDEsXG5cdGNvbHVtbnM6IFtcblx0XHR7ICBcblx0XHRcdG51bUNvbHVtbjogMSxcblx0XHRcdGV4aXN0OnRydWUsIFxuXHRcdFx0Y29udHJvbDoge1xuXHRcdFx0XHR0eXBlOidub25lJyxcblx0XHRcdFx0a2V5OiAnbm9uZSdcblx0XHRcdFx0Ly8gdGVtcGxhdGVPcHRpb25zOiB7XG5cdFx0XHRcdC8vICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdub25lJyxcblx0XHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ25vbmUnLFxuXHRcdFx0XHQvLyAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcblx0XHRcdFx0Ly8gICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aXZlIHRleHQnXG5cdFx0XHRcdC8vICAgICAgICAgICAgICAgICAgIH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF1cbn07XG5jb25zdCBpbml0TGluZVRlbXBsYXRlID0gKCkgPT4gYW5ndWxhci5jb3B5KExJTkVfVEVNUExBVEUpO1xuXG5cbmNvbnN0IERFRkFVTFRfSUhNX01PREVMID0ge1xuXHRwcmV2aWV3IDoge1xuXHRcdFx0Zm9ybWx5TW9kZWxWaWV3RXhwYW5kZWQgXHRcdFx0OiB0cnVlLFxuXHRcdFx0Zm9ybWx5RmllbGRzVmlld0V4cGFuZGVkIFx0XHRcdDogdHJ1ZSxcblx0XHRcdGN1c3RvbWl6ZUZvcm1CdXR0b25zRXhwYW5kZWQgXHQ6IHRydWUsXG5cdFx0XHRzYXZlVGhpc0Zvcm1FeHBhbmRlZCBcdFx0XHRcdFx0OiB0cnVlICBcblx0fVxufTtcblxuXG5jb25zdCBpbml0SWhtTW9kZWwgPSAoKSA9PiBhbmd1bGFyLmNvcHkoREVGQVVMVF9JSE1fTU9ERUwpO1xuXG5leHBvcnQge1xuXHRpbml0RGVidWdNb2RlbCxcblx0aW5pdFRhYk1vZGVsLFxuXHRpbml0Q29sdW1uVGVtcGxhdGUsXG5cdGluaXRMaW5lVGVtcGxhdGUsXG5cdGluaXRJaG1Nb2RlbFxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmNvbnRyb2xsZXIuaGVscGVycy5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 82 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE = undefined;\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGenTemplate = __webpack_require__(83);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGenTemplate2 = _interopRequireDefault(_edaDragDropWayEdaDragdropWayEasyFormGenTemplate);\n\nvar _edaDragDropWayEdaDragdropWayEasyFormGen = __webpack_require__(80);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/* global angular */\n\n//TODO : to bindToController\n//-> then angular 1.4+ will be required...\n//-> check methot to refactor inside rag drop way then common step way and drag drop way\n\nvar EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE = 'edaDragdropWayEasyFormGen';\n\nfunction edaDragdropWayEasyFormGen($timeout, formFieldManage, ddModelConfModelProxyService,\n// dragDropConfig,\neasyFormDragWayConfig) {\n\n\tvar directive = {\n\t\trestrict: 'E',\n\t\ttemplate: _edaDragDropWayEdaDragdropWayEasyFormGenTemplate2.default,\n\t\tscope: {\n\t\t\tedaEasyFormGeneratorModel: '=',\n\t\t\tedaSaveFormEvent: '&edaSaveFormEvent'\n\t\t},\n\t\tcontroller: _edaDragDropWayEdaDragdropWayEasyFormGen.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER,\n\t\tcontrollerAs: _edaDragDropWayEdaDragdropWayEasyFormGen.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS,\n\t\treplace: false,\n\t\tlink: linkFct\n\t};\n\treturn directive;\n\n\tfunction linkFct(scope) {\n\t\t// watch \"scope.easyFormGeneratorModel\"\n\t\tscope.$watch(function () {\n\t\t\treturn scope.edaEasyFormGeneratorModel;\n\t\t}, function () {\n\t\t\treturn loadExistingConfigurationModel();\n\t\t}, true);\n\n\t\t// watch \"scope.returnSaveEvent\"\" = catch saving form event \n\t\tscope.$watch(function () {\n\t\t\treturn scope.returnSaveEvent;\n\t\t}, function (newValue) {\n\t\t\tif (newValue === true) {\n\t\t\t\tvar _easyFormGeneratorModel = {\n\t\t\t\t\tformName: scope.vm.configuration.formName,\n\t\t\t\t\tbtnSubmitText: scope.vm.configuration.submitButtonText,\n\t\t\t\t\tbtnCancelText: scope.vm.configuration.cancelButtonText,\n\t\t\t\t\tedaFieldsModel: scope.vm.configuration.lines,\n\t\t\t\t\t//just as test\n\t\t\t\t\tedaFieldsModelStringified: angular.toJson(scope.vm.configuration.lines),\n\t\t\t\t\tformlyFieldsModel: scope.vm.wfFormFieldsOnlyNeededProperties,\n\t\t\t\t\tdataModel: scope.vm.dataModel\n\t\t\t\t};\n\t\t\t\tscope.edaSaveFormEvent({\n\t\t\t\t\tedaEasyFormGeneratorModel: _easyFormGeneratorModel\n\t\t\t\t});\n\t\t\t\t//back to false, waiting next save event\n\t\t\t\tscope.returnSaveEvent = false;\n\t\t\t}\n\t\t});\n\n\t\tfunction returnAttributeConfigurationLinesIfNotEmpty() {\n\t\t\tvar edaEasyFormGeneratorModelToReturn = angular.isArray(scope.edaEasyFormGeneratorModel.edaFieldsModel) ? scope.edaEasyFormGeneratorModel.edaFieldsModel.length > 0 ? scope.edaEasyFormGeneratorModel.edaFieldsModel : emptyEdaFieldsModel() : emptyEdaFieldsModel();\n\t\t\treturn edaEasyFormGeneratorModelToReturn;\n\t\t}\n\n\t\t/**\n \t* empty fields model : to display at least an empty line\n \t* otherwise would look like ugly empty line like it were a bug\n \t*/\n\t\tfunction emptyEdaFieldsModel() {\n\t\t\tvar emptyModel = [{\n\t\t\t\t'line': 1,\n\t\t\t\t'activeColumn': 1,\n\t\t\t\t'columns': [{\n\t\t\t\t\t'numColumn': 1,\n\t\t\t\t\t'exist': true,\n\t\t\t\t\t'control': {\n\t\t\t\t\t\t'type': 'none',\n\t\t\t\t\t\t'key': 'none'\n\t\t\t\t\t}\n\t\t\t\t}]\n\t\t\t}];\n\t\t\treturn emptyModel;\n\t\t}\n\n\t\tfunction returnAttributeDataModelIfNotEmpty() {\n\t\t\tvar dataModelToReturn = angular.isArray(scope.edaEasyFormGeneratorModel.dataModel) ? scope.edaEasyFormGeneratorModel.dataModel.length > 0 ? scope.edaEasyFormGeneratorModel.dataModel : [] : [];\n\t\t\treturn dataModelToReturn;\n\t\t}\n\n\t\tfunction loadExistingConfigurationModel() {\n\t\t\tif (angular.isDefined(scope.edaEasyFormGeneratorModel)) {\n\t\t\t\tvar configlines = returnAttributeConfigurationLinesIfNotEmpty();\n\t\t\t\tscope.vm.configurationLoaded = {};\n\t\t\t\tformFieldManage.bindConfigurationLines(scope.vm.configurationLoaded, configlines, false);\n\t\t\t\t//apply configuration model\n\t\t\t\tscope.vm.configuration = angular.copy(scope.vm.configurationLoaded);\n\t\t\t\t//apply ddModel\n\t\t\t\tddModelConfModelProxyService.loadDragDropModelFromConfigurationModel(scope.vm.configuration, scope.vm.dragDropModel);\n\t\t\t\tupdateConfigurationClassName(scope.vm.configuration);\n\t\t\t\tddModelConfModelProxyService.refreshControlsKeys(scope.vm.configuration, scope.vm.dragDropModel);\n\t\t\t\t//apply formly model\n\t\t\t\tformFieldManage.applyConfigurationToformlyModel(scope.vm.configuration, scope.vm.wfFormFields, scope.vm.dataModel);\n\t\t\t\tscope.vm.wfFormFieldsOnlyNeededProperties = angular.copy(scope.vm.wfFormFields);\n\t\t\t\tscope.vm.dataModel = returnAttributeDataModelIfNotEmpty();\n\t\t\t\tscope.vm.configuration.formName = angular.isString(scope.edaEasyFormGeneratorModel.formName) ? scope.edaEasyFormGeneratorModel.formName : '';\n\t\t\t\tscope.vm.configuration.submitButtonText = angular.isString(scope.edaEasyFormGeneratorModel.btnSubmitText) ? scope.edaEasyFormGeneratorModel.btnSubmitText : 'Submit';\n\t\t\t\tscope.vm.configuration.cancelButtonText = angular.isString(scope.edaEasyFormGeneratorModel.btnCancelText) ? scope.edaEasyFormGeneratorModel.btnCancelText : 'Cancel';\n\t\t\t}\n\t\t}\n\n\t\tfunction updateConfigurationClassName(configModel) {\n\t\t\tangular.forEach(configModel.lines, function (aline) {\n\t\t\t\tvar cssClassToApply = easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(aline.columns.length);\n\t\t\t\tangular.forEach(aline.columns, function (aControl) {\n\t\t\t\t\treturn aControl.control.className = cssClassToApply;\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n}\n\nedaDragdropWayEasyFormGen.$inject = ['$timeout', 'formFieldManage', 'ddModelConfModelProxyService',\n// 'dragDropConfig',\n'easyFormDragWayConfig'];\n\nexports.default = edaDragdropWayEasyFormGen;\nexports.EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE = EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLmRpcmVjdGl2ZS5qcz9iMjkwIl0sIm5hbWVzIjpbIkVEQV9EUkFHRFJPUF9XQVlfRUFTWV9GT1JNX0dFTl9ESVJFQ1RJVkUiLCJlZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuIiwiJHRpbWVvdXQiLCJmb3JtRmllbGRNYW5hZ2UiLCJkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlIiwiZWFzeUZvcm1EcmFnV2F5Q29uZmlnIiwiZGlyZWN0aXZlIiwicmVzdHJpY3QiLCJ0ZW1wbGF0ZSIsInNjb3BlIiwiZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbCIsImVkYVNhdmVGb3JtRXZlbnQiLCJjb250cm9sbGVyIiwiY29udHJvbGxlckFzIiwicmVwbGFjZSIsImxpbmsiLCJsaW5rRmN0IiwiJHdhdGNoIiwibG9hZEV4aXN0aW5nQ29uZmlndXJhdGlvbk1vZGVsIiwicmV0dXJuU2F2ZUV2ZW50IiwibmV3VmFsdWUiLCJfZWFzeUZvcm1HZW5lcmF0b3JNb2RlbCIsImZvcm1OYW1lIiwidm0iLCJjb25maWd1cmF0aW9uIiwiYnRuU3VibWl0VGV4dCIsInN1Ym1pdEJ1dHRvblRleHQiLCJidG5DYW5jZWxUZXh0IiwiY2FuY2VsQnV0dG9uVGV4dCIsImVkYUZpZWxkc01vZGVsIiwibGluZXMiLCJlZGFGaWVsZHNNb2RlbFN0cmluZ2lmaWVkIiwiYW5ndWxhciIsInRvSnNvbiIsImZvcm1seUZpZWxkc01vZGVsIiwid2ZGb3JtRmllbGRzT25seU5lZWRlZFByb3BlcnRpZXMiLCJkYXRhTW9kZWwiLCJyZXR1cm5BdHRyaWJ1dGVDb25maWd1cmF0aW9uTGluZXNJZk5vdEVtcHR5IiwiZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbFRvUmV0dXJuIiwiaXNBcnJheSIsImxlbmd0aCIsImVtcHR5RWRhRmllbGRzTW9kZWwiLCJlbXB0eU1vZGVsIiwicmV0dXJuQXR0cmlidXRlRGF0YU1vZGVsSWZOb3RFbXB0eSIsImRhdGFNb2RlbFRvUmV0dXJuIiwiaXNEZWZpbmVkIiwiY29uZmlnbGluZXMiLCJjb25maWd1cmF0aW9uTG9hZGVkIiwiYmluZENvbmZpZ3VyYXRpb25MaW5lcyIsImNvcHkiLCJsb2FkRHJhZ0Ryb3BNb2RlbEZyb21Db25maWd1cmF0aW9uTW9kZWwiLCJkcmFnRHJvcE1vZGVsIiwidXBkYXRlQ29uZmlndXJhdGlvbkNsYXNzTmFtZSIsInJlZnJlc2hDb250cm9sc0tleXMiLCJhcHBseUNvbmZpZ3VyYXRpb25Ub2Zvcm1seU1vZGVsIiwid2ZGb3JtRmllbGRzIiwiaXNTdHJpbmciLCJjb25maWdNb2RlbCIsImZvckVhY2giLCJhbGluZSIsImNzc0NsYXNzVG9BcHBseSIsImdldEl0ZW1Dc3NEZXBlbmRpbmdOdW1iZXJJdGVtc0luUm93IiwiY29sdW1ucyIsImFDb250cm9sIiwiY29udHJvbCIsImNsYXNzTmFtZSIsIiRpbmplY3QiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFPQTs7OztBQUNBOzs7O0FBUkE7O0FBR0E7QUFDQTtBQUNBOztBQVNBLElBQU1BLDJDQUEyQywyQkFBakQ7O0FBRUEsU0FBU0MseUJBQVQsQ0FDQ0MsUUFERCxFQUVDQyxlQUZELEVBR0NDLDRCQUhEO0FBSUM7QUFDQUMscUJBTEQsRUFLdUI7O0FBRXRCLEtBQUlDLFlBQVk7QUFDZkMsWUFBYyxHQURDO0FBRWZDLHFFQUZlO0FBR2ZDLFNBQWE7QUFDWkMsOEJBQTRCLEdBRGhCO0FBRVpDLHFCQUE0QjtBQUZoQixHQUhFO0FBT2ZDLDZGQVBlO0FBUWZDLGlHQVJlO0FBU2ZDLFdBQWEsS0FURTtBQVVmQyxRQUFXQztBQVZJLEVBQWhCO0FBWUEsUUFBT1YsU0FBUDs7QUFLQSxVQUFTVSxPQUFULENBQWlCUCxLQUFqQixFQUF1QjtBQUN0QjtBQUNBQSxRQUFNUSxNQUFOLENBQWE7QUFBQSxVQUFJUixN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LE9BQU4sQ0FBY3RCLE1BQXhFLENBQXRCO0FBQ0FSLFlBQVEwQixPQUFSLENBQWdCQyxNQUFNRyxPQUF0QixFQUErQixVQUFDQyxRQUFEO0FBQUEsWUFBYUEsU0FBU0MsT0FBVCxDQUFpQkMsU0FBakIsR0FBNkJMLGVBQTFDO0FBQUEsS0FBL0I7QUFDQSxJQUhEO0FBSUE7QUFFRjtBQUlBOztBQUVEM0QsMEJBQTBCaUUsT0FBMUIsR0FBb0MsQ0FDbkMsVUFEbUMsRUFFbkMsaUJBRm1DLEVBR25DLDhCQUhtQztBQUluQztBQUNBLHVCQUxtQyxDQUFwQzs7a0JBUWVqRSx5QjtRQUdkRCx3QyxHQUFBQSx3QyIsImZpbGUiOiI4Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBhbmd1bGFyICovXG5cblxuLy9UT0RPIDogdG8gYmluZFRvQ29udHJvbGxlclxuLy8tPiB0aGVuIGFuZ3VsYXIgMS40KyB3aWxsIGJlIHJlcXVpcmVkLi4uXG4vLy0+IGNoZWNrIG1ldGhvdCB0byByZWZhY3RvciBpbnNpZGUgcmFnIGRyb3Agd2F5IHRoZW4gY29tbW9uIHN0ZXAgd2F5IGFuZCBkcmFnIGRyb3Agd2F5XG5cbmltcG9ydCBlZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuRGlyZWN0aXZlVGVtcGxhdGUgXHRmcm9tICcuL2VkYURyYWdEcm9wV2F5LmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4udGVtcGxhdGUuaHRtbCc7XG5pbXBvcnQge1xuXHREUkFHX0RST1BfV0FZX0VBU1lfRk9STV9HRU5fQ09OVFJPTExFUixcblx0RFJBR19EUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0NPTlRST0xMRVJBU1xufSBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZyb20gJy4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi5jb250cm9sbGVyJztcblxuXG5jb25zdCBFREFfRFJBR0RST1BfV0FZX0VBU1lfRk9STV9HRU5fRElSRUNUSVZFID0gJ2VkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4nO1xuXG5mdW5jdGlvbiBlZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuKFxuXHQkdGltZW91dCwgXG5cdGZvcm1GaWVsZE1hbmFnZSxcblx0ZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZSxcblx0Ly8gZHJhZ0Ryb3BDb25maWcsXG5cdGVhc3lGb3JtRHJhZ1dheUNvbmZpZyl7XG5cdFxuXHRsZXQgZGlyZWN0aXZlID0ge1xuXHRcdHJlc3RyaWN0IFx0XHRcdDogJ0UnLFxuXHRcdHRlbXBsYXRlXHRcdFx0OiBlZGFEcmFnRHJvcFdheUVhc3lGb3JtR2VuRGlyZWN0aXZlVGVtcGxhdGUsXG5cdFx0c2NvcGUgIFx0XHRcdFx0OiB7XG5cdFx0XHRlZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsIDogJz0nLFxuXHRcdFx0ZWRhU2F2ZUZvcm1FdmVudCAgICAgICAgICA6ICcmZWRhU2F2ZUZvcm1FdmVudCdcdFx0XHRcblx0XHR9LFxuXHRcdGNvbnRyb2xsZXIgXHRcdDogRFJBR19EUk9QX1dBWV9FQVNZX0ZPUk1fR0VOX0NPTlRST0xMRVIsXG5cdFx0Y29udHJvbGxlckFzIFx0OiBEUkFHX0RST1BfV0FZX0VBU1lfRk9STV9HRU5fQ09OVFJPTExFUkFTLFxuXHRcdHJlcGxhY2UgXHRcdFx0OiBmYWxzZSxcdFx0XG5cdFx0bGlua1x0XHRcdFx0XHQ6IGxpbmtGY3Rcblx0fTtcblx0cmV0dXJuIGRpcmVjdGl2ZTtcblx0XG5cdFxuXHRcblx0XG5cdGZ1bmN0aW9uIGxpbmtGY3Qoc2NvcGUpeyAgICAgICAgICAgICAgXG5cdFx0Ly8gd2F0Y2ggXCJzY29wZS5lYXN5Rm9ybUdlbmVyYXRvck1vZGVsXCJcblx0XHRzY29wZS4kd2F0Y2goKCk9PnNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwsICgpPT5sb2FkRXhpc3RpbmdDb25maWd1cmF0aW9uTW9kZWwoKSwgdHJ1ZSk7XG5cblx0XHQvLyB3YXRjaCBcInNjb3BlLnJldHVyblNhdmVFdmVudFwiXCIgPSBjYXRjaCBzYXZpbmcgZm9ybSBldmVudCAgXG5cdFx0c2NvcGUuJHdhdGNoKCgpPT5zY29wZS5yZXR1cm5TYXZlRXZlbnQsIChuZXdWYWx1ZSk9Pntcblx0XHRcdGlmIChuZXdWYWx1ZSA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRsZXQgX2Vhc3lGb3JtR2VuZXJhdG9yTW9kZWwgPSB7XG5cdFx0XHRcdFx0Zm9ybU5hbWUgICAgICAgICAgXHRcdFx0XHQ6IHNjb3BlLnZtLmNvbmZpZ3VyYXRpb24uZm9ybU5hbWUsXG5cdFx0XHRcdFx0YnRuU3VibWl0VGV4dCAgICAgXHRcdFx0XHQ6IHNjb3BlLnZtLmNvbmZpZ3VyYXRpb24uc3VibWl0QnV0dG9uVGV4dCxcblx0XHRcdFx0XHRidG5DYW5jZWxUZXh0ICAgICBcdFx0XHRcdDogc2NvcGUudm0uY29uZmlndXJhdGlvbi5jYW5jZWxCdXR0b25UZXh0LFxuXHRcdFx0XHRcdGVkYUZpZWxkc01vZGVsICAgIFx0XHRcdFx0OiBzY29wZS52bS5jb25maWd1cmF0aW9uLmxpbmVzLFxuXHRcdFx0XHRcdC8vanVzdCBhcyB0ZXN0XG5cdFx0XHRcdFx0ZWRhRmllbGRzTW9kZWxTdHJpbmdpZmllZCA6IGFuZ3VsYXIudG9Kc29uKHNjb3BlLnZtLmNvbmZpZ3VyYXRpb24ubGluZXMpLFxuXHRcdFx0XHRcdGZvcm1seUZpZWxkc01vZGVsIFx0XHRcdFx0OiBzY29wZS52bS53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRkYXRhTW9kZWwgICAgICAgICBcdFx0XHRcdDogc2NvcGUudm0uZGF0YU1vZGVsXG5cdFx0XHRcdH07XG5cdFx0XHRcdHNjb3BlLmVkYVNhdmVGb3JtRXZlbnQoe1xuXHRcdFx0XHRcdGVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwgOiBfZWFzeUZvcm1HZW5lcmF0b3JNb2RlbFxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Ly9iYWNrIHRvIGZhbHNlLCB3YWl0aW5nIG5leHQgc2F2ZSBldmVudFxuXHRcdFx0XHRzY29wZS5yZXR1cm5TYXZlRXZlbnQgPSBmYWxzZTtcblx0XHRcdH0gICAgICAgICAgICBcblx0XHR9KTtcdFxuXG5cblx0XHRmdW5jdGlvbiByZXR1cm5BdHRyaWJ1dGVDb25maWd1cmF0aW9uTGluZXNJZk5vdEVtcHR5KCl7XG5cdFx0XHRsZXQgZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbFRvUmV0dXJuID0gKFxuXHRcdFx0XHRhbmd1bGFyLmlzQXJyYXkoc2NvcGUuZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5lZGFGaWVsZHNNb2RlbCkgPyAgKCBcblx0XHRcdFx0XHRzY29wZS5lZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsLmVkYUZpZWxkc01vZGVsLmxlbmd0aCA+IDAgPyBcblx0XHRcdFx0XHRcdHNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuZWRhRmllbGRzTW9kZWwgXG5cdFx0XHRcdFx0OiBlbXB0eUVkYUZpZWxkc01vZGVsKClcblx0XHRcdFx0XHQpIFxuXHRcdFx0XHQ6IGVtcHR5RWRhRmllbGRzTW9kZWwoKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBlZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsVG9SZXR1cm47ICBcblx0XHR9XG4gICAgICAgICAgXG5cdFx0LyoqXG5cdFx0XHQqIGVtcHR5IGZpZWxkcyBtb2RlbCA6IHRvIGRpc3BsYXkgYXQgbGVhc3QgYW4gZW1wdHkgbGluZVxuXHRcdFx0KiBvdGhlcndpc2Ugd291bGQgbG9vayBsaWtlIHVnbHkgZW1wdHkgbGluZSBsaWtlIGl0IHdlcmUgYSBidWdcblx0XHRcdCovXG5cdFx0ZnVuY3Rpb24gZW1wdHlFZGFGaWVsZHNNb2RlbCgpe1xuXHRcdFx0bGV0IGVtcHR5TW9kZWwgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQnbGluZSdcdFx0XHRcdFx0OiAxLFxuXHRcdFx0XHRcdCdhY3RpdmVDb2x1bW4nXHQ6IDEsXG5cdFx0XHRcdFx0J2NvbHVtbnMnXHRcdFx0XHQ6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0J251bUNvbHVtbidcdDogMSxcblx0XHRcdFx0XHRcdFx0J2V4aXN0J1x0XHRcdDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0J2NvbnRyb2wnXHRcdDoge1xuXHRcdFx0XHRcdFx0XHRcdCd0eXBlJ1x0OiAnbm9uZScsXG5cdFx0XHRcdFx0XHRcdFx0J2tleSdcdFx0OiAnbm9uZSdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdHJldHVybiBlbXB0eU1vZGVsO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHJldHVybkF0dHJpYnV0ZURhdGFNb2RlbElmTm90RW1wdHkoKXtcblx0XHRcdGxldCBkYXRhTW9kZWxUb1JldHVybiA9IChcblx0XHRcdFx0YW5ndWxhci5pc0FycmF5KHNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuZGF0YU1vZGVsKSAgID8gICggXG5cdFx0XHRcdFx0c2NvcGUuZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5kYXRhTW9kZWwubGVuZ3RoID4gMCA/IFxuXHRcdFx0XHRcdHNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuZGF0YU1vZGVsIFxuXHRcdFx0XHRcdDogW11cblx0XHRcdFx0XHQpIFxuXHRcdFx0XHQ6IFtdXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGRhdGFNb2RlbFRvUmV0dXJuOyAgXG5cdFx0fSAgICAgICAgIFxuIFxuICAgICAgICAgICAgICBcblx0XHRmdW5jdGlvbiBsb2FkRXhpc3RpbmdDb25maWd1cmF0aW9uTW9kZWwoKXtcblx0XHRcdGlmKGFuZ3VsYXIuaXNEZWZpbmVkKHNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwpKXtcblx0XHRcdFx0bGV0IGNvbmZpZ2xpbmVzICAgICAgICAgICA9IHJldHVybkF0dHJpYnV0ZUNvbmZpZ3VyYXRpb25MaW5lc0lmTm90RW1wdHkoKTsgICAgICAgICAgIFxuXHRcdFx0XHRzY29wZS52bS5jb25maWd1cmF0aW9uTG9hZGVkID0ge307XG5cdFx0XHRcdGZvcm1GaWVsZE1hbmFnZS5iaW5kQ29uZmlndXJhdGlvbkxpbmVzKHNjb3BlLnZtLmNvbmZpZ3VyYXRpb25Mb2FkZWQsIGNvbmZpZ2xpbmVzLCBmYWxzZSk7XG5cdFx0XHRcdC8vYXBwbHkgY29uZmlndXJhdGlvbiBtb2RlbFxuXHRcdFx0XHRzY29wZS52bS5jb25maWd1cmF0aW9uID0gYW5ndWxhci5jb3B5KHNjb3BlLnZtLmNvbmZpZ3VyYXRpb25Mb2FkZWQpO1xuXHRcdFx0XHQvL2FwcGx5IGRkTW9kZWxcblx0XHRcdFx0ZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZS5sb2FkRHJhZ0Ryb3BNb2RlbEZyb21Db25maWd1cmF0aW9uTW9kZWwoc2NvcGUudm0uY29uZmlndXJhdGlvbiwgc2NvcGUudm0uZHJhZ0Ryb3BNb2RlbCk7IFxuXHRcdFx0XHR1cGRhdGVDb25maWd1cmF0aW9uQ2xhc3NOYW1lKHNjb3BlLnZtLmNvbmZpZ3VyYXRpb24pO1xuXHRcdFx0XHRkZE1vZGVsQ29uZk1vZGVsUHJveHlTZXJ2aWNlLnJlZnJlc2hDb250cm9sc0tleXMoc2NvcGUudm0uY29uZmlndXJhdGlvbiwgc2NvcGUudm0uZHJhZ0Ryb3BNb2RlbCk7ICAgICAgICAgICAgIFxuXHRcdFx0XHQvL2FwcGx5IGZvcm1seSBtb2RlbFxuXHRcdFx0XHRmb3JtRmllbGRNYW5hZ2UuYXBwbHlDb25maWd1cmF0aW9uVG9mb3JtbHlNb2RlbChzY29wZS52bS5jb25maWd1cmF0aW9uLCBzY29wZS52bS53ZkZvcm1GaWVsZHMsIHNjb3BlLnZtLmRhdGFNb2RlbCk7ICAgICAgICAgIFxuXHRcdFx0XHRzY29wZS52bS53ZkZvcm1GaWVsZHNPbmx5TmVlZGVkUHJvcGVydGllcyA9IGFuZ3VsYXIuY29weShzY29wZS52bS53ZkZvcm1GaWVsZHMpO1xuXHRcdFx0XHRzY29wZS52bS5kYXRhTW9kZWwgICAgICAgICAgICAgICAgICAgICAgICA9IHJldHVybkF0dHJpYnV0ZURhdGFNb2RlbElmTm90RW1wdHkoKTsgIFxuXHRcdFx0XHRzY29wZS52bS5jb25maWd1cmF0aW9uLmZvcm1OYW1lICAgICAgICAgICA9IGFuZ3VsYXIuaXNTdHJpbmcoc2NvcGUuZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5mb3JtTmFtZSkgPyBzY29wZS5lZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsLmZvcm1OYW1lIDogJyc7XG5cdFx0XHRcdHNjb3BlLnZtLmNvbmZpZ3VyYXRpb24uc3VibWl0QnV0dG9uVGV4dCAgID0gYW5ndWxhci5pc1N0cmluZyhzY29wZS5lZGFFYXN5Rm9ybUdlbmVyYXRvck1vZGVsLmJ0blN1Ym1pdFRleHQpID8gc2NvcGUuZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5idG5TdWJtaXRUZXh0IDogJ1N1Ym1pdCc7IFxuXHRcdFx0XHRzY29wZS52bS5jb25maWd1cmF0aW9uLmNhbmNlbEJ1dHRvblRleHQgICA9IGFuZ3VsYXIuaXNTdHJpbmcoc2NvcGUuZWRhRWFzeUZvcm1HZW5lcmF0b3JNb2RlbC5idG5DYW5jZWxUZXh0KSA/IHNjb3BlLmVkYUVhc3lGb3JtR2VuZXJhdG9yTW9kZWwuYnRuQ2FuY2VsVGV4dCA6ICdDYW5jZWwnO1xuXHRcdFx0fSAgXG5cdFx0fSBcbiAgICAgICAgIFxuICAgICAgICAgXG5cdFx0ZnVuY3Rpb24gdXBkYXRlQ29uZmlndXJhdGlvbkNsYXNzTmFtZShjb25maWdNb2RlbCl7XG5cdFx0XHRhbmd1bGFyLmZvckVhY2goY29uZmlnTW9kZWwubGluZXMsIChhbGluZSk9Pntcblx0XHRcdFx0bGV0IGNzc0NsYXNzVG9BcHBseSA9IGVhc3lGb3JtRHJhZ1dheUNvbmZpZy5nZXRJdGVtQ3NzRGVwZW5kaW5nTnVtYmVySXRlbXNJblJvdyhhbGluZS5jb2x1bW5zLmxlbmd0aCk7XG5cdFx0XHRcdGFuZ3VsYXIuZm9yRWFjaChhbGluZS5jb2x1bW5zLCAoYUNvbnRyb2wpPT4gYUNvbnRyb2wuY29udHJvbC5jbGFzc05hbWUgPSBjc3NDbGFzc1RvQXBwbHkpOyBcblx0XHRcdH0pOyAgICAgICAgIFxuXHRcdH1cblxufVx0XG5cdFxuXHRcblx0XG59XG5cbmVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW4uJGluamVjdCA9IFtcblx0JyR0aW1lb3V0JywgXG5cdCdmb3JtRmllbGRNYW5hZ2UnLFxuXHQnZGRNb2RlbENvbmZNb2RlbFByb3h5U2VydmljZScsXG5cdC8vICdkcmFnRHJvcENvbmZpZycsXG5cdCdlYXN5Rm9ybURyYWdXYXlDb25maWcnXHRcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGVkYURyYWdkcm9wV2F5RWFzeUZvcm1HZW47XG5cbmV4cG9ydCB7XG5cdEVEQV9EUkFHRFJPUF9XQVlfRUFTWV9GT1JNX0dFTl9ESVJFQ1RJVkVcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2VkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi5kaXJlY3RpdmUuanMiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 83 */ +/***/ function(module, exports) { + + eval("module.exports = \"
    \\n
    \\n
    \\n
    \\n
    \\n\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t 2\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdnd-dragover=\\\"vm.dragoverCallbackItems($parent.$parent.$index, $parent.$index, $index, external);\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdnd-drop=\\\"vm.dropCallbackItems(event, index, $index,$parent.$index, $parent.$parent.$index, $parent.$parent.$parent.$index, item, external, type, 'itemType');\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tclass=\\\"itemlist\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-content-counter\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-value-when-placeholder=\\\"dndPlaceholder\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-value-when-dragging=\\\"dndDraggingSource\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-full-model = \\\"vm.dragDropModel\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-content-counter-current-index=\\\"{{$index}}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-content-counter-parent-index=\\\"{{$parent.$index}}\\\"\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tdd-content-counter-force-css-refresh = \\\"command.forceRefresh\\\">\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{vm.configuration.submitButtonText}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{vm.configuration.cancelButtonText}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tCustomize form buttons\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tCustomize Submit button Text :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tCustomize Cancel button Text :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tDATA MODEL\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{vm.model | json}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tFIELDS MODEL (ready to save to database one)\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t{{vm.wfFormFieldsOnlyNeededProperties | json}}\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tSave this form\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t

    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tName to this form :\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tsave this form\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\t
    \\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
    \\n\\t\\t\\t
    \\n
    \\n Easy form generator : {{vm.easyFormGeneratorVERSION}} — Erwan DATIN (MacKentoch)\\n
    \\n\\t\\t\\t
    \\n \\n \\n\\n\"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvZWRhRHJhZ0Ryb3BXYXlFYXN5Rm9ybUdlbi9lZGFEcmFnRHJvcFdheS5lZGFEcmFnZHJvcFdheUVhc3lGb3JtR2VuLnRlbXBsYXRlLmh0bWw/Y2NmZCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyUUFBMlEsbUZBQW1GLDRuQ0FBNG5DLDBEQUEwRCw2REFBNkQsUUFBUSw0ZUFBNGUsa0hBQWtILDZjQUE2YyxvbkJBQW9uQiwyREFBMkQscUVBQXFFLGdCQUFnQiw2VUFBNlUsMkRBQTJELG9FQUFvRSxRQUFRLG1FQUFtRSxnQkFBZ0IsZ25CQUFnbkIsMk1BQTJNLG1jQUFtYyxRQUFRLGdGQUFnRixnQkFBZ0Isc21CQUFzbUIsMkxBQTJMLHNEQUFzRCx3RUFBd0UsUUFBUSx1RUFBdUUsZ0JBQWdCLGdGQUFnRix3QkFBd0IsK0lBQStJLGVBQWUsbVVBQW1VLG1EQUFtRCxnWkFBZ1osa0JBQWtCLGtGQUFrRix3QkFBd0IsZzlDQUFnOUMsbUNBQW1DLDZNQUE2TSxtQ0FBbUMsaXFCQUFpcUIsMEhBQTBILGdHQUFnRyxvRkFBb0Ysd2lGQUF3aUYsZ0hBQWdILHNHQUFzRyxxRkFBcUYsbVJBQW1SLGlCQUFpQix3a0JBQXdrQixrSEFBa0gsc0VBQXNFLGlGQUFpRixvVEFBb1QsNENBQTRDLGlrQkFBaWtCLDBHQUEwRyxzRUFBc0UsMEZBQTBGLHdtREFBd21ELDZCQUE2QiIsImZpbGUiOiI4My5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gXCI8c2VjdGlvbiBpZD1cXFwicGFnZVdmRWRpdFxcXCI+XFxuICA8ZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJjb250YWluZXJcXFwiPlxcbiAgICAgIDxzZWN0aW9uIGlkPVxcXCJwcmV2aWV3XFxcIj5cXG4gICAgICAgIDxkaXYgaWQ9XFxcInByZXZpZXctY29udGVudFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29udGVudC1jb250YWluZXJcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdDx0b2FzdGVyLWNvbnRhaW5lclxcbiAgICAgICAgICAgICAgdG9hc3Rlci1vcHRpb25zPVxcXCJ7ICdwb3NpdGlvbi1jbGFzcyc6ICd0b2FzdC10b3AtZnVsbC13aWR0aCcsICdleHRlbmRlZFRpbWVvdXQnIDogNTAwLCd0aW1lT3V0JzogNTAwIH1cXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdDwvdG9hc3Rlci1jb250YWluZXI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0PHVpYi10YWJzZXQganVzdGlmaWVkPVxcXCJ0cnVlXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dWliLXRhYlxcbiAgICAgICAgICAgICAgICBzZWxlY3Q9XFxcInZtLnRhYkp1c3RTZWxlY3RlZCgyKVxcXCJcXG4gICAgICAgICAgICAgICAgYWN0aXZlPVxcXCJ2bS50YWIuZWRpdFRhYi5hY3RpdmVcXFwiXFxuICAgICAgICAgICAgICAgIGhlYWRpbmc9XFxcIkVkaXQgL0NyZWF0ZVxcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBhZ2VzbGlkZVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBzLW9wZW49XFxcInZtLmVkaXRQYW5lbE1vZGVsLnRvZ2dsZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRwcy1zaWRlPVxcXCJsZWZ0XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBzLWNsb2FrPVxcXCJ0cnVlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBzLXNpemU9XFxcIjQwMHB4XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGVmdC1wYW5lbFxcbiAgICAgICAgICAgICAgICAgICAgICBjbG9zZS1lZGl0LXBhbmVsPVxcXCJ2bS5jbG9zZUVkaXRQYW5lbCgpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICBzYXZlLWZyb20tZWRpdC1wYW5lbD12bS5zYXZlRnJvbUVkaXRQYW5lbCgpPlxcbiAgICAgICAgICAgICAgICAgICAgPC9sZWZ0LXBhbmVsPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93IGFkdmFuY2VkRGVtb1xcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBuZy1yZXBlYXQ9XFxcImNvbnRhaW5lcnMgaW4gdm0uZHJhZ0Ryb3BNb2RlbFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRlY29yLWRyb3Atem9uZVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRyb3Atem9uZS1wcm9wZXJ0aWVzPVxcXCJ2bS5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcy5kcm9wWm9uZUNvbmZpZy5kZWNvcmF0aW9uWyRpbmRleF1cXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtZHJvcC16b25lLXZlcmJvc2UtbW9kZT1cXFwie3t2bS5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcy5kcm9wWm9uZUNvbmZpZy52ZXJib3NlTW9kZX19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRyb3Atem9uZS1jdXJyZW50LWluZGV4PVxcXCJ7eyRpbmRleH19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRyb3Atem9uZS1hZGQtbmV3LWxpbmU9XFxcInZtLmluc2VydE5ld0xpbmUoKVxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBcXHRjbGFzcz1cXFwiZHJvcHpvbmUgYm94IGJveC15ZWxsb3dcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDx1bFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1saXN0PVxcXCJjb250YWluZXJzXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1hbGxvd2VkLXR5cGVzPVxcXCJbJ2NvbnRhaW5lclR5cGUnXVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtZXh0ZXJuYWwtc291cmNlcz1cXFwidHJ1ZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtZHJhZ292ZXI9XFxcInZtLmRyYWdvdmVyQ2FsbGJhY2tDb250YWluZXIoJHBhcmVudC4kcGFyZW50LiRpbmRleCwgJHBhcmVudC4kaW5kZXgsICRpbmRleCk7XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1kcm9wPVxcXCJ2bS5kcm9wQ2FsbGJhY2soZXZlbnQsIGluZGV4LCBpdGVtLCBleHRlcm5hbCwgdHlwZSwgJ2NvbnRhaW5lclR5cGUnKTtcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcInJvd1xcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxpXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctcmVwZWF0PVxcXCJpdGVtcyBpbiBjb250YWluZXJzXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1kcmFnZ2FibGU9XFxcIml0ZW1zXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC10eXBlPVxcXCInY29udGFpbmVyVHlwZSdcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLWVmZmVjdC1hbGxvd2VkPVxcXCJjb3B5TW92ZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtZHJhZ3N0YXJ0PVxcXCJcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLW1vdmVkPVxcXCJjb250YWluZXJzLnNwbGljZSgkaW5kZXgsIDEpO1xcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtZGlzYWJsZS1pZj1cXFwiJHBhcmVudC4kaW5kZXggPT0gMFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtY29waWVkPVxcXCJcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXZcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiY29udGFpbmVyLWVsZW1lbnQgYm94IGJveC1ibHVlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRlY29yLWNvbnRhaW5lclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWNvbnRhaW5lci1wcm9wZXJ0aWVzPVxcXCJ2bS5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcy5jb250YWluZXJDb25maWcuZGVjb3JhdGlvblskaW5kZXhdXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWNvbnRhaW5lci1pcy1jb2xscGFzZWQ9XFxcInZtLmVhc3lGb3JtRHJhZ0Ryb3BQcm9wZXJ0aWVzLmNvbnRhaW5lckNvbmZpZy5kZWNvcmF0aW9uWyRpbmRleF0uaXNDb2xsYXBzZWRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtY29udGFpbmVyLXZlcmJvc2UtbW9kZT1cXFwie3t2bS5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcy5jb250YWluZXJDb25maWcudmVyYm9zZU1vZGV9fVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZC1jb250YWluZXItY3VycmVudC1pbmRleD1cXFwie3skcGFyZW50LiRpbmRleH19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWNvbGxhcHNlLWFsbD1cXFwidm0uY29sbGFwc2VBbGxHcm91cENvbnRyb2woZXhjZXB0VGhpc09uZSlcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgZGQtZGVjb3ItaW5jbHVkZS1jb250YWluZXItaGVyZT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtZGVjb3ItbGluZVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWxpbmUtdmVyYm9zZS1tb2RlPVxcXCJ7e3ZtLmVhc3lGb3JtRHJhZ0Ryb3BQcm9wZXJ0aWVzLmNvbnRhaW5lckNvbmZpZy52ZXJib3NlTW9kZX19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWxpbmUtY3VycmVudC1pbmRleD1cXFwie3skaW5kZXh9fVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZC1saW5lLXBhcmVudC1pbmRleD1cXFwie3skcGFyZW50LiRpbmRleH19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLXJlbW92ZS1saW5lPVxcXCJ2bS5yZW1vdmVUaGlzTGluZSgkaW5kZXgpXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8dWxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtbGlzdD1cXFwiaXRlbXNcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLWFsbG93ZWQtdHlwZXM9XFxcIlsnaXRlbVR5cGUnXVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtaG9yaXpvbnRhbC1saXN0PVxcXCJ0cnVlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1leHRlcm5hbC1zb3VyY2VzPVxcXCJ0cnVlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1kaXNhYmxlLWlmPVxcXCJpdGVtcy5sZW5ndGggPiAyXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1kcmFnb3Zlcj1cXFwidm0uZHJhZ292ZXJDYWxsYmFja0l0ZW1zKCRwYXJlbnQuJHBhcmVudC4kaW5kZXgsICRwYXJlbnQuJGluZGV4LCAkaW5kZXgsIGV4dGVybmFsKTtcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLWRyb3A9XFxcInZtLmRyb3BDYWxsYmFja0l0ZW1zKGV2ZW50LCBpbmRleCwgJGluZGV4LCRwYXJlbnQuJGluZGV4LCAkcGFyZW50LiRwYXJlbnQuJGluZGV4LCAkcGFyZW50LiRwYXJlbnQuJHBhcmVudC4kaW5kZXgsIGl0ZW0sIGV4dGVybmFsLCB0eXBlLCAnaXRlbVR5cGUnKTtcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcIml0ZW1saXN0XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWNvbnRlbnQtY291bnRlclxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLXZhbHVlLXdoZW4tcGxhY2Vob2xkZXI9XFxcImRuZFBsYWNlaG9sZGVyXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLXZhbHVlLXdoZW4tZHJhZ2dpbmc9XFxcImRuZERyYWdnaW5nU291cmNlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWZ1bGwtbW9kZWwgPSBcXFwidm0uZHJhZ0Ryb3BNb2RlbFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZC1jb250ZW50LWNvdW50ZXItY3VycmVudC1pbmRleD1cXFwie3skaW5kZXh9fVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZC1jb250ZW50LWNvdW50ZXItcGFyZW50LWluZGV4PVxcXCJ7eyRwYXJlbnQuJGluZGV4fX1cXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtY29udGVudC1jb3VudGVyLWZvcmNlLWNzcy1yZWZyZXNoID0gXFxcImNvbW1hbmQuZm9yY2VSZWZyZXNoXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGlcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1yZXBlYXQ9XFxcIml0ZW0gaW4gaXRlbXNcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLWRyYWdnYWJsZT1cXFwiaXRlbVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtdHlwZT1cXFwiJ2l0ZW1UeXBlJ1xcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtZWZmZWN0LWFsbG93ZWQ9XFxcImNvcHlNb3ZlXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRuZC1kcmFnc3RhcnQ9XFxcIlxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkbmQtbW92ZWQ9XFxcInZtLmRuZEl0ZW1Nb3ZlZCgkcGFyZW50LiRwYXJlbnQuJGluZGV4LCAkcGFyZW50LiRpbmRleCwgJGluZGV4KTtcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZG5kLWNvcGllZD1cXFwiXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWRlY29yLWl0ZW1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRkZC1pdGVtLXZlcmJvc2UtbW9kZT1cXFwie3t2bS5lYXN5Rm9ybURyYWdEcm9wUHJvcGVydGllcy5pdGVtQ29uZmlnLnZlcmJvc2VNb2RlfX1cXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtaXRlbS1jdXJyZW50LWluZGV4PVxcXCJ7eyRpbmRleH19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWl0ZW0tcGFyZW50LWluZGV4PVxcXCJ7eyRwYXJlbnQuJGluZGV4fX1cXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtaXRlbS1wYXJlbnQtcGFyZW50LWluZGV4ID0gXFxcInt7JHBhcmVudC4kcGFyZW50LiRpbmRleH19XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLWl0ZW1zLWNvdW50PVxcXCJpdGVtcy5sZW5ndGhcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZGQtaXRlbS1jc3MtY2xhc3M9XFxcInt7aXRlbS5jc3NDbGFzc319XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGlkPVxcXCJpdGVtQ29udGVudFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGRkLW5vLWVkaXRhYmxlLWNvbnRyb2xcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwicmlnaHRDbGlja0N0cmxcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctY2xhc3M9XFxcIntyaWdodENsaWNrQ3RybFNlbGVjdGVkIDogaXRlbS5yaWdodENsaWtlZCA9PT0gdHJ1ZX1cXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZWRhLXNldC1yaWdodC1jbGlja2VkPVxcXCJ2bS5zZXRSaWdodENsaWNrZWQocHJldmlvdXNTdGF0ZSwgaXRlbSlcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZWRhLXJpZ2h0LWNsaWNrPVxcXCJ2bS50b2dnbGVFZGl0UGFuZWwoJGV2ZW50LCAkcGFyZW50LiRpbmRleCwgJGluZGV4LCBpdGVtKVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRlZGEtc2VsZWN0ZWQtY2xhc3M9XFxcInJpZ2h0Q2xpY2tDdHJsU2VsZWN0ZWRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZWRhLWlzLXNlbGVjdGVkPVxcXCJ7e2l0ZW0ucmlnaHRDbGlrZWR9fVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRlZGEtcmlnaHQtY2xpY2stY29sLWluZGV4ID0gXFxcInt7JHBhcmVudC4kcGFyZW50LiRpbmRleH19XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8c3BhbiBuZy1iaW5kLWh0bWw9XFxcIml0ZW0ubGFiZWwgfCB0cnVzdFRoaXNcXFwiPjwvc3Bhbj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2xpPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvdWw+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY2xlYXJmaXhcXFwiPjwvZGl2PlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvZGl2PlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvbGk+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC91bD5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3VpYi10YWI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PHVpYi10YWJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRzZWxlY3Q9XFxcInZtLnRhYkp1c3RTZWxlY3RlZCgxKVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRhY3RpdmU9XFxcInZtLnRhYi5wcmV2aWV3VGFiLmFjdGl2ZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRoZWFkaW5nPVxcXCJQcmV2aWV3XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8Zm9ybSBuZy1zdWJtaXQ9XFxcInZtLm9uU3VibWl0KClcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxmb3JtbHktZm9ybVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkPVxcXCJwcmV2aWV3Rm9ybWx5Rm9ybVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRtb2RlbD1cXFwidm0ubW9kZWxcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZmllbGRzPVxcXCJ2bS53ZkZvcm1GaWVsZHNcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxzcGFuIGNsYXNzPVxcXCJwdWxsLXJpZ2h0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJzdWJtaXRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHt7dm0uY29uZmlndXJhdGlvbi5zdWJtaXRCdXR0b25UZXh0fX1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2J1dHRvbj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJjYW5jZWxcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHt7dm0uY29uZmlndXJhdGlvbi5jYW5jZWxCdXR0b25UZXh0fX1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2J1dHRvbj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3NwYW4+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9mb3JtbHktZm9ybT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Zvcm0+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiAgY2xhc3M9XFxcInBhbmVsIHBhbmVsLWRlZmF1bHRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXZcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwicGFuZWwtaGVhZGluZyBoZWFkaW5nLXByZXZpZXdcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctY2xpY2s9XFxcInZtLmlobS5wcmV2aWV3LmN1c3RvbWl6ZUZvcm1CdXR0b25zRXhwYW5kZWQgPSF2bS5paG0ucHJldmlldy5jdXN0b21pemVGb3JtQnV0dG9uc0V4cGFuZGVkXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aDMgY2xhc3M9XFxcInBhbmVsLXRpdGxlXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgYnRuLXhzXFxcIiA+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGlcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZmFcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctY2xhc3M9XFxcInsnZmEtYW5nbGUtZG93bic6IXZtLmlobS5wcmV2aWV3LmN1c3RvbWl6ZUZvcm1CdXR0b25zRXhwYW5kZWQsICdmYS1hbmdsZS11cCcgOiB2bS5paG0ucHJldmlldy5jdXN0b21pemVGb3JtQnV0dG9uc0V4cGFuZGVkfVxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9pPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvYnV0dG9uPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCZuYnNwO1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxpIGNsYXNzPVxcXCJmYSBmYS13cmVuY2hcXFwiPjwvaT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQmbmJzcDtcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRDdXN0b21pemUgZm9ybSBidXR0b25zXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9oMz5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IHVpYi1jb2xsYXBzZT1cXFwidm0uaWhtLnByZXZpZXcuY3VzdG9taXplRm9ybUJ1dHRvbnNFeHBhbmRlZFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNlxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxhYmVsXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9yPVxcXCJpbnB1dFN1Ym1pdEJ1dHRvbnRleHRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcIiBncmV5VGV4dCBjb250cm9sLWxhYmVsXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRDdXN0b21pemUgU3VibWl0IGJ1dHRvbiBUZXh0IDpcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2xhYmVsPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGlucHV0XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHlwZT1cXFwidGV4dFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkPVxcXCJpbnB1dFN1Ym1pdEJ1dHRvbnRleHRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGxhY2Vob2xkZXI9XFxcIlN1Ym1pdCBidXR0b24gdGV4dFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1tb2RlbD1cXFwidm0uY29uZmlndXJhdGlvbi5zdWJtaXRCdXR0b25UZXh0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNlxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGxhYmVsXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Zm9yPVxcXCJpbnB1dENhbmNlbEJ1dHRvbnRleHRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcIiBncmV5VGV4dCBjb250cm9sLWxhYmVsXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRDdXN0b21pemUgQ2FuY2VsIGJ1dHRvbiBUZXh0IDpcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2xhYmVsPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcIlxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGlucHV0XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0dHlwZT1cXFwidGV4dFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGlkPVxcXCJpbnB1dENhbmNlbEJ1dHRvbnRleHRcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGxhY2Vob2xkZXI9XFxcIkNhbmNlbCBidXR0b24gdGV4dFxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1tb2RlbD1cXFwidm0uY29uZmlndXJhdGlvbi5jYW5jZWxCdXR0b25UZXh0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcInBhbmVsLWhlYWRpbmcgaGVhZGluZy1wcmV2aWV3XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5nLWNsaWNrPVxcXCJ2bS5paG0ucHJldmlldy5mb3JtbHlNb2RlbFZpZXdFeHBhbmRlZCA9IXZtLmlobS5wcmV2aWV3LmZvcm1seU1vZGVsVmlld0V4cGFuZGVkXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aDMgY2xhc3M9XFxcInBhbmVsLXRpdGxlXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgYnRuLXhzXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aVxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJmYVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1jbGFzcz1cXFwieydmYS1hbmdsZS1kb3duJzohdm0uaWhtLnByZXZpZXcuZm9ybWx5TW9kZWxWaWV3RXhwYW5kZWQsICdmYS1hbmdsZS11cCcgOiB2bS5paG0ucHJldmlldy5mb3JtbHlNb2RlbFZpZXdFeHBhbmRlZH1cXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvaT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2J1dHRvbj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQmbmJzcDtcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aSBjbGFzcz1cXFwiZmEgZmEtZXllXFxcIj48L2k+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Jm5ic3A7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0REFUQSBNT0RFTFxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvaDM+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicGFuZWwtYm9keVxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiB1aWItY29sbGFwc2U9XFxcInZtLmlobS5wcmV2aWV3LmZvcm1seU1vZGVsVmlld0V4cGFuZGVkXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8cHJlPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHt7dm0ubW9kZWwgfCBqc29ufX1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3ByZT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcInBhbmVsLWhlYWRpbmcgaGVhZGluZy1wcmV2aWV3XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5nLWNsaWNrPVxcXCJ2bS5paG0ucHJldmlldy5mb3JtbHlGaWVsZHNWaWV3RXhwYW5kZWQgPSF2bS5paG0ucHJldmlldy5mb3JtbHlGaWVsZHNWaWV3RXhwYW5kZWRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxoMyBjbGFzcz1cXFwicGFuZWwtdGl0bGVcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeSBidG4teHNcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxpXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcImZhXFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5nLWNsYXNzPVxcXCJ7J2ZhLWFuZ2xlLWRvd24nOiF2bS5paG0ucHJldmlldy5mb3JtbHlGaWVsZHNWaWV3RXhwYW5kZWQsICdmYS1hbmdsZS11cCcgOiB2bS5paG0ucHJldmlldy5mb3JtbHlGaWVsZHNWaWV3RXhwYW5kZWR9XFxcIj48L2k+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9idXR0b24+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Jm5ic3A7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGkgY2xhc3M9XFxcImZhIGZhLWV5ZVxcXCI+PC9pPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCZuYnNwO1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdEZJRUxEUyBNT0RFTCAocmVhZHkgdG8gc2F2ZSB0byBkYXRhYmFzZSBvbmUpXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9oMz5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IHVpYi1jb2xsYXBzZT1cXFwidm0uaWhtLnByZXZpZXcuZm9ybWx5RmllbGRzVmlld0V4cGFuZGVkXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8cHJlPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHt7dm0ud2ZGb3JtRmllbGRzT25seU5lZWRlZFByb3BlcnRpZXMgfCBqc29ufX1cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L3ByZT5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3M9XFxcInBhbmVsLWhlYWRpbmcgaGVhZGluZy1wcmV2aWV3XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdG5nLWNsaWNrPVxcXCJ2bS5paG0ucHJldmlldy5zYXZlVGhpc0Zvcm1FeHBhbmRlZCA9IXZtLmlobS5wcmV2aWV3LnNhdmVUaGlzRm9ybUV4cGFuZGVkXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aDMgY2xhc3M9XFxcInBhbmVsLXRpdGxlXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgYnRuLXhzXFxcIiA+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGlcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjbGFzcz1cXFwiZmFcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmctY2xhc3M9XFxcInsnZmEtYW5nbGUtZG93bic6IXZtLmlobS5wcmV2aWV3LnNhdmVUaGlzRm9ybUV4cGFuZGVkLCAnZmEtYW5nbGUtdXAnIDogdm0uaWhtLnByZXZpZXcuc2F2ZVRoaXNGb3JtRXhwYW5kZWR9XFxcIj48L2k+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9idXR0b24+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Jm5ic3A7XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGkgY2xhc3M9XFxcImZhIGZhLWNhbWVyYS1yZXRyb1xcXCI+PC9pPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCZuYnNwO1xcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFNhdmUgdGhpcyBmb3JtXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9oMz5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJwYW5lbC1ib2R5XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IHVpYi1jb2xsYXBzZT1cXFwidm0uaWhtLnByZXZpZXcuc2F2ZVRoaXNGb3JtRXhwYW5kZWRcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8bGFiZWxcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRmb3I9XFxcImlucHV0TmFtZUZvcm10ZXh0XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCIgZ3JleVRleHQgY29udHJvbC1sYWJlbFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0TmFtZSB0byB0aGlzIGZvcm0gOlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdDwvbGFiZWw+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwiXFxcIj5cXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQ8aW5wdXRcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHR0eXBlPVxcXCJ0ZXh0XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aWQ9XFxcImlucHV0TmFtZUZvcm10ZXh0XFxcIlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBsYWNlaG9sZGVyPVxcXCJFbnRlciBmb3JtTmFtZVxcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1tb2RlbD1cXFwidm0uY29uZmlndXJhdGlvbi5mb3JtTmFtZVxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PGJ1dHRvblxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnkgYnRuLWJsb2NrIGJ0bi1sZ1xcXCJcXG5cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRuZy1jbGljaz1cXFwidm0uc2F2ZVRoaXNGb3JtKClcXFwiPlxcblxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNhdmUgdGhpcyBmb3JtXFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9idXR0b24+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0XFx0XFx0XFx0XFx0PC91aWItdGFiPlxcblxcdFxcdFxcdFxcdFxcdFxcdDwvdWliLXRhYnNldD5cXG5cXHRcXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHQ8L3NlY3Rpb24+XFxuXFx0XFx0XFx0PGhyLz5cXG5cXHRcXHRcXHQ8c2VjdGlvbj5cXG4gICAgICAgIDxoNiBjbGFzcz1cXFwidGV4dC1yaWdodFxcXCI+XFxuICAgICAgICAgIEVhc3kgZm9ybSBnZW5lcmF0b3IgOiB7e3ZtLmVhc3lGb3JtR2VuZXJhdG9yVkVSU0lPTn19IOKAlCBFcndhbiBEQVRJTiAoTWFjS2VudG9jaClcXG4gICAgICAgIDwvaDY+XFxuXFx0XFx0XFx0PC9zZWN0aW9uPlxcbiAgICA8L2Rpdj5cXG4gIDwvZGl2Plxcbjwvc2VjdGlvbj5cXG5cIlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2VkYURyYWdEcm9wV2F5RWFzeUZvcm1HZW4vZWRhRHJhZ0Ryb3BXYXkuZWRhRHJhZ2Ryb3BXYXlFYXN5Rm9ybUdlbi50ZW1wbGF0ZS5odG1sXG4vLyBtb2R1bGUgaWQgPSA4M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9"); + +/***/ }, +/* 84 */ +/***/ function(module, exports, __webpack_require__) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _edaDragDropWayTrustThis = __webpack_require__(85);\n\nvar _edaDragDropWayTrustThis2 = _interopRequireDefault(_edaDragDropWayTrustThis);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar TRUST_THIS_FILTER_MODULE = 'edaDragDropWay.trustThis.filter';\n\nexports.default = angular.module(TRUST_THIS_FILTER_MODULE, []).filter(_edaDragDropWayTrustThis.TRUST_THIS_FILTER_NAME, _edaDragDropWayTrustThis2.default);//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2VkYVRydXN0VGhpc0ZpbHRlci9lZGFEcmFnRHJvcFdheS50cnVzdFRoaXMubW9kdWxlLmpzPzY3MTkiXSwibmFtZXMiOlsiVFJVU1RfVEhJU19GSUxURVJfTU9EVUxFIiwiYW5ndWxhciIsIm1vZHVsZSIsImZpbHRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7OztBQUtBLElBQU1BLDJCQUEyQixpQ0FBakM7O2tCQUVlQyxRQUNFQyxNQURGLENBQ1NGLHdCQURULEVBQ21DLEVBRG5DLEVBRUVHLE1BRkYsb0YiLCJmaWxlIjoiODQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHJ1c3RUaGlzLCB7XG4gIFRSVVNUX1RISVNfRklMVEVSX05BTUVcbn0gZnJvbSAnLi9lZGFEcmFnRHJvcFdheS50cnVzdFRoaXMuZmlsdGVyJztcblxuXG5jb25zdCBUUlVTVF9USElTX0ZJTFRFUl9NT0RVTEUgPSAnZWRhRHJhZ0Ryb3BXYXkudHJ1c3RUaGlzLmZpbHRlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGFuZ3VsYXJcbiAgICAgICAgICAgICAgICAubW9kdWxlKFRSVVNUX1RISVNfRklMVEVSX01PRFVMRSwgW10pXG4gICAgICAgICAgICAgICAgLmZpbHRlcihUUlVTVF9USElTX0ZJTFRFUl9OQU1FLCB0cnVzdFRoaXMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbW1vbi9lZGFUcnVzdFRoaXNGaWx0ZXIvZWRhRHJhZ0Ryb3BXYXkudHJ1c3RUaGlzLm1vZHVsZS5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ }, +/* 85 */ +/***/ function(module, exports) { + + eval("'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nvar TRUST_THIS_FILTER_NAME = 'trustThis';\n\nfunction trustThis($sce) {\n return function (value, type) {\n return $sce.trustAs(type || 'html', value);\n };\n}\n\ntrustThis.$inject = ['$sce'];\n\nexports.default = trustThis;\nexports.TRUST_THIS_FILTER_NAME = TRUST_THIS_FILTER_NAME;//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2RyYWdkcm9wd2F5L2NvbXBvbmVudHMvY29tbW9uL2VkYVRydXN0VGhpc0ZpbHRlci9lZGFEcmFnRHJvcFdheS50cnVzdFRoaXMuZmlsdGVyLmpzPzljMmIiXSwibmFtZXMiOlsiVFJVU1RfVEhJU19GSUxURVJfTkFNRSIsInRydXN0VGhpcyIsIiRzY2UiLCJ2YWx1ZSIsInR5cGUiLCJ0cnVzdEFzIiwiJGluamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFNQSx5QkFBeUIsV0FBL0I7O0FBRUEsU0FBU0MsU0FBVCxDQUFtQkMsSUFBbkIsRUFBeUI7QUFDdkIsU0FBTyxVQUFDQyxLQUFELEVBQVFDLElBQVI7QUFBQSxXQUFpQkYsS0FBS0csT0FBTCxDQUFhRCxRQUFRLE1BQXJCLEVBQTZCRCxLQUE3QixDQUFqQjtBQUFBLEdBQVA7QUFDRDs7QUFFREYsVUFBVUssT0FBVixHQUFvQixDQUNsQixNQURrQixDQUFwQjs7a0JBSWVMLFM7UUFHYkQsc0IsR0FBQUEsc0IiLCJmaWxlIjoiODUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBUUlVTVF9USElTX0ZJTFRFUl9OQU1FID0gJ3RydXN0VGhpcyc7XG5cbmZ1bmN0aW9uIHRydXN0VGhpcygkc2NlKSB7XG4gIHJldHVybiAodmFsdWUsIHR5cGUpID0+ICRzY2UudHJ1c3RBcyh0eXBlIHx8ICdodG1sJywgdmFsdWUpO1xufVxuXG50cnVzdFRoaXMuJGluamVjdCA9IFtcbiAgJyRzY2UnXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0cnVzdFRoaXM7XG5cbmV4cG9ydCB7XG4gIFRSVVNUX1RISVNfRklMVEVSX05BTUVcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2FwcC9kcmFnZHJvcHdheS9jb21wb25lbnRzL2NvbW1vbi9lZGFUcnVzdFRoaXNGaWx0ZXIvZWRhRHJhZ0Ryb3BXYXkudHJ1c3RUaGlzLmZpbHRlci5qcyJdLCJzb3VyY2VSb290IjoiIn0="); + +/***/ } +/******/ ]); \ No newline at end of file diff --git a/static/js/eda.dragdropway.min.js b/static/js/eda.dragdropway.min.js index 9295ed8..80bf17d 100644 --- a/static/js/eda.dragdropway.min.js +++ b/static/js/eda.dragdropway.min.js @@ -1,6 +1,10 @@ -!function(a){function b(a,b,e){return 4===arguments.length?c.apply(this,arguments):void d(a,{declarative:!0,deps:b,declare:e})}function c(a,b,c,e){d(a,{declarative:!1,deps:b,executingRequire:c,execute:e})}function d(a,b){b.name=a,a in n||(n[a]=b),b.normalizedDeps=b.deps}function e(a,b){if(b[a.groupIndex]=b[a.groupIndex]||[],-1==o.call(b[a.groupIndex],a)){b[a.groupIndex].push(a);for(var c=0,d=a.normalizedDeps.length;d>c;c++){var f=a.normalizedDeps[c],g=n[f];if(g&&!g.evaluated){var h=a.groupIndex+(g.declarative!=a.declarative);if(void 0===g.groupIndex||g.groupIndex=0;f--){for(var g=c[f],i=0;if;f++){var h=c.importers[f];if(!h.locked)for(var i=0;if;f++){var j,k=b.normalizedDeps[f],l=n[k],o=s[k];o?j=o.exports:l&&!l.declarative?j=l.esModule:l?(h(l),o=l.module,j=o.exports):j=m(k),o&&o.importers?(o.importers.push(c),c.dependencies.push(o)):c.dependencies.push(null),c.setters[f]&&c.setters[f](j)}}}function i(a){var b,c=n[a];if(c)c.declarative?l(a,[]):c.evaluated||j(c),b=c.module.exports;else if(b=m(a),!b)throw new Error("Unable to load dependency "+a+".");return(!c||c.declarative)&&b&&b.__useDefault?b["default"]:b}function j(b){if(!b.module){var c={},d=b.module={exports:c,id:b.name};if(!b.executingRequire)for(var e=0,f=b.normalizedDeps.length;f>e;e++){var g=b.normalizedDeps[e],h=n[g];h&&j(h)}b.evaluated=!0;var l=b.execute.call(a,function(a){for(var c=0,d=b.deps.length;d>c;c++)if(b.deps[c]==a)return i(b.normalizedDeps[c]);throw new TypeError("Module "+a+" not declared as a dependency.")},c,d);l&&(d.exports=l),c=d.exports,c&&c.__esModule?b.esModule=c:b.esModule=k(c)}}function k(b){if(b===a)return b;var c={};if("object"==typeof b||"function"==typeof b)if(p){var d;for(var e in b)(d=Object.getOwnPropertyDescriptor(b,e))&&r(c,e,d)}else{var f=b&&b.hasOwnProperty;for(var e in b)(!f||b.hasOwnProperty(e))&&(c[e]=b[e])}return c["default"]=b,r(c,"__useDefault",{value:!0}),c}function l(b,c){var d=n[b];if(d&&!d.evaluated&&d.declarative){c.push(b);for(var e=0,f=d.normalizedDeps.length;f>e;e++){var g=d.normalizedDeps[e];-1==o.call(c,g)&&(n[g]?l(g,c):m(g))}d.evaluated||(d.evaluated=!0,d.module.execute.call(a))}}function m(a){if(u[a])return u[a];if("@node/"==a.substr(0,6))return t(a.substr(6));var b=n[a];if(!b)throw"Module "+a+" not present.";return f(a),l(a,[]),n[a]=void 0,b.declarative&&r(b.module.exports,"__esModule",{value:!0}),u[a]=b.declarative?b.module.exports:b.esModule}var n={},o=Array.prototype.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},p=!0;try{Object.getOwnPropertyDescriptor({a:0},"a")}catch(q){p=!1}var r;!function(){try{Object.defineProperty({},"a",{})&&(r=Object.defineProperty)}catch(a){r=function(a,b,c){try{a[b]=c.value||c.get.call(a)}catch(d){}}}}();var s={},t="undefined"!=typeof System&&System._nodeRequire||"undefined"!=typeof require&&require.resolve&&"undefined"!=typeof process&&require,u={"@empty":{}};return function(a,d,e){return function(f){f(function(f){for(var g={_nodeRequire:t,register:b,registerDynamic:c,get:m,set:function(a,b){u[a]=b},newModule:function(a){return a}},h=0;h1)for(var h=1;h"}),b.addEasyFormControlToList({id:"empty",name:"no control",subtitle:"no control",group:"Blank",formlyType:"blank",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'
    \n
    \n
    \n
    \n
    \n
    ',control:"empty",cssClass:"col-xs-12"},{addToGroupCtrl:"blank"}),b.addEasyFormControlToList({id:"Header",name:"Header",subtitle:"no control",group:"Decoration",formlyType:"header",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:['
    \n
    \n
    \n

    Header

    \n
    \n
    \n
    \n
    '].join(""),control:"Header",cssClass:"col-xs-12"},{addToGroupCtrl:"headers"});var e='\n
    \n
    \n

    {{options.templateOptions.placeholder}}

    \n
    \n

    \n
    ';a.setType({name:"subTitle",template:e}),b.addEasyFormControlToList({id:"Subtitle",name:"Subtitle",subtitle:"no control",group:"Decoration",formlyType:"subTitle",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'
    \n
    \n
    \n

    SubTitle

    \n
    \n
    \n
    \n
    ',control:"Subtitle",cssClass:"col-xs-12"},{addToGroupCtrl:"headers"}),b.addEasyFormControlToList({id:"TextInput",name:"Text input",subtitle:"Text input",group:"input",formlyType:"input",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'
    \n
    \n \n
    \n \n

    Description

    \n
    \n
    \n
    ',control:"TextInput",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"}),b.addEasyFormControlToList({id:"Password",name:"Password",subtitle:"Password",group:"input",formlyType:"input",formlySubtype:"password",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'
    \n
    \n \n
    \n \n

    Description

    \n
    \n
    \n
    ',control:"Password",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"});var f=["date-disabled","custom-class","show-weeks","starting-day","init-date","min-mode","max-mode","format-day","format-month","format-year","format-day-header","format-day-title","format-month-title","year-range","shortcut-propagation","datepicker-popup","show-button-bar","current-text","clear-text","close-text","close-on-date-selection","datepicker-append-to-body"],g=["datepicker-mode","min-date","max-date"],h={};angular.forEach(f,function(a){return h[d(a)]={attribute:a}}),angular.forEach(g,function(a){return h[d(a)]={bound:a}});var i='\n ';a.setType({name:"datepicker",template:i,wrapper:["bootstrapLabel","bootstrapHasError"],controller:["$scope",function(a){a.open=function(b){b.preventDefault(),b.stopPropagation(),a.opened=!0}}],defaultOptions:{ngModelAttrs:h,templateOptions:{addonLeft:{"class":"glyphicon glyphicon-calendar",onClick:function(a){return a.templateOptions.isOpen=!a.templateOptions.isOpen}},onFocus:function(a,b,c){return c.to.isOpen=!c.to.isOpen},datepickerOptions:{}}}}),b.addEasyFormControlToList({id:"Date",name:"Date",subtitle:"Date",group:"input",formlyType:"datepicker",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[],datepickerPopup:"dd-MMMM-yyyy"}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n

    description

    \n
    \n
    ',control:"Date",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"}),b.addEasyFormControlToList({id:"Texarea",name:"Textarea",subtitle:"Textarea",group:"Textarea",formlyType:"textarea",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n \n

    description

    \n
    \n
    \n
    ',control:"Texarea",cssClass:"col-xs-12"},{addToGroupCtrl:"textareas"});var j='\n \n ';a.setType({name:"richEditor",template:j}),b.addEasyFormControlToList({id:"RichTextEditor",name:"RichTextEditor",subtitle:"RichTextEditor",group:"Textarea",formlyType:"richEditor",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n \n

    description

    \n
    \n
    \n
    ',control:"RichTextEditor",cssClass:"col-xs-12"},{addToGroupCtrl:"textareas"}),b.addEasyFormControlToList({id:"Radio",name:"Radio",subtitle:"Radio",options:[],group:"Radio",formlyType:"radio",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n

    description

    \n
    \n
    \n
    ',control:"Radio",cssClass:"col-xs-12"},{addToGroupCtrl:"radios"}),b.addEasyFormControlToList({id:"Checkbox",name:"Checkbox",subtitle:"Checkbox",group:"Checkbox",formlyType:"checkbox",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n

    description

    \n
    ',control:"Checkbox",cssClass:"col-xs-12"},{addToGroupCtrl:"checkboxes"});var k='\n
      \n
    1. \n {{option.name}} \n
    2. \n
    ';a.setType({name:"basicSelect",template:k}),b.addEasyFormControlToList({id:"BasicSelect",name:"Basic select",subtitle:"Basic select",options:[],group:"Select",formlyType:"basicSelect",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n
    \n\n
      \n \n \n\n
    \n
    ',control:"BasicSelect",cssClass:"col-xs-12"},{addToGroupCtrl:"selects"});var l='\n
      \n
    1. \n {{$group}}\n \n {{option.name}}\n \n \n
    2. \n
    ';a.setType({name:"groupedSelect",template:l}),b.addEasyFormControlToList({id:"GroupedSelect",name:"Grouped Select",subtitle:"Grouped Select",options:[],group:"Select",formlyType:"groupedSelect",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDesciption:"",formlyOptions:[]}),c.addControlToDragDropPresentationModel({label:'\n
    \n
    \n
    \n
      \n \n
    \n
    ',control:"GroupedSelect",cssClass:"col-xs-12"},{addToGroupCtrl:"selects"})}return{setters:[],execute:function(){b.$inject=["formlyConfigProvider","EasyFormGenFormlyBindingModelsProvider","easyFormDragWayConfigProvider"],a("default",b)}}}),a.registerDynamic("4",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports={stepway:{version:"1.1.0"},dragdropway:{version:"1.1.0"},formviewer:{version:"1.1.0"}},d.define=e,c.exports}),a.register("5",["4"],function(a){"use strict";function b(a){a.setItemsNotTocount({itemBeingDragged:"dndDraggingSource"})}var c,d,e;return{setters:[function(a){c=a["default"]}],execute:function(){d="easyFormGenVersion",e=c.dragdropway.version,b.$inject=["easyFormDragWayConfigProvider"],a("default",b),a("EASY_FORM_DD_VERSION_NAME",d),a("EASY_FORM_DD_VERSION_VALUE",e)}}}),a.register("6",[],function(a){"use strict";var b;return{setters:[],execute:function(){b=["textAngular","textAngularSetup","ngAnimate","toaster","formly","formlyBootstrap","ui.bootstrap","nya.bootstrap.select","mgcrea.ngStrap.affix"],a("default",angular.module("easyFormGen.dragDropWay.core",b))}}}),a.register("7",[],function(a){"use strict";var b,c,d;return{setters:[],execute:function(){b=["dd-MMMM-yyyy","yyyy/MM/dd","dd.MM.yyyy","shortDate"],c=function(a){a.dt=new Date},d=function(a){a.dt=new Date},a("dateFormats",b),a("setToday",c),a("clearDateTime",d)}}}),a.register("8",["7","9","a"],function(a){var b,c,d,e,f,g,h,i;return{setters:[function(a){b=a.dateFormats,c=a.setToday,d=a.clearDateTime},function(a){e=a["default"]},function(a){f=a["default"]}],execute:function(){"use strict";g="leftPanelController",h="leftPanelCtrl",i=function(){function a(b,c,d,e){f(this,a),this.toaster=b,this.$timeout=c,this.$selectOptionMange=d,this.controllerModalProxy=e,this.init()}return e(a,[{key:"init",value:function(){this.proxyModel=this.controllerModalProxy.proxyModel,this.proxyModel.selectedControl=this.proxyModel.temporyConfig.selectedControl,this.basicSelectRowCollection=this.controllerModalProxy.basicSelectRowCollection,this.newOptionBasicSelect=this.controllerModalProxy.newOptionBasicSelect,this.groupedSelectRowCollection=this.controllerModalProxy.groupedSelectRowCollection,this.newOptionGroupedSelect=this.controllerModalProxy.newOptionGroupedSelect,this.GroupedSelectGroups=this.controllerModalProxy.GroupedSelectGroups,this.newGroupGroupedSelect=this.controllerModalProxy.newGroupGroupedSelect,this.groupSelectGroupClick=this.controllerModalProxy.groupSelectGroupClick,this.radioRowCollection=this.controllerModalProxy.radioRowCollection,this.newOptionRadio=this.controllerModalProxy.newOptionRadio,this.demodt={},this.demodt.formats=b,this.dateOptions=this.getDateOptions(),this.initNyaSelectConformingSelectedControl()}},{key:"getDateOptions",value:function(){var a={formatYear:"yy",startingDay:1,showWeeks:!0,initDate:null};return a}},{key:"initNyaSelectConformingSelectedControl",value:function(){if("none"!==this.proxyModel.temporyConfig.selectedControl){for(var a=this.proxyModel.controls.length-1;a>=0;a--)this.proxyModel.controls[a].id===this.proxyModel.temporyConfig.selectedControl&&(this.modelproxyModel=this.proxyModel.controls[a]);"BasicSelect"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindBasicSelectFromProxyModel(self.basicSelectRowCollection),"GroupedSelect"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindGroupedSelectFromProxyModel(this.groupedSelectRowCollection,this.GroupedSelectGroups),"Radio"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindRadioFromProxyModel(this.radioRowCollection)}}},{key:"updateSpecialControl",value:function(){return this.proxyModel.basicSelectRowCollection=this.basicSelectRowCollection,this.proxyModel.newOptionBasicSelect=this.newOptionBasicSelect,this.proxyModel.groupedSelectRowCollection=this.groupedSelectRowCollection,this.proxyModel.newOptionGroupedSelect=this.newOptionGroupedSelect,this.proxyModel.GroupedSelectGroups=this.GroupedSelectGroups,this.proxyModel.newGroupGroupedSelect=this.newGroupGroupedSelect,this.proxyModel.groupSelectGroupClick=this.groupSelectGroupClick,this.proxyModel.radioRowCollection=this.radioRowCollection,this.proxyModel.newOptionRadio=this.newOptionRadio,this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel(),!0}},{key:"resetTemporyConfig",value:function(){this.proxyModel.temporyConfig={formlyLabel:"",formlyRequired:!1,formlyPlaceholder:"",formlyDesciption:"",formlyOptions:[]}}},{key:"resetControl",value:function(){this.proxyModel.temporyConfig.formlyLabel="",this.proxyModel.temporyConfig.formlyRequired=!1,this.proxyModel.temporyConfig.formlyPlaceholder="",this.proxyModel.temporyConfig.formlyDesciption="",this.proxyModel.temporyConfig.formlyOptions=[],this.proxyModel.temporyConfig.datepickerPopup=this.initDatePicker()}},{key:"initDatePicker",value:function(){this.proxyModel.temporyConfig.datepickerPopup=this.demodt.formats[0]}},{key:"selectThisControl",value:function(a){this.proxyModel.selectedControl="none",this.resetTemporyConfig();for(var b=this.proxyModel.controls.length-1;b>=0;b--)this.proxyModel.controls[b].id===a&&(this.proxyModel.selectedControl=this.proxyModel.controls[b].id);"Date"===this.proxyModel.selectedControl&&this.initDatePicker()}},{key:"addNewOptionRadio",value:function(){var a=this.$selectOptionMange.addNewOptionRadio(this.radioRowCollection,this.newOptionRadio.saisie);a.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:a.details,body:"'"+this.newOptionRadio.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionRadio={saisie:""}}},{key:"removeRadioRow",value:function(a){var b=this.$selectOptionMange.removeOption(this.radioRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisRadioRow",value:function(a){var b=this.$selectOptionMange.upthisOption(this.radioRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisRadioRow",value:function(a){var b=this.$selectOptionMange.downthisOption(this.radioRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"addNewOptionBasicSelect",value:function(){var a=this.$selectOptionMange.addNewOptionBasicSelect(this.basicSelectRowCollection,this.newOptionBasicSelect.saisie);a.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:a.details,body:"'"+this.newOptionBasicSelect.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionBasicSelect={saisie:""}}},{key:"removeRow",value:function(a){var b=this.$selectOptionMange.removeOption(this.basicSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisRow",value:function(a){var b=this.$selectOptionMange.upthisOption(this.basicSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisRow",value:function(a){var b=this.$selectOptionMange.downthisOption(this.basicSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"showGroupListToChoose",value:function(){this.groupSelectGroupClick.showList=!this.groupSelectGroupClick.showList}},{key:"addNewGroupToGroupedSelect",value:function(){if(""!==this.newGroupGroupedSelect.saisie){for(var a=this.GroupedSelectGroups.list.length-1;a>=0;a--)this.GroupedSelectGroups.list[a]===this.newGroupGroupedSelect.saisie&&this.toaster.pop({type:"warning",timeout:2e3,title:"Group already exists",body:"No group added.",showCloseButton:!0});this.GroupedSelectGroups.list.push(this.newGroupGroupedSelect.saisie)}else this.toaster.pop({type:"warning",timeout:2e3,title:"Not a valid group to add",body:"No group added.",showCloseButton:!0});this.newGroupGroupedSelect.saisie=""}},{key:"addNewOptionGroupedSelect",value:function(){var a=this.$selectOptionMange.addNewOptionGroupedSelect(this.groupedSelectRowCollection,this.newOptionGroupedSelect.saisie,"");a.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:a.details,body:"'"+this.newOptionGroupedSelect.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionGroupedSelect={saisie:""}}},{key:"removeGroupedSelectRow",value:function(a){var b=this.$selectOptionMange.removeOption(this.groupedSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisGroupedSelectRow",value:function(a){var b=this.$selectOptionMange.upthisOption(this.groupedSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisGroupedSelectRow",value:function(a){var b=this.$selectOptionMange.downthisOption(this.groupedSelectRowCollection,a);b.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:b.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"today",value:function(){c(this.demodt)}},{key:"clear",value:function(){d(this.demodt)}},{key:"open",value:function(a){a.preventDefault(),a.stopPropagation(),this.demodt.opened=!0}}]),a}(),i.$inject=["toaster","$timeout","$selectOptionMange","controllerModalProxy"],a("default",i),a("LEFT_PANEL_CONTROLLER",g),a("LEFT_PANEL_CONTROLLERAS",h)}}}),a.registerDynamic("b",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n  \n Select a control\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n Close\n \n
    \n',d.define=e,c.exports}),a.register("c",["8","b"],function(a){"use strict";function b(){var a={restrict:"E",template:e,scope:{},controller:c,controllerAs:d,bindToController:{closeEditPanel:"&",selectedControl:"&",saveFromEditPanel:"&"}};return a}var c,d,e,f;return{setters:[function(a){c=a.LEFT_PANEL_CONTROLLER,d=a.LEFT_PANEL_CONTROLLERAS},function(a){e=a["default"]}],execute:function(){f="leftPanel",b.$inject=[],a("default",b),a("LEFT_PANEL_DIRECTIVE",f)}}}),a.register("d",[],function(a){"use strict";var b,c;return{setters:[],execute:function(){b=function(a){var b={rows:[]};angular.copy(b,a)},c=function(a,b){var c={resultFlag:!1,details:""};if("undefined"==typeof b)return c.resultFlag=!1,c.details="Entered option is empty",c;if(""!==b){for(var d=a.rows.length-1;d>=0;d--)if(a.rows[d].option===b)return c.resultFlag=!1,c.details="Entered option is not unique",c;return c.resultFlag=!0,c.details="",c}return c.resultFlag=!1,c.details="Entered option is empty",c},a("resetModel",b),a("validOption",c)}}}),a.register("e",["9","a","d"],function(a){var b,c,d,e,f;return{setters:[function(a){b=a["default"]},function(a){c=a["default"]},function(a){d=a}],execute:function(){"use strict";e="$selectOptionMange",f=function(){function a(){c(this,a),this.init()}return b(a,[{key:"init",value:function(){}},{key:"initModel",value:function(a){d.resetModel(a)}},{key:"isOptionUnique",value:function(a,b){for(var c=a.rows.length-1;c>=0;c--)if(a.rows[c].option===b)return!1;return!0}},{key:"isOptionValidFormat",value:function(a){return""!==a?!0:!1}},{key:"addNewOptionRadio",value:function(a,b){var c={resultFlag:!1,details:""},e=d.validOption(a,b);if(e.resultFlag===!0){var f={option:b,order:a.rows.length};return a.rows.push(f),c.resultFlag=!0,c.details="",c}return angular.copy(e,c),c}},{key:"addNewOptionBasicSelect",value:function(a,b){var c={resultFlag:!1,details:""},e=d.validOption(a,b);if(e.resultFlag===!0){var f={option:b,order:a.rows.length};return a.rows.push(f),c.resultFlag=!0,c.details="",c}return angular.copy(e,c),c}},{key:"addNewOptionGroupedSelect",value:function(a,b,c){var e={resultFlag:!1,details:""},f=d.validOption(a,b);if(f.resultFlag===!0){var g={option:b,group:c,order:a.rows.length};return a.rows.push(g),e.resultFlag=!0,e.details="",e}return angular.copy(f,e),e}},{key:"removeOption",value:function(a,b){var c={resultFlag:!1,details:""};return-1!==b?(a.rows.splice(b,1),c.resultFlag=!0,c.details="",c):(c.resultFlag=!1,c.details="Option index not valid",c)}},{key:"upthisOption",value:function(a,b){var c={resultFlag:!1,details:""};if(b>-1){if(b>0){if(a.rows[b-1]){var d=a.rows[b];return a.rows.splice(b,1),a.rows.splice(b-1,0,d),c.resultFlag=!0,c.details="", -c}return c.resultFlag=!1,c.details="Can't retreive option from option index",c}return c.resultFlag=!0,c.details="",c}return c.resultFlag=!1,c.details="Option index not valid",c}},{key:"downthisOption",value:function(a,b){var c={resultFlag:!1,details:""};if(b>-1){if(b=0;c--)a.selectedControl===a.controls[c].id&&(b.selectedControl=a.selectedControl,b.formlyType=a.controls[c].formlyType,b.formlySubtype=a.controls[c].formlySubtype,b.formlyLabel=a.controls[c].formlyLabel,b.formlyRequired=a.controls[c].formlyRequired,b.formlyDesciption=a.controls[c].formlyDesciption,b.formlyPlaceholder=a.controls[c].formlyPlaceholder,b.formlyOptions=a.controls[c].formlyOptions,"datepicker"===a.controls[c].formlyType&&(b.datepickerPopup=a.controls[c].datepickerPopup));return b}},{key:"validKeyUniqueness",value:function(a,b){for(var c=!0,d=b.lines.length-1;d>=0;d--)for(var e=b.lines[d].columns.length-1;e>=0;e--)b.lines[d].columns[e].control.key===a&&(c=!1);return c}},{key:"getSelectedProxyModel",value:function(a){var b="none",c=angular.copy(this.EasyFormGenFormlyBindingModels.getEasyFormListControls().controls);return c.forEach(function(c){return c.formlyType===a.type&&c.formlySubtype===a.subtype?b=c.id:void 0}),b}},{key:"bindConfigurationModelFromProxyModel",value:function(a,b,c){var d=angular.copy(this.proxyModel.temporyConfig);c.lines[a].columns[b].control.selectedControl=d.selectedControl,c.lines[a].columns[b].control.type=d.formlyType,c.lines[a].columns[b].control.subtype=d.formlySubtype,c.lines[a].columns[b].control.templateOptions={label:"",required:!1,description:"",placeholder:"",options:[]},c.lines[a].columns[b].control.templateOptions.label=d.formlyLabel,c.lines[a].columns[b].control.templateOptions.required=d.formlyRequired,c.lines[a].columns[b].control.templateOptions.description=d.formlyDesciption,c.lines[a].columns[b].control.templateOptions.placeholder=d.formlyPlaceholder,c.lines[a].columns[b].control.templateOptions.options=d.formlyOptions,"datepicker"===c.lines[a].columns[b].control.type&&(c.lines[a].columns[b].control.templateOptions.datepickerPopup=d.datepickerPopup);var e=c.lines[a].columns[b].control.type+"-"+Date.now();this.validKeyUniqueness(e,c)===!0?c.lines[a].columns[b].control.key=e:(e=c.lines[a].columns[b].control.type+"-"+Date.now(),this.validKeyUniqueness(e,c)===!0?c.lines[a].columns[b].control.key=e:e=c.lines[a].columns[b].control.type+"-"+Date.now()),c.lines[a].columns[b].control.edited=!0}},{key:"setProxyModelFromConfigurationSelection",value:function(a,b,c){return"undefined"!=typeof a.lines[b].columns[c].control&&(this.proxyModel.selectedControl="undefined"!=typeof a.lines[b].columns[c].control.type?this.getSelectedProxyModel(a.lines[b].columns[c].control):"none",this.proxyModel.temporyConfig.selectedControl="undefined"!=typeof a.lines[b].columns[c].control.type?this.getSelectedProxyModel(a.lines[b].columns[c].control):"none",this.proxyModel.temporyConfig.formlyType="undefined"!=typeof a.lines[b].columns[c].control.type?a.lines[b].columns[c].control.type:"none",this.proxyModel.temporyConfig.formlySubtype="undefined"!=typeof a.lines[b].columns[c].control.subtype?a.lines[b].columns[c].control.subtype:"none",this.proxyModel.temporyConfig.formlyLabel="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.label?a.lines[b].columns[c].control.templateOptions.label:"",this.proxyModel.temporyConfig.formlyRequired="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.required?a.lines[b].columns[c].control.templateOptions.required:"",this.proxyModel.temporyConfig.formlyDesciption="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.description?a.lines[b].columns[c].control.templateOptions.description:"",this.proxyModel.temporyConfig.formlyPlaceholder="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.placeholder?a.lines[b].columns[c].control.templateOptions.placeholder:"",this.proxyModel.temporyConfig.formlyOptions="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.options?a.lines[b].columns[c].control.templateOptions.options:"","Date"===this.proxyModel.temporyConfig.selectedControl&&(this.proxyModel.temporyConfig.datepickerPopup="undefined"!=typeof a.lines[b].columns[c].control.templateOptions.datepickerPopup?a.lines[b].columns[c].control.templateOptions.datepickerPopup:"")),this.proxyModel}},{key:"getProxyModel",value:function(){return this.proxyModel}},{key:"getEditPanelModelAllModel",value:function(){return this.editPanelModel}},{key:"setEditPanelModelControl",value:function(a){var b=!1;return"undefined"!=typeof a&&(angular.merge(this.editPanelModel,a),b=!0),b}},{key:"getEditPanelModelColumnIndex",value:function(){return this.editPanelModel.columnIndex}},{key:"setEditPanelModelColumnIndex",value:function(a){var b=!1;return"undefined"!=typeof a&&(this.editPanelModel.columnIndex=a,b=!0),b}},{key:"getEditPanelModelLineIndex",value:function(){return this.editPanelModel.lineIndex}},{key:"setEditPanelModelLineIndex",value:function(a){var b=!1;return"undefined"!=typeof a&&(this.editPanelModel.lineIndex=a,b=!0),b}},{key:"getEditPanelModelControl",value:function(){return this.editPanelModel.control}},{key:"getEditPanelModelToggle",value:function(){return this.editPanelModel.toggle}},{key:"setEditPanelModelToggle",value:function(a){var b=!1;return"undefined"!=typeof a&&(this.editPanelModel.toggle=a,b=!0),b}},{key:"resetAllTemporyModels",value:function(){return this.basicSelectRowCollection=angular.copy(e),this.newOptionBasicSelect=angular.copy({saisie:""}),this.groupedSelectRowCollection=angular.copy(e),this.newOptionGroupedSelect=angular.copy({saisie:""}),this.GroupedSelectGroups=angular.copy({list:[]}),this.newGroupGroupedSelect=angular.copy({saisie:""}),this.groupSelectGroupClick=angular.copy({showList:!1}),this.radioRowCollection=angular.copy(e),this.newOptionRadio=angular.copy({saisie:""}),!0}},{key:"bindSpecialCtrlTemporyModelsToProxyModel",value:function(){"BasicSelect"===this.proxyModel.selectedControl&&this.bindBasicSelectToProxyModel(this.basicSelectRowCollection),"GroupedSelect"===this.proxyModel.selectedControl&&this.bindGroupedSelectToProxyModel(this.groupedSelectRowCollection),"Radio"===this.proxyModel.selectedControl&&this.bindRadioToProxyModel(this.radioRowCollection)}},{key:"bindBasicSelectFromProxyModel",value:function(a){if(this.proxyModel.temporyConfig.formlyOptions.length>0)for(var b=0;b<=this.proxyModel.temporyConfig.formlyOptions.length-1;b++){var c={option:this.proxyModel.temporyConfig.formlyOptions[b].name,order:b,group:""};a.rows.push(c)}}},{key:"bindBasicSelectToProxyModel",value:function(a){var b=[];if(this.proxyModel.temporyConfig.formlyOptions=b,a.rows.length>0)for(var c=0;c<=a.rows.length-1;c++){var d={name:a.rows[c].option,value:c,group:""};this.proxyModel.temporyConfig.formlyOptions.push(d)}}},{key:"bindGroupedSelectFromProxyModel",value:function(a,b){if(this.proxyModel.temporyConfig.formlyOptions.length>0){for(var c=0;c<=this.proxyModel.temporyConfig.formlyOptions.length-1;c++){var d={option:this.proxyModel.temporyConfig.formlyOptions[c].name,order:c,group:this.proxyModel.temporyConfig.formlyOptions[c].group};a.rows.push(d)}var e=_.uniq(_.pluck(a.rows,"group"));angular.copy(e,b.list)}}},{key:"bindGroupedSelectToProxyModel",value:function(a){this.proxyModel.temporyConfig.formlyOptions=[];for(var b=0;b<=a.rows.length-1;b++){var c={name:a.rows[b].option,value:b,group:a.rows[b].group};this.proxyModel.temporyConfig.formlyOptions.push(c)}}},{key:"bindRadioFromProxyModel",value:function(a){if(this.proxyModel.temporyConfig.formlyOptions.length>0)for(var b=0;b<=this.proxyModel.temporyConfig.formlyOptions.length-1;b++){var c={option:this.proxyModel.temporyConfig.formlyOptions[b].name,order:b,group:""};a.rows.push(c)}}},{key:"bindRadioToProxyModel",value:function(a){var b=[];if(this.proxyModel.temporyConfig.formlyOptions=b,a.rows.length>0)for(var c=0;c<=a.rows.length-1;c++){var d={name:a.rows[c].option,value:c,group:""};this.proxyModel.temporyConfig.formlyOptions.push(d)}}}]),a}(),f.$inject=["EasyFormGenFormlyBindingModels"],a("default",f),a("CONTROLLER_MODAL_PROXY",d)}}}),a.registerDynamic("10",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='\n',d.define=e,c.exports}),a.register("11",["10"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelValidEditFooter",b.$inject=[],a("default",b),a("LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE",d)}}}),a.registerDynamic("12",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n placeholder :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("13",["12"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelTextInputControl",b.$inject=[],a("default",b),a("LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("14",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
    \n  \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("15",["14"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelTextareaControl",b.$inject=[],a("default",b),a("LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("16",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Subtitle text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("17",["16"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelSubtitleControl",b.$inject=[],a("default",b),a("LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("18",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n   Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("19",["18"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelRichTextEditorControl",b.$inject=[],a("default",b),a("LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("1a",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new radio :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Edit/Remove radio :\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no radio : add new radio values -\n \n
    \n
    \n \n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{radioRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("1b",["1a"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelRadioControl",b.$inject=[],a("default",b),a("LEFT_PANEL_RADIO_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("1c",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n placeholder :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("1d",["1c"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelPasswordControl",b.$inject=[],a("default",b),a("LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("1e",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Header text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("1f",["1e"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelHeaderControl",b.$inject=[],a("default",b),a("LEFT_PANEL_HEADER_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("20",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new options :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new groups :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Edit/Remove options/groups:\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no option : add new options -\n \n
    \n
    \n \n \n \n \n order\n \n \n group\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n
    \n
    \n

    \n - add new groups -\n

    \n
    \n \n
    \n
    \n {{groupedSelectRow.group}}\n
    \n \n \n {{groupedSelectRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n', -d.define=e,c.exports}),a.register("21",["20"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelGroupedSelectControl",b.$inject=[],a("default",b),a("LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("22",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n \n
    \n \n \n \n {{dateformat}}\n \n \n \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("23",["22"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelDateControl",b.$inject=[],a("default",b),a("LEFT_PANEL_DATE_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("24",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("25",["24"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelCheckBoxControl",b.$inject=[],a("default",b),a("LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("26",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n   \n Edit :\n
    \n
    \n
    \n
    \n
    \n
    \n Column will be blank\n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("27",["26"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelBlankControl",b.$inject=[],a("default",b),a("LEFT_PANEL_BLANK_CONTROL_DIRECTIVE",d)}}}),a.registerDynamic("28",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new options :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no option : add new options -\n \n
    \n
    \n \n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{basicSelectRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n',d.define=e,c.exports}),a.register("29",["28"],function(a){"use strict";function b(){var a={restrict:"E",template:c};return a}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="leftPanelBasicSelectControl",b.$inject=[],a("default",b),a("LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE",d)}}}),a.register("2a",["8","11","13","15","17","19","21","23","25","27","29","c","e","f","1b","1d","1f"],function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J;return{setters:[function(a){b=a["default"],c=a.LEFT_PANEL_CONTROLLER},function(a){d=a["default"],e=a.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE},function(a){f=a["default"],g=a.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE},function(a){h=a["default"],i=a.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE},function(a){j=a["default"],k=a.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE},function(a){l=a["default"],m=a.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE},function(a){n=a["default"],o=a.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE},function(a){p=a["default"],q=a.LEFT_PANEL_DATE_CONTROL_DIRECTIVE},function(a){r=a["default"],s=a.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE},function(a){t=a["default"],u=a.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE},function(a){v=a["default"],w=a.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE},function(a){x=a["default"],y=a.LEFT_PANEL_DIRECTIVE},function(a){z=a["default"],A=a.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE},function(a){B=a["default"],C=a.CONTROLLER_MODAL_PROXY},function(a){D=a["default"],E=a.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE},function(a){F=a["default"],G=a.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE},function(a){H=a["default"],I=a.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE}],execute:function(){J="edaDragDropWay.leftPanel.module",a("default",angular.module(J,[]).directive(y,x).controller(c,b).service(A,z).service(C,B).directive(e,d).directive(g,f).directive(i,h).directive(k,j).directive(m,l).directive(E,D).directive(G,F).directive(I,H).directive(o,n).directive(q,p).directive(s,r).directive(u,t).directive(w,v))}}}),a.register("2b",["9","a"],function(a){var b,c,d,e;return{setters:[function(a){b=a["default"]},function(a){c=a["default"]}],execute:function(){"use strict";d="formFieldManage",e=function(){function a(b){c(this,a),this.EasyFormGenFormlyBindingModels=b,this.init()}return b(a,[{key:"init",value:function(){}},{key:"initConfigurationEditFromScratch",value:function(a,b){var c=this.EasyFormGenFormlyBindingModels.getEasyFormInitialStateConfigurationModel(b);angular.copy(c,a)}},{key:"bindConfigurationLines",value:function(a,b,c){if("[object Array]"===Object.prototype.toString.call(b)){var d=this.EasyFormGenFormlyBindingModels.getEasyFormReloadConfigurationModel(c);return d.lines=[].concat(b),angular.copy(d,a),this.getMessageObject("configuration model is bound","lines are bound to configuration model.")}return this.getErrorObject("lines is not an array","Checks lines type, it is not an array.")}},{key:"applyConfigurationToformlyModel",value:function(a,b,c){this.resetFormlyModel(b),this.resetDataModel(c);for(var d=a.lines.length,e=0;d>e;e++)this.AddNColumnControl(b,a,e)}},{key:"resetFormlyModel",value:function(a){var b=[];angular.copy(b,a)}},{key:"AddNColumnControl",value:function(a,b,c){var d=this,e=b.lines[c].columns.length,f={className:"row",fieldGroup:[]},g=a.push(f)-1;b.lines[c].columns.forEach(function(b){var c={};if("undefined"!=typeof c&&"none"!==b.control.type){if("header"===b.control.type||"subTitle"===b.control.type){var f=b.control.templateOptions.description;c.template=d.EasyFormGenFormlyBindingModels.getHeaderTemplateForNcolumnLine(e,f).template,c.className=d.EasyFormGenFormlyBindingModels.getRawHeaderTemplates().selectedClass}else c=d.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(e,b.control.type),c.className=b.control.className,c.type=b.control.type,c.key=b.control.key,c.templateOptions.type=b.control.templateOptions.type,c.templateOptions.label=b.control.templateOptions.label,c.templateOptions.required=b.control.templateOptions.required,c.templateOptions.placeholder=b.control.templateOptions.placeholder,c.templateOptions.description=b.control.templateOptions.description,c.templateOptions.options=[].concat(b.control.templateOptions.options),"undefined"!=typeof c.templateOptions.datepickerPopup&&(b.control.templateOptions.datepickerPopup=c.templateOptions.datepickerPopup);a[g].fieldGroup.push(c)}})}},{key:"isTemplateOptionDefined",value:function(a){return"undefined"!=typeof a.templateOptions?!0:!1}},{key:"extractTemplateOptionLabel",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.label?a.templateOptions.label:""}},{key:"extractTemplateOptionDatepickerPopup",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.datepickerPopup?a.templateOptions.datepickerPopup:""}},{key:"extractTemplateOptionRequired",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.required?a.templateOptions.required:""}},{key:"extractTemplateOptionOptions",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.options?a.templateOptions.options:""}},{key:"extractTemplateOptionType",value:function(a){return"undefined"!=typeof a.subtype?a.subtype:""}},{key:"extractTemplateOptionPlaceholder",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.placeholder?a.templateOptions.placeholder:""}},{key:"extractTemplateOptionDescription",value:function(a){return"undefined"!=typeof a.templateOptions&&"undefined"!=typeof a.templateOptions.description?a.templateOptions.description:""}},{key:"resetDataModel",value:function(a){var b={};return angular.copy(b,a),!0}},{key:"getErrorObject",value:function(a,b){var c={noError:!1,title:"",Message:""};return c.noError=!1,c.title=a,c.Message=b,c}},{key:"getMessageObject",value:function(a,b){var c={noError:!1,title:"",Message:""};return c.noError=!0,c.title=a,c.Message=b,c}}]),a}(),e.$inject=["EasyFormGenFormlyBindingModels"],a("default",e),a("FORM_FIELD_MANAGE_SERVICE",d)}}}),a.register("2c",[],function(a){"use strict";var b,c,d,e,f,g,h,i,j;return{setters:[],execute:function(){b=function(){return{controls:[],selectedControl:"none",temporyConfig:{selectedControl:"none",formlyLabel:"label",formlyRequired:!1,formlyDesciption:"",formlyPlaceholder:"",formlyOptions:[]}}},a("initEasyFormListControls",b),c=function(){return{line:1,activeColumn:1,columns:[{numColumn:1,exist:!0,control:{type:"none",key:"none"}}]}},a("initEasyFormEmptyConfigurationLineModel",c),d=function(){return{control:{type:"none",key:"none"}}},a("initEmptyControlFieldModel",d),e=function(a){return{submitButtonText:"submit",cancelButtonText:"cancel",lines:[].concat(a)}},a("initEasyFormInitialStateConfigurationModel",e),f=function(){return{activeLine:1,listConfigStep:["init","first","second","third"],stepIndicators:[!0,!1,!1,!1],configStepCounter:0}},a("initEasyFormInitialStateConfigurationModelAddOnForStepWay",f),g=function(){var a=e();return a.lines=[],a},a("initEasyFormReloadConfigurationModel",g),h=function(){var a={cssClass:["col-xs-12","col-xs-6","col-xs-4"],textContent:"",html_part1:['
    ','

    '].join(""),html_part3:this.textContent,html_part4:["

    ","
    ","

    "].join(""),simpleHtml1:['

    '].join(""),simpleHtml2:["

    ","
    "].join("")};return a},a("initHeaderTemplates",h),i=function(){return{className:["col-xs-12","col-xs-6","col-xs-4"],type:"",key:"",templateOptions:{type:"",label:"",required:"",placeholder:"",description:"",options:""}}},a("initFormlyControlTemplates",i),j=function(){return[{controlType:"datepicker",properties:[{isRoot:!1,isTemplateOptions:!0,value:"datepickerPopup"}]}]},a("initParticularControlProperties",j)}}}),a.register("2d",["2c"],function(a){"use strict";function b(){function a(){return t}function b(a){if("controlType"in a&&"properties"in a){var b=!1;t.length>0&&t.forEach(function(c){c.controlType===a.controlType&&(c.properties=[].concat(a.properties),b=!0)}),b||t.push(a)}return t}function d(){return l}function e(a){"undefined"!=typeof a&&l.controls.push(a)}function f(){return r}function g(a){"undefined"!=typeof a&&r.cssClass.push(a)}function h(){return s}function i(a){"undefined"!=typeof a&&s.className.push(a)}function j(a){return"className"in a&&"type"in a&&"key"in a&&"templateOptions"in a&&(s=angular.copy(a)),!0}function k(){function a(){return l}function b(a){var b=angular.copy(o);return"undefined"!=typeof a&&a&&angular.extend(b,p),b}function c(a){var b=angular.copy(q);return"undefined"!=typeof a&&a&&angular.extend(b,p),b}function d(){return m}function e(){return n}function f(){return r}function g(a,b){if("undefined"!=typeof a&&"undefined"!=typeof b&&a===parseInt(a,10)&&a<=r.cssClass.length){var c={};return c.className=r.cssClass[a-1],r.textContent=b,r.selectedClass=c.className,c.template=[r.simpleHtml1,b,r.simpleHtml2].join(""),c}}function h(){return s}function i(a,b){if("undefined"!=typeof a&&a===parseInt(a,10)&&a<=s.className.length){var c=function(){var c=angular.copy(s);return c.className=s.className[a-1],console.warn("it should have a bug upper line"),"undefined"!=typeof b&&t.forEach(function(a){a.controlType===b&&a.properties.forEach(function(a){a.isRoot&&(c[a.value]=""),a.isTemplateOptions&&(c.templateOptions[a.value]="")})}),{v:c}}();if("object"==typeof c)return c.v}}var j={getEasyFormListControls:a,getEasyFormInitialStateConfigurationModel:b,getEasyFormReloadConfigurationModel:c,getEasyFormEmptyConfigurationLineModel:d,getEasyFormConfigurationEmptyControlModel:e,getRawHeaderTemplates:f,getHeaderTemplateForNcolumnLine:g,getRawFormlyControlTemplates:h,getFormlyControlTemplateForNcolumnLine:i};return j}var l=c.initEasyFormListControls(),m=c.initEasyFormEmptyConfigurationLineModel(),n=c.initEmptyControlFieldModel(),o=c.initEasyFormInitialStateConfigurationModel(m),p=c.initEasyFormInitialStateConfigurationModelAddOnForStepWay(),q=c.initEasyFormReloadConfigurationModel(),r=c.initHeaderTemplates(),s=c.initFormlyControlTemplates(),t=c.initParticularControlProperties();this.getAllParticularControlProperties=a,this.addParticularControlProperties=b,this.getEasyFormListControls=d,this.addEasyFormControlToList=e,this.getHeaderTemplates=f,this.addHeaderTemplateCssClass=g,this.getFormlyControlTemplate=h,this.addformlyControlTemplatesCssClass=i,this.setFormlyControlTemplate=j,this.$get=k,k.$inject=[]}var c,d;return{setters:[function(a){c=a}],execute:function(){d="EasyFormGenFormlyBindingModels",b.$inject=[],a("default",b),a("EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER",d)}}}),a.register("2e",["2b","2d"],function(a){"use strict";var b,c,d,e,f;return{setters:[function(a){b=a["default"],c=a.FORM_FIELD_MANAGE_SERVICE},function(a){d=a["default"],e=a.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER}],execute:function(){f="",a("default",angular.module(f,[]).service(c,b).provider(e,d))}}}),a.register("2f",[],function(a){"use strict";function b(a,b){function c(c,d){var e=void 0;c.$watch(function(){return d[0].children.length},function(f,g){f!==g&&!function(){for(var f=0,g=[],h=d[0].children.length-1;h>=0;h--)a.isHtmlElementToCount(d[0].children[h].classList)?(f++,g.push({item:h,isReal:!0})):g.push({item:h,isReal:!1});c.contentRealCount=f,e=b(function(){a.updateLineItemCss(c.fullModel,g,c.parentIndex,c.currentIndex,f)},20)}()}),c.$on("$destroy",function(){b.cancel(e)})}var d={restrict:"A",scope:{valueWhenPlaceholder:"@ddValueWhenPlaceholder",valueWhendragging:"@ddValueWhenDragging",fullModel:"=ddFullModel",currentIndex:"@ddContentCounterCurrentIndex",parentIndex:"@ddContentCounterParentIndex",forceRefresh:"=ddContentCounterForceCssRefresh"},link:c};return d}var c;return{setters:[],execute:function(){c="ddContentCounter",b.$inject=["dragDropItemCounterService","$timeout"],a("default",b),a("DD_CONTENT_COUNTER_DIRECTIVE",c)}}}),a.register("30",["9","a"],function(a){var b,c,d,e;return{setters:[function(a){b=a["default"]},function(a){c=a["default"]}],execute:function(){"use strict";d="dragDropItemCounterService",e=function(){function a(b){c(this,a),this.easyFormDragWayConfig=b,this.init()}return b(a,[{key:"init",value:function(){this._modelItemRealCounter=[],this._itemsNotToCount=angular.copy(this.easyFormDragWayConfig.getItemsNotToCount())}},{key:"getItemsNotToCount",value:function(){return this._itemsNotToCount}},{key:"getModelItemsRealCounter",value:function(){return this._modelItemRealCounter}},{key:"isHtmlElementToCount",value:function(a){var b=!0;return a.length>0&&angular.forEach(this._itemsNotToCount,function(c){for(var d=a.length-1;d>=0;d--)a[d]===c&&(b=b&&!1)}),b}},{key:"updateLineItemCss",value:function(a,b,c,d,e){if("undefined"!=typeof a&&"undefined"!=typeof b&&"undefined"!=typeof c&&"undefined"!=typeof d&&"undefined"!=typeof e){for(var f=a[c][d].length-1;f>=0;f--)for(var g=0;g=0;f--)a[b][c][f].cssClass=this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(d);return!0}return!1}},{key:"updateCssClassWholeColumn",value:function(a,b){if("undefined"!=typeof b&&"undefined"!=typeof a){for(var c=a[b].length-1;c>=0;c--)for(var d=a[b][c].length-1;d>=0;d--)a[b][c][d].cssClass=this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(a[b][c].length);return!0}return!1}}]),a}(),e.$inject=["easyFormDragWayConfig"],a("default",e),a("DRAG_DROP_ITEM_DECOR_SERVICE",d)}}}),a.registerDynamic("39",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='\n \n

    \n
    \n',d.define=e,c.exports}),a.register("3a",["39"],function(a){"use strict";function b(a){function b(b,c,d,e,f){var g=b.verboseMode,h=b.currentIndex,i=b.parentIndex;b.deleteLine={},b.deleteLine.readyToDelete=!1,b.deleteLine.dblClickCount=0,b.isCollapsed=!1;var j=void 0;if(""!==g){var k=angular.lowercase(g);("true"===k||"1"===k)&&console.dir({whoAmI:"I am verbose from ddDecorLine directive link",verbodeMode:k,ParentParentIndex:b.$parent.$parent.$index,ParentIndex:i,currentIndex:h})}b.removeMe=function(c){c.preventDefault(),c.stopPropagation(),"1"===b.parentIndex&&(1===b.deleteLine.dblClickCount&&(b.deleteLine.dblClickCount=0,b.deleteLine.readyToDelete=!1,b.removeLine(),a.cancel(j)),0===b.deleteLine.dblClickCount&&(b.deleteLine.dblClickCount=b.deleteLine.dblClickCount+1,b.deleteLine.readyToDelete=!0))},b.cancelDelete=function(){j=a(function(){b.deleteLine.dblClickCount=0,b.deleteLine.readyToDelete=!1},500)},b.$on("$destroy",function(){return a.cancel(j)}),f(b.$parent,function(a){var b=angular.element(c.children()[0]);b.append(a)})}var d={restrict:"A",scope:{verboseMode:"@ddLineVerboseMode",currentIndex:"@ddLineCurrentIndex",parentIndex:"@ddLineParentIndex",removeLine:"&ddRemoveLine"},template:c,transclude:!0,link:b};return d}var c,d;return{setters:[function(a){c=a["default"]}],execute:function(){d="ddDecorLine",b.$inject=["$timeout"],a("default",b),a("DRAG_DROP_DECOR_LINE",d)}}}),a.register("3b",[],function(a){"use strict";function b(){function a(a,b){b.on("click",function(a){return a.preventDefault()})}var b={restrict:"A",link:a};return b}var c;return{setters:[],execute:function(){c="ddNoEditableControl",b.$inject=[],a("default",b),a("DRAG_DROP_NO_EDITABLE_CONTROL",c)}}}),a.register("3c",["30","32","33","35","37","38","2f","3a","3b"],function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t;return{setters:[function(a){b=a["default"],c=a.DRAG_DROP_ITEM_COUNTER_SERVICE},function(a){d=a["default"],e=a.DD_DECOR_CONTAINER_DIRECTIVE},function(a){f=a["default"],g=a.DD_DECOR_CONTAINER_CONTROLLER_NAME},function(a){h=a["default"],i=a.DD_DECOR_DROPZONE_DIRECTIVE},function(a){j=a["default"],k=a.DRAG_DROP_DECOR_ITEM},function(a){l=a["default"],m=a.DRAG_DROP_ITEM_DECOR_SERVICE},function(a){n=a["default"],o=a.DD_CONTENT_COUNTER_DIRECTIVE},function(a){p=a["default"],q=a.DRAG_DROP_DECOR_LINE},function(a){r=a["default"],s=a.DRAG_DROP_NO_EDITABLE_CONTROL}],execute:function(){t="edaDragDropWay.dragdrop.module",a("default",angular.module(t,[]).directive(o,n).controller(g,f).directive(e,d).directive(i,h).directive(k,j).service(m,l).directive(s,r).service(c,b).directive(q,p))}}}),a.register("3d",[],function(a){"use strict";function b(a){function b(b,c,d){var e=a(d.edaRightClick),f=a(d.edaRightClickColIndex),g=a(d.edaSetRightClicked);c.on("contextmenu",function(a){b.$apply(function(){a.preventDefault(),1===f(b)&&g(b,{}),1===f(b)&&e(b,{$event:a})})})}var c={restrict:"A",link:b};return c}var c;return{setters:[],execute:function(){c="edaRightClick",b.$inject=["$parse"],a("default",b),a("EDA_RIGHT_CLICK_DIRECTIVE",c)}}}),a.register("3e",["9","a"],function(a){var b,c,d,e;return{setters:[function(a){b=a["default"]},function(a){c=a["default"]}],execute:function(){"use strict";d="ddItemRightClickedManager",e=function(){function a(){c(this,a),this.init()}return b(a,[{key:"init",value:function(){}},{key:"setUnRightClicked",value:function(a){a.rightCliked=!1}},{key:"resetAllDragDropItemSelectedState",value:function(a){angular.forEach(a[1],function(a){angular.forEach(a,function(a){return a.rightCliked=!1})})}}]),a}(),e.$inject=[],a("default",e),a("EDA_RIGHT_CLICKED_MANAGER_SERVICE",d)}}}),a.register("3f",["3d","3e"],function(a){"use strict";var b,c,d,e,f;return{setters:[function(a){b=a["default"],c=a.EDA_RIGHT_CLICK_DIRECTIVE},function(a){d=a["default"],e=a.EDA_RIGHT_CLICKED_MANAGER_SERVICE}],execute:function(){f="eda.right.click.module",a("default",angular.module(f,[]).directive(c,b).service(e,d))}}}),a.register("40",["9","a"],function(a){var b,c,d,e;return{setters:[function(a){b=a["default"]},function(a){c=a["default"]}],execute:function(){"use strict";d="ddModelConfModelProxyService",e=function(){function a(b,d,e){c(this,a),this.EasyFormGenFormlyBindingModels=b,this.easyFormDragWayConfig=d,this.$parse=e,this.init()}return b(a,[{key:"init",value:function(){}},{key:"refreshAllConfigurationFromDragAndDropModel",value:function(a,b){var c=this;return a.lines=[],angular.forEach(b[1],function(b,d){a.lines.push(angular.copy(c.EasyFormGenFormlyBindingModels.getEasyFormEmptyConfigurationLineModel())),c.applyThisLine(d+1,d,a),angular.forEach(b,function(e,f){var g={control:angular.copy(c.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(b.length,c.getFormlyDetailedControlModelFromDragDropObject(b[f]).formlyType))},h=c.getFormlyDetailedControlModelFromDragDropObject(b[f]);if("undefined"!=typeof e.key){g.control=angular.copy(e.configModelControl);var i=c.EasyFormGenFormlyBindingModels.getFormlyControlTemplateForNcolumnLine(b.length,c.getFormlyDetailedControlModelFromDragDropObject(b[f]).formlyType);g.control.className=i.className,g.control.cssClass=i.className}else c.bindConfigCtrlModelFromFormlyDetailedCtrlModel(h,g,a);"undefined"==typeof a.lines[d].columns[f]&&a.lines[d].columns.push(angular.copy(c.EasyFormGenFormlyBindingModels.getEasyFormConfigurationEmptyControlModel())),a.lines[d].columns[f].control=angular.copy(g.control),a.lines[d].columns[f].numColumn=f+1,a.lines[d].columns[f].exist=!0})}),a}},{key:"refreshControlsKeys",value:function(a,b){angular.forEach(a.lines,function(a,c){angular.forEach(a.columns,function(a,d){"undefined"!=typeof b[1][c]&&b[1][c].length>0&&(b[1][c][d].key=a.control.key,b[1][c][d].configModelControl=angular.copy(a.control))})})}},{key:"loadDragDropModelFromConfigurationModel",value:function(a,b){var c=this;b[1]=[],angular.forEach(a.lines,function(a,d){b[1].push([]),angular.forEach(a.columns,function(a){var e={control:"empty",cssClass:"col-xs-12",label:'
    '};angular.forEach(b[0],function(b){angular.forEach(b,function(b){b.control===a.control.selectedControl&&(e=angular.copy(b))})}),b[1][d].push(e);var f=c.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(b[1][d].length);angular.forEach(b[1][d],function(a){return a.cssClass=f})})})}},{key:"getFormlyDetailedControlModelFromDragDropObject",value:function(a){var b={},c=this.EasyFormGenFormlyBindingModels.getEasyFormListControls(),d=this.$parse("controls");return angular.forEach(d(c),function(c){c.id===a.control&&(b=c)}),b}},{key:"validKeyUniqueness",value:function(a,b){for(var c=!0,d=b.lines.length-1;d>=0;d--)for(var e=b.lines[d].columns.length-1;e>=0;e--)"undefined"!=typeof b.lines[d].columns[e].control&&b.lines[d].columns[e].control.key===a&&(c=!1);return c}},{key:"createUniqueKey",value:function(a,b){var c=a+"-"+Date.now();return this.validKeyUniqueness(c,b)===!0?c:(c=a+"-"+Date.now(),this.validKeyUniqueness(c,b)===!0?c:c=a+"-"+Date.now())}},{key:"applyThisLine",value:function(a,b,c){angular.forEach(c.lines,function(c,d){d===b&&(c.line=a)})}},{key:"bindConfigCtrlModelFromFormlyDetailedCtrlModel",value:function(a,b,c){this.$parse("control.selectedControl").assign(b,this.$parse("selectedControl")(a)),this.$parse("control.type").assign(b,this.$parse("formlyType")(a)),this.$parse("control.key").assign(b,this.createUniqueKey(this.$parse("control.type")(b),c)),this.$parse("control.subtype").assign(b,this.$parse("formlySubtype")(a)),this.$parse("control.templateOptions.label").assign(b,this.$parse("formlyLabel")(a)),this.$parse("control.templateOptions.required").assign(b,this.$parse("formlyRequired")(a)),this.$parse("control.templateOptions.description").assign(b,this.$parse("formlyDesciption")(a)),this.$parse("control.templateOptions.placeholder").assign(b,this.$parse("formlyPlaceholder")(a)),this.$parse("control.templateOptions.options").assign(b,this.$parse("formlyOptions")(a)),"datepicker"===this.$parse("control.type")(b)&&this.$parse("control.templateOptions.datepickerPopup").assign(b,this.$parse("datepickerPopup")(a))}}]),a}(),e.$inject=["EasyFormGenFormlyBindingModels","easyFormDragWayConfig","$parse"],a("default",e),a("DRAG_DROP_CONFIG_PROXY_SERVICE",d)}}}),a.register("41",["40"],function(a){"use strict";var b,c,d;return{setters:[function(a){b=a["default"],c=a.DRAG_DROP_CONFIG_PROXY_SERVICE}],execute:function(){d="eda.config.proxy.module",a("default",angular.module(d,[]).service(c,b))}}}),a.register("42",[],function(a){"use strict";function b(a,b,c,d){function e(e,f,g){function h(a,b,c){var d=q?a.offsetX||a.layerX:a.offsetY||a.layerY,e=q?b.offsetWidth:b.offsetHeight,f=q?b.offsetLeft:b.offsetTop;return f=c?f:0,f+e/2>d}function i(){return Array.prototype.indexOf.call(p.children,o)}function j(a){if(!d.isDragging&&!r)return!1;if(!m(a.dataTransfer.types))return!1;if(g.dndAllowedTypes&&d.isDragging){var b=e.$eval(g.dndAllowedTypes);if(angular.isArray(b)&&-1===b.indexOf(d.dragType))return!1}return g.dndDisableIf&&e.$eval(g.dndDisableIf)?!1:!0}function k(){return n.remove(),f.removeClass("dndDragover"),!0}function l(b,c,f){return a(b)(e,{event:c,index:i(),item:f||void 0,external:!d.isDragging,type:d.isDragging?d.dragType:void 0})}function m(a){if(!a)return!0;for(var b=0;b'),o=n[0],p=f[0],q=g.dndHorizontalList&&e.$eval(g.dndHorizontalList),r=g.dndExternalSources&&e.$eval(g.dndExternalSources);f.on("dragover",function(a){if(a=a.originalEvent||a,!j(a))return!0;if(o.parentNode!=p&&f.append(n),a.target!==p){for(var b=a.target;b.parentNode!==p&&b.parentNode;)b=b.parentNode;b.parentNode===p&&b!==o&&(h(a,b)?p.insertBefore(o,b):p.insertBefore(o,b.nextSibling))}else if(h(a,o,!0))for(;o.previousElementSibling&&(h(a,o.previousElementSibling,!0)||0===o.previousElementSibling.offsetHeight);)p.insertBefore(o,o.previousElementSibling);else for(;o.nextElementSibling&&!h(a,o.nextElementSibling,!0);)p.insertBefore(o,o.nextElementSibling.nextElementSibling);return g.dndDragover&&!l(g.dndDragover,a)?k():(f.addClass("dndDragover"),a.preventDefault(),a.stopPropagation(),!1)}),f.on("drop",function(a){if(a=a.originalEvent||a,!j(a))return!0;a.preventDefault();var b,d=a.dataTransfer.getData("Text")||a.dataTransfer.getData("text/plain");try{b=JSON.parse(d)}catch(f){return k()}if(g.dndDrop&&(b=l(g.dndDrop,a,b),!b))return k();var h=e.$eval(g.dndList);return e.$apply(function(){h.splice(i(),0,b)}),"none"===a.dataTransfer.dropEffect?"copy"===a.dataTransfer.effectAllowed||"move"===a.dataTransfer.effectAllowed?c.dropEffect=a.dataTransfer.effectAllowed:c.dropEffect=a.ctrlKey?"copy":"move":c.dropEffect=a.dataTransfer.dropEffect,k(),a.stopPropagation(),!1}),f.on("dragleave",function(a){a=a.originalEvent||a,f.removeClass("dndDragover"),b(function(){f.hasClass("dndDragover")||n.remove()},100)})}var f={link:e};return f}var c,d;return{setters:[],execute:function(){c="dndList",d=["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround"],b.$inject=d,a("default",b),a("DNDLIST_DIRECTIVE",c)}}}),a.register("43",[],function(a){"use strict";function b(a,b,c,d){function e(e,f,g){var h=this;f.attr("draggable","true"),g.dndDisableIf&&e.$watch(g.dndDisableIf,function(a){return f.attr("draggable",!a)}),f.on("dragstart",function(h){h=h.originalEvent||h,h.dataTransfer.setData("Text",angular.toJson(e.$eval(g.dndDraggable))),h.dataTransfer.effectAllowed=g.dndEffectAllowed||"move",f.addClass("dndDragging"),b(function(){f.addClass("dndDraggingSource")},0),c.dropEffect="none",d.isDragging=!0,d.dragType=g.dndType?e.$eval(g.dndType):void 0,a(g.dndDragstart)(e,{event:h}),h.stopPropagation()}),f.on("dragend",function(b){b=b.originalEvent||b;var h=c.dropEffect;e.$apply(function(){switch(h){case"move":a(g.dndMoved)(e,{event:b});break;case"copy":a(g.dndCopied)(e,{event:b})}}),f.removeClass("dndDragging"),f.removeClass("dndDraggingSource"),d.isDragging=!1,b.stopPropagation()}),f.on("click",function(b){b=b.originalEvent||b,e.$apply(function(){return a(g.dndSelected)(e,{event:b})}),b.stopPropagation()}),f.on("selectstart",function(){return h.dragDrop&&h.dragDrop(),!1})}var f={link:e};return f}var c,d;return{setters:[],execute:function(){c="dndDraggable",d=["$parse","$timeout","dndDropEffectWorkaround","dndDragTypeWorkaround"],b.$inject=d,a("default",b),a("DNDDRAGGABLE_DIRECTIVE",c)}}}),a.register("44",["42","43"],function(a){"use strict";var b,c,d,e,f;return{setters:[function(a){b=a["default"],c=a.DNDLIST_DIRECTIVE},function(a){d=a["default"],e=a.DNDDRAGGABLE_DIRECTIVE}],execute:function(){f="dndLists.module",a("default",angular.module(f,[]).directive(c,b).directive(e,d).factory("dndDragTypeWorkaround",function(){return{}}).factory("dndDropEffectWorkaround",function(){return{}}))}}}),a.register("45",[],function(a){"use strict";function b(){function a(a,b,c){function d(b,c){if(b&&0!==b.style.width&&0!==b.style.width)switch(c.cloak&&g.css("display","none"),c.side){case"right":b.style.width="0px",c.squeeze&&(i.style.right="0px"),c.push&&(i.style.right="0px",i.style.left="0px");break;case"left":b.style.width="0px",c.squeeze&&(i.style.left="0px"),c.push&&(i.style.left="0px",i.style.right="0px");break;case"top":b.style.height="0px",c.squeeze&&(i.style.top="0px"),c.push&&(i.style.top="0px",i.style.bottom="0px");break;case"bottom":b.style.height="0px",c.squeeze&&(i.style.bottom="0px"),c.push&&(i.style.bottom="0px",i.style.top="0px")}a.psOpen=!1}function e(a,b){if(0!==a.style.width&&0!==a.style.width){switch(b.side){case"right":a.style.width=b.size,b.squeeze&&(i.style.right=b.size),b.push&&(i.style.right=b.size,i.style.left="-"+b.size);break;case"left":a.style.width=b.size,b.squeeze&&(i.style.left=b.size),b.push&&(i.style.left=b.size,i.style.right="-"+b.size);break;case"top":a.style.height=b.size,b.squeeze&&(i.style.top=b.size),b.push&&(i.style.top=b.size,i.style.bottom="-"+b.size);break;case"bottom":a.style.height=b.size,b.squeeze&&(i.style.bottom=b.size),b.push&&(i.style.bottom=b.size,i.style.top="-"+b.size)}setTimeout(function(){b.cloak&&g.css("display","block")},1e3*b.speed)}}var f={};f.side=a.psSide||"right",f.speed=a.psSpeed||"0.5",f.size=a.psSize||"300px",f.zindex=1e3,f.className=a.psClass||"ng-pageslide",f.cloak=a.psCloak&&"false"==a.psCloak.toLowerCase()?!1:!0,f.squeeze=Boolean(a.psSqueeze)||!1,f.push=Boolean(a.psPush)||!1,f.container=a.psContainer||!1,b.addClass(f.className);var g=null,h=null,i=f.container?document.getElementById(f.container):document.body;if(h=b[0],"div"!==h.tagName.toLowerCase()&&"pageslide"!==h.tagName.toLowerCase())throw new Error("Pageslide can only be applied to
    or elements");if(0===h.children.length)throw new Error("You have to content inside the ");switch(g=angular.element(h.children),i.appendChild(h),h.style.zIndex=f.zindex,h.style.position=f.container!==!1?"absolute":"fixed",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h.style.transitionDuration=f.speed+"s",h.style.webkitTransitionDuration=f.speed+"s",h.style.transitionProperty="width, height",f.squeeze&&(i.style.position="absolute",i.style.transitionDuration=f.speed+"s",i.style.webkitTransitionDuration=f.speed+"s",i.style.transitionProperty="top, bottom, left, right"),f.side){case"right":h.style.height=c.psCustomHeight||"100%",h.style.top=c.psCustomTop||"0px",h.style.bottom=c.psCustomBottom||"0px",h.style.right=c.psCustomRight||"0px";break;case"left":h.style.height=c.psCustomHeight||"100%",h.style.top=c.psCustomTop||"0px",h.style.bottom=c.psCustomBottom||"0px",h.style.left=c.psCustomLeft||"0px";break;case"top":h.style.width=c.psCustomWidth||"100%",h.style.left=c.psCustomLeft||"0px",h.style.top=c.psCustomTop||"0px",h.style.right=c.psCustomRight||"0px";break;case"bottom":h.style.width=c.psCustomWidth||"100%",h.style.bottom=c.psCustomBottom||"0px",h.style.left=c.psCustomLeft||"0px",h.style.right=c.psCustomRight||"0px"}a.$watch("psOpen",function(a){a?e(h,f):d(h,f)}),a.$on("$destroy",function(){return i.removeChild(h)}),a.psAutoClose&&(a.$on("$locationChangeStart",function(){return d(h,f)}),a.$on("$stateChangeStart",function(){return d(h,f)}))}var b={restrict:"EAC",transclude:!1,scope:{psOpen:"=?",psAutoClose:"=?",psSide:"@",psSpeed:"@",psClass:"@",psSize:"@",psSqueeze:"@",psCloak:"@",psPush:"@",psContainer:"@"},link:a};return b}var c;return{setters:[],execute:function(){c="pageslide",b.$inject=[],a("default",b),a("PAGE_SLIDE_DIRECTIVE",c)}}}),a.register("46",["45"],function(a){"use strict";var b,c,d;return{setters:[function(a){b=a["default"],c=a.PAGE_SLIDE_DIRECTIVE}],execute:function(){d="pageslide.module",a("default",angular.module(d,[]).directive(c,b))}}}),a.register("47",[],function(a){"use strict";var b,c,d,e;return{setters:[],execute:function(){b=[{cssClass:"col-md-12",numberItemPerRow:0},{cssClass:"col-md-12",numberItemPerRow:1},{cssClass:"col-md-6",numberItemPerRow:2},{cssClass:"col-md-4",numberItemPerRow:3}],c={dropZoneConfig:{decoration:[{WhenIndex:0,ApplycssClass:"col-md-4",fontAwesomeIcon:"fa fa-level-up",title:"Drag control from here : "},{WhenIndex:1,ApplycssClass:"col-md-8",fontAwesomeIcon:"fa fa-level-down",title:"Drop control into here : "}],verboseMode:!1},containerConfig:{decoration:[{WhenIndex:0,ApplycssClass:"col-md-12",title:"Blank : ",groupId:"blank",isCollapsed:!0},{WhenIndex:1,ApplycssClass:"col-md-12",title:"Headers : ",groupId:"headers",isCollapsed:!0},{WhenIndex:2,ApplycssClass:"col-md-12",title:"Text inputs : ",groupId:"inputs",isCollapsed:!0},{WhenIndex:3,ApplycssClass:"col-md-12",title:"Textareas : ",groupId:"textareas",isCollapsed:!0},{WhenIndex:4,ApplycssClass:"col-md-12",title:"Radios : ",groupId:"radios",isCollapsed:!0},{WhenIndex:5,ApplycssClass:"col-md-12",title:"Checkboxes : ",groupId:"checkboxes",isCollapsed:!0},{WhenIndex:6,ApplycssClass:"col-md-12",title:"Selects : ",groupId:"selects",isCollapsed:!0}],verboseMode:!1,collapseEnabled:!0,collapseCtrl:[{atIndex:0,collapse:!0},{atIndex:1,collapse:!0}]},itemConfig:{verboseMode:!1}},d=[[],[[]]],e={itemBeingDragged:""},a("LIST_DRAG_DROP_ITEM_CSS_CLASSES",b),a("DRAG_DROP_CONFIG_MODEL",c),a("DRAG_DROP_PRESENTATION_MODEL",d),a("ITEMS_NOT_TO_COUNT_FOR_REAL",e)}}}),a.register("48",["47"],function(a){"use strict";function b(){function a(a){w=[].concat(a)}function b(){return z}function g(a){z=angular.copy(a)}function h(){var a={modalAnimated:!1};return a}function i(a,b){"undefined"!=typeof a&&"undefined"!=typeof b&&v(a,b)}function j(){return y}function k(){return!0}function l(){return!0}function m(){var a=[{name:"empty",enabled:!0},{name:"Header",enabled:!0},{name:"Subtitle",enabled:!0},{name:"TextInput",enabled:!0},{name:"Password",enabled:!0},{name:"Email",enabled:!0},{name:"Date",enabled:!0},{name:"Texarea",enabled:!0},{name:"RichTextEditor",enabled:!0},{name:"Radio",enabled:!0},{name:"Checkbox",enabled:!0},{name:"BasicSelect",enabled:!0},{name:"GroupedSelect",enabled:!0}];return a}function n(a){angular.isDefined(a)&&(a===!0&&(C=!0),a===!1&&(C=!1))}function o(a){angular.isDefined(a)&&(a===!0&&(D=!0),a===!1&&(D=!1))}function p(){return B}function q(a){angular.isString(a)&&angular.forEach(B,function(b){b.name===a&&(b.enabled=!1)})}function r(a){angular.isString(a)&&angular.forEach(B,function(b){b.name===a&&(b.enabled=!0)})}function s(a){var b=a===!0?a:a===!1?a:A.modalAnimated;A.modalAnimated=b}function t(){return A.modalAnimated}function u(){function a(){return y}function b(a,b,c){return"undefined"!=typeof b&&"undefined"!=typeof c&&b===parseInt(b,10)&&(a.containerConfig.decoration[b].isCollapsed=c),!0}function c(){return x}function d(){var a=[];return angular.forEach(w,function(b){var c=b.cssClass;if(0===a.length)a.push(c);else{var d=!0;angular.forEach(a,function(a){var b=a;c===b&&(d=!1)}),d&&a.push(c)}}),a}function e(a){if("undefined"!=typeof a){for(var b="",c=w.length-1;c>=0;c--)w[c].numberItemPerRow===a&&(b=w[c].cssClass);return b}return""}function f(){return w}function g(){return z}function h(){return A.modalAnimated}function i(a){s(a)}function j(){return angular.copy(B)}function k(){return C}function l(){return D}var m={setModalAnimation:i,getModalAnimationValue:h,getListEnabledControl:j,isPreviewPanelVisible:k,arePreviewModelsVisible:l,getListItemCssClass:f,getItemsNotToCount:g,getItemCssDependingNumberItemsInRow:e,getDistinctItemCssClass:d,getDragDropConfigModel:c,getDragDropPresentationModel:a,setDragDropConfigContainerDecorationCollapse:b};return m}function v(a,b){if(y[0].length>0){if(y[0].lengthd;d++)y[0].push([]);x.containerConfig.decoration.forEach(function(c){b.addToGroupCtrl===c.groupId&&y[0][c.WhenIndex].push(a)})}else x.containerConfig.decoration.forEach(function(){return y[0].push([])}),x.containerConfig.decoration.forEach(function(c){b.addToGroupCtrl===c.groupId&&y[0][c.WhenIndex].push(a)})}var w=[].concat(c),x=angular.copy(d),y=[].concat(e),z=angular.copy(f),A=h(),B=m(),C=k(),D=l();this.$get=u,this.setModalAnimation=s,this.getModalAnimation=t,this.configuration=A,this.getEnabledControls=p,this.disableControl=q,this.enableControl=r,this.showPreviewPanel=n,this.showPreviewModels=o,this.setListItemCssClass=a,this.getItemsNotTocount=b,this.setItemsNotTocount=g,this.addControlToDragDropPresentationModel=i,this.getDragDropPresentationModel=j,u.$inject=[]}var c,d,e,f,g;return{setters:[function(a){c=a.LIST_DRAG_DROP_ITEM_CSS_CLASSES,d=a.DRAG_DROP_CONFIG_MODEL,e=a.DRAG_DROP_PRESENTATION_MODEL,f=a.ITEMS_NOT_TO_COUNT_FOR_REAL}],execute:function(){g="easyFormDragWayConfig",b.$inject=[],a("default",b),a("EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME",g)}}}),a.registerDynamic("49",[],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports='
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n \n \n
    \n \n \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n \n \n {{vm.configuration.submitButtonText}}\n \n \n {{vm.configuration.cancelButtonText}}\n \n \n \n \n
    \n
    \n
    \n \n

    \n \n  \n \n  \n Customize form buttons\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Customize Submit button Text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n Customize Cancel button Text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n

    \n \n  \n \n  \n DATA MODEL\n

    \n
    \n
    \n
    \n
    \n												{{vm.model | json}}\n											
    \n
    \n
    \n \n
    \n \n

    \n \n  \n \n  \n FIELDS MODEL (ready to save to database one)\n

    \n
    \n
    \n
    \n
    \n												{{vm.wfFormFieldsOnlyNeededProperties | json}}\n											
    \n
    \n
    \n \n
    \n \n

    \n \n  \n \n  \n Save this form\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Name to this form :\n \n
    \n \n
    \n
    \n
    \n
    \n \n save this form\n \n
    \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n Easy form generator : {{vm.easyFormGeneratorVERSION}} — Erwan DATIN (MacKentoch)\n
    \n
    \n \n \n\n', -d.define=e,c.exports}),a.registerDynamic("4a",[],!0,function(a,b,c){var d=this,e=d.define;d.define=void 0;var f=Object;return c.exports={create:f.create,getProto:f.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:f.getOwnPropertyDescriptor,setDesc:f.defineProperty,setDescs:f.defineProperties,getKeys:f.keys,getNames:f.getOwnPropertyNames,getSymbols:f.getOwnPropertySymbols,each:[].forEach},d.define=e,c.exports}),a.registerDynamic("4b",["4a"],!0,function(a,b,c){var d=this,e=d.define;d.define=void 0;var f=a("4a");return c.exports=function(a,b,c){return f.setDesc(a,b,c)},d.define=e,c.exports}),a.registerDynamic("4c",["4b"],!0,function(a,b,c){var d=this,e=d.define;return d.define=void 0,c.exports={"default":a("4b"),__esModule:!0},d.define=e,c.exports}),a.registerDynamic("9",["4c"],!0,function(a,b,c){"use strict";var d=this,e=d.define;d.define=void 0;var f=a("4c")["default"];return b["default"]=function(){function a(a,b){for(var c=0;c1&&this.configuration.lines.splice(1,this.configuration.lines.length-2),this.countConfigurationModelLines()}},{key:"countConfigurationModelLines",value:function(){return this.configuration.lines.length}},{key:"saveThisForm",value:function(){return"undefined"==typeof this.configuration.formName?(this.toaster.pop({type:"warning",timeout:2e3,title:"Form name is undefined",body:"Form has not been saved.",showCloseButton:!0}),!1):""===this.configuration.formName?(this.toaster.pop({type:"warning",timeout:2e3,title:"Form name is required",body:"Form has not been saved.",showCloseButton:!0}),!1):(this.toaster.pop({type:"wait",timeout:1e4,title:"Form is being saved",body:"Wait.",showCloseButton:!0}),this.toaster.clear(),this.returnSaveEvent=!0,!0)}},{key:"dragoverCallbackContainer",value:function(a,b,c){return 0===c?!1:!0}},{key:"dropCallback",value:function(a,b,c,d,e,f){var g=this;if(d){if("itemType"===f&&!c.label)return!1;if("containerType"===f&&!angular.isArray(c))return!1}var h=this.$timeout(function(){g.configuration=angular.copy(g.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(g.configuration,g.dragDropModel)),g.formFieldManage.applyConfigurationToformlyModel(g.configuration,g.wfFormFields,g.dataModel),g.wfFormFieldsOnlyNeededProperties=angular.copy(g.wfFormFields),g.ddModelConfModelProxyService.refreshControlsKeys(g.configuration,g.dragDropModel)},200);return this.$scope.$on("$destroy",function(){return g.$timeout.cancel(h)}),c}},{key:"dndItemMoved",value:function(a,b,c){a>0&&this.dragDropModel[a][b].splice(c,1)}},{key:"dragoverCallbackItems",value:function(a,b){return 0===b?!1:!0}},{key:"disableItemDropIf",value:function(){}},{key:"dropCallbackItems",value:function(a,b,c,d,e,f,g,h,i,j){var k=this;if(h){if("itemType"===j&&!g.label)return!1;if("containerType"===j&&!angular.isArray(g))return!1}var l=this.$timeout(function(){k.configuration=angular.copy(k.ddModelConfModelProxyService.refreshAllConfigurationFromDragAndDropModel(k.configuration,k.dragDropModel)),k.formFieldManage.applyConfigurationToformlyModel(k.configuration,k.wfFormFields,k.dataModel),k.wfFormFieldsOnlyNeededProperties=angular.copy(k.wfFormFields),k.ddModelConfModelProxyService.refreshControlsKeys(k.configuration,k.dragDropModel)},200);return this.ddItemRightClickedManager.setUnRightClicked(g),this.$scope.$on("$destroy",function(){return k.$timeout.cancel(l)}),g}},{key:"saveFromEditPanel",value:function(){this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel(),this.controllerModalProxy.bindConfigurationModelFromProxyModel(this.controllerModalProxy.getEditPanelModelLineIndex(),this.controllerModalProxy.getEditPanelModelColumnIndex(),this.configuration),this.formFieldManage.applyConfigurationToformlyModel(this.configuration,this.wfFormFields,this.dataModel),this.wfFormFieldsOnlyNeededProperties=angular.copy(this.wfFormFields),this.ddModelConfModelProxyService.refreshControlsKeys(this.configuration,this.dragDropModel),this.controllerModalProxy.setEditPanelModelToggle(!1),this.editPanelModel.toggle=this.controllerModalProxy.getEditPanelModelToggle(),this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel)}},{key:"closeEditPanel",value:function(){this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel),this.controllerModalProxy.setEditPanelModelToggle(!1),this.editPanelModel.toggle=this.controllerModalProxy.getEditPanelModelToggle()}},{key:"setRightClicked",value:function(a,b){b.rightCliked=!0}},{key:"toggleEditPanel",value:function(a,b,c,d){var e=this;this.ddItemRightClickedManager.resetAllDragDropItemSelectedState(this.dragDropModel),this.controllerModalProxy.getEditPanelModelToggle()?(this.controllerModalProxy.setEditPanelModelToggle(!1),this.editPanelModel.toggle=this.controllerModalProxy.getEditPanelModelToggle(),"undefined"!=typeof this.controllerModalProxy.getEditPanelModelLineIndex()&&"undefined"!=typeof this.controllerModalProxy.getEditPanelModelColumnIndex()&&"undefined"!=typeof this.controllerModalProxy.getEditPanelModelControl()&&(this.controllerModalProxy.getEditPanelModelLineIndex()===b&&this.controllerModalProxy.getEditPanelModelColumnIndex()===c&&angular.equals(this.controllerModalProxy.getEditPanelModelControl(),d)||!function(){d.rightCliked=!0;var a=e.$timeout(function(){e.controllerModalProxy.setEditPanelModelLineIndex(b),e.controllerModalProxy.setEditPanelModelColumnIndex(c),e.controllerModalProxy.setEditPanelModelControl(d),e.controllerModalProxy.setProxyModelFromConfigurationSelection(e.configuration,b,c),e.controllerModalProxy.setEditPanelModelToggle(!0),e.$scope.editPanelModel.toggle=e.controllerModalProxy.getEditPanelModelToggle()},200);e.$scope.$on("$destroy",function(){return e.$timeout.cancel(a)})}())):(d.rightCliked=!0,this.controllerModalProxy.setEditPanelModelLineIndex(b),this.controllerModalProxy.setEditPanelModelColumnIndex(c),this.controllerModalProxy.setEditPanelModelControl(d),this.controllerModalProxy.setProxyModelFromConfigurationSelection(this.configuration,b,c),this.controllerModalProxy.setEditPanelModelToggle(!0),this.editPanelModel.toggle=this.controllerModalProxy.getEditPanelModelToggle())}},{key:"removeThisLine",value:function(a){this.dragDropModel[1].splice(a,1)}},{key:"addNewline",value:function(){this.formFieldManage.applyConfigurationToformlyModel(this.configuration,this.wfFormFields,this.dataModel),this.wfFormFieldsOnlyNeededProperties=angular.copy(this.wfFormFields)}},{key:"insertNewLine",value:function(){this.addNewline(),this.dragDropModel[1].push([])}}]),a}(),h.$inject=["$scope","easyFormGenVersion","$filter","$anchorScroll","toaster","$timeout","$modal","$log","formFieldManage","controllerModalProxy","dragDropItemDecorationService","ddModelConfModelProxyService","ddItemRightClickedManager","easyFormDragWayConfig"],a("default",h),a("DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER",f),a("DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS",g)}}}),a.register("4f",["49","4e"],function(a){"use strict";function b(a,b,f,g){function h(a){function c(){var b=angular.isArray(a.edaEasyFormGeneratorModel.edaFieldsModel)&&a.edaEasyFormGeneratorModel.edaFieldsModel.length>0?a.edaEasyFormGeneratorModel.edaFieldsModel:d();return b}function d(){var a=[{line:1,activeColumn:1,columns:[{numColumn:1,exist:!0,control:{type:"none",key:"none"}}]}];return a}function e(){var b=angular.isArray(a.edaEasyFormGeneratorModel.dataModel)&&a.edaEasyFormGeneratorModel.dataModel.length>0?a.edaEasyFormGeneratorModel.dataModel:[];return b}function h(){if(angular.isDefined(a.edaEasyFormGeneratorModel)){var d=c();a.vm.configurationLoaded={},b.bindConfigurationLines(a.vm.configurationLoaded,d,!1),a.vm.configuration=angular.copy(a.vm.configurationLoaded),f.loadDragDropModelFromConfigurationModel(a.vm.configuration,a.vm.dragDropModel),i(a.vm.configuration),f.refreshControlsKeys(a.vm.configuration,a.vm.dragDropModel),b.applyConfigurationToformlyModel(a.vm.configuration,a.vm.wfFormFields,a.vm.dataModel),a.vm.wfFormFieldsOnlyNeededProperties=angular.copy(a.vm.wfFormFields),a.vm.dataModel=e(),a.vm.configuration.formName=angular.isString(a.edaEasyFormGeneratorModel.formName)?a.edaEasyFormGeneratorModel.formName:"",a.vm.configuration.submitButtonText=angular.isString(a.edaEasyFormGeneratorModel.btnSubmitText)?a.edaEasyFormGeneratorModel.btnSubmitText:"Submit",a.vm.configuration.cancelButtonText=angular.isString(a.edaEasyFormGeneratorModel.btnCancelText)?a.edaEasyFormGeneratorModel.btnCancelText:"Cancel"}}function i(a){angular.forEach(a.lines,function(a){var b=g.getItemCssDependingNumberItemsInRow(a.columns.length);angular.forEach(a.columns,function(a){return a.control.className=b})})}a.$watch(function(){return a.edaEasyFormGeneratorModel},function(){return h()},!0),a.$watch(function(){return a.returnSaveEvent},function(b){if(b===!0){var c={formName:a.vm.configuration.formName,btnSubmitText:a.vm.configuration.submitButtonText,btnCancelText:a.vm.configuration.cancelButtonText,edaFieldsModel:a.vm.configuration.lines,edaFieldsModelStringified:angular.toJson(a.vm.configuration.lines),formlyFieldsModel:a.vm.wfFormFieldsOnlyNeededProperties,dataModel:a.vm.dataModel};a.edaSaveFormEvent({edaEasyFormGeneratorModel:c}),a.returnSaveEvent=!1}})}var i={restrict:"E",template:c,scope:{edaEasyFormGeneratorModel:"=",edaSaveFormEvent:"&edaSaveFormEvent"},controller:d,controllerAs:e,replace:!1,link:h};return i}var c,d,e,f;return{setters:[function(a){c=a["default"]},function(a){d=a.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER,e=a.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLERAS}],execute:function(){f="edaDragdropWayEasyFormGen",b.$inject=["$timeout","formFieldManage","ddModelConfModelProxyService","easyFormDragWayConfig"],a("default",b),a("EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE",f)}}}),a.register("50",["48","4e","4f"],function(a){"use strict";var b,c,d,e,f,g,h;return{setters:[function(a){b=a["default"],c=a.EASY_FORM_DRAG_DROP_WAY_CONFIG_NAME},function(a){d=a["default"],e=a.DRAG_DROP_WAY_EASY_FORM_GEN_CONTROLLER},function(a){f=a["default"],g=a.EDA_DRAGDROP_WAY_EASY_FORM_GEN_DIRECTIVE}],execute:function(){h="edaDragDropWay.main.module",a("default",angular.module(h,[]).provider(c,b).controller(e,d).directive(g,f))}}}),a.register("51",[],function(a){"use strict";function b(a){return function(b,c){return a.trustAs(c||"html",b)}}var c;return{setters:[],execute:function(){c="trustThis",b.$inject=["$sce"],a("default",b),a("TRUST_THIS_FILTER_NAME",c)}}}),a.register("52",["51"],function(a){"use strict";var b,c,d;return{setters:[function(a){b=a["default"],c=a.TRUST_THIS_FILTER_NAME}],execute:function(){d="edaDragDropWay.trustThis.filter",a("default",angular.module(d,[]).filter(c,b))}}}),a.register("1",["2","3","5","6","41","44","46","50","52","2a","2e","3c","3f"],function(a){"use strict";var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;return{setters:[function(a){},function(a){b=a["default"]},function(a){c=a["default"],d=a.EASY_FORM_DD_VERSION_NAME,e=a.EASY_FORM_DD_VERSION_VALUE},function(a){f=a["default"]},function(a){g=a["default"]},function(a){h=a["default"]},function(a){i=a["default"]},function(a){j=a["default"]},function(a){k=a["default"]},function(a){l=a["default"]},function(a){m=a["default"]},function(a){n=a["default"]},function(a){o=a["default"]}],execute:function(){p="eda.easyformGen.dragDropWay",q=[f.name,g.name,k.name,l.name,m.name,n.name,j.name,o.name,h.name,i.name],r=angular.module(p,q).config(c).config(b).value(d,e),a("default",r)}}})})(function(a){a()}); +!function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="/",e(0)}([function(t,e,n){"use strict";n(1),n(6),n(10)},function(t,e,n){"use strict";n(2),n(3),n(5)},function(t,e,n){ +//! api-check version 7.5.5 built with ♥ by Kent C. Dodds (http://kent.doddsfamily.us) (ó ì_í)=óò=(ì_í ò) +!function(e,n){t.exports=n()}(this,function(){return function(t){function e(o){if(n[o])return n[o].exports;var r=n[o]={exports:{},id:o,loaded:!1};return t[o].call(r.exports,r,r.exports,e),r.loaded=!0,r.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),i=o(r);e.default=i.default,t.exports=e.default},function(t,e,n){"use strict";function o(){function e(o,i,l){if(e.config.disabled||t.exports.globalConfig.disabled)return{apiTypes:{},argTypes:{},passed:!0,message:"",failed:!1};n(arguments),Array.isArray(o)?i=Array.prototype.slice.call(i):(o=[o],i=[i]);var a=s(o,i);a.length||(a=r(o,i));var d=c(o,i);return d.args=i,a.length?(d.message=e.getErrorMessage(o,i,a,l),d.failed=!0,d.passed=!1):(d.message="",d.failed=!1,d.passed=!0),d}function n(t){var n=t[0],o=t[1],i=Array.isArray(o)||o&&"object"==typeof o&&"number"==typeof o.length;if(Array.isArray(n)&&!i)throw new Error(l(n,[o],["If an array is provided for the api, an array must be provided for the args as well."],{prefix:"apiCheck"}));var a=r(E.checkApiCheckApi,t);if(a.length){var s=e.getErrorMessage(E.checkApiCheckApi,t,a,{prefix:"apiCheck"});e.handleErrorMessage(s,!0)}}function o(t){return function(n,o,r){var i=e(n,o,r);return e.handleErrorMessage(i.message,t),i}}function i(t,e){if(e&&t)throw new Error(t);t&&console.warn(t)}function l(t,n){function o(){var t=s.onlyPrefix;return t||(t=((d.prefix||"")+" "+(s.prefix||"")).trim()),t}function r(){var t=s.onlySuffix;return t||(t=((s.suffix||"")+" "+(d.suffix||"")).trim()),t}function i(){var t=s.url;return t||(t=d.docsBaseUrl&&s.urlSuffix&&(""+d.docsBaseUrl+s.urlSuffix).trim()),t}var l=arguments.length<=2||void 0===arguments[2]?[]:arguments[2],s=arguments.length<=3||void 0===arguments[3]?{}:arguments[3],d=e.config.output||{},c=o(),p=r(),u=i(),f="apiCheck failed! "+l.join(", "),m="\n\n"+a(t,n);return(c+" "+f+" "+p+" "+(u||"")+m).trim()}function a(t,e){function n(t){m(t,function(e,o){d.indexOf(e)===-1&&(d.push(e),"object"==typeof e?n(t):"function"==typeof e&&(t[o]=e.displayName||e.name||"anonymous function"))})}function o(t){return t&&t.length?(t&&1===t.length&&(t=t[0]),u(t,null,2)):"nothing"}function r(){var t="\n",n=!0;e&&1===e.length&&(n="object"==typeof e[0]&&null!==e[0]&&!!Object.keys(e[0]).length);var o="type"+(n?"s":""),r=t+t;return"You passed:"+t+p+r+("With the "+o+":"+t+a+r)+("The API calls for:"+t+l)}var i=c(t,e),l=i.apiTypes,a=i.argTypes,s=Array.prototype.slice.call(e||[]),d=[];n(s);var p=o(s);return a=o(a),l=o(l),r()}function c(n,o){n=g(n),o=g(o);var r=n.map(function(n,r){var i=t.exports.globalConfig.hasOwnProperty("verbose");return h(n,{terse:i?!t.exports.globalConfig.verbose:!e.config.verbose,obj:o[r],addHelpers:!0})}),i=o.map(function(t){return d(t,[])});return{argTypes:i,apiTypes:r}}var p=arguments.length<=0||void 0===arguments[0]?{}:arguments[0],y=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];O&&arguments.length&&O.throw(E.getApiCheckInstanceCheckers,arguments,{prefix:"creating an apiCheck instance"});var v={throw:o(!0),warn:o(!1),getErrorMessage:l,handleErrorMessage:i,config:{output:p.output||{prefix:"",suffix:"",docsBaseUrl:""},verbose:p.verbose||!1,disabled:p.disabled||!1},utils:f};m(v,function(t,n){return e[n]=t});var b=e.disabled||t.exports.globalConfig.disabled;return m(x.getCheckers(b),function(t,n){return e[n]=t}),m(y,function(t,n){return e[n]=t}),e}function r(t,e){for(var n=[],o=!1,r=0,i=0,a=void 0,s=void 0,d=void 0,c=void 0,p=void 0,u=void 0,f=void 0;(s=t[r++])&&i=t.length,f=r>1&&t[r-1].isOptional,u&&c||u&&!c&&!s.isOptional&&!f?(o=!0,n.push(l(d,s,a))):u&&s.isOptional?i--:n.push(v(p)+" passed");return o?n:[]}function i(t,e,n){var o=x.shape({type:x.string,optional:x.bool}),r=x.func.withProperties({__apiCheckData:o}),l=x.shape({__apiCheckData:o}),a=x.oneOfType([r,l])(t,e,n);return y(a)?a:"function"==typeof t||t.hasOwnProperty(t.__apiCheckData.type)?void 0:C(e,n,i.type)}function l(t,e,n){var o=a(e,n);return o=o?" - "+o:"",t.message+o}function a(t,e){var n=t.help;return n?("function"==typeof n&&(n=n(e)),n):""}function s(t,e){var n=t.filter(function(t){return!t.isOptional});return e.length=0;o--)e[o][r[0]]===t&&(t=e[o],r.unshift(n[o]));return"~"+r.join(".")}function r(t,e,o,r){return JSON.stringify(t,n(e,r),o)}t.exports=r,r.getSerialize=n},function(t,e,n){"use strict";function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t){var e=i(t),n=void 0;if("array"===e)n=[];else{if("object"!==e)return t;n={}}return d(t,function(t,e){n[e]=t}),n}function i(t){return Array.isArray(t)?"array":t instanceof RegExp?"object":typeof t}function l(t,e){var n=void 0,o=e&&e.short;return n=o&&t.shortType?t.shortType:!o&&"object"==typeof t.type||"function"===t.type?a(t,e):a(t,e)||t.displayName||t.name}function a(t,e){var n=t.type;if("function"==typeof n){var r=n.__apiCheckData,i=n(e);n=o({__apiCheckData:r},r.type,i)}return n}function s(t){return t?Array.isArray(t)?t:[t]:[]}function d(t,e,n){return Array.isArray(t)?p(t,e,n):c(t,e,n)}function c(t,e,n){var o=void 0,r=Object.prototype.hasOwnProperty;for(var i in t)if(r.call(t,i)&&(o=e.call(n,t[i],i,t),o===!1))return o;return!0}function p(t,e,n){for(var o=void 0,r=t.length,i=0;in)return f(r,i,o)},{type:o},t)}function P(e){var n="lessThan["+e+"]";return h(function(t,o,r){if("number"!=typeof t||t>e)return f(o,r,n)},{type:n},t)}function k(e){var n="greaterThan["+e+"]";return h(function(t,o,r){if("number"!=typeof t||t" in it: '+t+"\nAdditional information: "+JSON.stringify(e))}var s=this;i.extend(this,{getFormlyError:o,getFieldError:n,checkWrapper:l,checkWrapperTemplate:a,$get:function(){return s}})}var r=function(t){return t&&t.__esModule?t.default:t},i=r(n(15));t.exports=o,o.$inject=["formlyApiCheck","formlyErrorAndWarningsUrlPrefix"]},function(t,e,n){"use strict";function o(t,e){function n(t){if(i.isArray(t))i.forEach(t,n);else{if(!i.isObject(t))throw P("You must provide an object or array for setType. You provided: "+JSON.stringify(arguments));o(t),t.extends&&r(t),_[t.name]=t}}function o(t){e.throw(e.formlyTypeOptions,t,{prefix:"formlyConfig.setType",url:"settype-validation-failed"}),t.overwriteOk?t.overwriteOk=void 0:h(t.name,_,t,"types")}function r(t){var e=u(t.extends,!0,t);s(t,e),d(t,e),c(t,e),p(t,e),l.reverseDeepMerge(t,e),a(t,e)}function a(t,e){t.template&&e.templateUrl?delete t.templateUrl:t.templateUrl&&e.template&&delete t.template}function s(t,e){var n=e.controller;if(i.isDefined(n)){var o=t.controller;i.isDefined(o)?(t.controller=function(t,e){e(n,{$scope:t}),e(o,{$scope:t})},t.controller.$inject=["$scope","$controller"]):t.controller=n}}function d(t,e){var n=e.link;if(i.isDefined(n)){var o=t.link;i.isDefined(o)?t.link=function(){n.apply(void 0,arguments),o.apply(void 0,arguments)}:t.link=n}}function c(t,e){var n=e.validateOptions;if(i.isDefined(n)){var o=t.validateOptions,r=t.defaultOptions;i.isDefined(o)?t.validateOptions=function(t){o(t);var e=i.copy(t),a=r;a&&(i.isFunction(a)&&(a=a(e)),l.reverseDeepMerge(e,a)),n(e)}:t.validateOptions=n}}function p(t,e){var n=e.defaultOptions;if(i.isDefined(n)){var o=t.defaultOptions,r=i.isFunction(o),a=i.isFunction(n);a?t.defaultOptions=function(t){var e=n(t),i={};l.reverseDeepMerge(i,t,e);var a=o;return r&&(a=a(i)),l.reverseDeepMerge(e,a),e}:r&&(t.defaultOptions=function(t){var e={};return l.reverseDeepMerge(e,t,n),o(e)})}}function u(t,e,n){if(t){var o=_[t];if(o||e!==!0)return o;throw P('There is no type by the name of "'+t+'": '+JSON.stringify(n))}}function f(t,e){for(var n=!0;n;){n=!1;var o=t,r=e;if(i.isArray(o))return o.map(function(t){return f(t)});if(i.isObject(o))return o.types=m(o),o.name=y(o,r),v(o),M[o.name]=o,o;i.isString(o)&&(t={template:o,name:r},n=!0)}}function m(t){return i.isString(t.types)?[t.types]:i.isDefined(t.types)?t.types:[]}function y(t,e){return t.name||e||t.types.join(" ")||w}function v(e){t.checkWrapper(e),e.template&&t.checkWrapperTemplate(e.template,e),e.overwriteOk?delete e.overwriteOk:h(e.name,M,e,"templateWrappers"),g(e)}function g(t){var e=!i.isArray(t.types)||!t.types.every(i.isString);if(e)throw P("Attempted to create a template wrapper with types that is not a string or an array of strings")}function h(t,e,n,o){e.hasOwnProperty(t)&&O(["Attempting to overwrite "+t+" on "+o+" which is currently",""+JSON.stringify(e[t])+" with "+JSON.stringify(n),'To supress this warning, specify the property "overwriteOk: true"'].join(" "))}function b(t){return M[t||w]}function C(t){var e=[];for(var n in M)M.hasOwnProperty(n)&&M[n].types&&M[n].types.indexOf(t)!==-1&&e.push(M[n]);return e}function x(t){var e=M[t];return delete M[t],e}function E(t){var e=C(t);if(e)return i.isArray(e)?(e.forEach(function(t){return x(t.name)}),e):x(e.name)}function O(){D.disableWarnings||console.warn.apply(console,arguments)}var T=this,_={},M={},w="default",D=this,P=t.getFormlyError;i.extend(this,{setType:n,getType:u,setWrapper:f,getWrapper:b,getWrapperByType:C,removeWrapperByName:x,removeWrappersForType:E,disableWarnings:!1,extras:{disableNgModelAttrsManipulator:!1,ngModelAttrsManipulatorPreferUnbound:!1,removeChromeAutoComplete:!1,defaultHideDirective:"ng-if",getFieldId:null},templateManipulators:{preWrapper:[],postWrapper:[]},$get:function(){return T}})}var r=function(t){return t&&t.__esModule?t.default:t},i=r(n(15)),l=r(n(18));t.exports=o,o.$inject=["formlyUsabilityProvider","formlyApiCheck"]},function(t,e,n){"use strict";function o(){function t(t,e,r,i,l){o.messages[t]=n(e,r,i,l)}function e(t,e){o.messages[t]=function(){return e}}function n(t,e,n,o){return function(r,i,l){return l.options.templateOptions[t]?""+e+" "+l.options.templateOptions[t]+" "+n:o}}var o={addTemplateOptionValueMessage:t,addStringMessage:e,messages:{}};return o}t.exports=o},function(t,e,n){"use strict";function o(){return i}var r=function(t){return t&&t.__esModule?t.default:t},i=r(n(18));t.exports=o},function(t,e,n){"use strict";function o(t,e,n){return function(){if(!t.disableWarnings){var o=Array.prototype.slice.call(arguments),i=o.shift();o.unshift("Formly Warning:"),o.push(""+e+i),n.warn.apply(n,r(o))}}}var r=function(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e\n \n ")}function a(){t.options.elementAttributes&&o.attr(t.options.elementAttributes)}function d(){t.options.className&&o.addClass(t.options.className),t.options.type&&o.addClass("formly-field-"+t.options.type)}function p(e){return o.html(f(e)),n(o.contents())(t),e}function u(e){function n(t){var e=/\{\{(.*?)}}/,n=e.exec(t);n?o(n[1]):l(t)}function o(e){t.$watch(e,function(t){t&&(d(),l(t))})}function l(e){d=t.$watch('form["'+e+'"]',function(e){e&&(t.fc=e,t.options.formControl=e,c(),a())})}function a(){c=t.$watch(function(){var e=r.extras.errorExistsAndShouldBeVisibleExpression,n=t.options,o=t.fc;if(o.$invalid){if("boolean"==typeof n.validation.show)return n.validation.show;if(e)return s.formlyEval(t,e,o.$modelValue,o.$viewValue);var l=i.isUndefined(o.$touched)&&o.$dirty; +return t.fc.$touched||l}return!1},function(e){t.options.validation.errorExistsAndShouldBeVisible=e,t.showError=e})}var d=i.noop,c=i.noop;if(!t.options.noFormControl){var p=i.element("
    "+e+"
    "),u=p[0].querySelector("[ng-model],[data-ng-model]");u&&u.getAttribute("name")&&n(u.getAttribute("name"))}}function v(){b&&b.link&&b.link.apply(E,C),t.options.link&&t.options.link.apply(E,C)}function h(n){return function(o){var r=e.when(o);return i.forEach(n,function(n){r=r.then(function(o){return e.when(n(o,t.options,t)).then(function(t){return i.isString(t)?t:f(t)})})}),r}}if(t.options.fieldGroup)return void l();a(),d();var b=m(t.options),C=arguments,E=this;y(t.options).then(h(r.templateManipulators.preWrapper)).then(g(t.options)).then(h(r.templateManipulators.postWrapper)).then(p).then(u).then(v).catch(function(e){c("there-was-a-problem-setting-the-template-for-this-field","There was a problem setting the template for this field ",t.options,e)})}function f(t){var e=i.element("");return e.append(t).html()}function m(t){return t.type&&r.getType(t.type)}function y(t){function e(e,n){return i.isDefined(t[e])?t[e]:n&&i.isDefined(n[e])?n[e]:void 0}var n=r.getType(t.type,!0,t),o=e("template",n),l=e("templateUrl",n);if(i.isUndefined(o)&&!l)throw d.getFieldError("type-type-has-no-template","Type '"+t.type+"' has not template. On element:",t);return v(l||o,i.isUndefined(o),t)}function v(n,r,l){var a=void 0;if(a=i.isFunction(n)?e.when(n(l)):e.when(n),!r)return a;var s=function(){var e={cache:o};return{v:a.then(function(n){return t.get(n,e)}).then(function(t){return t.data}).catch(function(t){c("problem-loading-template-for-templateurl","Problem loading template for "+n,t)})}}();return"object"==typeof s?s.v:void 0}function g(t){var n=b(t);return function(o){if(!n.length)return e.when(o);n.forEach(function(e){d.checkWrapper(e,t),e.validateOptions&&e.validateOptions(t),E(e,t)});var r=n.map(function(t){return v(t.template||t.templateUrl,!t.template)});return e.all(r).then(function(t){t.forEach(function(t,e){d.checkWrapperTemplate(t,n[e])}),t.reverse();var e=t.shift();return t.forEach(function(t){e=h(e,t)}),h(e,o)})}}function h(t,e){var n=i.element("");n.append(t);var o=n.find("formly-transclude");return o.length||(o=s.findByNodeName(n,"formly-transclude")),o.replaceWith(e),n.html()}function b(t){var e=t.wrapper;if(null===e)return[];e=e?O(e).map(r.getWrapper):O(r.getWrapperByType(t.type));var n=r.getType(t.type,!0,t);if(n&&n.wrapper){var o=O(n.wrapper).map(r.getWrapper);e=e.concat(o)}var i=r.getWrapper();return i&&e.push(i),e}function C(t){a.throw(a.formlyFieldOptions,t,{prefix:"formly-field directive",url:"formly-field-directive-validation-failed"});var e=t.type&&r.getType(t.type);e&&(e.validateOptions&&e.validateOptions(t),E(e,t))}function x(t){a.throw(a.fieldGroup,t,{prefix:"formly-field directive",url:"formly-field-directive-validation-failed"})}function E(t,e){var n=t.apiCheck,o=t.apiCheckInstance,r=t.apiCheckFunction,i=t.apiCheckOptions;if(n){var l=o||a,s=r||"warn",d=l.shape(n);l[s](d,e,i||{prefix:"formly-field "+name,url:a.config.output.docsBaseUrl+"formly-field-type-apicheck-failed"})}}var O=s.arrayify;return p.$inject=["$scope","$timeout","$parse","$controller"],{restrict:"AE",transclude:!0,scope:{options:"=",model:"=",formId:"@",index:"=?",fields:"=?",formState:"=?",form:"=?"},controller:p,link:u}}var r=function(t){return t&&t.__esModule?t.default:t},i=r(n(15));t.exports=o,o.$inject=["$http","$q","$compile","$templateCache","formlyConfig","formlyValidationMessages","formlyApiCheck","formlyUtil","formlyUsability","formlyWarn"]},function(t,e,n){"use strict";function o(t,e){return{restrict:"A",link:function(n,o,r){var i=null,l=o[0],a=e[0];r.$observe("formlyFocus",function(e){"true"===e?t(function(){i=a.activeElement,l.focus()},~~r.focusWait):"false"===e&&a.activeElement===l&&(l.blur(),r.hasOwnProperty("refocus")&&i&&i.focus())})}}}t.exports=o,o.$inject=["$timeout","$document"]},function(t,e,n){"use strict";function o(t,e,n,o){var r=1;return{restrict:"E",template:function(e,n){function i(){return n.rootEl||"ng-form"}function l(){return n.fieldRootEl||"div"}function s(){return n.hideDirective||o.extras.defaultHideDirective||"ng-if"}function d(){return n.trackBy?"track by "+n.trackBy:""}function c(){var e=y,o=n.bindName;if(o){if(a.version.minor<3)throw t.getFormlyError("bind-name attribute on formly-form not allowed in > angular 1.3");e="{{::'formly_' + "+o+"}}"}return e}function p(t){var e=["model","form","fields","options","name","role","class"],n=[];return a.forEach(t,function(t){var o=t.nodeName,r=t.nodeValue;"undefined"!==o&&e.indexOf(o)===-1&&n.push(""+u(o)+'="'+r+'"')}),n.join(" ")}function u(t){return t?t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()}):""}var f=i(),m=l(),y="formly_"+r++,v="";return n.hasOwnProperty("isFieldGroup")&&e.parent().parent().hasClass("formly")&&(v=p(e.parent().parent()[0].attributes)),"\n <"+f+' class="formly"\n name="'+c()+'"\n role="form" '+v+">\n <"+m+' formly-field\n ng-repeat="field in fields '+d()+'"\n '+s()+'="!field.hide"\n class="formly-field"\n options="field"\n model="field.model || model"\n fields="fields"\n form="theFormlyForm"\n form-id="'+c()+'"\n form-state="options.formState"\n index="$index">\n \n
    \n \n "},replace:!0,transclude:!0,scope:{fields:"=",model:"=",form:"=?",options:"=?"},controller:["$scope","formlyUtil",function(e,o){function r(){a.forEach(e.fields,function(t,n){var r=t.model||e.model;if(t.runExpressions&&t.runExpressions(r),t.hideExpression){var i=r[t.key],l={options:t,index:n,formState:e.options.formState,formId:e.formId};t.hide=o.formlyEval(e,t.hideExpression,i,i,l)}})}function s(){n.throw([n.formOptionsApi.optional],[e.options],{prefix:"formly-form options check"}),e.options=e.options||{},e.options.formState=e.options.formState||{},a.extend(e.options,{updateInitialValue:d,resetModel:c})}function d(){a.forEach(e.fields,function(t){g(t)?t.options.updateInitialValue():t.updateInitialValue()})}function c(){a.forEach(e.fields,function(t){g(t)?t.options.resetModel():t.resetModel()})}function p(t){t.model&&"formState"===t.model&&(t.model=e.options.formState)}function u(t,e){g(t)||(t.key=t.key||e||0)}function f(n,o){if(!g(n)&&a.isDefined(n.watcher)){var r=n.watcher;a.isArray(r)||(r=[r]),a.forEach(r,function(r){if(!a.isDefined(r.listener))throw t.getFieldError("all-field-watchers-must-have-a-listener","All field watchers must have a listener",n);var i=m(r,n,o),l=y(r,n,o),s=r.type||"$watch";r.stopWatching=e[s](i,l,r.watchDeep)})}}function m(t,e,n){var o=t.expression||"model['"+e.key+"']";if(a.isFunction(o)){var r=o;o=function(){var e=v.apply(void 0,[t,n].concat(l.call(arguments)));return r.apply(void 0,i(e))},o.displayName="Formly Watch Expression for field for "+e.key}return o}function y(t,e,n){var o=t.listener;if(a.isFunction(o)){var r=o;o=function(){var e=v.apply(void 0,[t,n].concat(l.call(arguments)));return r.apply(void 0,i(e))},o.displayName="Formly Watch Listener for field for "+e.key}return o}function v(t,n){for(var o=arguments.length,r=Array(o>2?o-2:0),i=2;i";var o=1===n.getElementsByTagName("i").length;if(o){var r=["formly-field","formly-form","formly-custom-validation","formly-focus","formly-transpose"];angular.forEach(r,function(t){e.createElement(t)})}}()}t.exports=o,o.$inject=["$document"]},function(t,e,n){"use strict";var o=function(t){return t&&t.__esModule?t.default:t},r=o(n(17));r.version||(r=window.angular),t.exports=r},function(e,n,o){e.exports=t},function(t,n,o){t.exports=e},function(t,e,n){"use strict";function o(t,e,n,o,r){return p.isFunction(e)?e(o,n,t,r):t.$eval(e,p.extend({$viewValue:o,$modelValue:n},r))}function r(t,e,n){if(e.id)return e.id;var o=e.type;return!o&&e.template?o="template":!o&&e.templateUrl&&(o="templateUrl"),[t,o,e.key,n].join("_")}function i(t){p.forEach(arguments,function(e,n){n&&p.forEach(e,function(e,n){p.isDefined(t[n])?l(t[n],e)&&i(t[n],e):t[n]=p.copy(e)})})}function l(t,e){return p.isObject(t)&&p.isObject(e)&&Object.getPrototypeOf(t)===Object.getPrototypeOf(e)}function a(t,e){if(t.prop||(t=p.element(t)),t.prop("nodeName")===e.toUpperCase())return t;for(var n=t.children(),o=0;n&&o0&&e;t.fc.$setValidity("required",n)}function n(){t.model[r.key]=[],angular.forEach(t.multiCheckbox.checked,function(e,n){e&&t.model[r.key].push(o.options[n][o.valueProp||"value"])}),t.fc.$setTouched(),e(!0)}var o=t.to,r=t.options;t.multiCheckbox={checked:[],change:n};var i=t.model[r.key];if(angular.isArray(i)&&!function(){var e=o.valueProp||"value";angular.forEach(o.options,function(n,o){t.multiCheckbox.checked[o]=i.indexOf(n[e])!==-1})}(),r.expressionProperties&&r.expressionProperties.required&&t.$watch(t.options.expressionProperties.required,function(t){e(t)}),t.to.required){t.$watch("fc",function(t){t&&e(!0)})}}]})}t.config(e),e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(e,n,o){e.exports=t},function(t,n,o){t.exports=e},function(t,e,n){"use strict";var o=n(8);o.version||(o=window.angular),t.exports=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var o=e;t.setWrapper([{name:"bootstrapLabel",template:n(17),apiCheck:{templateOptions:o.shape({label:o.string,required:o.bool.optional})},apiCheckInstance:o},{name:"bootstrapHasError",template:n(18)}])}t.config(e),e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){n(10)(t),n(1)(t),n(12)(t),n(9)(t),n(13)(t),n(14)(t)},t.exports=e.default},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=o(r),l=n(16),a=o(l);e.default=function(t){(0,i.default)(t),(0,a.default)(t)},t.exports=e.default},function(t,e,o){t.exports=n},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var o=e;t.setType({name:"radio",template:n(19),wrapper:["bootstrapLabel","bootstrapHasError"],defaultOptions:{noFormControl:!1},apiCheck:{templateOptions:o.shape({options:o.arrayOf(o.object),labelProp:o.string.optional,valueProp:o.string.optional})},apiCheckInstance:o})}t.config(e),e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var o=e;t.setType({name:"checkbox",template:n(20),wrapper:["bootstrapHasError"],apiCheck:{templateOptions:o.shape({label:o.string})},apiCheckInstance:o})}t.config(e),e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var o="formlyBootstrap",r=n(4),i=r.module(o,[n(2)]);i.constant("formlyBootstrapApiCheck",n(3)({output:{prefix:"angular-formly-bootstrap"}})),i.constant("formlyBootstrapVersion","4.3.2"),n(5)(i),n(6)(i),n(7)(i),e.default=o,t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t){t.setType({name:"input",template:'',wrapper:["bootstrapLabel","bootstrapHasError"]})}t.config(e),e.$inject=["formlyConfigProvider"]},t.exports=e.default},function(t,e,n){"use strict";function o(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var r=e;t.setType({name:"select",template:n,wrapper:["bootstrapLabel","bootstrapHasError"],defaultOptions:function(t){var e=t.templateOptions.ngOptions||"option[to.valueProp || 'value'] as option[to.labelProp || 'name'] group by option[to.groupProp || 'group'] for option in to.options";return{ngModelAttrs:o({},e,{value:"ng-options"})}},apiCheck:{templateOptions:r.shape({options:r.arrayOf(r.object),labelProp:r.string.optional,valueProp:r.string.optional,groupProp:r.string.optional})},apiCheckInstance:r})}t.config(e);var n='';e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var n=e;t.setType({name:"textarea",template:'',wrapper:["bootstrapLabel","bootstrapHasError"],defaultOptions:{ngModelAttrs:{rows:{attribute:"rows"},cols:{attribute:"cols"}}},apiCheck:{templateOptions:n.shape({rows:n.number.optional,cols:n.number.optional})},apiCheckInstance:n})}t.config(e),e.$inject=["formlyConfigProvider","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t,e){var o=n(22),r=e.shape({class:e.string.optional,text:e.string.optional,onClick:e.func.optional}).strict.optional,i=e.shape({templateOptions:e.shape({addonLeft:r,addonRight:r})});t.templateManipulators.preWrapper.push(function(t,n){return n.templateOptions.addonLeft||n.templateOptions.addonRight?(e.warn([i],[n]),o.replace("",t)):t})}t.run(e),e.$inject=["formlyConfig","formlyBootstrapApiCheck"]},t.exports=e.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function(t){function e(t){t.templateManipulators.preWrapper.push(function(t,e,n){if(angular.isDefined(e.templateOptions.description)){var o=document.createElement("div");o.appendChild(angular.element(t)[0]),o.appendChild(angular.element('

    {{to.description}}

    ')[0]);var r=angular.element(o.querySelectorAll("[ng-model]"));return r&&r.attr("aria-describedby",n.id+"_description"),o.innerHTML}return t})}t.run(e),e.$inject=["formlyConfig"]},t.exports=e.default},function(t,e,n){t.exports="
    \n \n \n
    \n"},function(t,e,n){t.exports='
    \n \n
    \n'},function(t,e,n){t.exports='
    \n
    \n \n
    \n
    \n'},function(t,e,n){t.exports='
    \n\t\n
    \n'},function(t,e,n){t.exports='
    \n
    \n \n
    \n
    \n'},function(t,e,n){t.exports='
    \n
    \n \n {{to.addonLeft.text}}\n
    \n \n
    \n \n {{to.addonRight.text}}\n
    \n
    \n'}])})},function(t,e){},,,,function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),i=o(r),l=n(12),a=o(l),s=n(14),d=o(s),c=n(15),p=o(c),u=n(49),f=o(u),m=n(53),y=o(m),v=n(67),g=o(v),h=n(70),b=o(h),C=n(72),x=o(C),E=n(75),O=o(E),T=n(77),_=o(T),M=n(84),w=o(M),D="eda.easyformGen.dragDropWay",P=[d.default.name,b.default.name,w.default.name,p.default.name,f.default.name,y.default.name,_.default.name,g.default.name,x.default.name,O.default.name],k=angular.module(D,P).config(a.default).config(i.default).value(l.EASY_FORM_DD_VERSION_NAME,l.EASY_FORM_DD_VERSION_VALUE);e.default=k},function(t,e){"use strict";function n(t,e,n){function o(t){return t=t.replace(/[\-_\s]+(.)?/g,function(t,e){return e?e.toUpperCase():""}),t.replace(/^([A-Z])/,function(t,e){return e?e.toLowerCase():""})}t.setType({name:"blank",template:"
    "}),e.addEasyFormControlToList({id:"empty",name:"no control",subtitle:"no control",group:"Blank",formlyType:"blank",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'
    \n
    \n
    \n
    \n
    \n
    ',control:"empty",cssClass:"col-xs-12"},{addToGroupCtrl:"blank"}),e.addEasyFormControlToList({id:"Header",name:"Header",subtitle:"no control",group:"Decoration",formlyType:"header",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:['
    \n
    \n
    \n

    Header

    \n
    \n
    \n
    \n
    '].join(""),control:"Header",cssClass:"col-xs-12"},{addToGroupCtrl:"headers"});var r='\n
    \n
    \n

    {{options.templateOptions.placeholder}}

    \n
    \n

    \n
    ';t.setType({name:"subTitle",template:r}),e.addEasyFormControlToList({id:"Subtitle",name:"Subtitle",subtitle:"no control",group:"Decoration",formlyType:"subTitle",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'
    \n
    \n
    \n

    SubTitle

    \n
    \n
    \n
    \n
    ',control:"Subtitle",cssClass:"col-xs-12"},{addToGroupCtrl:"headers"}),e.addEasyFormControlToList({id:"TextInput",name:"Text input",subtitle:"Text input",group:"input",formlyType:"input",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'
    \n
    \n \n
    \n \n

    Description

    \n
    \n
    \n
    ',control:"TextInput",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"}),e.addEasyFormControlToList({id:"Password",name:"Password",subtitle:"Password",group:"input",formlyType:"input",formlySubtype:"password",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'
    \n
    \n \n
    \n \n

    Description

    \n
    \n
    \n
    ',control:"Password",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"});var i=["date-disabled","custom-class","show-weeks","starting-day","init-date","min-mode","max-mode","format-day","format-month","format-year","format-day-header","format-day-title","format-month-title","year-range","shortcut-propagation","uib-datepicker-popup","show-button-bar","current-text","clear-text","close-text","close-on-date-selection","datepicker-append-to-body"],l=["datepicker-mode","min-date","max-date"],a={};angular.forEach(i,function(t){return a[o(t)]={attribute:t}}),angular.forEach(l,function(t){return a[o(t)]={bound:t}});var s='\n ';t.setType({name:"datepicker",template:s,wrapper:["bootstrapLabel","bootstrapHasError"],controller:["$scope",function(t){t.open=function(e){e.preventDefault(),e.stopPropagation(),t.opened=!0}}],defaultOptions:{ngModelAttrs:a,templateOptions:{addonLeft:{class:"glyphicon glyphicon-calendar",onClick:function(t){return t.templateOptions.isOpen=!t.templateOptions.isOpen}},onFocus:function(t,e,n){return n.to.isOpen=!n.to.isOpen},datepickerOptions:{}}}}),e.addEasyFormControlToList({id:"Date",name:"Date",subtitle:"Date",group:"input",formlyType:"datepicker",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[],datepickerPopup:"dd-MMMM-yyyy"}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n\t\t\t\t\t
    \n \t\t\t\t\t\n \t\t\t\t\t\n\t\t\t\t\t
    \n\t\t\t\t
    \n

    description

    \n
    \n
    ',control:"Date",cssClass:"col-xs-12"},{addToGroupCtrl:"inputs"}),e.addEasyFormControlToList({id:"Texarea",name:"Textarea",subtitle:"Textarea",group:"Textarea",formlyType:"textarea",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n \n

    description

    \n
    \n
    \n
    ',control:"Texarea",cssClass:"col-xs-12"},{addToGroupCtrl:"textareas"});var d='\n \n ';t.setType({name:"richEditor",template:d}),e.addEasyFormControlToList({id:"RichTextEditor",name:"RichTextEditor",subtitle:"RichTextEditor",group:"Textarea",formlyType:"richEditor",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n \n

    description

    \n
    \n
    \n
    ',control:"RichTextEditor",cssClass:"col-xs-12"},{addToGroupCtrl:"textareas"}),e.addEasyFormControlToList({id:"Radio",name:"Radio",subtitle:"Radio",options:[],group:"Radio",formlyType:"radio",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n

    description

    \n
    \n
    \n
    ',control:"Radio",cssClass:"col-xs-12"},{addToGroupCtrl:"radios"}),e.addEasyFormControlToList({id:"Checkbox",name:"Checkbox",subtitle:"Checkbox",group:"Checkbox",formlyType:"checkbox",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n \n
    \n

    description

    \n
    ', +control:"Checkbox",cssClass:"col-xs-12"},{addToGroupCtrl:"checkboxes"});var c='\n
      \n
    1. \n {{option.name}}\n
    2. \n
    ';t.setType({name:"basicSelect",template:c}),e.addEasyFormControlToList({id:"BasicSelect",name:"Basic select",subtitle:"Basic select",options:[],group:"Select",formlyType:"basicSelect",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n
    \n\n
      \n\n \n\n
    \n
    ',control:"BasicSelect",cssClass:"col-xs-12"},{addToGroupCtrl:"selects"});var p='\n
      \n
    1. \n {{$group}}\n \n {{option.name}}\n \n \n
    2. \n
    ';t.setType({name:"groupedSelect",template:p}),e.addEasyFormControlToList({id:"GroupedSelect",name:"Grouped Select",subtitle:"Grouped Select",options:[],group:"Select",formlyType:"groupedSelect",formlySubtype:"",formlyLabel:"",formlyRequired:!1,formlyDescription:"",formlyOptions:[]}),n.addControlToDragDropPresentationModel({label:'\n
    \n
    \n
    \n
      \n \n
    \n
    ',control:"GroupedSelect",cssClass:"col-xs-12"},{addToGroupCtrl:"selects"})}Object.defineProperty(e,"__esModule",{value:!0}),n.$inject=["formlyConfigProvider","EasyFormGenFormlyBindingModelsProvider","easyFormDragWayConfigProvider"],e.default=n},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t){t.setItemsNotTocount({itemBeingDragged:"dndDraggingSource"})}Object.defineProperty(e,"__esModule",{value:!0}),e.EASY_FORM_DD_VERSION_VALUE=e.EASY_FORM_DD_VERSION_NAME=void 0;var i=n(13),l=o(i),a="easyFormGenVersion",s=l.default.dragdropway.version;r.$inject=["easyFormDragWayConfigProvider"],e.default=r,e.EASY_FORM_DD_VERSION_NAME=a,e.EASY_FORM_DD_VERSION_VALUE=s},function(t,e){t.exports={stepway:{version:"2.1.4"},dragdropway:{version:"2.1.4"},formviewer:{version:"2.1.4"}}},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=["textAngular","textAngularSetup","ngAnimate","toaster","formly","formlyBootstrap","ui.bootstrap","nya.bootstrap.select","mgcrea.ngStrap.affix"];e.default=angular.module("easyFormGen.dragDropWay.core",n)},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(16),i=o(r),l=n(18),a=o(l),s=n(20),d=o(s),c=n(22),p=o(c),u=n(23),f=o(u),m=n(25),y=o(m),v=n(27),g=o(v),h=n(29),b=o(h),C=n(31),x=o(C),E=n(33),O=o(E),T=n(35),_=o(T),M=n(37),w=o(M),D=n(39),P=o(D),k=n(41),R=o(k),F=n(43),I=o(F),L=n(45),A=o(L),S=n(47),N=o(S),$="edaDragDropWay.leftPanel.module";e.default=angular.module($,[]).directive(l.LEFT_PANEL_DIRECTIVE,a.default).controller(r.LEFT_PANEL_CONTROLLER,i.default).service(s.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE,d.default).service(c.CONTROLLER_MODAL_PROXY,p.default).directive(u.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE,f.default).directive(m.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE,y.default).directive(v.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE,g.default).directive(h.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE,b.default).directive(C.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE,x.default).directive(E.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE,O.default).directive(T.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE,_.default).directive(M.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE,w.default).directive(D.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE,P.default).directive(k.LEFT_PANEL_DATE_CONTROL_DIRECTIVE,R.default).directive(F.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE,I.default).directive(L.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE,A.default).directive(S.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE,N.default)},function(t,e,n){"use strict";function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_CONTROLLERAS=e.LEFT_PANEL_CONTROLLER=void 0;var r=function(){function t(t,e){for(var n=0;n=0;t--)this.proxyModel.controls[t].id===this.proxyModel.temporyConfig.selectedControl&&(this.modelproxyModel=this.proxyModel.controls[t]);"BasicSelect"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindBasicSelectFromProxyModel(self.basicSelectRowCollection),"GroupedSelect"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindGroupedSelectFromProxyModel(this.groupedSelectRowCollection,this.GroupedSelectGroups),"Radio"===this.proxyModel.temporyConfig.selectedControl&&this.controllerModalProxy.bindRadioFromProxyModel(this.radioRowCollection)}}},{key:"updateSpecialControl",value:function(){return this.proxyModel.basicSelectRowCollection=this.basicSelectRowCollection,this.proxyModel.newOptionBasicSelect=this.newOptionBasicSelect,this.proxyModel.groupedSelectRowCollection=this.groupedSelectRowCollection,this.proxyModel.newOptionGroupedSelect=this.newOptionGroupedSelect,this.proxyModel.GroupedSelectGroups=this.GroupedSelectGroups,this.proxyModel.newGroupGroupedSelect=this.newGroupGroupedSelect,this.proxyModel.groupSelectGroupClick=this.groupSelectGroupClick,this.proxyModel.radioRowCollection=this.radioRowCollection,this.proxyModel.newOptionRadio=this.newOptionRadio,this.controllerModalProxy.bindSpecialCtrlTemporyModelsToProxyModel(),!0}},{key:"resetTemporyConfig",value:function(){this.proxyModel.temporyConfig={formlyLabel:"",formlyRequired:!1,formlyPlaceholder:"",formlyDescription:"",formlyOptions:[]}}},{key:"resetControl",value:function(){this.proxyModel.temporyConfig.formlyLabel="",this.proxyModel.temporyConfig.formlyRequired=!1,this.proxyModel.temporyConfig.formlyPlaceholder="",this.proxyModel.temporyConfig.formlyDescription="",this.proxyModel.temporyConfig.formlyOptions=[],this.proxyModel.temporyConfig.datepickerPopup=this.initDatePicker()}},{key:"initDatePicker",value:function(){this.proxyModel.temporyConfig.datepickerPopup=this.demodt.formats[0]}},{key:"selectThisControl",value:function(t){this.proxyModel.selectedControl="none",this.resetTemporyConfig();for(var e=this.proxyModel.controls.length-1;e>=0;e--)this.proxyModel.controls[e].id===t&&(this.proxyModel.selectedControl=this.proxyModel.controls[e].id);"Date"===this.proxyModel.selectedControl&&this.initDatePicker()}},{key:"addNewOptionRadio",value:function(){var t=this.$selectOptionMange.addNewOptionRadio(this.radioRowCollection,this.newOptionRadio.saisie);t.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:t.details,body:"'"+this.newOptionRadio.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionRadio={saisie:""}}},{key:"removeRadioRow",value:function(t){var e=this.$selectOptionMange.removeOption(this.radioRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisRadioRow",value:function(t){var e=this.$selectOptionMange.upthisOption(this.radioRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisRadioRow",value:function(t){var e=this.$selectOptionMange.downthisOption(this.radioRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"addNewOptionBasicSelect",value:function(){var t=this.$selectOptionMange.addNewOptionBasicSelect(this.basicSelectRowCollection,this.newOptionBasicSelect.saisie);t.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:t.details,body:"'"+this.newOptionBasicSelect.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionBasicSelect={saisie:""}}},{key:"removeRow",value:function(t){var e=this.$selectOptionMange.removeOption(this.basicSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisRow",value:function(t){var e=this.$selectOptionMange.upthisOption(this.basicSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisRow",value:function(t){var e=this.$selectOptionMange.downthisOption(this.basicSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"showGroupListToChoose",value:function(){this.groupSelectGroupClick.showList=!this.groupSelectGroupClick.showList}},{key:"addNewGroupToGroupedSelect",value:function(){if(""!==this.newGroupGroupedSelect.saisie){for(var t=this.GroupedSelectGroups.list.length-1;t>=0;t--)this.GroupedSelectGroups.list[t]===this.newGroupGroupedSelect.saisie&&this.toaster.pop({type:"warning",timeout:2e3,title:"Group already exists",body:"No group added.",showCloseButton:!0});this.GroupedSelectGroups.list.push(this.newGroupGroupedSelect.saisie)}else this.toaster.pop({type:"warning",timeout:2e3,title:"Not a valid group to add",body:"No group added.",showCloseButton:!0});this.newGroupGroupedSelect.saisie=""}},{key:"addNewOptionGroupedSelect",value:function(){var t=this.$selectOptionMange.addNewOptionGroupedSelect(this.groupedSelectRowCollection,this.newOptionGroupedSelect.saisie,"");t.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:t.details,body:"'"+this.newOptionGroupedSelect.saisie+"' cannot be added.",showCloseButton:!0}),this.newOptionGroupedSelect={saisie:""}}},{key:"removeGroupedSelectRow",value:function(t){var e=this.$selectOptionMange.removeOption(this.groupedSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Delete was cancelled.",showCloseButton:!0})}},{key:"upThisGroupedSelectRow",value:function(t){var e=this.$selectOptionMange.upthisOption(this.groupedSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"downThisGroupedSelectRow",value:function(t){var e=this.$selectOptionMange.downthisOption(this.groupedSelectRowCollection,t);e.resultFlag===!1&&this.toaster.pop({type:"warning",timeout:2e3,title:e.details,body:"Operation cancelled.",showCloseButton:!0})}},{key:"today",value:function(){(0,i.setToday)(this.demodt)}},{key:"clear",value:function(){(0,i.clearDateTime)(this.demodt)}},{key:"open",value:function(t){t.preventDefault(),t.stopPropagation(),this.demodt.opened=!0}}]),t}();s.$inject=["toaster","$timeout","$selectOptionMange","controllerModalProxy"],e.default=s,e.LEFT_PANEL_CONTROLLER=l,e.LEFT_PANEL_CONTROLLERAS=a},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=["dd-MMMM-yyyy","yyyy/MM/dd","dd.MM.yyyy","shortDate"],o=function(t){t.dt=new Date},r=function(t){t.dt=new Date};e.dateFormats=n,e.setToday=o,e.clearDateTime=r},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:a.default,scope:{},controller:i.LEFT_PANEL_CONTROLLER,controllerAs:i.LEFT_PANEL_CONTROLLERAS,bindToController:{closeEditPanel:"&",selectedControl:"&",saveFromEditPanel:"&"}};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_DIRECTIVE=void 0;var i=n(16),l=n(19),a=o(l),s="leftPanel";r.$inject=[],e.default=r,e.LEFT_PANEL_DIRECTIVE=s},function(t,e){t.exports='
    \n\t
    \n\t\t\n\t\t\t
    \n\t
    \n\t
    \n\t\t
    \n\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\t
    \n \n  \n Select a control\n
    \n\t\t\t\t
    \n\t\t\t
    \n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t\t
    \n\t\t\t\n\t\t
    \n\t
    \n\t\n Close\n \n
    \n'},function(t,e,n){"use strict";function o(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_SELECT_OPTION_MANAGE_SERVICE=void 0;var i=function(){function t(t,e){for(var n=0;n=0;n--)if(t.rows[n].option===e)return!1;return!0}},{key:"isOptionValidFormat",value:function(t){return""!==t}},{key:"addNewOptionRadio",value:function(t,e){var n={resultFlag:!1,details:""},o=a.validOption(t,e);if(o.resultFlag===!0){var r={option:e,order:t.rows.length};return t.rows.push(r),n.resultFlag=!0,n.details="",n}return angular.copy(o,n),n}},{key:"addNewOptionBasicSelect",value:function(t,e){var n={resultFlag:!1,details:""},o=a.validOption(t,e);if(o.resultFlag===!0){var r={option:e,order:t.rows.length};return t.rows.push(r),n.resultFlag=!0,n.details="",n}return angular.copy(o,n),n}},{key:"addNewOptionGroupedSelect",value:function(t,e,n){var o={resultFlag:!1,details:""},r=a.validOption(t,e);if(r.resultFlag===!0){var i={option:e,group:n,order:t.rows.length};return t.rows.push(i),o.resultFlag=!0,o.details="",o}return angular.copy(r,o),o}},{key:"removeOption",value:function(t,e){var n={resultFlag:!1,details:""};return e!==-1?(t.rows.splice(e,1),n.resultFlag=!0,n.details="",n):(n.resultFlag=!1,n.details="Option index not valid",n)}},{key:"upthisOption",value:function(t,e){var n={resultFlag:!1,details:""};if(e>-1){if(e>0){if(t.rows[e-1]){var o=t.rows[e];return t.rows.splice(e,1),t.rows.splice(e-1,0,o),n.resultFlag=!0,n.details="",n}return n.resultFlag=!1,n.details="Can't retreive option from option index",n}return n.resultFlag=!0,n.details="",n}return n.resultFlag=!1,n.details="Option index not valid",n}},{key:"downthisOption",value:function(t,e){var n={resultFlag:!1,details:""};if(e>-1){if(e=0;o--)if(t.rows[o].option===e)return n.resultFlag=!1,n.details="Entered option is not unique",n;return n.resultFlag=!0,n.details="",n}return n.resultFlag=!1,n.details="Entered option is empty",n};e.resetModel=n,e.validOption=o},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n=0;n--)t.selectedControl===t.controls[n].id&&(e.selectedControl=t.selectedControl,e.formlyType=t.controls[n].formlyType,e.formlySubtype=t.controls[n].formlySubtype,e.formlyLabel=t.controls[n].formlyLabel,e.formlyRequired=t.controls[n].formlyRequired,e.formlyDescription=t.controls[n].formlyDescription,e.formlyPlaceholder=t.controls[n].formlyPlaceholder,e.formlyOptions=t.controls[n].formlyOptions,"datepicker"===t.controls[n].formlyType&&(e.datepickerPopup=t.controls[n].datepickerPopup));return e}},{key:"validKeyUniqueness",value:function(t,e){for(var n=!0,o=e.lines.length-1;o>=0;o--)for(var r=e.lines[o].columns.length-1;r>=0;r--)e.lines[o].columns[r].control.key===t&&(n=!1);return n}},{key:"getSelectedProxyModel",value:function(t){var e="none",n=angular.copy(this.EasyFormGenFormlyBindingModels.getEasyFormListControls().controls);return n.forEach(function(n){if(n.formlyType===t.type&&n.formlySubtype===t.subtype)return e=n.id}),e}},{key:"bindConfigurationModelFromProxyModel",value:function(t,e,n){var o=angular.copy(this.proxyModel.temporyConfig);n.lines[t].columns[e].control.selectedControl=o.selectedControl,n.lines[t].columns[e].control.type=o.formlyType,n.lines[t].columns[e].control.subtype=o.formlySubtype,n.lines[t].columns[e].control.templateOptions={label:"",required:!1,description:"",placeholder:"",options:[]},n.lines[t].columns[e].control.templateOptions.label=o.formlyLabel,n.lines[t].columns[e].control.templateOptions.required=o.formlyRequired,n.lines[t].columns[e].control.templateOptions.description=o.formlyDescription,n.lines[t].columns[e].control.templateOptions.placeholder=o.formlyPlaceholder,n.lines[t].columns[e].control.templateOptions.options=o.formlyOptions,"datepicker"===n.lines[t].columns[e].control.type&&(n.lines[t].columns[e].control.templateOptions.datepickerPopup=o.datepickerPopup);var r=n.lines[t].columns[e].control.type+"-"+Date.now();this.validKeyUniqueness(r,n)===!0?n.lines[t].columns[e].control.key=r:(r=n.lines[t].columns[e].control.type+"-"+Date.now(),this.validKeyUniqueness(r,n)===!0?n.lines[t].columns[e].control.key=r:r=n.lines[t].columns[e].control.type+"-"+Date.now()),n.lines[t].columns[e].control.edited=!0}},{key:"setProxyModelFromConfigurationSelection",value:function(t,e,n){return"undefined"!=typeof t.lines[e].columns[n].control&&(this.proxyModel.selectedControl="undefined"!=typeof t.lines[e].columns[n].control.type?this.getSelectedProxyModel(t.lines[e].columns[n].control):"none",this.proxyModel.temporyConfig.selectedControl="undefined"!=typeof t.lines[e].columns[n].control.type?this.getSelectedProxyModel(t.lines[e].columns[n].control):"none",this.proxyModel.temporyConfig.formlyType="undefined"!=typeof t.lines[e].columns[n].control.type?t.lines[e].columns[n].control.type:"none",this.proxyModel.temporyConfig.formlySubtype="undefined"!=typeof t.lines[e].columns[n].control.subtype?t.lines[e].columns[n].control.subtype:"none",this.proxyModel.temporyConfig.formlyLabel="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.label?t.lines[e].columns[n].control.templateOptions.label:"",this.proxyModel.temporyConfig.formlyRequired="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.required?t.lines[e].columns[n].control.templateOptions.required:"",this.proxyModel.temporyConfig.formlyDescription="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.description?t.lines[e].columns[n].control.templateOptions.description:"",this.proxyModel.temporyConfig.formlyPlaceholder="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.placeholder?t.lines[e].columns[n].control.templateOptions.placeholder:"",this.proxyModel.temporyConfig.formlyOptions="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.options?t.lines[e].columns[n].control.templateOptions.options:"","Date"===this.proxyModel.temporyConfig.selectedControl&&(this.proxyModel.temporyConfig.datepickerPopup="undefined"!=typeof t.lines[e].columns[n].control.templateOptions.datepickerPopup?t.lines[e].columns[n].control.templateOptions.datepickerPopup:"")),this.proxyModel}},{key:"getProxyModel",value:function(){return this.proxyModel}},{key:"getEditPanelModelAllModel",value:function(){return this.editPanelModel}},{key:"setEditPanelModelControl",value:function(t){var e=!1;return"undefined"!=typeof t&&(angular.merge(this.editPanelModel,t),e=!0),e}},{key:"getEditPanelModelColumnIndex",value:function(){return this.editPanelModel.columnIndex}},{key:"setEditPanelModelColumnIndex",value:function(t){var e=!1;return"undefined"!=typeof t&&(this.editPanelModel.columnIndex=t,e=!0),e}},{key:"getEditPanelModelLineIndex",value:function(){return this.editPanelModel.lineIndex}},{key:"setEditPanelModelLineIndex",value:function(t){var e=!1;return"undefined"!=typeof t&&(this.editPanelModel.lineIndex=t,e=!0),e}},{key:"getEditPanelModelControl",value:function(){return this.editPanelModel.control}},{key:"getEditPanelModelToggle",value:function(){return this.editPanelModel.toggle}},{key:"setEditPanelModelToggle",value:function(t){var e=!1;return"undefined"!=typeof t&&(this.editPanelModel.toggle=t,e=!0),e}},{key:"resetAllTemporyModels",value:function(){return this.basicSelectRowCollection=angular.copy(i),this.newOptionBasicSelect=angular.copy({saisie:""}),this.groupedSelectRowCollection=angular.copy(i),this.newOptionGroupedSelect=angular.copy({saisie:""}),this.GroupedSelectGroups=angular.copy({list:[]}),this.newGroupGroupedSelect=angular.copy({saisie:""}),this.groupSelectGroupClick=angular.copy({showList:!1}),this.radioRowCollection=angular.copy(i),this.newOptionRadio=angular.copy({saisie:""}),!0}},{key:"bindSpecialCtrlTemporyModelsToProxyModel",value:function(){"BasicSelect"===this.proxyModel.selectedControl&&this.bindBasicSelectToProxyModel(this.basicSelectRowCollection),"GroupedSelect"===this.proxyModel.selectedControl&&this.bindGroupedSelectToProxyModel(this.groupedSelectRowCollection),"Radio"===this.proxyModel.selectedControl&&this.bindRadioToProxyModel(this.radioRowCollection)}},{key:"bindBasicSelectFromProxyModel",value:function(t){if(this.proxyModel.temporyConfig.formlyOptions.length>0)for(var e=0;e<=this.proxyModel.temporyConfig.formlyOptions.length-1;e++){var n={option:this.proxyModel.temporyConfig.formlyOptions[e].name,order:e,group:""};t.rows.push(n)}}},{key:"bindBasicSelectToProxyModel",value:function(t){var e=[];if(this.proxyModel.temporyConfig.formlyOptions=e,t.rows.length>0)for(var n=0;n<=t.rows.length-1;n++){var o={name:t.rows[n].option,value:n,group:""};this.proxyModel.temporyConfig.formlyOptions.push(o)}}},{key:"bindGroupedSelectFromProxyModel",value:function(t,e){if(this.proxyModel.temporyConfig.formlyOptions.length>0){for(var n=0;n<=this.proxyModel.temporyConfig.formlyOptions.length-1;n++){var o={option:this.proxyModel.temporyConfig.formlyOptions[n].name,order:n,group:this.proxyModel.temporyConfig.formlyOptions[n].group};t.rows.push(o)}var r=_.uniq(_.pluck(t.rows,"group"));angular.copy(r,e.list)}}},{key:"bindGroupedSelectToProxyModel",value:function(t){this.proxyModel.temporyConfig.formlyOptions=[];for(var e=0;e<=t.rows.length-1;e++){var n={name:t.rows[e].option,value:e,group:t.rows[e].group};this.proxyModel.temporyConfig.formlyOptions.push(n)}}},{key:"bindRadioFromProxyModel",value:function(t){if(this.proxyModel.temporyConfig.formlyOptions.length>0)for(var e=0;e<=this.proxyModel.temporyConfig.formlyOptions.length-1;e++){var n={option:this.proxyModel.temporyConfig.formlyOptions[e].name,order:e,group:""};t.rows.push(n)}}},{key:"bindRadioToProxyModel",value:function(t){var e=[];if(this.proxyModel.temporyConfig.formlyOptions=e,t.rows.length>0)for(var n=0;n<=t.rows.length-1;n++){var o={name:t.rows[n].option,value:n,group:""};this.proxyModel.temporyConfig.formlyOptions.push(o)}}}]),t}();l.$inject=["EasyFormGenFormlyBindingModels"],e.default=l,e.CONTROLLER_MODAL_PROXY=r},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE=void 0;var i=n(24),l=o(i),a="leftPanelValidEditFooter";r.$inject=[],e.default=r,e.LEFT_PANEL_VALID_EDIT_FOOTER_DIRECTIVE=a},function(t,e){t.exports='\n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE=void 0;var i=n(26),l=o(i),a="leftPanelTextInputControl";r.$inject=[],e.default=r,e.LEFT_PANEL_TEXT_INPUT_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n placeholder :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'; +},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE=void 0;var i=n(28),l=o(i),a="leftPanelTextareaControl";r.$inject=[],e.default=r,e.LEFT_PANEL_TEXTAREA_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
    \n  \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE=void 0;var i=n(30),l=o(i),a="leftPanelSubtitleControl";r.$inject=[],e.default=r,e.LEFT_PANEL_SUBTITLE_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Subtitle text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE=void 0;var i=n(32),l=o(i),a="leftPanelRichTextEditorControl";r.$inject=[],e.default=r,e.LEFT_PANEL_RICH_TEXT_EDITOR_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n   Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE=void 0;var i=n(34),l=o(i),a="leftPanelRadioControl";r.$inject=[],e.default=r,e.LEFT_PANEL_RADIO_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new radio :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Edit/Remove radio :\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no radio : add new radio values -\n \n
    \n
    \n \n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{radioRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Label text :\n \n
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Required :\n \n
    \n
     
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Description :\n \n
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE=void 0;var i=n(36),l=o(i),a="leftPanelPasswordControl";r.$inject=[],e.default=r,e.LEFT_PANEL_PASSWORD_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n placeholder :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE=void 0;var i=n(38),l=o(i),a="leftPanelHeaderControl";r.$inject=[],e.default=r,e.LEFT_PANEL_HEADER_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Header text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE=void 0;var i=n(40),l=o(i),a="leftPanelGroupedSelectControl";r.$inject=[],e.default=r,e.LEFT_PANEL_GROUPED_SELECT_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new options :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new groups :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n Edit/Remove options/groups:\n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no option : add new options -\n \n
    \n
    \n \n \n \n \n order\n \n \n group\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n
    \n
    \n

    \n - add new groups -\n

    \n
    \n \n
    \n
    \n {{groupedSelectRow.group}}\n
    \n \n \n {{groupedSelectRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\t\t\t\t
    \n \n Description :\n \n
    \n \n
    \n\t\t\t\t
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_DATE_CONTROL_DIRECTIVE=void 0;var i=n(42),l=o(i),a="leftPanelDateControl";r.$inject=[],e.default=r,e.LEFT_PANEL_DATE_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n \n
    \n \n \n \n {{dateformat}}\n \n \n \n
    \n
    \n
    \n
    \n
    \n \n Label text :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Required :\n \n
    \n
     
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n Description :\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE=void 0;var i=n(44),l=o(i),a="leftPanelCheckBoxControl";r.$inject=[],e.default=r,e.LEFT_PANEL_CHECKBOX_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Label text :\n \n
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Required :\n \n
    \n
     
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n
    \n
    \n \t\t\t
    \n \n Description :\n \n
    \n \n
    \n \t\t\t
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE=void 0;var i=n(46),l=o(i),a="leftPanelBlankControl";r.$inject=[],e.default=r,e.LEFT_PANEL_BLANK_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n   \n Edit :\n
    \n
    \n
    \n
    \n
    \n
    \n Column will be blank\n
    \n
    \n
    \n
    \n \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(){var t={restrict:"E",template:l.default};return t}Object.defineProperty(e,"__esModule",{value:!0}),e.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE=void 0;var i=n(48),l=o(i),a="leftPanelBasicSelectControl";r.$inject=[],e.default=r,e.LEFT_PANEL_BASIC_SELECT_CONTROL_DIRECTIVE=a},function(t,e){t.exports='
    \n
    \n
    \n
    \n
    \n \n  \n Edit properties :\n
    \n
    \n
    \n
    \n
    \n
    \n \n Add new options :\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n add\n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n - no option : add new options -\n \n
    \n
    \n \n \n \n \n order\n \n \n option\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{$index}}\n \n \n {{basicSelectRow.option}}\n \n \n
    \n \n \n \n \n \n \n \n \n \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \t
    \n \n Description :\n \n
    \n \n
    \n \t
    \n
    \n
    \n
    \n \n
    \n'; +},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(50),i=o(r),l=n(51),a=o(l),s="";e.default=angular.module(s,[]).service(r.FORM_FIELD_MANAGE_SERVICE,i.default).provider(l.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER,a.default)},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n0&&C.forEach(function(n){n.controlType===t.controlType&&(n.properties=[].concat(t.properties),e=!0)}),e||C.push(t)}return C}function n(){return u}function o(t){"undefined"!=typeof t&&u.controls.push(t)}function r(){return h}function l(t){"undefined"!=typeof t&&h.cssClass.push(t)}function s(){return b}function d(t){"undefined"!=typeof t&&b.className.push(t)}function c(t){return"className"in t&&"type"in t&&"key"in t&&"templateOptions"in t&&(b=angular.copy(t)),!0}function p(){function t(){return u}function e(t){var e=angular.copy(y);return"undefined"!=typeof t&&t&&angular.extend(e,v),e}function n(t){var e=angular.copy(g);return"undefined"!=typeof t&&t&&angular.extend(e,v),e}function o(){return f}function r(){return m}function l(){return h}function a(t,e){if("undefined"!=typeof t&&"undefined"!=typeof e&&t===parseInt(t,10)&&t<=h.cssClass.length){var n={};return n.className=h.cssClass[t-1],h.textContent=e,h.selectedClass=n.className,n.template=[h.simpleHtml1,e,h.simpleHtml2].join(""),n}}function s(){return b}function d(t,e){if("undefined"!=typeof t&&t===parseInt(t,10)&&t<=b.className.length){var n=function(){var n=angular.copy(b);return n.className=b.className[t-1],console.warn("it should have a bug upper line"),"undefined"!=typeof e&&C.forEach(function(t){t.controlType===e&&t.properties.forEach(function(t){t.isRoot&&(n[t.value]=""),t.isTemplateOptions&&(n.templateOptions[t.value]="")})}),{v:n}}();if("object"===("undefined"==typeof n?"undefined":i(n)))return n.v}}var c={getEasyFormListControls:t,getEasyFormInitialStateConfigurationModel:e,getEasyFormReloadConfigurationModel:n,getEasyFormEmptyConfigurationLineModel:o,getEasyFormConfigurationEmptyControlModel:r,getRawHeaderTemplates:l,getHeaderTemplateForNcolumnLine:a,getRawFormlyControlTemplates:s,getFormlyControlTemplateForNcolumnLine:d};return c}var u=a.initEasyFormListControls(),f=a.initEasyFormEmptyConfigurationLineModel(),m=a.initEmptyControlFieldModel(),y=a.initEasyFormInitialStateConfigurationModel(f),v=a.initEasyFormInitialStateConfigurationModelAddOnForStepWay(),g=a.initEasyFormReloadConfigurationModel(),h=a.initHeaderTemplates(),b=a.initFormlyControlTemplates(),C=a.initParticularControlProperties();this.getAllParticularControlProperties=t,this.addParticularControlProperties=e,this.getEasyFormListControls=n,this.addEasyFormControlToList=o,this.getHeaderTemplates=r,this.addHeaderTemplateCssClass=l,this.getFormlyControlTemplate=s,this.addformlyControlTemplatesCssClass=d,this.setFormlyControlTemplate=c,this.$get=p,p.$inject=[]}Object.defineProperty(e,"__esModule",{value:!0}),e.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER=void 0;var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l=n(52),a=o(l),s="EasyFormGenFormlyBindingModels";r.$inject=[],e.default=r,e.EASY_FORM_FORMLY_BINDING_MODEL_PROVIDER=s},function(t,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=(e.initEasyFormListControls=function(){return{controls:[],selectedControl:"none",temporyConfig:{selectedControl:"none",formlyLabel:"label",formlyRequired:!1,formlyDescription:"",formlyPlaceholder:"",formlyOptions:[]}}},e.initEasyFormEmptyConfigurationLineModel=function(){return{line:1,activeColumn:1,columns:[{numColumn:1,exist:!0,control:{type:"none",key:"none"}}]}},e.initEmptyControlFieldModel=function(){return{control:{type:"none",key:"none"}}},e.initEasyFormInitialStateConfigurationModel=function(t){return{submitButtonText:"submit",cancelButtonText:"cancel",lines:[].concat(t)}});e.initEasyFormInitialStateConfigurationModelAddOnForStepWay=function(){return{activeLine:1,listConfigStep:["init","first","second","third"],stepIndicators:[!0,!1,!1,!1],configStepCounter:0}},e.initEasyFormReloadConfigurationModel=function(){var t=n();return t.lines=[],t},e.initHeaderTemplates=function(){var t={cssClass:["col-xs-12","col-xs-6","col-xs-4"],textContent:"",html_part1:['
    ','

    '].join(""),html_part3:this.textContent,html_part4:["

    ","
    ","

    "].join(""),simpleHtml1:['

    '].join(""),simpleHtml2:["

    ","
    "].join("")};return t},e.initFormlyControlTemplates=function(){return{className:["col-xs-12","col-xs-6","col-xs-4"],type:"",key:"",templateOptions:{type:"",label:"",required:"",placeholder:"",description:"",options:""}}},e.initParticularControlProperties=function(){return[{controlType:"datepicker",properties:[{isRoot:!1,isTemplateOptions:!0,value:"datepickerPopup"}]}]}},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}Object.defineProperty(e,"__esModule",{value:!0});var r=n(54),i=o(r),l=n(55),a=o(l),s=n(56),d=o(s),c=n(58),p=o(c),u=n(59),f=o(u),m=n(61),y=o(m),v=n(63),g=o(v),h=n(64),b=o(h),C=n(66),x=o(C),E="edaDragDropWay.dragdrop.module";e.default=angular.module(E,[]).directive(r.DD_CONTENT_COUNTER_DIRECTIVE,i.default).controller(c.DD_DECOR_CONTAINER_CONTROLLER_NAME,p.default).directive(s.DD_DECOR_CONTAINER_DIRECTIVE,d.default).directive(u.DD_DECOR_DROPZONE_DIRECTIVE,f.default).directive(m.DRAG_DROP_DECOR_ITEM,y.default).service(v.DRAG_DROP_ITEM_DECOR_SERVICE,g.default).directive(C.DRAG_DROP_NO_EDITABLE_CONTROL,x.default).service(l.DRAG_DROP_ITEM_COUNTER_SERVICE,a.default).directive(h.DRAG_DROP_DECOR_LINE,b.default)},function(t,e){"use strict";function n(t,e){function n(n,o){var r=void 0;n.$watch(function(){return o[0].children.length},function(i,l){i!==l&&!function(){for(var i=0,l=[],a=o[0].children.length-1;a>=0;a--)t.isHtmlElementToCount(o[0].children[a].classList)?(i++,l.push({item:a,isReal:!0})):l.push({item:a,isReal:!1});n.contentRealCount=i,r=e(function(){t.updateLineItemCss(n.fullModel,l,n.parentIndex,n.currentIndex,i)},20)}()}),n.$on("$destroy",function(){e.cancel(r)})}var o={restrict:"A",scope:{valueWhenPlaceholder:"@ddValueWhenPlaceholder",valueWhendragging:"@ddValueWhenDragging",fullModel:"=ddFullModel",currentIndex:"@ddContentCounterCurrentIndex",parentIndex:"@ddContentCounterParentIndex",forceRefresh:"=ddContentCounterForceCssRefresh"},link:n};return o}Object.defineProperty(e,"__esModule",{value:!0});var o="ddContentCounter";n.$inject=["dragDropItemCounterService","$timeout"],e.default=n,e.DD_CONTENT_COUNTER_DIRECTIVE=o},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n0&&angular.forEach(this._itemsNotToCount,function(n){for(var o=t.length-1;o>=0;o--)t[o]===n&&(e=e&&!1)}),e}},{key:"updateLineItemCss",value:function(t,e,n,o,r){if("undefined"!=typeof t&&"undefined"!=typeof e&&"undefined"!=typeof n&&"undefined"!=typeof o&&"undefined"!=typeof r){for(var i=t[n][o].length-1;i>=0;i--)for(var l=0;l\n \n \n  \n {{ddDecorContainerCtrl.currentTitle}}\n

    \n
    \n
    \n
    \n
    \n'},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n\n
    \n
    \n
    \n

    \n  \n {{currentTitle}}\n
    \n \n \n  \n add new line\n \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n'},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t){function e(e,n,o,r,i){var l=e.verboseMode,a=e.currentIndex,s=e.parentIndex,d=t.getDistinctItemCssClass();if(angular.forEach(d,function(t){return n.removeClass(t)}),n.addClass(e.cssClass),e.$watch("cssClass",function(t,e){t!==e&&(angular.forEach(d,function(t){return n.removeClass(t)}),n.addClass(t))}),""!==l){var c=angular.lowercase(l);"true"!==c&&"1"!==c||console.dir({whoAmI:"I am verbose from ddDecorItem directive link",verbodeMode:c,ParentParentIndex:e.$parent.$parent.$index,ParentIndex:s,parentParentIndex:e.parentParentIndex,currentIndex:a,lineItemsCount:e.lineItemsCount})}"0"===e.parentParentIndex&&n.addClass(d[0]),i(e.$parent,function(t){var e=angular.element(n.children()[0]);e.append(t)})}var n={restrict:"A",scope:{verboseMode:"@ddItemVerboseMode",currentIndex:"@ddItemCurrentIndex",parentIndex:"@ddItemParentIndex",parentParentIndex:"@ddItemParentParentIndex",lineItemsCount:"@ddItemsCount",cssClass:"@ddItemCssClass"},template:l.default,transclude:!0,link:e};return n}Object.defineProperty(e,"__esModule",{value:!0}),e.DRAG_DROP_DECOR_ITEM=void 0;var i=n(62),l=o(i),a="ddDecorItem";r.$inject=["easyFormDragWayConfig"],e.default=r,e.DRAG_DROP_DECOR_ITEM=a},function(t,e){t.exports='
    \n
    \n
    \n'},function(t,e){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n=0;i--)t[e][n][i].cssClass=this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(o);return!0}return!1}},{key:"updateCssClassWholeColumn",value:function(t,e){if("undefined"!=typeof e&&"undefined"!=typeof t){for(var n=t[e].length-1;n>=0;n--)for(var o=t[e][n].length-1;o>=0;o--)t[e][n][o].cssClass=this.easyFormDragWayConfig.getItemCssDependingNumberItemsInRow(t[e][n].length);return!0}return!1}}]),t}();i.$inject=["easyFormDragWayConfig"],e.default=i,e.DRAG_DROP_ITEM_DECOR_SERVICE=r},function(t,e,n){"use strict";function o(t){return t&&t.__esModule?t:{default:t}}function r(t){function e(e,n,o,r,i){var l=e.verboseMode,a=e.currentIndex,s=e.parentIndex;e.deleteLine={},e.deleteLine.readyToDelete=!1,e.deleteLine.dblClickCount=0,e.isCollapsed=!1;var d=void 0;if(""!==l){var c=angular.lowercase(l);"true"!==c&&"1"!==c||console.dir({whoAmI:"I am verbose from ddDecorLine directive link",verbodeMode:c,ParentParentIndex:e.$parent.$parent.$index,ParentIndex:s,currentIndex:a})}e.removeMe=function(n){n.preventDefault(),n.stopPropagation(),"1"===e.parentIndex&&(1===e.deleteLine.dblClickCount&&(e.deleteLine.dblClickCount=0,e.deleteLine.readyToDelete=!1,e.removeLine(),t.cancel(d)),0===e.deleteLine.dblClickCount&&(e.deleteLine.dblClickCount=e.deleteLine.dblClickCount+1,e.deleteLine.readyToDelete=!0))},e.cancelDelete=function(){d=t(function(){e.deleteLine.dblClickCount=0,e.deleteLine.readyToDelete=!1},500)},e.$on("$destroy",function(){return t.cancel(d)}),i(e.$parent,function(t){var e=angular.element(n.children()[0]);e.append(t)})}var n={restrict:"A",scope:{verboseMode:"@ddLineVerboseMode",currentIndex:"@ddLineCurrentIndex",parentIndex:"@ddLineParentIndex",removeLine:"&ddRemoveLine"},template:l.default,transclude:!0,link:e};return n}Object.defineProperty(e,"__esModule",{value:!0}),e.DRAG_DROP_DECOR_LINE=void 0;var i=n(65),l=o(i),a="ddDecorLine";r.$inject=["$timeout"],e.default=r,e.DRAG_DROP_DECOR_LINE=a},function(t,e){t.exports='\n \n