diff --git a/app/Models/Product.php b/app/Models/Product.php index 1f119a9..b502a46 100644 --- a/app/Models/Product.php +++ b/app/Models/Product.php @@ -40,21 +40,21 @@ public function Producer(): BelongsTo public function Price(?string $deliveryDate = null) { - $price = $this->belongsToMany(PriceList::class, 'price_list_prices', 'product_id', 'price_list_id')->select('id') + $query = $this->belongsToMany(PriceList::class, 'price_list_prices', 'product_id', 'price_list_id')->select('id') // ->withTimestamps() ->withPivot(['price']); if (! $deliveryDate) { $deliveryDate = Carbon::today()->format('Y-m-d'); } - $price->where('available', '<=', $deliveryDate); - $price->orderBy('available', 'desc')->orderBy('id', 'asc'); - $price->first(); - if ($price = $price->get()->toArray()) { - $price = $price[0]['pivot']['price']; + $query->where('available', '<=', $deliveryDate); + $query->orderBy('available', 'desc')->orderBy('id', 'asc'); + + if ($priceRecord = $query->first()) { + return $priceRecord->pivot->price; } - return $price; + return null; } public function setAttributePrice(?string $deliveryDate = null) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 59e212d..f9ae87c 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -31,7 +31,7 @@ class AppServiceProvider extends ServiceProvider public function register(): void { - if ($this->app->environment('local', 'testing')) { + if ($this->app->environment('local')) { $this->app->register(\Laravel\Dusk\DuskServiceProvider::class); } diff --git a/public/js/app.js b/public/js/app.js index edaaf5d..c8f168e 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -15,7 +15,7 @@ \*****************************/ (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { -eval("{function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n//----------------------------------------------------------------------\n/*\r\nHelper function\r\n*/\nwindow.getMonday = function (date, dateStr) {\n if (dateStr) {\n date = new Date(dateStr);\n }\n var day = date.getDay(),\n diff = date.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\nwindow.debug = function (txt) {\n try {\n if (txt && _typeof(txt) === 'object' && !Array.isArray(txt)) {\n var seen = new WeakSet();\n var safeObj = JSON.parse(JSON.stringify(txt, function (key, value) {\n if (_typeof(value) === 'object' && value !== null) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n }\n return value;\n }));\n console.log(safeObj);\n } else {\n console.log(txt);\n }\n } catch (e) {\n console.log(txt);\n }\n};\nwindow.buildFormData = function (formData, data, parentKey) {\n if (data && _typeof(data) === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n buildFormData(formData, data[key], parentKey ? \"\".concat(parentKey, \"[\").concat(key, \"]\") : key);\n });\n } else {\n var value = data == null ? '' : data;\n formData.append(parentKey, value);\n }\n};\nwindow.jsonToFormData = function (data) {\n var formData = new FormData();\n buildFormData(formData, data);\n return formData;\n};\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\nwindow.arrayRemove = function (arr, value) {\n return arr.filter(function (ele) {\n return ele != value;\n });\n};\nwindow.getRandomInt = function () {\n var max = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MAX_SAFE_INTEGER;\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n debug(max);\n debug(min);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nwindow.setImageFromLocal = function (input, targetImgCssSelector) {\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n reader.onload = function (e) {\n $(targetImgCssSelector).attr('src', e.target.result);\n };\n reader.readAsDataURL(input.files[0]);\n }\n};\n__webpack_require__(/*! ./latinise */ \"./resources/js/latinise.js\");\n\n/*\r\ndisable back button\r\n */\n$(function () {\n if (window.history && window.history.pushState) {\n window.history.pushState('', null, window.location.href);\n $(window).on('popstate', function (event) {\n // alert('Back button was pressed.');\n //document.location.href = '#';\n window.history.pushState('', document.title, window.location.href);\n //console.log('mevagy');\n event.stopPropagation();\n });\n }\n});\n//----------------------------------------------------------------------\n/*\r\ninit custom radio buttons\r\n */\nwindow.initRadioButtons = function (Options) {\n var Opts = {\n onChange: function onChange(value, node) {}\n };\n $.extend(Opts, Options);\n $('.customRadioBtnGroup .active').each(function () {\n var activeValue = $(this).data('title');\n var target = $(this).data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\n });\n $('.customRadioBtnGroup a').unbind('click');\n $('.customRadioBtnGroup a').bind('click', function () {\n var sel = $(this).data('title');\n var tog = $(this).data('toggle');\n $('input[name=' + tog + ']').prop('value', sel);\n $('a[data-toggle=\"' + tog + '\"]').not('[data-title=\"' + sel + '\"]').removeClass('active').addClass('notActive');\n $('a[data-toggle=\"' + tog + '\"][data-title=\"' + sel + '\"]').removeClass('notActive').addClass('active');\n Opts.onChange(sel, tog);\n });\n};\n\n//----------------------------------------------------------------------\n// Defaults\n//----------------------------------------------------------------------\n$.extend(true, $.fn.dataTable.defaults, {\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n lengthMenu: [[10, 25, 50, -1], ['10 sor', '25 sor', '50 sor', 'Összes']],\n buttons: {\n dom: {\n button: {\n className: 'fg-button ui-button dataTableHeaderButtons'\n }\n }\n },\n dom: '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr\"lBfr>' + 't' + '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br\"ip>'\n});\nInputmask.extendDefinitions({\n 'x': {\n validator: \"[\\.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]\"\n //cardinality: 1\n }\n});\n\n//----------------------------------------------------------------------\nToast.enableTimers(false);\n$.fn.select2.defaults.set('language', 'jp');\nwindow.select2CreateTag = function (params) {\n var term = $.trim(params.term);\n var count = 0;\n var existsVar = false;\n //check if there is any option already\n if ($('#keywords option').length > 0) {\n $('#keywords option').each(function () {\n if ($(this).text().toUpperCase() == term.toUpperCase()) {\n existsVar = true;\n return false;\n } else {\n existsVar = false;\n }\n });\n if (existsVar) {\n return null;\n }\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n //since select has 0 options, add new without comparing\n else {\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n};\nwindow.ajaxErrorHandler = function (xhr, ajaxOptions, thrownError) {\n debug(this);\n console.error(xhr);\n console.error(ajaxOptions);\n console.error(thrownError);\n\n // Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz)\n if (!xhr.responseJSON) {\n ajaxErrorFieldHandler({\n 'detail': 'Váratlan szerverhiba. Kérjük próbálja újra később.'\n });\n return;\n }\n\n // Validációs hibák (422) – ezeket részletesen megjelenítjük\n if (xhr.responseJSON.errors) {\n console.error(\"d2---------------\");\n if (\"jsonapi\" in xhr.responseJSON) {\n ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors);\n } else {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n }\n // Egyedi referencia kódos hiba (500, stb.)\n else if (xhr.responseJSON.error_ref) {\n console.error(\"error_ref: \" + xhr.responseJSON.error_ref);\n Toast.create({\n title: \"Szerverhiba\",\n message: \"Váratlan hiba történt a feldolgozás során.
\" + \"Hivatkozási kód: \" + xhr.responseJSON.error_ref + \"
\" + \"Kérjük, ezt a kódot adja meg a hibajelentésben.\",\n status: TOAST_STATUS.DANGER,\n timeout: 0\n });\n }\n // 404\n else if (xhr.status == 404) {\n console.error(\"d3---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Nincs ilyen elem.'\n });\n }\n // Egyéb ismeretlen hiba\n else {\n console.error(\"d4---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Általános hiba.'\n });\n }\n};\nwindow.ajaxErrorFieldHandlerJsonAPI = function (errors, container) {\n console.error(\"d6---------------\");\n var toastBodyHtml = '';\n var toastTitle = 'Hiba';\n console.error(errors);\n $.each(errors, function (index, value) {\n console.error(value);\n toastTitle = 'Hiba';\n toastBodyHtml = '';\n if (\"title\" in value) {\n toastTitle = value.title;\n }\n if (\"detail\" in value) {\n toastBodyHtml += '
' + value.detail + '
';\n }\n Toast.create({\n title: toastTitle,\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n });\n};\nwindow.ajaxErrorFieldHandler = function (errors, container) {\n console.error(\"d5---------------\");\n console.error(errors);\n var toastBodyHtml = '';\n $.each(errors, function (index, value) {\n toastBodyHtml += '
' + value + '
';\n });\n Toast.create({\n title: \"Hiba!\",\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n};\n$.ajaxSetup({\n error: ajaxErrorHandler\n});\n/*\r\ndatepicker afterShow function\r\n */\n$.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;\n$.datepicker._updateDatepicker = function (inst) {\n $.datepicker._updateDatepicker_original(inst);\n var afterShow = this._get(inst, 'afterShow');\n if (afterShow) afterShow.apply(inst.input ? inst.input[0] : null); // trigger custom callback\n};\n\n//----------------------------------------------------------------------\nwindow.EmegrendelesDefaults = {\n datatableActionButtonClickCallBack: function datatableActionButtonClickCallBack() {},\n datatableAddRowTrashButton: function datatableAddRowTrashButton(id, args) {\n return '';\n },\n datatableAddRowEditButton: function datatableAddRowEditButton(args) {\n var title = 'Adatok';\n if (typeof args[1].title !== \"undefined\") {\n title = args[1].title;\n }\n return '';\n },\n datatableAddRowViewButton: function datatableAddRowViewButton(id, args) {\n return '';\n },\n datatableAddRowAttachmentButton: function datatableAddRowAttachmentButton(id, args) {\n return '';\n },\n datatableCustomHeadButtonClickCallBack: function datatableCustomHeadButtonClickCallBack(args) {\n console.log(args);\n },\n afterLoadMainContent: function afterLoadMainContent(args) {\n console.log(args);\n }\n};\nif (typeof DataModel === 'undefined') {\n var _DataModel2 = /*#__PURE__*/function () {\n /*\r\n * Constructor\r\n */\n function _DataModel2(data, options) {\n _classCallCheck(this, _DataModel2);\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n _defineProperty(this, \"Opts\", {\n active: false\n });\n $.extend(this, data);\n $.extend(this.Opts, options);\n }\n return _createClass(_DataModel2, [{\n key: \"setData\",\n value: function setData(data) {\n $.extend(this, data);\n }\n }, {\n key: \"getData\",\n value: function getData(index) {\n if (index) {\n return this[index];\n } else {\n return this;\n }\n }\n }]);\n }();\n ;\n window.DataModel = _DataModel2;\n}\nwindow.Emegrendeles = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n myVar: 'Emegrendeles value',\n datatableAddRowTrashButton: {},\n datatableAddRowEditButton: {},\n datatableActionButtonClickCallBack: {},\n datatableRowActionButtonClickCallBack: {},\n datatableCustomHeadButtonClickCallBack: {},\n afterLoadMainContent: {},\n Url: {}\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n //$.extend(Opts, options);\n console.log(this.constructor.name + ' constructor called');\n $.extend(Opts, window.EmegrendelesDefaults, options);\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableAddRowTrashButton = function () {\n return Opts.datatableAddRowTrashButton(arguments);\n };\n this.datatableAddRowEditButton = function () {\n return Opts.datatableAddRowEditButton(arguments);\n };\n this.datatableAddRowViewButton = function () {\n return Opts.datatableAddRowViewButton(arguments);\n };\n this.datatableAddRowAttachmentButton = function () {\n return Opts.datatableAddRowAttachmentButton(arguments);\n };\n this.afterLoadMainContent = function () {\n return Opts.afterLoadMainContent(arguments);\n };\n this.datatableActionButtonClickCallBack = function () {\n return Opts.datatableActionButtonClickCallBack(arguments);\n };\n this.datatableRowActionButtonClickCallBack = function () {\n return Opts.datatableRowActionButtonClickCallBack(arguments);\n };\n this.datatableAddRowAction = function (CSSSelector) {\n if (!CSSSelector) {\n return;\n }\n $(CSSSelector + ' tr button').off('click');\n $(CSSSelector + ' tr button').on('click', APP.datatableRowActionButtonClickCallBack);\n };\n this.datatableCustomHeadButtonClickCallBack = function () {\n return Opts.datatableCustomHeadButtonClickCallBack(arguments);\n };\n\n /*\r\n * Public method\r\n * Can be called outside class\r\n */\n this.myPublicMethod = function () {\n console.log(Opts);\n myPrivateMethod();\n };\n this.setApiToken = function (token) {\n root.ApiToken = token;\n };\n this.getApiToken = function () {\n return root.ApiToken;\n };\n\n /*\r\n * Private method\r\n * Can only be called inside class\r\n */\n var myPrivateMethod = function myPrivateMethod() {\n console.log('accessed private method');\n };\n\n /**\r\n * @param {string} itemName\r\n */\n this.setActiveNavBarItem = function (itemName) {\n $('.speedButtonNavBar li').removeClass('selected');\n $('.speedButtonNavBar li.iconholderModul' + itemName).addClass('selected');\n return this;\n };\n this.getActiveNavBarItem = function () {\n return $('.speedButtonNavBar .selected').find('a').data('name');\n };\n this.clearArchiveModuleDataTableState = function () {\n if (APP.OrderArchiveModule != undefined) {\n console.log('APP.OrderArchiveModule');\n console.log('clear');\n APP.OrderArchiveModule.dataTable.state.clear();\n }\n };\n this.navBarItemBeforepost = function () {\n console.log('navBarItemBeforepost');\n if (root.getActiveNavBarItem() !== 'activeOrder') {\n root.clearArchiveModuleDataTableState();\n }\n ;\n };\n this.navBarItemAfterPost = function () {};\n this.initNavBar = function () {\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").bind('click', function (event) {\n console.log($(this).data().name);\n if ($(this).data('big-icon')) {\n $(\".speedButtonNavBar\").removeClass('smallicons');\n } else {\n $(\".speedButtonNavBar\").addClass('smallicons');\n }\n root.setActiveNavBarItem($(this).data().name);\n event.preventDefault();\n });\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").ajaxlink({\n target: $('.mainContent'),\n ajaxtype: 'GET',\n afterpost: root.navBarItemAfterPost,\n beforepost: root.navBarItemBeforepost\n });\n $(\".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]\").bind('click', function () {\n root.clearArchiveModuleDataTableState();\n });\n };\n this.loadMainContent = function (url, data, callBack) {\n if (!callBack) {\n callBack = root.afterLoadMainContent;\n } else {\n console.log('van callback');\n console.log(callBack);\n }\n $('.mainContent').load(url, data, callBack);\n };\n /*\r\n * Pass options when class instantiated\r\n */\n this.construct(options);\n};\n\n/*\r\n$.fn.ajaxlink = function(options){\r\n\r\n};\r\nimport './ajaxLink';\r\n\r\n* */\nwindow.APP = {};\n$(document).ready(function () {\n console.log('ready doc');\n //$('.datepicker').datepicker();\n Mustache.tags = ['[[', ']]'];\n // = [ '<%', '%>' ];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QztFQUVELElBQUksQ0FBQ1ksZUFBZSxHQUFDLFVBQVUzRyxHQUFHLEVBQUN4RSxJQUFJLEVBQUNvTCxRQUFRLEVBQUM7SUFFN0MsSUFBRyxDQUFDQSxRQUFRLEVBQUM7TUFDVEEsUUFBUSxHQUFDaEMsSUFBSSxDQUFDakIsb0JBQW9CO0lBQ3RDLENBQUMsTUFBSTtNQUNEeEksT0FBTyxDQUFDQyxHQUFHLENBQUMsY0FBYyxDQUFDO01BQzNCRCxPQUFPLENBQUNDLEdBQUcsQ0FBQ3dMLFFBQVEsQ0FBQztJQUN6QjtJQUNBOUksQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDK0ksSUFBSSxDQUNsQjdHLEdBQUcsRUFBQ3hFLElBQUksRUFBQ29MLFFBQ2IsQ0FBQztFQUNMLENBQUM7RUFDRDtBQUNKO0FBQ0E7RUFDSSxJQUFJLENBQUMvQixTQUFTLENBQUNmLE9BQU8sQ0FBQztBQUMzQixDQUFDOztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FwSyxNQUFNLENBQUMyTCxHQUFHLEdBQUMsQ0FBQyxDQUFDO0FBQ2J2SCxDQUFDLENBQUNXLFFBQVEsQ0FBQyxDQUFDcUksS0FBSyxDQUFDLFlBQVc7RUFDekIzTCxPQUFPLENBQUNDLEdBQUcsQ0FBQyxXQUFXLENBQUM7RUFDeEI7RUFDQTJMLFFBQVEsQ0FBQ0MsSUFBSSxHQUFHLENBQUUsSUFBSSxFQUFFLElBQUksQ0FBRTtFQUM5QjtBQUVKLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hcHAuanM/Y2VkNiJdLCJzb3VyY2VzQ29udGVudCI6WyJyZXF1aXJlKCcuL2Jvb3RzdHJhcCcpO1xyXG5cclxuXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKlxyXG5IZWxwZXIgZnVuY3Rpb25cclxuKi9cclxud2luZG93LmdldE1vbmRheT1mdW5jdGlvbihkYXRlLGRhdGVTdHIpIHtcclxuICAgIGlmKGRhdGVTdHIpe1xyXG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF5ID0gZGF0ZS5nZXREYXkoKSxcclxuICAgICAgICBkaWZmID0gZGF0ZS5nZXREYXRlKCkgLSBkYXkgKyAoZGF5ID09IDAgPyAtNjoxKTsgLy8gYWRqdXN0IHdoZW4gZGF5IGlzIHN1bmRheVxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuc2V0RGF0ZShkaWZmKSk7XHJcbn1cclxud2luZG93LmRlYnVnPWZ1bmN0aW9uICh0eHQpXHJcbntcclxuICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHR4dCAmJiB0eXBlb2YgdHh0ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh0eHQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xyXG4gICAgICAgICAgICBjb25zdCBzYWZlT2JqID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0eHQsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiAnW0NpcmN1bGFyXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgc2Vlbi5hZGQodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHNhZmVPYmopO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHR4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgY2F0Y2goZSl7XHJcbiAgICAgICAgY29uc29sZS5sb2codHh0KTtcclxuICAgIH1cclxufTtcclxuXHJcbndpbmRvdy5idWlsZEZvcm1EYXRhPWZ1bmN0aW9uKGZvcm1EYXRhLCBkYXRhLCBwYXJlbnRLZXkpIHtcclxuICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhKGRhdGEgaW5zdGFuY2VvZiBEYXRlKSAmJiAhKGRhdGEgaW5zdGFuY2VvZiBGaWxlKSkge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgYnVpbGRGb3JtRGF0YShmb3JtRGF0YSwgZGF0YVtrZXldLCBwYXJlbnRLZXkgPyBgJHtwYXJlbnRLZXl9WyR7a2V5fV1gIDoga2V5KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhID09IG51bGwgPyAnJyA6IGRhdGE7XHJcblxyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChwYXJlbnRLZXksIHZhbHVlKTtcclxuICAgIH1cclxufVxyXG5cclxud2luZG93Lmpzb25Ub0Zvcm1EYXRhPWZ1bmN0aW9uKGRhdGEpIHtcclxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcblxyXG4gICAgYnVpbGRGb3JtRGF0YShmb3JtRGF0YSwgZGF0YSk7XHJcblxyXG4gICAgcmV0dXJuIGZvcm1EYXRhO1xyXG59XHJcblxyXG5TdHJpbmcucHJvdG90eXBlLmNhcGl0YWxpemUgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5zbGljZSgxKVxyXG59XHJcblxyXG53aW5kb3cuYXJyYXlSZW1vdmU9ZnVuY3Rpb24oYXJyLCB2YWx1ZSkge1xyXG5cclxuICAgIHJldHVybiBhcnIuZmlsdGVyKGZ1bmN0aW9uKGVsZSl7XHJcbiAgICAgICAgcmV0dXJuIGVsZSAhPSB2YWx1ZTtcclxuICAgIH0pO1xyXG59XHJcbndpbmRvdy5nZXRSYW5kb21JbnQ9ZnVuY3Rpb24gKG1heD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUixtaW49MCkge1xyXG4gICAgZGVidWcobWF4KTtcclxuICAgIGRlYnVnKG1pbik7XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxufVxyXG5cclxud2luZG93LnNldEltYWdlRnJvbUxvY2FsPWZ1bmN0aW9uKGlucHV0LHRhcmdldEltZ0Nzc1NlbGVjdG9yKSB7XHJcbiAgICBpZiAoaW5wdXQuZmlsZXMgJiYgaW5wdXQuZmlsZXNbMF0pIHtcclxuICAgICAgICBsZXQgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgJCh0YXJnZXRJbWdDc3NTZWxlY3RvcikuYXR0cignc3JjJywgZS50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoaW5wdXQuZmlsZXNbMF0pO1xyXG4gICAgfVxyXG59XHJcblxyXG5yZXF1aXJlKCcuL2xhdGluaXNlJyk7XHJcblxyXG4vKlxyXG5kaXNhYmxlIGJhY2sgYnV0dG9uXHJcbiAqL1xyXG4kKGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSkge1xyXG4gICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSgnJywgbnVsbCwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgICQod2luZG93KS5vbigncG9wc3RhdGUnLCBmdW5jdGlvbihldmVudCkge1xyXG4gICAgICAgICAgICAvLyBhbGVydCgnQmFjayBidXR0b24gd2FzIHByZXNzZWQuJyk7XHJcbiAgICAgICAgICAgIC8vZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9ICcjJztcclxuICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCcnLCBkb2N1bWVudC50aXRsZSwgd2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdtZXZhZ3knKTtcclxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn0pO1xyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuLypcclxuaW5pdCBjdXN0b20gcmFkaW8gYnV0dG9uc1xyXG4gKi9cclxud2luZG93LmluaXRSYWRpb0J1dHRvbnM9ZnVuY3Rpb24gKE9wdGlvbnMpe1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICh2YWx1ZSxub2RlKSB7XHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgJC5leHRlbmQoT3B0cywgT3B0aW9ucyk7XHJcblxyXG4gICAgJCgnLmN1c3RvbVJhZGlvQnRuR3JvdXAgLmFjdGl2ZScpLmVhY2goZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgbGV0IGFjdGl2ZVZhbHVlID0gJCh0aGlzKS5kYXRhKCd0aXRsZScpO1xyXG4gICAgICAgIGxldCB0YXJnZXQgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Jyt0YXJnZXQrJ10nKS5wcm9wKCd2YWx1ZScsIGFjdGl2ZVZhbHVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgICQoJy5jdXN0b21SYWRpb0J0bkdyb3VwIGEnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCBhJykuYmluZCgnY2xpY2snLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgbGV0IHNlbCA9ICQodGhpcykuZGF0YSgndGl0bGUnKTtcclxuICAgICAgICBsZXQgdG9nID0gJCh0aGlzKS5kYXRhKCd0b2dnbGUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPScrdG9nKyddJykucHJvcCgndmFsdWUnLCBzZWwpO1xyXG4gICAgICAgICQoJ2FbZGF0YS10b2dnbGU9XCInK3RvZysnXCJdJykubm90KCdbZGF0YS10aXRsZT1cIicrc2VsKydcIl0nKS5yZW1vdmVDbGFzcygnYWN0aXZlJykuYWRkQ2xhc3MoJ25vdEFjdGl2ZScpO1xyXG4gICAgICAgICQoJ2FbZGF0YS10b2dnbGU9XCInK3RvZysnXCJdW2RhdGEtdGl0bGU9XCInK3NlbCsnXCJdJykucmVtb3ZlQ2xhc3MoJ25vdEFjdGl2ZScpLmFkZENsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICBPcHRzLm9uQ2hhbmdlKHNlbCx0b2cpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vLyAgRGVmYXVsdHNcclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiQuZXh0ZW5kKCB0cnVlLCAkLmZuLmRhdGFUYWJsZS5kZWZhdWx0cywge1xyXG4gICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICB9LFxyXG4gICAgbGVuZ3RoTWVudTogW1xyXG4gICAgICAgIFsgMTAsIDI1LCA1MCwgLTEgXSxcclxuICAgICAgICBbICcxMCBzb3InLCAnMjUgc29yJywgJzUwIHNvcicsICfDlnNzemVzJyBdXHJcbiAgICBdLFxyXG4gICAgYnV0dG9uczp7XHJcbiAgICAgICAgZG9tOntcclxuICAgICAgICAgICAgYnV0dG9uOntcclxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTonZmctYnV0dG9uIHVpLWJ1dHRvbiBkYXRhVGFibGVIZWFkZXJCdXR0b25zJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbiAgICBkb206ICc8XCJmZy10b29sYmFyIHVpLXRvb2xiYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLXRsIHVpLWNvcm5lci10clwibEJmcj4nK1xyXG4gICAgICAgICd0JytcclxuICAgICAgICAnPFwiZmctdG9vbGJhciB1aS10b29sYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1ibCB1aS1jb3JuZXItYnJcImlwPicsXHJcblxyXG59ICk7XHJcbklucHV0bWFzay5leHRlbmREZWZpbml0aW9ucyh7XHJcbiAgICAneCc6IHtcclxuICAgICAgICB2YWxpZGF0b3I6IFwiW1xcLiwtw6HDqcOtw7PDtsWRw7rDoMOow6zDssO5w7zFscOBw4nDjcOTw5bFkMOaw4DDiMOMw5LDmcOcxbBBLVphLXowLTkgXVwiLFxyXG4gICAgICAgIC8vY2FyZGluYWxpdHk6IDFcclxuICAgIH1cclxufSk7XHJcblxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiQuZm4uc2VsZWN0Mi5kZWZhdWx0cy5zZXQoJ2xhbmd1YWdlJywgJ2pwJyk7XHJcbndpbmRvdy5zZWxlY3QyQ3JlYXRlVGFnPWZ1bmN0aW9uIChwYXJhbXMpe1xyXG4gICAgdmFyIHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG4gICAgdmFyIGNvdW50ID0gMFxyXG4gICAgdmFyIGV4aXN0c1ZhciA9IGZhbHNlO1xyXG4gICAgLy9jaGVjayBpZiB0aGVyZSBpcyBhbnkgb3B0aW9uIGFscmVhZHlcclxuICAgIGlmKCQoJyNrZXl3b3JkcyBvcHRpb24nKS5sZW5ndGggPiAwKXtcclxuICAgICAgICAkKCcja2V5d29yZHMgb3B0aW9uJykuZWFjaChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS50ZXh0KCkudG9VcHBlckNhc2UoKSA9PSB0ZXJtLnRvVXBwZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIGV4aXN0c1ZhciA9IHRydWVcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBleGlzdHNWYXIgPSBmYWxzZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoZXhpc3RzVmFyKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBwYXJhbXMudGVybSxcclxuICAgICAgICAgICAgdGV4dDogcGFyYW1zLnRlcm0sXHJcbiAgICAgICAgICAgIG5ld1RhZzogdHJ1ZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vc2luY2Ugc2VsZWN0IGhhcyAwIG9wdGlvbnMsIGFkZCBuZXcgd2l0aG91dCBjb21wYXJpbmdcclxuICAgIGVsc2V7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICB0ZXh0OiBwYXJhbXMudGVybSxcclxuICAgICAgICAgICAgbmV3VGFnOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG5cclxud2luZG93LmFqYXhFcnJvckhhbmRsZXI9IGZ1bmN0aW9uICh4aHIsIGFqYXhPcHRpb25zLCB0aHJvd25FcnJvcil7XHJcbiAgICBkZWJ1Zyh0aGlzKTtcclxuICAgIGNvbnNvbGUuZXJyb3IoeGhyKTtcclxuICAgIGNvbnNvbGUuZXJyb3IoYWpheE9wdGlvbnMpO1xyXG4gICAgY29uc29sZS5lcnJvcih0aHJvd25FcnJvcik7XHJcblxyXG4gICAgLy8gQml6dG9uc8OhZ2kgZWxsZW7FkXJ6w6lzIOKAkyBoYSBuaW5jcyByZXNwb25zZUpTT04gKHBsLiBIVE1MIHbDoWxhc3opXHJcbiAgICBpZiAoIXhoci5yZXNwb25zZUpTT04pIHtcclxuICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeydkZXRhaWwnOiAnVsOhcmF0bGFuIHN6ZXJ2ZXJoaWJhLiBLw6lyasO8ayBwcsOzYsOhbGphIMO6anJhIGvDqXPFkWJiLid9KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVmFsaWTDoWNpw7NzIGhpYsOhayAoNDIyKSDigJMgZXpla2V0IHLDqXN6bGV0ZXNlbiBtZWdqZWxlbsOtdGrDvGtcclxuICAgIGlmICh4aHIucmVzcG9uc2VKU09OLmVycm9ycykge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkMi0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICBpZihcImpzb25hcGlcIiBpbiB4aHIucmVzcG9uc2VKU09OKXtcclxuICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVySnNvbkFQSSh4aHIucmVzcG9uc2VKU09OLmVycm9ycyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih4aHIucmVzcG9uc2VKU09OLmVycm9ycyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gRWd5ZWRpIHJlZmVyZW5jaWEga8OzZG9zIGhpYmEgKDUwMCwgc3RiLilcclxuICAgIGVsc2UgaWYgKHhoci5yZXNwb25zZUpTT04uZXJyb3JfcmVmKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImVycm9yX3JlZjogXCIgKyB4aHIucmVzcG9uc2VKU09OLmVycm9yX3JlZik7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHtcclxuICAgICAgICAgICAgdGl0bGU6IFwiU3plcnZlcmhpYmFcIixcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJWw6FyYXRsYW4gaGliYSB0w7ZydMOpbnQgYSBmZWxkb2xnb3rDoXMgc29yw6FuLjxicj5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgIFwiPHNtYWxsPkhpdmF0a296w6FzaSBrw7NkOiA8c3Ryb25nPlwiICsgeGhyLnJlc3BvbnNlSlNPTi5lcnJvcl9yZWYgKyBcIjwvc3Ryb25nPjwvc21hbGw+PGJyPlwiICtcclxuICAgICAgICAgICAgICAgICAgICAgXCI8c21hbGw+S8OpcmrDvGssIGV6dCBhIGvDs2RvdCBhZGphIG1lZyBhIGhpYmFqZWxlbnTDqXNiZW4uPC9zbWFsbD5cIixcclxuICAgICAgICAgICAgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyA0MDRcclxuICAgIGVsc2UgaWYgKHhoci5zdGF0dXMgPT0gNDA0KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImQzLS0tLS0tLS0tLS0tLS0tXCIpO1xyXG4gICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih7J2RldGFpbCc6J05pbmNzIGlseWVuIGVsZW0uJ30pO1xyXG4gICAgfVxyXG4gICAgLy8gRWd5w6liIGlzbWVyZXRsZW4gaGliYVxyXG4gICAgZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcImQ0LS0tLS0tLS0tLS0tLS0tXCIpO1xyXG4gICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlcih7J2RldGFpbCc6J8OBbHRhbMOhbm9zIGhpYmEuJ30pO1xyXG4gICAgfVxyXG59XHJcbndpbmRvdy5hamF4RXJyb3JGaWVsZEhhbmRsZXJKc29uQVBJPSBmdW5jdGlvbiAoZXJyb3JzLCBjb250YWluZXIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoXCJkNi0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgIGxldCB0b2FzdEJvZHlIdG1sID0gJyc7XHJcbiAgICBsZXQgdG9hc3RUaXRsZSA9ICdIaWJhJztcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JzKTtcclxuICAgICQuZWFjaChlcnJvcnMsIGZ1bmN0aW9uIChpbmRleCwgdmFsdWUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHZhbHVlKTtcclxuICAgICAgICB0b2FzdFRpdGxlID0gJ0hpYmEnO1xyXG4gICAgICAgIHRvYXN0Qm9keUh0bWwgPSAnJztcclxuICAgICAgICBpZihcInRpdGxlXCIgaW4gdmFsdWUpe1xyXG4gICAgICAgICAgICB0b2FzdFRpdGxlPXZhbHVlLnRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihcImRldGFpbFwiIGluIHZhbHVlKXtcclxuICAgICAgICAgICAgdG9hc3RCb2R5SHRtbCArPSAnPGRpdj4nICsgdmFsdWUuZGV0YWlsICsgJzxkaXY+JztcclxuICAgICAgICB9XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKHtcclxuICAgICAgICAgICAgdGl0bGU6IHRvYXN0VGl0bGUsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRvYXN0Qm9keUh0bWwsXHJcbiAgICAgICAgICAgIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgICAvLyBTVUNDRVNTICh6w7ZsZClcclxuICAgICAgICAgICAgdGltZW91dDogMTAwMDBcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcbndpbmRvdy5hamF4RXJyb3JGaWVsZEhhbmRsZXIgPSBmdW5jdGlvbiAoZXJyb3JzLCBjb250YWluZXIpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoXCJkNS0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JzKTtcclxuICAgIGxldCB0b2FzdEJvZHlIdG1sID0gJyc7XHJcbiAgICAkLmVhY2goZXJyb3JzLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgdG9hc3RCb2R5SHRtbCArPSAnPGRpdj4nICsgdmFsdWUgKyAnPGRpdj4nO1xyXG4gICAgfSk7XHJcblxyXG4gICAgVG9hc3QuY3JlYXRlKHtcclxuICAgICAgICB0aXRsZTogXCJIaWJhIVwiLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRvYXN0Qm9keUh0bWwsXHJcbiAgICAgICAgc3RhdHVzOiBUT0FTVF9TVEFUVVMuREFOR0VSLCAgIC8vIFNVQ0NFU1MgKHrDtmxkKVxyXG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwXHJcbiAgICB9KTtcclxufVxyXG4kLmFqYXhTZXR1cCh7XHJcbiAgICBlcnJvcjphamF4RXJyb3JIYW5kbGVyLFxyXG59KTtcclxuLypcclxuZGF0ZXBpY2tlciBhZnRlclNob3cgZnVuY3Rpb25cclxuICovXHJcbiQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcl9vcmlnaW5hbCA9ICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcjtcclxuJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24oaW5zdCkge1xyXG4gICAgJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyX29yaWdpbmFsKGluc3QpO1xyXG4gICAgbGV0IGFmdGVyU2hvdyA9IHRoaXMuX2dldChpbnN0LCAnYWZ0ZXJTaG93Jyk7XHJcbiAgICBpZiAoYWZ0ZXJTaG93KVxyXG4gICAgICAgIGFmdGVyU2hvdy5hcHBseSgoaW5zdC5pbnB1dCA/IGluc3QuaW5wdXRbMF0gOiBudWxsKSk7ICAvLyB0cmlnZ2VyIGN1c3RvbSBjYWxsYmFja1xyXG59XHJcblxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbndpbmRvdy5FbWVncmVuZGVsZXNEZWZhdWx0cz17XHJcbiAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOiBmdW5jdGlvbiAoKSB7fSxcclxuICAgIGRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uOiBmdW5jdGlvbiAoaWQsYXJncykge1xyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXIgYnV0dG9uRGVsZXRlXCIgZGF0YS1idXR0b25UeXBlPVwiZGVsZXRlXCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIiB0aXRsZT1cIlTDtnJsw6lzXCI+JyArXHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImZhcyBmYS10cmFzaFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPidcclxuXHJcbiAgICB9LFxyXG4gICAgZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbjogZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICBsZXQgdGl0bGU9J0FkYXRvayc7XHJcbiAgICAgICAgaWYodHlwZW9mIGFyZ3NbMV0udGl0bGUhPT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgdGl0bGU9YXJnc1sxXS50aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWluZm8gYnV0dG9uRWRpdFwiICBkYXRhLWJ1dHRvblR5cGU9XCJlZGl0XCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIiB0aXRsZT1cIicrdGl0bGUrJ1wiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtcGVuY2lsLWFsdFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPidcclxuXHJcbiAgICB9LFxyXG4gICAgZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbjogZnVuY3Rpb24gKGlkLGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgZGF0YVRhYmxlUm93QnV0dG9uIGJ1dHRvblZpZXdcIiAgZGF0YS1idXR0b25UeXBlPVwidmlld1wiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCIgdGl0bGU9XCJNZWd0ZWtpbnRcIj4nICtcclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZmFzIGZhLWV5ZVwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPidcclxuXHJcbiAgICB9LFxyXG4gICAgZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbjogZnVuY3Rpb24gKGlkLGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYXJrIGRhdGFUYWJsZVJvd0J1dHRvbiBidXR0b25BdHRhY2htZW50XCIgIGRhdGEtYnV0dG9uVHlwZT1cImF0dGFjaG1lbnRcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiQ3NhdG9sbcOhbnlcIj4nICtcclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZmFzIGZhLXBhcGVyY2xpcFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgJzwvYnV0dG9uPidcclxuXHJcbiAgICB9LFxyXG4gICAgZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2s6ZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhhcmdzKTtcclxuICAgIH0sXHJcblxyXG4gICAgYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ6ZnVuY3Rpb24gKGFyZ3MpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhhcmdzKTtcclxuICAgIH0sXHJcblxyXG5cclxufTtcclxuXHJcbmlmKHR5cGVvZiBEYXRhTW9kZWw9PT0ndW5kZWZpbmVkJyl7XHJcbiAgICBjbGFzcyBEYXRhTW9kZWx7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICAgICAqL1xyXG4gICAgICAgIE9wdHMgPSB7XHJcbiAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgJC5leHRlbmQodGhpcywgZGF0YSk7XHJcbiAgICAgICAgICAgICQuZXh0ZW5kKHRoaXMuT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgc2V0RGF0YSAoZGF0YSl7XHJcbiAgICAgICAgICAgICQuZXh0ZW5kKHRoaXMsIGRhdGEpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0RGF0YShpbmRleCl7XHJcbiAgICAgICAgICAgIGlmKGluZGV4KXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2luZGV4XTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB3aW5kb3cuRGF0YU1vZGVsPURhdGFNb2RlbDtcclxufVxyXG5cclxuXHJcbndpbmRvdy5FbWVncmVuZGVsZXMgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIG15VmFyOiAnRW1lZ3JlbmRlbGVzIHZhbHVlJyxcclxuICAgICAgICBkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbjp7fSxcclxuICAgICAgICBkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6e30sXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp7fSxcclxuICAgICAgICBkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjazp7fSxcclxuICAgICAgICBhZnRlckxvYWRNYWluQ29udGVudDp7fSxcclxuICAgICAgICBVcmw6e30sXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IFB1YmxpY1Zhcj17fTtcclxuICAgIGxldCBQdWJsaWNWYXIyPXsnYXNkJzonMjEnfTtcclxuICAgIGxldCBBcGlUb2tlbj1udWxsO1xyXG4gICAgbGV0IHJvb3Q9dGhpcztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgICAgICAgLy8kLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCB3aW5kb3cuRW1lZ3JlbmRlbGVzRGVmYXVsdHMsIG9wdGlvbnMpO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnNldE9wdHM9ZnVuY3Rpb24ob3B0aW9ucyl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nZXRPcHRzPWZ1bmN0aW9uKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbihhcmd1bWVudHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b24oYXJndW1lbnRzKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFmdGVyTG9hZE1haW5Db250ZW50PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmFmdGVyTG9hZE1haW5Db250ZW50KGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2soYXJndW1lbnRzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjaz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhdGFibGVBZGRSb3dBY3Rpb249ZnVuY3Rpb24gKENTU1NlbGVjdG9yKXtcclxuICAgICAgICBpZighQ1NTU2VsZWN0b3Ipe1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3IrJyB0ciBidXR0b24nKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvcisnIHRyIGJ1dHRvbicpLm9uKCdjbGljaycsQVBQLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2sgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLypcclxuICAgICAqIFB1YmxpYyBtZXRob2RcclxuICAgICAqIENhbiBiZSBjYWxsZWQgb3V0c2lkZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICB0aGlzLm15UHVibGljTWV0aG9kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKE9wdHMpO1xyXG5cclxuICAgICAgICBteVByaXZhdGVNZXRob2QoKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRBcGlUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xyXG4gICAgICAgIHJvb3QuQXBpVG9rZW49dG9rZW47XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZ2V0QXBpVG9rZW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuQXBpVG9rZW47XHJcbiAgICB9O1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQcml2YXRlIG1ldGhvZFxyXG4gICAgICogQ2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBjb25zdCBteVByaXZhdGVNZXRob2QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2FjY2Vzc2VkIHByaXZhdGUgbWV0aG9kJyk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1OYW1lXHJcbiAgICAgKi9cclxuICAgIHRoaXMuc2V0QWN0aXZlTmF2QmFySXRlbT1mdW5jdGlvbihpdGVtTmFtZSl7XHJcbiAgICAgICAgJCgnLnNwZWVkQnV0dG9uTmF2QmFyIGxpJykucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgJCgnLnNwZWVkQnV0dG9uTmF2QmFyIGxpLmljb25ob2xkZXJNb2R1bCcraXRlbU5hbWUpLmFkZENsYXNzKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0QWN0aXZlTmF2QmFySXRlbT1mdW5jdGlvbigpe1xyXG4gICAgICByZXR1cm4gJCgnLnNwZWVkQnV0dG9uTmF2QmFyIC5zZWxlY3RlZCcpLmZpbmQoJ2EnKS5kYXRhKCduYW1lJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZT1mdW5jdGlvbigpe1xyXG4gICAgICAgIGlmKEFQUC5PcmRlckFyY2hpdmVNb2R1bGUhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZScpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyJyk7XHJcbiAgICAgICAgICAgICAgICBBUFAuT3JkZXJBcmNoaXZlTW9kdWxlLmRhdGFUYWJsZS5zdGF0ZS5jbGVhcigpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLm5hdkJhckl0ZW1CZWZvcmVwb3N0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYXZCYXJJdGVtQmVmb3JlcG9zdCcpO1xyXG4gICAgICAgIGlmKHJvb3QuZ2V0QWN0aXZlTmF2QmFySXRlbSgpIT09J2FjdGl2ZU9yZGVyJyl7XHJcbiAgICAgICAgICAgIHJvb3QuY2xlYXJBcmNoaXZlTW9kdWxlRGF0YVRhYmxlU3RhdGUoKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm5hdkJhckl0ZW1BZnRlclBvc3Q9ZnVuY3Rpb24gKCl7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0TmF2QmFyPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoXCIuc3BlZWRCdXR0b25OYXZCYXIgYTpub3QoW2RhdGEtdGFyZ2V0PV9ibGFua10pOm5vdChbZGF0YS1uby1hamF4XSlcIikuYmluZCgnY2xpY2snLGZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCQodGhpcykuZGF0YSgpLm5hbWUpO1xyXG4gICAgICAgICAgICBpZigkKHRoaXMpLmRhdGEoJ2JpZy1pY29uJykpe1xyXG4gICAgICAgICAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhclwiKS5yZW1vdmVDbGFzcygnc21hbGxpY29ucycpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICQoXCIuc3BlZWRCdXR0b25OYXZCYXJcIikuYWRkQ2xhc3MoJ3NtYWxsaWNvbnMnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcm9vdC5zZXRBY3RpdmVOYXZCYXJJdGVtKCQodGhpcykuZGF0YSgpLm5hbWUpO1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoXCIuc3BlZWRCdXR0b25OYXZCYXIgYTpub3QoW2RhdGEtdGFyZ2V0PV9ibGFua10pOm5vdChbZGF0YS1uby1hamF4XSlcIikuYWpheGxpbmsoe1xyXG4gICAgICAgICAgICB0YXJnZXQ6JCgnLm1haW5Db250ZW50JyksXHJcbiAgICAgICAgICAgIGFqYXh0eXBlOidHRVQnLFxyXG4gICAgICAgICAgICBhZnRlcnBvc3Q6cm9vdC5uYXZCYXJJdGVtQWZ0ZXJQb3N0LFxyXG4gICAgICAgICAgICBiZWZvcmVwb3N0OnJvb3QubmF2QmFySXRlbUJlZm9yZXBvc3QsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChcIi5zcGVlZEJ1dHRvbk5hdkJhciBhW2RhdGEtdGFyZ2V0PV9ibGFua10sIC5zcGVlZEJ1dHRvbk5hdkJhciBhW2RhdGEtbm8tYWpheF1cIikuYmluZCgnY2xpY2snLGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHJvb3QuY2xlYXJBcmNoaXZlTW9kdWxlRGF0YVRhYmxlU3RhdGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRNYWluQ29udGVudD1mdW5jdGlvbiAodXJsLGRhdGEsY2FsbEJhY2spe1xyXG5cclxuICAgICAgICBpZighY2FsbEJhY2spe1xyXG4gICAgICAgICAgICBjYWxsQmFjaz1yb290LmFmdGVyTG9hZE1haW5Db250ZW50O1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFuIGNhbGxiYWNrJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNhbGxCYWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJCgnLm1haW5Db250ZW50JykubG9hZChcclxuICAgICAgICAgICAgdXJsLGRhdGEsY2FsbEJhY2tcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgLypcclxuICAgICAqIFBhc3Mgb3B0aW9ucyB3aGVuIGNsYXNzIGluc3RhbnRpYXRlZFxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zKTtcclxufTtcclxuXHJcblxyXG4vKlxyXG4kLmZuLmFqYXhsaW5rID0gZnVuY3Rpb24ob3B0aW9ucyl7XHJcblxyXG59O1xyXG5pbXBvcnQgJy4vYWpheExpbmsnO1xyXG5cclxuKiAqL1xyXG53aW5kb3cuQVBQPXt9O1xyXG4kKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKXtcclxuICAgIGNvbnNvbGUubG9nKCdyZWFkeSBkb2MnKTtcclxuICAgIC8vJCgnLmRhdGVwaWNrZXInKS5kYXRlcGlja2VyKCk7XHJcbiAgICBNdXN0YWNoZS50YWdzID0gWyAnW1snLCAnXV0nIF07XHJcbiAgICAvLyA9IFsgJzwlJywgJyU+JyBdO1xyXG5cclxufSk7XHJcblxyXG5cclxuXHJcbiJdLCJuYW1lcyI6WyJyZXF1aXJlIiwid2luZG93IiwiZ2V0TW9uZGF5IiwiZGF0ZSIsImRhdGVTdHIiLCJEYXRlIiwiZGF5IiwiZ2V0RGF5IiwiZGlmZiIsImdldERhdGUiLCJzZXREYXRlIiwiZGVidWciLCJ0eHQiLCJfdHlwZW9mIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VlbiIsIldlYWtTZXQiLCJzYWZlT2JqIiwiSlNPTiIsInBhcnNlIiwic3RyaW5naWZ5Iiwia2V5IiwidmFsdWUiLCJoYXMiLCJhZGQiLCJjb25zb2xlIiwibG9nIiwiZSIsImJ1aWxkRm9ybURhdGEiLCJmb3JtRGF0YSIsImRhdGEiLCJwYXJlbnRLZXkiLCJGaWxlIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJjb25jYXQiLCJhcHBlbmQiLCJqc29uVG9Gb3JtRGF0YSIsIkZvcm1EYXRhIiwiU3RyaW5nIiwicHJvdG90eXBlIiwiY2FwaXRhbGl6ZSIsImNoYXJBdCIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJhcnJheVJlbW92ZSIsImFyciIsImZpbHRlciIsImVsZSIsImdldFJhbmRvbUludCIsIm1heCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsIk51bWJlciIsIk1BWF9TQUZFX0lOVEVHRVIiLCJtaW4iLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJzZXRJbWFnZUZyb21Mb2NhbCIsImlucHV0IiwidGFyZ2V0SW1nQ3NzU2VsZWN0b3IiLCJmaWxlcyIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCIkIiwiYXR0ciIsInRhcmdldCIsInJlc3VsdCIsInJlYWRBc0RhdGFVUkwiLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwibG9jYXRpb24iLCJocmVmIiwib24iLCJldmVudCIsImRvY3VtZW50IiwidGl0bGUiLCJzdG9wUHJvcGFnYXRpb24iLCJpbml0UmFkaW9CdXR0b25zIiwiT3B0aW9ucyIsIk9wdHMiLCJvbkNoYW5nZSIsIm5vZGUiLCJleHRlbmQiLCJlYWNoIiwiYWN0aXZlVmFsdWUiLCJwcm9wIiwidW5iaW5kIiwiYmluZCIsInNlbCIsInRvZyIsIm5vdCIsInJlbW92ZUNsYXNzIiwiYWRkQ2xhc3MiLCJmbiIsImRhdGFUYWJsZSIsImRlZmF1bHRzIiwibGFuZ3VhZ2UiLCJ1cmwiLCJsZW5ndGhNZW51IiwiYnV0dG9ucyIsImRvbSIsImJ1dHRvbiIsImNsYXNzTmFtZSIsIklucHV0bWFzayIsImV4dGVuZERlZmluaXRpb25zIiwidmFsaWRhdG9yIiwiVG9hc3QiLCJlbmFibGVUaW1lcnMiLCJzZWxlY3QyIiwic2V0Iiwic2VsZWN0MkNyZWF0ZVRhZyIsInBhcmFtcyIsInRlcm0iLCJ0cmltIiwiY291bnQiLCJleGlzdHNWYXIiLCJ0ZXh0IiwiaWQiLCJuZXdUYWciLCJhamF4RXJyb3JIYW5kbGVyIiwieGhyIiwiYWpheE9wdGlvbnMiLCJ0aHJvd25FcnJvciIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiZXJyb3JzIiwiYWpheEVycm9yRmllbGRIYW5kbGVySnNvbkFQSSIsImVycm9yX3JlZiIsImNyZWF0ZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJEQU5HRVIiLCJ0aW1lb3V0IiwiY29udGFpbmVyIiwidG9hc3RCb2R5SHRtbCIsInRvYXN0VGl0bGUiLCJpbmRleCIsImRldGFpbCIsImFqYXhTZXR1cCIsImRhdGVwaWNrZXIiLCJfdXBkYXRlRGF0ZXBpY2tlcl9vcmlnaW5hbCIsIl91cGRhdGVEYXRlcGlja2VyIiwiaW5zdCIsImFmdGVyU2hvdyIsIl9nZXQiLCJhcHBseSIsIkVtZWdyZW5kZWxlc0RlZmF1bHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiYXJncyIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbiIsImRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrIiwiYWZ0ZXJMb2FkTWFpbkNvbnRlbnQiLCJEYXRhTW9kZWwiLCJfRGF0YU1vZGVsMiIsIm9wdGlvbnMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfZGVmaW5lUHJvcGVydHkiLCJhY3RpdmUiLCJfY3JlYXRlQ2xhc3MiLCJzZXREYXRhIiwiZ2V0RGF0YSIsIkVtZWdyZW5kZWxlcyIsIm15VmFyIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsIlVybCIsIlB1YmxpY1ZhciIsIlB1YmxpY1ZhcjIiLCJBcGlUb2tlbiIsInJvb3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJzZXRPcHRzIiwiZ2V0T3B0cyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsIkNTU1NlbGVjdG9yIiwib2ZmIiwiQVBQIiwibXlQdWJsaWNNZXRob2QiLCJteVByaXZhdGVNZXRob2QiLCJzZXRBcGlUb2tlbiIsInRva2VuIiwiZ2V0QXBpVG9rZW4iLCJzZXRBY3RpdmVOYXZCYXJJdGVtIiwiaXRlbU5hbWUiLCJnZXRBY3RpdmVOYXZCYXJJdGVtIiwiZmluZCIsImNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlIiwiT3JkZXJBcmNoaXZlTW9kdWxlIiwic3RhdGUiLCJjbGVhciIsIm5hdkJhckl0ZW1CZWZvcmVwb3N0IiwibmF2QmFySXRlbUFmdGVyUG9zdCIsImluaXROYXZCYXIiLCJwcmV2ZW50RGVmYXVsdCIsImFqYXhsaW5rIiwiYWpheHR5cGUiLCJhZnRlcnBvc3QiLCJiZWZvcmVwb3N0IiwibG9hZE1haW5Db250ZW50IiwiY2FsbEJhY2siLCJsb2FkIiwicmVhZHkiLCJNdXN0YWNoZSIsInRhZ3MiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./resources/js/app.js\n\n}"); +eval("{function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n__webpack_require__(/*! ./bootstrap */ \"./resources/js/bootstrap.js\");\n\n//----------------------------------------------------------------------\n/*\r\nHelper function\r\n*/\nwindow.getMonday = function (date, dateStr) {\n if (dateStr) {\n date = new Date(dateStr);\n }\n var day = date.getDay(),\n diff = date.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday\n return new Date(date.setDate(diff));\n};\nwindow.debug = function (txt) {\n try {\n if (txt && _typeof(txt) === 'object' && !Array.isArray(txt)) {\n var seen = new WeakSet();\n var safeObj = JSON.parse(JSON.stringify(txt, function (key, value) {\n if (_typeof(value) === 'object' && value !== null) {\n if (seen.has(value)) return '[Circular]';\n seen.add(value);\n }\n return value;\n }));\n console.log(safeObj);\n } else {\n console.log(txt);\n }\n } catch (e) {\n console.log(txt);\n }\n};\nwindow.buildFormData = function (formData, data, parentKey) {\n if (data && _typeof(data) === 'object' && !(data instanceof Date) && !(data instanceof File)) {\n Object.keys(data).forEach(function (key) {\n buildFormData(formData, data[key], parentKey ? \"\".concat(parentKey, \"[\").concat(key, \"]\") : key);\n });\n } else {\n var value = data == null ? '' : data;\n formData.append(parentKey, value);\n }\n};\nwindow.jsonToFormData = function (data) {\n var formData = new FormData();\n buildFormData(formData, data);\n return formData;\n};\nString.prototype.capitalize = function () {\n return this.charAt(0).toUpperCase() + this.slice(1);\n};\nwindow.arrayRemove = function (arr, value) {\n return arr.filter(function (ele) {\n return ele != value;\n });\n};\nwindow.getRandomInt = function () {\n var max = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MAX_SAFE_INTEGER;\n var min = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n debug(max);\n debug(min);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nwindow.setImageFromLocal = function (input, targetImgCssSelector) {\n if (input.files && input.files[0]) {\n var reader = new FileReader();\n reader.onload = function (e) {\n $(targetImgCssSelector).attr('src', e.target.result);\n };\n reader.readAsDataURL(input.files[0]);\n }\n};\n__webpack_require__(/*! ./latinise */ \"./resources/js/latinise.js\");\n\n/*\r\ndisable back button\r\n */\n$(function () {\n if (window.history && window.history.pushState) {\n window.history.pushState('', null, window.location.href);\n $(window).on('popstate', function (event) {\n // alert('Back button was pressed.');\n //document.location.href = '#';\n window.history.pushState('', document.title, window.location.href);\n //console.log('mevagy');\n event.stopPropagation();\n });\n }\n});\n//----------------------------------------------------------------------\n/*\r\ninit custom radio buttons\r\n */\nwindow.initRadioButtons = function (Options) {\n var Opts = {\n onChange: function onChange(value, node) {}\n };\n $.extend(Opts, Options);\n $('.customRadioBtnGroup .active').each(function () {\n var activeValue = $(this).data('title');\n var target = $(this).data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\n });\n $('.customRadioBtnGroup a').unbind('click');\n $('.customRadioBtnGroup a').bind('click', function () {\n var sel = $(this).data('title');\n var tog = $(this).data('toggle');\n $('input[name=' + tog + ']').prop('value', sel);\n $('a[data-toggle=\"' + tog + '\"]').not('[data-title=\"' + sel + '\"]').removeClass('active').addClass('notActive');\n $('a[data-toggle=\"' + tog + '\"][data-title=\"' + sel + '\"]').removeClass('notActive').addClass('active');\n Opts.onChange(sel, tog);\n });\n};\n\n//----------------------------------------------------------------------\n// Defaults\n//----------------------------------------------------------------------\n$.extend(true, $.fn.dataTable.defaults, {\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n lengthMenu: [[10, 25, 50, -1], ['10 sor', '25 sor', '50 sor', 'Összes']],\n buttons: {\n dom: {\n button: {\n className: 'fg-button ui-button dataTableHeaderButtons'\n }\n }\n },\n dom: '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-tl ui-corner-tr\"lBfr>' + 't' + '<\"fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix ui-corner-bl ui-corner-br\"ip>'\n});\nInputmask.extendDefinitions({\n 'x': {\n validator: \"[\\.,-áéíóöőúàèìòùüűÁÉÍÓÖŐÚÀÈÌÒÙÜŰA-Za-z0-9 ]\"\n //cardinality: 1\n }\n});\n\n//----------------------------------------------------------------------\nToast.enableTimers(false);\n$.fn.select2.defaults.set('language', 'jp');\nwindow.select2CreateTag = function (params) {\n var term = $.trim(params.term);\n var count = 0;\n var existsVar = false;\n //check if there is any option already\n if ($('#keywords option').length > 0) {\n $('#keywords option').each(function () {\n if ($(this).text().toUpperCase() == term.toUpperCase()) {\n existsVar = true;\n return false;\n } else {\n existsVar = false;\n }\n });\n if (existsVar) {\n return null;\n }\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n //since select has 0 options, add new without comparing\n else {\n return {\n id: params.term,\n text: params.term,\n newTag: true\n };\n }\n};\nwindow.ajaxErrorHandler = function (xhr, ajaxOptions, thrownError) {\n debug(this);\n console.error(xhr);\n console.error(ajaxOptions);\n console.error(thrownError);\n\n // Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz), megpróbáljuk parszolni\n if (!xhr.responseJSON && xhr.responseText) {\n try {\n xhr.responseJSON = JSON.parse(xhr.responseText);\n } catch (e) {\n console.error(\"Nem sikerült a responseText JSON parszolása\");\n }\n }\n\n // Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz)\n if (!xhr.responseJSON) {\n ajaxErrorFieldHandler({\n 'detail': 'Váratlan szerverhiba. Kérjük próbálja újra később.'\n });\n return;\n }\n\n // Validációs hibák (422) – ezeket részletesen megjelenítjük\n if (xhr.responseJSON.errors) {\n console.error(\"d2---------------\");\n if (\"jsonapi\" in xhr.responseJSON) {\n ajaxErrorFieldHandlerJsonAPI(xhr.responseJSON.errors);\n } else {\n ajaxErrorFieldHandler(xhr.responseJSON.errors);\n }\n }\n // Egyedi referencia kódos hiba (500, stb.)\n else if (xhr.responseJSON.error_ref) {\n console.error(\"error_ref: \" + xhr.responseJSON.error_ref);\n Toast.create({\n title: \"Szerverhiba\",\n message: \"Váratlan hiba történt a feldolgozás során.
\" + \"Hivatkozási kód: \" + xhr.responseJSON.error_ref + \"
\" + \"Kérjük, ezt a kódot adja meg a hibajelentésben.\",\n status: TOAST_STATUS.DANGER,\n timeout: 0\n });\n }\n // 404\n else if (xhr.status == 404) {\n console.error(\"d3---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Nincs ilyen elem.'\n });\n }\n // Egyéb ismeretlen hiba\n else {\n console.error(\"d4---------------\");\n ajaxErrorFieldHandler({\n 'detail': 'Általános hiba.'\n });\n }\n};\nwindow.ajaxErrorFieldHandlerJsonAPI = function (errors, container) {\n console.error(\"d6---------------\");\n var toastBodyHtml = '';\n var toastTitle = 'Hiba';\n console.error(errors);\n $.each(errors, function (index, value) {\n console.error(value);\n toastTitle = 'Hiba';\n toastBodyHtml = '';\n if (\"title\" in value) {\n toastTitle = value.title;\n }\n if (\"detail\" in value) {\n toastBodyHtml += '
' + value.detail + '
';\n }\n Toast.create({\n title: toastTitle,\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n });\n};\nwindow.ajaxErrorFieldHandler = function (errors, container) {\n console.error(\"d5---------------\");\n console.error(errors);\n var toastBodyHtml = '';\n $.each(errors, function (index, value) {\n toastBodyHtml += '
' + value + '
';\n });\n Toast.create({\n title: \"Hiba!\",\n message: toastBodyHtml,\n status: TOAST_STATUS.DANGER,\n // SUCCESS (zöld)\n timeout: 10000\n });\n};\n$.ajaxSetup({\n error: ajaxErrorHandler\n});\n/*\r\ndatepicker afterShow function\r\n */\n$.datepicker._updateDatepicker_original = $.datepicker._updateDatepicker;\n$.datepicker._updateDatepicker = function (inst) {\n $.datepicker._updateDatepicker_original(inst);\n var afterShow = this._get(inst, 'afterShow');\n if (afterShow) afterShow.apply(inst.input ? inst.input[0] : null); // trigger custom callback\n};\n\n//----------------------------------------------------------------------\nwindow.EmegrendelesDefaults = {\n datatableActionButtonClickCallBack: function datatableActionButtonClickCallBack() {},\n datatableAddRowTrashButton: function datatableAddRowTrashButton(id, args) {\n return '';\n },\n datatableAddRowEditButton: function datatableAddRowEditButton(args) {\n var title = 'Adatok';\n if (typeof args[1].title !== \"undefined\") {\n title = args[1].title;\n }\n return '';\n },\n datatableAddRowViewButton: function datatableAddRowViewButton(id, args) {\n return '';\n },\n datatableAddRowAttachmentButton: function datatableAddRowAttachmentButton(id, args) {\n return '';\n },\n datatableCustomHeadButtonClickCallBack: function datatableCustomHeadButtonClickCallBack(args) {\n console.log(args);\n },\n afterLoadMainContent: function afterLoadMainContent(args) {\n console.log(args);\n }\n};\nif (typeof DataModel === 'undefined') {\n var _DataModel2 = /*#__PURE__*/function () {\n /*\r\n * Constructor\r\n */\n function _DataModel2(data, options) {\n _classCallCheck(this, _DataModel2);\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n _defineProperty(this, \"Opts\", {\n active: false\n });\n $.extend(this, data);\n $.extend(this.Opts, options);\n }\n return _createClass(_DataModel2, [{\n key: \"setData\",\n value: function setData(data) {\n $.extend(this, data);\n }\n }, {\n key: \"getData\",\n value: function getData(index) {\n if (index) {\n return this[index];\n } else {\n return this;\n }\n }\n }]);\n }();\n ;\n window.DataModel = _DataModel2;\n}\nwindow.Emegrendeles = function (options) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n myVar: 'Emegrendeles value',\n datatableAddRowTrashButton: {},\n datatableAddRowEditButton: {},\n datatableActionButtonClickCallBack: {},\n datatableRowActionButtonClickCallBack: {},\n datatableCustomHeadButtonClickCallBack: {},\n afterLoadMainContent: {},\n Url: {}\n };\n var PublicVar = {};\n var PublicVar2 = {\n 'asd': '21'\n };\n var ApiToken = null;\n var root = this;\n /*\r\n * Constructor\r\n */\n this.construct = function (options) {\n //$.extend(Opts, options);\n console.log(this.constructor.name + ' constructor called');\n $.extend(Opts, window.EmegrendelesDefaults, options);\n };\n this.setOpts = function (options) {\n $.extend(Opts, options);\n };\n this.getOpts = function () {\n return Opts;\n };\n this.datatableAddRowTrashButton = function () {\n return Opts.datatableAddRowTrashButton(arguments);\n };\n this.datatableAddRowEditButton = function () {\n return Opts.datatableAddRowEditButton(arguments);\n };\n this.datatableAddRowViewButton = function () {\n return Opts.datatableAddRowViewButton(arguments);\n };\n this.datatableAddRowAttachmentButton = function () {\n return Opts.datatableAddRowAttachmentButton(arguments);\n };\n this.afterLoadMainContent = function () {\n return Opts.afterLoadMainContent(arguments);\n };\n this.datatableActionButtonClickCallBack = function () {\n return Opts.datatableActionButtonClickCallBack(arguments);\n };\n this.datatableRowActionButtonClickCallBack = function () {\n return Opts.datatableRowActionButtonClickCallBack(arguments);\n };\n this.datatableAddRowAction = function (CSSSelector) {\n if (!CSSSelector) {\n return;\n }\n $(CSSSelector + ' tr button').off('click');\n $(CSSSelector + ' tr button').on('click', APP.datatableRowActionButtonClickCallBack);\n };\n this.datatableCustomHeadButtonClickCallBack = function () {\n return Opts.datatableCustomHeadButtonClickCallBack(arguments);\n };\n\n /*\r\n * Public method\r\n * Can be called outside class\r\n */\n this.myPublicMethod = function () {\n console.log(Opts);\n myPrivateMethod();\n };\n this.setApiToken = function (token) {\n root.ApiToken = token;\n };\n this.getApiToken = function () {\n return root.ApiToken;\n };\n\n /*\r\n * Private method\r\n * Can only be called inside class\r\n */\n var myPrivateMethod = function myPrivateMethod() {\n console.log('accessed private method');\n };\n\n /**\r\n * @param {string} itemName\r\n */\n this.setActiveNavBarItem = function (itemName) {\n $('.speedButtonNavBar li').removeClass('selected');\n $('.speedButtonNavBar li.iconholderModul' + itemName).addClass('selected');\n return this;\n };\n this.getActiveNavBarItem = function () {\n return $('.speedButtonNavBar .selected').find('a').data('name');\n };\n this.clearArchiveModuleDataTableState = function () {\n if (APP.OrderArchiveModule != undefined) {\n console.log('APP.OrderArchiveModule');\n console.log('clear');\n APP.OrderArchiveModule.dataTable.state.clear();\n }\n };\n this.navBarItemBeforepost = function () {\n console.log('navBarItemBeforepost');\n if (root.getActiveNavBarItem() !== 'activeOrder') {\n root.clearArchiveModuleDataTableState();\n }\n ;\n };\n this.navBarItemAfterPost = function () {};\n this.initNavBar = function () {\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").bind('click', function (event) {\n console.log($(this).data().name);\n if ($(this).data('big-icon')) {\n $(\".speedButtonNavBar\").removeClass('smallicons');\n } else {\n $(\".speedButtonNavBar\").addClass('smallicons');\n }\n root.setActiveNavBarItem($(this).data().name);\n event.preventDefault();\n });\n $(\".speedButtonNavBar a:not([data-target=_blank]):not([data-no-ajax])\").ajaxlink({\n target: $('.mainContent'),\n ajaxtype: 'GET',\n afterpost: root.navBarItemAfterPost,\n beforepost: root.navBarItemBeforepost\n });\n $(\".speedButtonNavBar a[data-target=_blank], .speedButtonNavBar a[data-no-ajax]\").bind('click', function () {\n root.clearArchiveModuleDataTableState();\n });\n };\n this.loadMainContent = function (url, data, callBack) {\n if (!callBack) {\n callBack = root.afterLoadMainContent;\n } else {\n console.log('van callback');\n console.log(callBack);\n }\n $('.mainContent').load(url, data, callBack);\n };\n /*\r\n * Pass options when class instantiated\r\n */\n this.construct(options);\n};\n\n/*\r\n$.fn.ajaxlink = function(options){\r\n\r\n};\r\nimport './ajaxLink';\r\n\r\n* */\nwindow.APP = {};\n$(document).ready(function () {\n console.log('ready doc');\n //$('.datepicker').datepicker();\n Mustache.tags = ['[[', ']]'];\n // = [ '<%', '%>' ];\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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L2pzL2FwcC5qcz9jZWQ2Il0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoJy4vYm9vdHN0cmFwJyk7XHJcblxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8qXHJcbkhlbHBlciBmdW5jdGlvblxyXG4qL1xyXG53aW5kb3cuZ2V0TW9uZGF5PWZ1bmN0aW9uKGRhdGUsZGF0ZVN0cikge1xyXG4gICAgaWYoZGF0ZVN0cil7XHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBkYXkgPSBkYXRlLmdldERheSgpLFxyXG4gICAgICAgIGRpZmYgPSBkYXRlLmdldERhdGUoKSAtIGRheSArIChkYXkgPT0gMCA/IC02OjEpOyAvLyBhZGp1c3Qgd2hlbiBkYXkgaXMgc3VuZGF5XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5zZXREYXRlKGRpZmYpKTtcclxufVxyXG53aW5kb3cuZGVidWc9ZnVuY3Rpb24gKHR4dClcclxue1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBpZiAodHh0ICYmIHR5cGVvZiB0eHQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHR4dCkpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VlbiA9IG5ldyBXZWFrU2V0KCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNhZmVPYmogPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHR4dCwgKGtleSwgdmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuICdbQ2lyY3VsYXJdJztcclxuICAgICAgICAgICAgICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coc2FmZU9iaik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2codHh0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBjYXRjaChlKXtcclxuICAgICAgICBjb25zb2xlLmxvZyh0eHQpO1xyXG4gICAgfVxyXG59O1xyXG5cclxud2luZG93LmJ1aWxkRm9ybURhdGE9ZnVuY3Rpb24oZm9ybURhdGEsIGRhdGEsIHBhcmVudEtleSkge1xyXG4gICAgaWYgKGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICEoZGF0YSBpbnN0YW5jZW9mIERhdGUpICYmICEoZGF0YSBpbnN0YW5jZW9mIEZpbGUpKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhW2tleV0sIHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEgPT0gbnVsbCA/ICcnIDogZGF0YTtcclxuXHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKHBhcmVudEtleSwgdmFsdWUpO1xyXG4gICAgfVxyXG59XHJcblxyXG53aW5kb3cuanNvblRvRm9ybURhdGE9ZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuXHJcbiAgICBidWlsZEZvcm1EYXRhKGZvcm1EYXRhLCBkYXRhKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybURhdGE7XHJcbn1cclxuXHJcblN0cmluZy5wcm90b3R5cGUuY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLnNsaWNlKDEpXHJcbn1cclxuXHJcbndpbmRvdy5hcnJheVJlbW92ZT1mdW5jdGlvbihhcnIsIHZhbHVlKSB7XHJcblxyXG4gICAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24oZWxlKXtcclxuICAgICAgICByZXR1cm4gZWxlICE9IHZhbHVlO1xyXG4gICAgfSk7XHJcbn1cclxud2luZG93LmdldFJhbmRvbUludD1mdW5jdGlvbiAobWF4PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSLG1pbj0wKSB7XHJcbiAgICBkZWJ1ZyhtYXgpO1xyXG4gICAgZGVidWcobWluKTtcclxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluICsgMSkpICsgbWluO1xyXG59XHJcblxyXG53aW5kb3cuc2V0SW1hZ2VGcm9tTG9jYWw9ZnVuY3Rpb24oaW5wdXQsdGFyZ2V0SW1nQ3NzU2VsZWN0b3IpIHtcclxuICAgIGlmIChpbnB1dC5maWxlcyAmJiBpbnB1dC5maWxlc1swXSkge1xyXG4gICAgICAgIGxldCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAkKHRhcmdldEltZ0Nzc1NlbGVjdG9yKS5hdHRyKCdzcmMnLCBlLnRhcmdldC5yZXN1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkZXIucmVhZEFzRGF0YVVSTChpbnB1dC5maWxlc1swXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbnJlcXVpcmUoJy4vbGF0aW5pc2UnKTtcclxuXHJcbi8qXHJcbmRpc2FibGUgYmFjayBidXR0b25cclxuICovXHJcbiQoZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKCcnLCBudWxsLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9uKCdwb3BzdGF0ZScsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KCdCYWNrIGJ1dHRvbiB3YXMgcHJlc3NlZC4nKTtcclxuICAgICAgICAgICAgLy9kb2N1bWVudC5sb2NhdGlvbi5ocmVmID0gJyMnO1xyXG4gICAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoJycsIGRvY3VtZW50LnRpdGxlLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ21ldmFneScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSk7XHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4vKlxyXG5pbml0IGN1c3RvbSByYWRpbyBidXR0b25zXHJcbiAqL1xyXG53aW5kb3cuaW5pdFJhZGlvQnV0dG9ucz1mdW5jdGlvbiAoT3B0aW9ucyl7XHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24gKHZhbHVlLG5vZGUpIHtcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICAkLmV4dGVuZChPcHRzLCBPcHRpb25zKTtcclxuXHJcbiAgICAkKCcuY3VzdG9tUmFkaW9CdG5Hcm91cCAuYWN0aXZlJykuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICBsZXQgYWN0aXZlVmFsdWUgPSAkKHRoaXMpLmRhdGEoJ3RpdGxlJyk7XHJcbiAgICAgICAgbGV0IHRhcmdldCA9ICQodGhpcykuZGF0YSgndG9nZ2xlJyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT0nK3RhcmdldCsnXScpLnByb3AoJ3ZhbHVlJywgYWN0aXZlVmFsdWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnLmN1c3RvbVJhZGlvQnRuR3JvdXAgYScpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICQoJy5jdXN0b21SYWRpb0J0bkdyb3VwIGEnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24oKXtcclxuICAgICAgICBsZXQgc2VsID0gJCh0aGlzKS5kYXRhKCd0aXRsZScpO1xyXG4gICAgICAgIGxldCB0b2cgPSAkKHRoaXMpLmRhdGEoJ3RvZ2dsZScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Jyt0b2crJ10nKS5wcm9wKCd2YWx1ZScsIHNlbCk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl0nKS5ub3QoJ1tkYXRhLXRpdGxlPVwiJytzZWwrJ1wiXScpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKS5hZGRDbGFzcygnbm90QWN0aXZlJyk7XHJcbiAgICAgICAgJCgnYVtkYXRhLXRvZ2dsZT1cIicrdG9nKydcIl1bZGF0YS10aXRsZT1cIicrc2VsKydcIl0nKS5yZW1vdmVDbGFzcygnbm90QWN0aXZlJykuYWRkQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgIE9wdHMub25DaGFuZ2Uoc2VsLHRvZyk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbi8vICBEZWZhdWx0c1xyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuJC5leHRlbmQoIHRydWUsICQuZm4uZGF0YVRhYmxlLmRlZmF1bHRzLCB7XHJcbiAgICBsYW5ndWFnZToge1xyXG4gICAgICAgIHVybDogJy8vY2RuLmRhdGF0YWJsZXMubmV0L3BsdWctaW5zLzEuMTAuMjQvaTE4bi9IdW5nYXJpYW4uanNvbidcclxuICAgIH0sXHJcbiAgICBsZW5ndGhNZW51OiBbXHJcbiAgICAgICAgWyAxMCwgMjUsIDUwLCAtMSBdLFxyXG4gICAgICAgIFsgJzEwIHNvcicsICcyNSBzb3InLCAnNTAgc29yJywgJ8OWc3N6ZXMnIF1cclxuICAgIF0sXHJcbiAgICBidXR0b25zOntcclxuICAgICAgICBkb206e1xyXG4gICAgICAgICAgICBidXR0b246e1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOidmZy1idXR0b24gdWktYnV0dG9uIGRhdGFUYWJsZUhlYWRlckJ1dHRvbnMnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgfSxcclxuICAgIGRvbTogJzxcImZnLXRvb2xiYXIgdWktdG9vbGJhciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItdGwgdWktY29ybmVyLXRyXCJsQmZyPicrXHJcbiAgICAgICAgJ3QnK1xyXG4gICAgICAgICc8XCJmZy10b29sYmFyIHVpLXRvb2xiYXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWJsIHVpLWNvcm5lci1iclwiaXA+JyxcclxuXHJcbn0gKTtcclxuSW5wdXRtYXNrLmV4dGVuZERlZmluaXRpb25zKHtcclxuICAgICd4Jzoge1xyXG4gICAgICAgIHZhbGlkYXRvcjogXCJbXFwuLC3DocOpw63Ds8O2xZHDusOgw6jDrMOyw7nDvMWxw4HDicONw5PDlsWQw5rDgMOIw4zDksOZw5zFsEEtWmEtejAtOSBdXCIsXHJcbiAgICAgICAgLy9jYXJkaW5hbGl0eTogMVxyXG4gICAgfVxyXG59KTtcclxuXHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuJC5mbi5zZWxlY3QyLmRlZmF1bHRzLnNldCgnbGFuZ3VhZ2UnLCAnanAnKTtcclxud2luZG93LnNlbGVjdDJDcmVhdGVUYWc9ZnVuY3Rpb24gKHBhcmFtcyl7XHJcbiAgICB2YXIgdGVybSA9ICQudHJpbShwYXJhbXMudGVybSk7XHJcbiAgICB2YXIgY291bnQgPSAwXHJcbiAgICB2YXIgZXhpc3RzVmFyID0gZmFsc2U7XHJcbiAgICAvL2NoZWNrIGlmIHRoZXJlIGlzIGFueSBvcHRpb24gYWxyZWFkeVxyXG4gICAgaWYoJCgnI2tleXdvcmRzIG9wdGlvbicpLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICQoJyNrZXl3b3JkcyBvcHRpb24nKS5lYWNoKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLnRleHQoKS50b1VwcGVyQ2FzZSgpID09IHRlcm0udG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgZXhpc3RzVmFyID0gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGV4aXN0c1ZhciA9IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihleGlzdHNWYXIpe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICB0ZXh0OiBwYXJhbXMudGVybSxcclxuICAgICAgICAgICAgbmV3VGFnOiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9zaW5jZSBzZWxlY3QgaGFzIDAgb3B0aW9ucywgYWRkIG5ldyB3aXRob3V0IGNvbXBhcmluZ1xyXG4gICAgZWxzZXtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogcGFyYW1zLnRlcm0sXHJcbiAgICAgICAgICAgIHRleHQ6IHBhcmFtcy50ZXJtLFxyXG4gICAgICAgICAgICBuZXdUYWc6IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcblxyXG53aW5kb3cuYWpheEVycm9ySGFuZGxlcj0gZnVuY3Rpb24gKHhociwgYWpheE9wdGlvbnMsIHRocm93bkVycm9yKXtcclxuICAgIGRlYnVnKHRoaXMpO1xyXG4gICAgY29uc29sZS5lcnJvcih4aHIpO1xyXG4gICAgY29uc29sZS5lcnJvcihhamF4T3B0aW9ucyk7XHJcbiAgICBjb25zb2xlLmVycm9yKHRocm93bkVycm9yKTtcclxuXHJcbiAgICAvLyBCaXp0b25zw6FnaSBlbGxlbsWRcnrDqXMg4oCTIGhhIG5pbmNzIHJlc3BvbnNlSlNPTiAocGwuIEhUTUwgdsOhbGFzeiksIG1lZ3Byw7Niw6FsanVrIHBhcnN6b2xuaVxyXG4gICAgaWYgKCF4aHIucmVzcG9uc2VKU09OICYmIHhoci5yZXNwb25zZVRleHQpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB4aHIucmVzcG9uc2VKU09OID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOZW0gc2lrZXLDvGx0IGEgcmVzcG9uc2VUZXh0IEpTT04gcGFyc3pvbMOhc2FcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEJpenRvbnPDoWdpIGVsbGVuxZFyesOpcyDigJMgaGEgbmluY3MgcmVzcG9uc2VKU09OIChwbC4gSFRNTCB2w6FsYXN6KVxyXG4gICAgaWYgKCF4aHIucmVzcG9uc2VKU09OKSB7XHJcbiAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKHsnZGV0YWlsJzogJ1bDoXJhdGxhbiBzemVydmVyaGliYS4gS8OpcmrDvGsgcHLDs2LDoWxqYSDDumpyYSBrw6lzxZFiYi4nfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkw6FjacOzcyBoaWLDoWsgKDQyMikg4oCTIGV6ZWtldCByw6lzemxldGVzZW4gbWVnamVsZW7DrXRqw7xrXHJcbiAgICBpZiAoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiZDItLS0tLS0tLS0tLS0tLS1cIik7XHJcbiAgICAgICAgaWYoXCJqc29uYXBpXCIgaW4geGhyLnJlc3BvbnNlSlNPTil7XHJcbiAgICAgICAgICAgIGFqYXhFcnJvckZpZWxkSGFuZGxlckpzb25BUEkoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeGhyLnJlc3BvbnNlSlNPTi5lcnJvcnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEVneWVkaSByZWZlcmVuY2lhIGvDs2RvcyBoaWJhICg1MDAsIHN0Yi4pXHJcbiAgICBlbHNlIGlmICh4aHIucmVzcG9uc2VKU09OLmVycm9yX3JlZikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcl9yZWY6IFwiICsgeGhyLnJlc3BvbnNlSlNPTi5lcnJvcl9yZWYpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiBcIlN6ZXJ2ZXJoaWJhXCIsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IFwiVsOhcmF0bGFuIGhpYmEgdMO2cnTDqW50IGEgZmVsZG9sZ296w6FzIHNvcsOhbi48YnI+XCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICBcIjxzbWFsbD5IaXZhdGtvesOhc2kga8OzZDogPHN0cm9uZz5cIiArIHhoci5yZXNwb25zZUpTT04uZXJyb3JfcmVmICsgXCI8L3N0cm9uZz48L3NtYWxsPjxicj5cIiArXHJcbiAgICAgICAgICAgICAgICAgICAgIFwiPHNtYWxsPkvDqXJqw7xrLCBlenQgYSBrw7Nkb3QgYWRqYSBtZWcgYSBoaWJhamVsZW50w6lzYmVuLjwvc21hbGw+XCIsXHJcbiAgICAgICAgICAgIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUixcclxuICAgICAgICAgICAgdGltZW91dDogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8gNDA0XHJcbiAgICBlbHNlIGlmICh4aHIuc3RhdHVzID09IDQwNCkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkMy0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeydkZXRhaWwnOidOaW5jcyBpbHllbiBlbGVtLid9KTtcclxuICAgIH1cclxuICAgIC8vIEVnecOpYiBpc21lcmV0bGVuIGhpYmFcclxuICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJkNC0tLS0tLS0tLS0tLS0tLVwiKTtcclxuICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoeydkZXRhaWwnOifDgWx0YWzDoW5vcyBoaWJhLid9KTtcclxuICAgIH1cclxufVxyXG53aW5kb3cuYWpheEVycm9yRmllbGRIYW5kbGVySnNvbkFQST0gZnVuY3Rpb24gKGVycm9ycywgY29udGFpbmVyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiZDYtLS0tLS0tLS0tLS0tLS1cIik7XHJcbiAgICBsZXQgdG9hc3RCb2R5SHRtbCA9ICcnO1xyXG4gICAgbGV0IHRvYXN0VGl0bGUgPSAnSGliYSc7XHJcbiAgICBjb25zb2xlLmVycm9yKGVycm9ycyk7XHJcbiAgICAkLmVhY2goZXJyb3JzLCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgdG9hc3RUaXRsZSA9ICdIaWJhJztcclxuICAgICAgICB0b2FzdEJvZHlIdG1sID0gJyc7XHJcbiAgICAgICAgaWYoXCJ0aXRsZVwiIGluIHZhbHVlKXtcclxuICAgICAgICAgICAgdG9hc3RUaXRsZT12YWx1ZS50aXRsZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoXCJkZXRhaWxcIiBpbiB2YWx1ZSl7XHJcbiAgICAgICAgICAgIHRvYXN0Qm9keUh0bWwgKz0gJzxkaXY+JyArIHZhbHVlLmRldGFpbCArICc8ZGl2Pic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFRvYXN0LmNyZWF0ZSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiB0b2FzdFRpdGxlLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0b2FzdEJvZHlIdG1sLFxyXG4gICAgICAgICAgICBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsICAgLy8gU1VDQ0VTUyAoesO2bGQpXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IDEwMDAwXHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG53aW5kb3cuYWpheEVycm9yRmllbGRIYW5kbGVyID0gZnVuY3Rpb24gKGVycm9ycywgY29udGFpbmVyKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKFwiZDUtLS0tLS0tLS0tLS0tLS1cIik7XHJcbiAgICBjb25zb2xlLmVycm9yKGVycm9ycyk7XHJcbiAgICBsZXQgdG9hc3RCb2R5SHRtbCA9ICcnO1xyXG4gICAgJC5lYWNoKGVycm9ycywgZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xyXG4gICAgICAgIHRvYXN0Qm9keUh0bWwgKz0gJzxkaXY+JyArIHZhbHVlICsgJzxkaXY+JztcclxuICAgIH0pO1xyXG5cclxuICAgIFRvYXN0LmNyZWF0ZSh7XHJcbiAgICAgICAgdGl0bGU6IFwiSGliYSFcIixcclxuICAgICAgICBtZXNzYWdlOiB0b2FzdEJvZHlIdG1sLFxyXG4gICAgICAgIHN0YXR1czogVE9BU1RfU1RBVFVTLkRBTkdFUiwgICAvLyBTVUNDRVNTICh6w7ZsZClcclxuICAgICAgICB0aW1lb3V0OiAxMDAwMFxyXG4gICAgfSk7XHJcbn1cclxuJC5hamF4U2V0dXAoe1xyXG4gICAgZXJyb3I6YWpheEVycm9ySGFuZGxlcixcclxufSk7XHJcbi8qXHJcbmRhdGVwaWNrZXIgYWZ0ZXJTaG93IGZ1bmN0aW9uXHJcbiAqL1xyXG4kLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXJfb3JpZ2luYWwgPSAkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXI7XHJcbiQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKGluc3QpIHtcclxuICAgICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcl9vcmlnaW5hbChpbnN0KTtcclxuICAgIGxldCBhZnRlclNob3cgPSB0aGlzLl9nZXQoaW5zdCwgJ2FmdGVyU2hvdycpO1xyXG4gICAgaWYgKGFmdGVyU2hvdylcclxuICAgICAgICBhZnRlclNob3cuYXBwbHkoKGluc3QuaW5wdXQgPyBpbnN0LmlucHV0WzBdIDogbnVsbCkpOyAgLy8gdHJpZ2dlciBjdXN0b20gY2FsbGJhY2tcclxufVxyXG5cclxuXHJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG53aW5kb3cuRW1lZ3JlbmRlbGVzRGVmYXVsdHM9e1xyXG4gICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazogZnVuY3Rpb24gKCkge30sXHJcbiAgICBkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbjogZnVuY3Rpb24gKGlkLGFyZ3MpIHtcclxuICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIGJ1dHRvbkRlbGV0ZVwiIGRhdGEtYnV0dG9uVHlwZT1cImRlbGV0ZVwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCIgdGl0bGU9XCJUw7ZybMOpc1wiPicgK1xyXG4gICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJmYXMgZmEtdHJhc2hcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICc8L2J1dHRvbj4nXHJcblxyXG4gICAgfSxcclxuICAgIGRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b246IGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgbGV0IHRpdGxlPSdBZGF0b2snO1xyXG4gICAgICAgIGlmKHR5cGVvZiBhcmdzWzFdLnRpdGxlIT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgIHRpdGxlPWFyZ3NbMV0udGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pbmZvIGJ1dHRvbkVkaXRcIiAgZGF0YS1idXR0b25UeXBlPVwiZWRpdFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtcGxhY2VtZW50PVwiYm90dG9tXCIgdGl0bGU9XCInK3RpdGxlKydcIj4nICtcclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiZmFzIGZhLXBlbmNpbC1hbHRcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICc8L2J1dHRvbj4nXHJcblxyXG4gICAgfSxcclxuICAgIGRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b246IGZ1bmN0aW9uIChpZCxhcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGRhdGFUYWJsZVJvd0J1dHRvbiBidXR0b25WaWV3XCIgIGRhdGEtYnV0dG9uVHlwZT1cInZpZXdcIiBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cImJvdHRvbVwiIHRpdGxlPVwiTWVndGVraW50XCI+JyArXHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImZhcyBmYS1leWVcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICc8L2J1dHRvbj4nXHJcblxyXG4gICAgfSxcclxuICAgIGRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b246IGZ1bmN0aW9uIChpZCxhcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtZGFyayBkYXRhVGFibGVSb3dCdXR0b24gYnV0dG9uQXR0YWNobWVudFwiICBkYXRhLWJ1dHRvblR5cGU9XCJhdHRhY2htZW50XCIgZGF0YS10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1wbGFjZW1lbnQ9XCJib3R0b21cIiB0aXRsZT1cIkNzYXRvbG3DoW55XCI+JyArXHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImZhcyBmYS1wYXBlcmNsaXBcIj48L3NwYW4+JyArXHJcbiAgICAgICAgICAgICc8L2J1dHRvbj4nXHJcblxyXG4gICAgfSxcclxuICAgIGRhdGF0YWJsZUN1c3RvbUhlYWRCdXR0b25DbGlja0NhbGxCYWNrOmZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYXJncyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGFmdGVyTG9hZE1haW5Db250ZW50OmZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYXJncyk7XHJcbiAgICB9LFxyXG5cclxuXHJcbn07XHJcblxyXG5pZih0eXBlb2YgRGF0YU1vZGVsPT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgRGF0YU1vZGVse1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAgICAgKi9cclxuICAgICAgICBPcHRzID0ge1xyXG4gICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogQ29uc3RydWN0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XHJcbiAgICAgICAgICAgICQuZXh0ZW5kKHRoaXMsIGRhdGEpO1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLk9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHNldERhdGEgKGRhdGEpe1xyXG4gICAgICAgICAgICAkLmV4dGVuZCh0aGlzLCBkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldERhdGEoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZihpbmRleCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tpbmRleF07XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgd2luZG93LkRhdGFNb2RlbD1EYXRhTW9kZWw7XHJcbn1cclxuXHJcblxyXG53aW5kb3cuRW1lZ3JlbmRlbGVzID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICBteVZhcjogJ0VtZWdyZW5kZWxlcyB2YWx1ZScsXHJcbiAgICAgICAgZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b246e30sXHJcbiAgICAgICAgZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbjp7fSxcclxuICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnt9LFxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6e30sXHJcbiAgICAgICAgZGF0YXRhYmxlQ3VzdG9tSGVhZEJ1dHRvbkNsaWNrQ2FsbEJhY2s6e30sXHJcbiAgICAgICAgYWZ0ZXJMb2FkTWFpbkNvbnRlbnQ6e30sXHJcbiAgICAgICAgVXJsOnt9LFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBQdWJsaWNWYXI9e307XHJcbiAgICBsZXQgUHVibGljVmFyMj17J2FzZCc6JzIxJ307XHJcbiAgICBsZXQgQXBpVG9rZW49bnVsbDtcclxuICAgIGxldCByb290PXRoaXM7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gICAgICAgIC8vJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgd2luZG93LkVtZWdyZW5kZWxlc0RlZmF1bHRzLCBvcHRpb25zKTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5zZXRPcHRzPWZ1bmN0aW9uKG9wdGlvbnMpe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbigpe1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b249ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24oYXJndW1lbnRzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhdGFibGVBZGRSb3dWaWV3QnV0dG9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiBPcHRzLmRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b24oYXJndW1lbnRzKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93QXR0YWNobWVudEJ1dHRvbj1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBZGRSb3dBdHRhY2htZW50QnV0dG9uKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hZnRlckxvYWRNYWluQ29udGVudD1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5hZnRlckxvYWRNYWluQ29udGVudChhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjaz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YXRhYmxlQWRkUm93QWN0aW9uPWZ1bmN0aW9uIChDU1NTZWxlY3Rvcil7XHJcbiAgICAgICAgaWYoIUNTU1NlbGVjdG9yKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAkKENTU1NlbGVjdG9yKycgdHIgYnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3IrJyB0ciBidXR0b24nKS5vbignY2xpY2snLEFQUC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjaz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cy5kYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qXHJcbiAgICAgKiBQdWJsaWMgbWV0aG9kXHJcbiAgICAgKiBDYW4gYmUgY2FsbGVkIG91dHNpZGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgdGhpcy5teVB1YmxpY01ldGhvZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhPcHRzKTtcclxuXHJcbiAgICAgICAgbXlQcml2YXRlTWV0aG9kKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuc2V0QXBpVG9rZW4gPSBmdW5jdGlvbiAodG9rZW4pIHtcclxuICAgICAgICByb290LkFwaVRva2VuPXRva2VuO1xyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdldEFwaVRva2VuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiByb290LkFwaVRva2VuO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKlxyXG4gICAgICogUHJpdmF0ZSBtZXRob2RcclxuICAgICAqIENhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgY29uc3QgbXlQcml2YXRlTWV0aG9kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdhY2Nlc3NlZCBwcml2YXRlIG1ldGhvZCcpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtTmFtZVxyXG4gICAgICovXHJcbiAgICB0aGlzLnNldEFjdGl2ZU5hdkJhckl0ZW09ZnVuY3Rpb24oaXRlbU5hbWUpe1xyXG4gICAgICAgICQoJy5zcGVlZEJ1dHRvbk5hdkJhciBsaScpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xyXG4gICAgICAgICQoJy5zcGVlZEJ1dHRvbk5hdkJhciBsaS5pY29uaG9sZGVyTW9kdWwnK2l0ZW1OYW1lKS5hZGRDbGFzcygnc2VsZWN0ZWQnKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdldEFjdGl2ZU5hdkJhckl0ZW09ZnVuY3Rpb24oKXtcclxuICAgICAgcmV0dXJuICQoJy5zcGVlZEJ1dHRvbk5hdkJhciAuc2VsZWN0ZWQnKS5maW5kKCdhJykuZGF0YSgnbmFtZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xlYXJBcmNoaXZlTW9kdWxlRGF0YVRhYmxlU3RhdGU9ZnVuY3Rpb24oKXtcclxuICAgICAgICBpZihBUFAuT3JkZXJBcmNoaXZlTW9kdWxlIT11bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FQUC5PcmRlckFyY2hpdmVNb2R1bGUnKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjbGVhcicpO1xyXG4gICAgICAgICAgICAgICAgQVBQLk9yZGVyQXJjaGl2ZU1vZHVsZS5kYXRhVGFibGUuc3RhdGUuY2xlYXIoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5uYXZCYXJJdGVtQmVmb3JlcG9zdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmF2QmFySXRlbUJlZm9yZXBvc3QnKTtcclxuICAgICAgICBpZihyb290LmdldEFjdGl2ZU5hdkJhckl0ZW0oKSE9PSdhY3RpdmVPcmRlcicpe1xyXG4gICAgICAgICAgICByb290LmNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlKCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5uYXZCYXJJdGVtQWZ0ZXJQb3N0PWZ1bmN0aW9uICgpe1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdE5hdkJhcj1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyIGE6bm90KFtkYXRhLXRhcmdldD1fYmxhbmtdKTpub3QoW2RhdGEtbm8tYWpheF0pXCIpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoKS5uYW1lKTtcclxuICAgICAgICAgICAgaWYoJCh0aGlzKS5kYXRhKCdiaWctaWNvbicpKXtcclxuICAgICAgICAgICAgICAgICQoXCIuc3BlZWRCdXR0b25OYXZCYXJcIikucmVtb3ZlQ2xhc3MoJ3NtYWxsaWNvbnMnKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyXCIpLmFkZENsYXNzKCdzbWFsbGljb25zJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2V0QWN0aXZlTmF2QmFySXRlbSgkKHRoaXMpLmRhdGEoKS5uYW1lKTtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKFwiLnNwZWVkQnV0dG9uTmF2QmFyIGE6bm90KFtkYXRhLXRhcmdldD1fYmxhbmtdKTpub3QoW2RhdGEtbm8tYWpheF0pXCIpLmFqYXhsaW5rKHtcclxuICAgICAgICAgICAgdGFyZ2V0OiQoJy5tYWluQ29udGVudCcpLFxyXG4gICAgICAgICAgICBhamF4dHlwZTonR0VUJyxcclxuICAgICAgICAgICAgYWZ0ZXJwb3N0OnJvb3QubmF2QmFySXRlbUFmdGVyUG9zdCxcclxuICAgICAgICAgICAgYmVmb3JlcG9zdDpyb290Lm5hdkJhckl0ZW1CZWZvcmVwb3N0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoXCIuc3BlZWRCdXR0b25OYXZCYXIgYVtkYXRhLXRhcmdldD1fYmxhbmtdLCAuc3BlZWRCdXR0b25OYXZCYXIgYVtkYXRhLW5vLWFqYXhdXCIpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICByb290LmNsZWFyQXJjaGl2ZU1vZHVsZURhdGFUYWJsZVN0YXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sb2FkTWFpbkNvbnRlbnQ9ZnVuY3Rpb24gKHVybCxkYXRhLGNhbGxCYWNrKXtcclxuXHJcbiAgICAgICAgaWYoIWNhbGxCYWNrKXtcclxuICAgICAgICAgICAgY2FsbEJhY2s9cm9vdC5hZnRlckxvYWRNYWluQ29udGVudDtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbiBjYWxsYmFjaycpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjYWxsQmFjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoJy5tYWluQ29udGVudCcpLmxvYWQoXHJcbiAgICAgICAgICAgIHVybCxkYXRhLGNhbGxCYWNrXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qXHJcbiAgICAgKiBQYXNzIG9wdGlvbnMgd2hlbiBjbGFzcyBpbnN0YW50aWF0ZWRcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3Qob3B0aW9ucyk7XHJcbn07XHJcblxyXG5cclxuLypcclxuJC5mbi5hamF4bGluayA9IGZ1bmN0aW9uKG9wdGlvbnMpe1xyXG5cclxufTtcclxuaW1wb3J0ICcuL2FqYXhMaW5rJztcclxuXHJcbiogKi9cclxud2luZG93LkFQUD17fTtcclxuJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCl7XHJcbiAgICBjb25zb2xlLmxvZygncmVhZHkgZG9jJyk7XHJcbiAgICAvLyQoJy5kYXRlcGlja2VyJykuZGF0ZXBpY2tlcigpO1xyXG4gICAgTXVzdGFjaGUudGFncyA9IFsgJ1tbJywgJ11dJyBdO1xyXG4gICAgLy8gPSBbICc8JScsICclPicgXTtcclxuXHJcbn0pO1xyXG5cclxuXHJcblxyXG4iXSwibmFtZXMiOlsicmVxdWlyZSIsIndpbmRvdyIsImdldE1vbmRheSIsImRhdGUiLCJkYXRlU3RyIiwiRGF0ZSIsImRheSIsImdldERheSIsImRpZmYiLCJnZXREYXRlIiwic2V0RGF0ZSIsImRlYnVnIiwidHh0IiwiX3R5cGVvZiIsIkFycmF5IiwiaXNBcnJheSIsInNlZW4iLCJXZWFrU2V0Iiwic2FmZU9iaiIsIkpTT04iLCJwYXJzZSIsInN0cmluZ2lmeSIsImtleSIsInZhbHVlIiwiaGFzIiwiYWRkIiwiY29uc29sZSIsImxvZyIsImUiLCJidWlsZEZvcm1EYXRhIiwiZm9ybURhdGEiLCJkYXRhIiwicGFyZW50S2V5IiwiRmlsZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiY29uY2F0IiwiYXBwZW5kIiwianNvblRvRm9ybURhdGEiLCJGb3JtRGF0YSIsIlN0cmluZyIsInByb3RvdHlwZSIsImNhcGl0YWxpemUiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiYXJyYXlSZW1vdmUiLCJhcnIiLCJmaWx0ZXIiLCJlbGUiLCJnZXRSYW5kb21JbnQiLCJtYXgiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJOdW1iZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwibWluIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpbnB1dCIsInRhcmdldEltZ0Nzc1NlbGVjdG9yIiwiZmlsZXMiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiJCIsImF0dHIiLCJ0YXJnZXQiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsImxvY2F0aW9uIiwiaHJlZiIsIm9uIiwiZXZlbnQiLCJkb2N1bWVudCIsInRpdGxlIiwic3RvcFByb3BhZ2F0aW9uIiwiaW5pdFJhZGlvQnV0dG9ucyIsIk9wdGlvbnMiLCJPcHRzIiwib25DaGFuZ2UiLCJub2RlIiwiZXh0ZW5kIiwiZWFjaCIsImFjdGl2ZVZhbHVlIiwicHJvcCIsInVuYmluZCIsImJpbmQiLCJzZWwiLCJ0b2ciLCJub3QiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwiZm4iLCJkYXRhVGFibGUiLCJkZWZhdWx0cyIsImxhbmd1YWdlIiwidXJsIiwibGVuZ3RoTWVudSIsImJ1dHRvbnMiLCJkb20iLCJidXR0b24iLCJjbGFzc05hbWUiLCJJbnB1dG1hc2siLCJleHRlbmREZWZpbml0aW9ucyIsInZhbGlkYXRvciIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwic2VsZWN0MiIsInNldCIsInNlbGVjdDJDcmVhdGVUYWciLCJwYXJhbXMiLCJ0ZXJtIiwidHJpbSIsImNvdW50IiwiZXhpc3RzVmFyIiwidGV4dCIsImlkIiwibmV3VGFnIiwiYWpheEVycm9ySGFuZGxlciIsInhociIsImFqYXhPcHRpb25zIiwidGhyb3duRXJyb3IiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsInJlc3BvbnNlVGV4dCIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImVycm9ycyIsImFqYXhFcnJvckZpZWxkSGFuZGxlckpzb25BUEkiLCJlcnJvcl9yZWYiLCJjcmVhdGUiLCJtZXNzYWdlIiwic3RhdHVzIiwiVE9BU1RfU1RBVFVTIiwiREFOR0VSIiwidGltZW91dCIsImNvbnRhaW5lciIsInRvYXN0Qm9keUh0bWwiLCJ0b2FzdFRpdGxlIiwiaW5kZXgiLCJkZXRhaWwiLCJhamF4U2V0dXAiLCJkYXRlcGlja2VyIiwiX3VwZGF0ZURhdGVwaWNrZXJfb3JpZ2luYWwiLCJfdXBkYXRlRGF0ZXBpY2tlciIsImluc3QiLCJhZnRlclNob3ciLCJfZ2V0IiwiYXBwbHkiLCJFbWVncmVuZGVsZXNEZWZhdWx0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImFyZ3MiLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0F0dGFjaG1lbnRCdXR0b24iLCJkYXRhdGFibGVDdXN0b21IZWFkQnV0dG9uQ2xpY2tDYWxsQmFjayIsImFmdGVyTG9hZE1haW5Db250ZW50IiwiRGF0YU1vZGVsIiwiX0RhdGFNb2RlbDIiLCJvcHRpb25zIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiYWN0aXZlIiwiX2NyZWF0ZUNsYXNzIiwic2V0RGF0YSIsImdldERhdGEiLCJFbWVncmVuZGVsZXMiLCJteVZhciIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJVcmwiLCJQdWJsaWNWYXIiLCJQdWJsaWNWYXIyIiwiQXBpVG9rZW4iLCJyb290IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJuYW1lIiwic2V0T3B0cyIsImdldE9wdHMiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJDU1NTZWxlY3RvciIsIm9mZiIsIkFQUCIsIm15UHVibGljTWV0aG9kIiwibXlQcml2YXRlTWV0aG9kIiwic2V0QXBpVG9rZW4iLCJ0b2tlbiIsImdldEFwaVRva2VuIiwic2V0QWN0aXZlTmF2QmFySXRlbSIsIml0ZW1OYW1lIiwiZ2V0QWN0aXZlTmF2QmFySXRlbSIsImZpbmQiLCJjbGVhckFyY2hpdmVNb2R1bGVEYXRhVGFibGVTdGF0ZSIsIk9yZGVyQXJjaGl2ZU1vZHVsZSIsInN0YXRlIiwiY2xlYXIiLCJuYXZCYXJJdGVtQmVmb3JlcG9zdCIsIm5hdkJhckl0ZW1BZnRlclBvc3QiLCJpbml0TmF2QmFyIiwicHJldmVudERlZmF1bHQiLCJhamF4bGluayIsImFqYXh0eXBlIiwiYWZ0ZXJwb3N0IiwiYmVmb3JlcG9zdCIsImxvYWRNYWluQ29udGVudCIsImNhbGxCYWNrIiwibG9hZCIsInJlYWR5IiwiTXVzdGFjaGUiLCJ0YWdzIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/app.js\n\n}"); /***/ }, diff --git a/public/js/module.js b/public/js/module.js index 0938a7d..3f3c124 100644 --- a/public/js/module.js +++ b/public/js/module.js @@ -55,7 +55,7 @@ eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"fun \*******************************************/ () { -eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof window.SupplierModule === \"undefined\") {\n var SupplierModule = /*#__PURE__*/function (_ModuleBase) {\n function SupplierModule() {\n _classCallCheck(this, SupplierModule);\n return _callSuper(this, SupplierModule, arguments);\n }\n _inherits(SupplierModule, _ModuleBase);\n return _createClass(SupplierModule, [{\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node) {\n debug('call datatableRowActionAttachment');\n _superPropGet(SupplierModule, \"datatableRowActionAttachment\", this, 3)([rowData, node, {\n defaultFileName: \"arlista.xls\"\n }]);\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node) {\n debug('call datatableRowActionView');\n _superPropGet(SupplierModule, \"datatableRowActionView\", this, 3)([rowData, node, APP.SupplierModule]);\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event) {\n debug('datatableRowActionButtonClick');\n var rootObj = APP.SupplierModule;\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"initViewShow\",\n value: function initViewShow() {\n $('.productCategorySelect').select2({\n disabled: true\n });\n $('.serviceSelect').select2({\n disabled: true\n });\n APP.SupplierModule.renderContact();\n }\n }, {\n key: \"initViewList\",\n value: function initViewList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n var dataTableCSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable'; //\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n //datatableRowActionButtonClickCallBack:this.datatableRowActionButtonClick,\n datatableRowActionButtonClickCallBack: this.datatableRowActionButtonClick\n });\n var orderDirective = this.Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n //let ajaxUrl=this.Opts.URL.getDataTableContent;\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n \"ajax\": {\n url: this.Opts.URL.getDataTableContent,\n data: function data(_data) {}\n },\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowViewButton(0, arguments);\n return buttons;\n }\n }],\n buttons: {\n buttons: []\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"product_group\"\n }, {\n \"data\": \"service\"\n }, {\n \"data\": \"canSeeInOrder\",\n \"render\": function render(data) {\n return data == 1 ? \"\" : \"\";\n }\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n }\n }, {\n key: \"renderContact\",\n value: function renderContact() {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(APP.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n }\n }]);\n }(ModuleBase);\n ;\n window.SupplierModule = SupplierModule;\n}\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJ3aW5kb3ciLCJTdXBwbGllck1vZHVsZSIsIl9Nb2R1bGVCYXNlIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudCIsInJvd0RhdGEiLCJub2RlIiwiZGVidWciLCJfc3VwZXJQcm9wR2V0IiwiZGVmYXVsdEZpbGVOYW1lIiwiZGF0YXRhYmxlUm93QWN0aW9uVmlldyIsIkFQUCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiJCIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJPcHRzIiwiZGF0YVRhYmxlIiwiQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwiZGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiaW5pdFZpZXdTaG93Iiwic2VsZWN0MiIsImRpc2FibGVkIiwicmVuZGVyQ29udGFjdCIsImluaXRWaWV3TGlzdCIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJvcmRlckRpcmVjdGl2ZSIsImxhbmd1YWdlIiwidXJsIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbiIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwicm93TnVtIiwiY29uc29sZSIsImxvZyIsImVhY2giLCJTdXBwbGllciIsImdldERhdGEiLCJjb250YWN0RGF0YSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiTW9kdWxlQmFzZSJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL21vZHVsZUpzL3N1cHBsaWVyLmpzP2ZmNjQiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIHdpbmRvdy5TdXBwbGllck1vZHVsZSA9PT1cInVuZGVmaW5lZFwiKSB7XHJcbiAgICBjbGFzcyBTdXBwbGllck1vZHVsZSBleHRlbmRzIE1vZHVsZUJhc2V7XHJcblxyXG4gICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdjYWxsIGRhdGF0YWJsZVJvd0FjdGlvbkF0dGFjaG1lbnQnKTtcclxuICAgICAgICAgICAgc3VwZXIuZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudChyb3dEYXRhLG5vZGUse2RlZmF1bHRGaWxlTmFtZTpcImFybGlzdGEueGxzXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uVmlldyhyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2NhbGwgZGF0YXRhYmxlUm93QWN0aW9uVmlldycpO1xyXG4gICAgICAgICAgICBzdXBlci5kYXRhdGFibGVSb3dBY3Rpb25WaWV3KHJvd0RhdGEsbm9kZSxBUFAuU3VwcGxpZXJNb2R1bGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2soZXZlbnQpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgICAgIGxldCByb290T2JqPUFQUC5TdXBwbGllck1vZHVsZTtcclxuICAgICAgICAgICAgbGV0IG5vZGUgPSAkKGV2ZW50WzBdLmN1cnJlbnRUYXJnZXQpO1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gJChyb290T2JqLk9wdHMuZGF0YVRhYmxlLkNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSByb3cuZGF0YSgpO1xyXG4gICAgICAgICAgICBsZXQgYWN0aW9uTmFtZSA9ICdkYXRhdGFibGVSb3dBY3Rpb24nICsgbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJvb3RPYmpbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RPYmpbYWN0aW9uTmFtZV0ocm93RGF0YSwgbm9kZSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpbml0Vmlld1Nob3coKXtcclxuICAgICAgICAgICAgJCgnLnByb2R1Y3RDYXRlZ29yeVNlbGVjdCcpLnNlbGVjdDIoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgJCgnLnNlcnZpY2VTZWxlY3QnKS5zZWxlY3QyKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOnRydWUsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBBUFAuU3VwcGxpZXJNb2R1bGUucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpbml0Vmlld0xpc3Qob3B0aW9ucz17fSkge1xyXG4gICAgICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgaW5pY2lhbGl6YXRpb24nKTtcclxuICAgICAgICAgICAgbGV0IGRhdGFUYWJsZUNTU1NlbGVjdG9yPXRoaXMuT3B0cy5DU1NTZWxlY3RvckNvbnRhaW5lcisnIC5kYXRhVGFibGUnOyAvL1xyXG4gICAgICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgICAgIC8vZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazp0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9dGhpcy5PcHRzLmRhdGFUYWJsZS5vcmRlckRpcmVjdGl2ZTtcclxuXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICAgICBvcmRlckRpcmVjdGl2ZT1vcHRpb25zWydvcmRlckRpcmVjdGl2ZSddO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vbGV0IGFqYXhVcmw9dGhpcy5PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50O1xyXG4gICAgICAgICAgICAkKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoIHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiYWpheFwiOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOnRoaXMuT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOmZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uRGVmc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwicmVuZGVyXCI6IGZ1bmN0aW9uICggZGF0YSwgdHlwZSwgcm93ICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1ZpZXdCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcInByb2R1Y3RfZ3JvdXBcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwic2VydmljZVwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjYW5TZWVJbk9yZGVyXCIsIFwicmVuZGVyXCI6IGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIGRhdGEgPT0gMSA/IFwiPGkgY2xhc3M9XFxcImZhcyBmYS1jaGVjayB0ZXh0LXN1Y2Nlc3NcXFwiPjwvaT5cIiA6IFwiPGkgY2xhc3M9XFxcImZhcyBmYS10aW1lcyB0ZXh0LWRhbmdlclxcXCI+PC9pPlwiOyB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBcIm9yZGVyXCI6IG9yZGVyRGlyZWN0aXZlLFxyXG4gICAgICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ICk7XHJcbiAgICAgICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVyQ29udGFjdCgpe1xyXG4gICAgICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdDb250YWN0cycpO1xyXG4gICAgICAgICAgICAkLmVhY2goQVBQLlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH07XHJcbiAgICB3aW5kb3cuU3VwcGxpZXJNb2R1bGU9U3VwcGxpZXJNb2R1bGU7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsTUFBTSxDQUFDQyxjQUFjLEtBQUksV0FBVyxFQUFFO0VBQUEsSUFDdENBLGNBQWMsMEJBQUFDLFdBQUE7SUFBQSxTQUFBRCxlQUFBO01BQUFFLGVBQUEsT0FBQUYsY0FBQTtNQUFBLE9BQUFHLFVBQUEsT0FBQUgsY0FBQSxFQUFBSSxTQUFBO0lBQUE7SUFBQUMsU0FBQSxDQUFBTCxjQUFBLEVBQUFDLFdBQUE7SUFBQSxPQUFBSyxZQUFBLENBQUFOLGNBQUE7TUFBQU8sR0FBQTtNQUFBQyxLQUFBLEVBRWhCLFNBQUFDLDRCQUE0QkEsQ0FBQ0MsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDdkNDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQztRQUMxQ0MsYUFBQSxDQUFBYixjQUFBLDRDQUFtQ1UsT0FBTyxFQUFDQyxJQUFJLEVBQUM7VUFBQ0csZUFBZSxFQUFDO1FBQWEsQ0FBQztNQUNuRjtJQUFDO01BQUFQLEdBQUE7TUFBQUMsS0FBQSxFQUNELFNBQUFPLHNCQUFzQkEsQ0FBQ0wsT0FBTyxFQUFDQyxJQUFJLEVBQUU7UUFDakNDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQztRQUNwQ0MsYUFBQSxDQUFBYixjQUFBLHNDQUE2QlUsT0FBTyxFQUFDQyxJQUFJLEVBQUNLLEdBQUcsQ0FBQ2hCLGNBQWM7TUFDaEU7SUFBQztNQUFBTyxHQUFBO01B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\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/supplier.js\n\n}"); +eval("{function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }\nfunction _possibleConstructorReturn(t, e) { if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) return e; if (void 0 !== e) throw new TypeError(\"Derived constructors may only return object or undefined\"); return _assertThisInitialized(t); }\nfunction _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); return e; }\nfunction _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }\nfunction _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && \"function\" == typeof p ? function (t) { return p.apply(e, t); } : p; }\nfunction _get() { return _get = \"undefined\" != typeof Reflect && Reflect.get ? Reflect.get.bind() : function (e, t, r) { var p = _superPropBase(e, t); if (p) { var n = Object.getOwnPropertyDescriptor(p, t); return n.get ? n.get.call(arguments.length < 3 ? e : r) : n.value; } }, _get.apply(null, arguments); }\nfunction _superPropBase(t, o) { for (; !{}.hasOwnProperty.call(t, o) && null !== (t = _getPrototypeOf(t));); return t; }\nfunction _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }\nfunction _inherits(t, e) { if (\"function\" != typeof e && null !== e) throw new TypeError(\"Super expression must either be null or a function\"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, \"prototype\", { writable: !1 }), e && _setPrototypeOf(t, e); }\nfunction _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }\nif (typeof window.SupplierModule === \"undefined\") {\n var SupplierModule = /*#__PURE__*/function (_ModuleBase) {\n function SupplierModule() {\n _classCallCheck(this, SupplierModule);\n return _callSuper(this, SupplierModule, arguments);\n }\n _inherits(SupplierModule, _ModuleBase);\n return _createClass(SupplierModule, [{\n key: \"datatableRowActionAttachment\",\n value: function datatableRowActionAttachment(rowData, node) {\n debug('call datatableRowActionAttachment');\n _superPropGet(SupplierModule, \"datatableRowActionAttachment\", this, 3)([rowData, node, {\n defaultFileName: \"arlista.xls\"\n }]);\n }\n }, {\n key: \"datatableRowActionView\",\n value: function datatableRowActionView(rowData, node) {\n debug('call datatableRowActionView');\n _superPropGet(SupplierModule, \"datatableRowActionView\", this, 3)([rowData, node, APP.SupplierModule]);\n }\n }, {\n key: \"datatableRowActionButtonClick\",\n value: function datatableRowActionButtonClick(event) {\n debug('datatableRowActionButtonClick');\n var rootObj = APP.SupplierModule;\n var node = $(event[0].currentTarget);\n var row = $(rootObj.Opts.dataTable.CSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof rootObj[actionName] === \"function\") {\n return rootObj[actionName](rowData, node);\n }\n }\n }, {\n key: \"initViewShow\",\n value: function initViewShow() {\n $('.productCategorySelect').select2({\n disabled: true\n });\n $('.serviceSelect').select2({\n disabled: true\n });\n APP.SupplierModule.renderContact();\n }\n }, {\n key: \"initViewList\",\n value: function initViewList() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n var dataTableCSSSelector = this.Opts.CSSSelectorContainer + ' .dataTable'; //\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n //datatableRowActionButtonClickCallBack:this.datatableRowActionButtonClick,\n datatableRowActionButtonClickCallBack: this.datatableRowActionButtonClick\n });\n var orderDirective = this.Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n //let ajaxUrl=this.Opts.URL.getDataTableContent;\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n \"ajax\": {\n url: this.Opts.URL.getDataTableContent,\n data: function data(_data) {}\n },\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowViewButton(0, arguments);\n return buttons;\n }\n }],\n buttons: {\n buttons: []\n },\n \"columns\": [{\n \"data\": \"name\"\n }, {\n \"data\": \"product_group\"\n }, {\n \"data\": \"service\"\n }, {\n \"data\": \"canSeeInOrder\",\n \"render\": function render(data) {\n return data == 1 ? \"\" : \"\";\n }\n }, null],\n \"order\": orderDirective,\n //\"stateSave\": true,\n \"drawCallback\": function drawCallback(settings) {\n APP.datatableAddRowAction(dataTableCSSSelector);\n }\n });\n debug('listview end');\n }\n }, {\n key: \"renderContact\",\n value: function renderContact() {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(APP.Supplier.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n //console.log(contactData);\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n }\n }]);\n }(ModuleBase);\n ;\n window.SupplierModule = SupplierModule;\n}\n;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aW5kb3ciLCJTdXBwbGllck1vZHVsZSIsIl9Nb2R1bGVCYXNlIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImFyZ3VtZW50cyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsImtleSIsInZhbHVlIiwiZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudCIsInJvd0RhdGEiLCJub2RlIiwiZGVidWciLCJfc3VwZXJQcm9wR2V0IiwiZGVmYXVsdEZpbGVOYW1lIiwiZGF0YXRhYmxlUm93QWN0aW9uVmlldyIsIkFQUCIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrIiwiZXZlbnQiLCJyb290T2JqIiwiJCIsImN1cnJlbnRUYXJnZXQiLCJyb3ciLCJPcHRzIiwiZGF0YVRhYmxlIiwiQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJwYXJlbnRzIiwiZGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiaW5pdFZpZXdTaG93Iiwic2VsZWN0MiIsImRpc2FibGVkIiwicmVuZGVyQ29udGFjdCIsImluaXRWaWV3TGlzdCIsIm9wdGlvbnMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsIkNTU1NlbGVjdG9yQ29udGFpbmVyIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJvcmRlckRpcmVjdGl2ZSIsImxhbmd1YWdlIiwidXJsIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsInJlbmRlciIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbiIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwicm93TnVtIiwiY29uc29sZSIsImxvZyIsImVhY2giLCJTdXBwbGllciIsImdldERhdGEiLCJjb250YWN0RGF0YSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYXBwZW5kIiwiTW9kdWxlQmFzZSJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvbW9kdWxlSnMvc3VwcGxpZXIuanM/ZmY2NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2Ygd2luZG93LlN1cHBsaWVyTW9kdWxlID09PVwidW5kZWZpbmVkXCIpIHtcclxuICAgIGNsYXNzIFN1cHBsaWVyTW9kdWxlIGV4dGVuZHMgTW9kdWxlQmFzZXtcclxuXHJcbiAgICAgICAgZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICAgICAgZGVidWcoJ2NhbGwgZGF0YXRhYmxlUm93QWN0aW9uQXR0YWNobWVudCcpO1xyXG4gICAgICAgICAgICBzdXBlci5kYXRhdGFibGVSb3dBY3Rpb25BdHRhY2htZW50KHJvd0RhdGEsbm9kZSx7ZGVmYXVsdEZpbGVOYW1lOlwiYXJsaXN0YS54bHNcIn0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25WaWV3KHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgICAgICBkZWJ1ZygnY2FsbCBkYXRhdGFibGVSb3dBY3Rpb25WaWV3Jyk7XHJcbiAgICAgICAgICAgIHN1cGVyLmRhdGF0YWJsZVJvd0FjdGlvblZpZXcocm93RGF0YSxub2RlLEFQUC5TdXBwbGllck1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayhldmVudCkge1xyXG4gICAgICAgICAgICBkZWJ1ZygnZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2snKTtcclxuICAgICAgICAgICAgbGV0IHJvb3RPYmo9QVBQLlN1cHBsaWVyTW9kdWxlO1xyXG4gICAgICAgICAgICBsZXQgbm9kZSA9ICQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSAkKHJvb3RPYmouT3B0cy5kYXRhVGFibGUuQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICAgICBsZXQgcm93RGF0YSA9IHJvdy5kYXRhKCk7XHJcbiAgICAgICAgICAgIGxldCBhY3Rpb25OYW1lID0gJ2RhdGF0YWJsZVJvd0FjdGlvbicgKyBub2RlLmRhdGEoJ2J1dHRvbnR5cGUnKS5jYXBpdGFsaXplKCk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygcm9vdE9ialthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcm9vdE9ialthY3Rpb25OYW1lXShyb3dEYXRhLCBub2RlKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluaXRWaWV3U2hvdygpe1xyXG4gICAgICAgICAgICAkKCcucHJvZHVjdENhdGVnb3J5U2VsZWN0Jykuc2VsZWN0MihcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAkKCcuc2VydmljZVNlbGVjdCcpLnNlbGVjdDIoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllck1vZHVsZS5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluaXRWaWV3TGlzdChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgICAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9dGhpcy5PcHRzLkNTU1NlbGVjdG9yQ29udGFpbmVyKycgLmRhdGFUYWJsZSc7IC8vXHJcbiAgICAgICAgICAgIGxldCBjb2xOdW09JChkYXRhVGFibGVDU1NTZWxlY3RvcisnIHRoZWFkIHRoJykubGVuZ3RoOyAvL2J1dHRvbnMgaW5zZXJ0IHBvc2l0aW9uIG5lZWRcclxuICAgICAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICAgICAgLy9kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnRoaXMuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIGxldCBvcmRlckRpcmVjdGl2ZT10aGlzLk9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG5cclxuICAgICAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgYWpheFVybD10aGlzLk9wdHMuVVJMLmdldERhdGFUYWJsZUNvbnRlbnQ7XHJcbiAgICAgICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2U6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJhamF4XCI6IHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6dGhpcy5PcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6ZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYnV0dG9ucz1BUFAuZGF0YXRhYmxlQWRkUm93Vmlld0J1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6e1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVcIiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwicHJvZHVjdF9ncm91cFwiIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJzZXJ2aWNlXCIgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNhblNlZUluT3JkZXJcIiwgXCJyZW5kZXJcIjogZnVuY3Rpb24oZGF0YSkgeyByZXR1cm4gZGF0YSA9PSAxID8gXCI8aSBjbGFzcz1cXFwiZmFzIGZhLWNoZWNrIHRleHQtc3VjY2Vzc1xcXCI+PC9pPlwiIDogXCI8aSBjbGFzcz1cXFwiZmFzIGZhLXRpbWVzIHRleHQtZGFuZ2VyXFxcIj48L2k+XCI7IH0gfSxcclxuICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgICAgICAvL1wic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gKTtcclxuICAgICAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJDb250YWN0KCl7XHJcbiAgICAgICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XHJcbiAgICAgICAgICAgICQuZWFjaChBUFAuU3VwcGxpZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwic3VwcGxpZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuICAgIHdpbmRvdy5TdXBwbGllck1vZHVsZT1TdXBwbGllck1vZHVsZTtcclxufTtcclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBRyxPQUFPQSxNQUFNLENBQUNDLGNBQWMsS0FBSSxXQUFXLEVBQUU7RUFBQSxJQUN0Q0EsY0FBYywwQkFBQUMsV0FBQTtJQUFBLFNBQUFELGVBQUE7TUFBQUUsZUFBQSxPQUFBRixjQUFBO01BQUEsT0FBQUcsVUFBQSxPQUFBSCxjQUFBLEVBQUFJLFNBQUE7SUFBQTtJQUFBQyxTQUFBLENBQUFMLGNBQUEsRUFBQUMsV0FBQTtJQUFBLE9BQUFLLFlBQUEsQ0FBQU4sY0FBQTtNQUFBTyxHQUFBO01BQUFDLEtBQUEsRUFFaEIsU0FBQUMsNEJBQTRCQSxDQUFDQyxPQUFPLEVBQUNDLElBQUksRUFBRTtRQUN2Q0MsS0FBSyxDQUFDLG1DQUFtQyxDQUFDO1FBQzFDQyxhQUFBLENBQUFiLGNBQUEsNENBQW1DVSxPQUFPLEVBQUNDLElBQUksRUFBQztVQUFDRyxlQUFlLEVBQUM7UUFBYSxDQUFDO01BQ25GO0lBQUM7TUFBQVAsR0FBQTtNQUFBQyxLQUFBLEVBQ0QsU0FBQU8sc0JBQXNCQSxDQUFDTCxPQUFPLEVBQUNDLElBQUksRUFBRTtRQUNqQ0MsS0FBSyxDQUFDLDZCQUE2QixDQUFDO1FBQ3BDQyxhQUFBLENBQUFiLGNBQUEsc0NBQTZCVSxPQUFPLEVBQUNDLElBQUksRUFBQ0ssR0FBRyxDQUFDaEIsY0FBYztNQUNoRTtJQUFDO01BQUFPLEdBQUE7TUFBQUMsS0FBQSxFQUVELFNBQUFTLDZCQUE2QkEsQ0FBQ0MsS0FBSyxFQUFFO1FBQ2pDTixLQUFLLENBQUMs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QUFPK0MsT0FBTztZQUNsQjtVQUNKLENBQUMsQ0FDSjtVQUNEQSxPQUFPLEVBQUM7WUFDSkEsT0FBTyxFQUFFO1VBRWIsQ0FBQztVQUNELFNBQVMsRUFBRSxDQUNQO1lBQUUsTUFBTSxFQUFFO1VBQU8sQ0FBQyxFQUNsQjtZQUFFLE1BQU0sRUFBRTtVQUFnQixDQUFDLEVBQzNCO1lBQUUsTUFBTSxFQUFFO1VBQVUsQ0FBQyxFQUNyQjtZQUFFLE1BQU0sRUFBRSxlQUFlO1lBQUUsUUFBUSxFQUFFLFNBQVZGLE1BQVFBLENBQVdyQixJQUFJLEVBQUU7Y0FBRSxPQUFPQSxJQUFJLElBQUksQ0FBQyxHQUFHLDZDQUE2QyxHQUFHLDRDQUE0QztZQUFFO1VBQUUsQ0FBQyxFQUMxSyxJQUFJLENBQ1A7VUFDRCxPQUFPLEVBQUVnQixjQUFjO1VBQ3ZCO1VBQ0EsY0FBYyxFQUFFLFNBQWhCUyxZQUFjQSxDQUFZQyxRQUFRLEVBQUc7WUFDakN0QyxHQUFHLENBQUN1QyxxQkFBcUIsQ0FBQ2hCLG9CQUFvQixDQUFDO1VBQ25EO1FBQ0osQ0FBRSxDQUFDO1FBQ0gzQixLQUFLLENBQUMsY0FBYyxDQUFDO01BQ3pCO0lBQUM7TUFBQUwsR0FBQTtNQUFBQyxLQUFBLEVBQ0QsU0FBQTBCLGFBQWFBLENBQUEsRUFBRTtRQUNYLElBQUlzQixNQUFNLEdBQUMsQ0FBQztRQUNaQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztRQUNoQ3RDLENBQUMsQ0FBQ3VDLElBQUksQ0FBQzNDLEdBQUcsQ0FBQzRDLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFDLFlBQVc7VUFDOUMsSUFBSUMsV0FBVyxHQUFDLElBQUk7VUFDcEJBLFdBQVcsQ0FBQ04sTUFBTSxHQUFDQSxNQUFNO1VBQ3pCO1VBQ0EsSUFBSU8sUUFBUSxHQUFDM0MsQ0FBQyxDQUFDLCtDQUErQyxDQUFDLENBQUM0QyxJQUFJLENBQUMsQ0FBQztVQUN0RSxJQUFJZixNQUFNLEdBQUNnQixRQUFRLENBQUNoQixNQUFNLENBQUNjLFFBQVEsRUFBQ0QsV0FBVyxDQUFDO1VBQ2hEMUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUM4QyxNQUFNLENBQUNqQixNQUFNLENBQUM7VUFDdkNPLE1BQU0sRUFBRTtRQUNaLENBQUMsQ0FBQztNQUNOO0lBQUM7RUFBQSxFQW5Hd0JXLFVBQVU7RUFxR3RDO0VBQ0RwRSxNQUFNLENBQUNDLGNBQWMsR0FBQ0EsY0FBYztBQUN4QztBQUFDIiwiaWdub3JlTGlzdCI6W10sImZpbGUiOiIuL3Jlc291cmNlcy9qcy9tb2R1bGVKcy9zdXBwbGllci5qcyIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./resources/js/moduleJs/supplier.js\n\n}"); /***/ } diff --git a/public/mix-manifest.json b/public/mix-manifest.json index d5af979..8231ca3 100644 --- a/public/mix-manifest.json +++ b/public/mix-manifest.json @@ -1,7 +1,7 @@ { - "/js/app.js": "/js/app.js?id=bfd5b3c87b1ce7a5f3cf9f87cfc03bc6", + "/js/app.js": "/js/app.js?id=788435874adbbf8e5ddc27cc9d18e00e", "/js/admin.js": "/js/admin.js?id=ba79095db4031ff8fcb2db67804629a7", - "/js/module.js": "/js/module.js?id=5ce18ae01fbbb5024dd3040821c906f2", + "/js/module.js": "/js/module.js?id=9c0dac011c39d558ee1b3f201202a8a4", "/js/components.js": "/js/components.js?id=34668cee8ac371c98657beffcff579b8", "/css/app.css": "/css/app.css?id=883a2d68194f1a6064f55eaedb17e768", "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366": "/fonts/vendor/bootstrap-icons/bootstrap-icons.woff2?92ea18a81d737146ff044ddb52010366?id=9ad5aa740d7d5e6a0191b309b9b1986c", diff --git a/resources/js/app.js b/resources/js/app.js index ffbc898..d12e286 100644 --- a/resources/js/app.js +++ b/resources/js/app.js @@ -202,6 +202,15 @@ window.ajaxErrorHandler= function (xhr, ajaxOptions, thrownError){ console.error(ajaxOptions); console.error(thrownError); + // Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz), megpróbáljuk parszolni + if (!xhr.responseJSON && xhr.responseText) { + try { + xhr.responseJSON = JSON.parse(xhr.responseText); + } catch (e) { + console.error("Nem sikerült a responseText JSON parszolása"); + } + } + // Biztonsági ellenőrzés – ha nincs responseJSON (pl. HTML válasz) if (!xhr.responseJSON) { ajaxErrorFieldHandler({'detail': 'Váratlan szerverhiba. Kérjük próbálja újra később.'}); diff --git a/tests/TestCase.php b/tests/TestCase.php index e807985..4f6d74a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -12,18 +12,24 @@ protected function setUp(): void $this->refreshApplication(); } - // Kényszerítsük a teszt adatbázist, ha valamiért nem az lenne (pl. cache-elt config) - // Használjuk az env() függvényt, mert a config() a cache miatt csalhat - if (env('APP_ENV') === 'testing') { - config(['database.connections.mysql.database' => 'd2dTest']); - } - $currentDb = config('database.connections.mysql.database'); $currentEnv = env('APP_ENV'); - // Szigorú ellenőrzés a d2d (élő/helyi) adatbázis ellen - if (strtolower($currentDb) === 'd2d' && $currentEnv === 'testing') { - throw new \Exception('STOP!!! KRITIKUS HIBA: A tesztek az ÉLŐ (d2d) adatbázison akarnak futni! A folyamat leállítva a RefreshDatabase lefutása előtt. Kérlek futtasd a "php artisan config:clear" parancsot!'); + // SZIGORÚ ELLENŐRZÉS: A 'd2d' adatbázist SOHA nem szabad teszthez használni! + // Akkor is védünk, ha a config cache-elve van vagy az APP_ENV nem 'testing'. + if (strtolower($currentDb) === 'd2d') { + echo "\n\n!!! KRITIKUS BIZTONSÁGI HIBA !!!\n"; + echo "A tesztek az ÉLŐ (d2d) adatbázishoz kapcsolódnak!\n"; + echo "Ez az adatbázis törléséhez (RefreshDatabase) vezetne.\n"; + echo "A folyamat azonnal leállítva a biztonság érdekében.\n"; + echo "Megoldás: Futtasd a 'php artisan config:clear' parancsot és ellenőrizd a .env.testing fájlt!\n\n"; + exit(1); + } + + // Kényszerítsük a teszt adatbázist, ha testing környezetben vagyunk és nem d2d + if ($currentEnv === 'testing' && strtolower($currentDb) !== 'd2dtest') { + config(['database.connections.mysql.database' => 'd2dTest']); + $currentDb = 'd2dTest'; } // Általános ellenőrzés, hogy a teszt adatbázis legyen használva