diff --git a/public/js/admin.js b/public/js/admin.js
index 5d545bb..8957ce7 100644
--- a/public/js/admin.js
+++ b/public/js/admin.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 _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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _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 DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n _classCallCheck(this, _DataModelProfitCenter);\n _this = _callSuper(this, _DataModelProfitCenter, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelProfitCenter, _DataModel);\n return _createClass(_DataModelProfitCenter);\n }(DataModel);\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var ProfitCenter = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var addressPopupWorkflow = 'new';\n var CSSSelectorForm = '';\n var dataTableCSSSelector = '';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n root.ProfitCenter = APP.ProfitCenter;\n }\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n this.getOpts = function () {\n return Opts;\n };\n this.getData = function () {\n return root.ProfitCenter;\n };\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n root.initViewList();\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\r\n * Contact Popup setup\r\n */\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $(CSSSelectorForm + ' .buttonNewContact').bind('click', function () {\n APP.ProfitCenterAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n /**\r\n * Address Popup setup\r\n */\n if (!APP.AddressPopUp) {\n console.log('nincs APP.AddressPopUp');\n APP.AddressPopUp = new window.AddressPopUp();\n } else {\n console.log('mar van APP.AddressPopUp');\n }\n APP.AddressPopUp.init({\n active: true,\n onAfterSave: root.addressAction\n });\n root.renderAddress();\n $(CSSSelectorForm + ' .buttonNewAddress').bind('click', function () {\n APP.ProfitCenterAdmin.setAddressPopupWorkflow('new');\n APP.AddressPopUp.clearData();\n APP.AddressPopUp.show();\n });\n /**\r\n *\r\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\r\n if(node==='profitCenterMultiAddress'){\r\n if(value==1){\r\n $('.containerMultiAddress').removeClass('d-none');\r\n }else{\r\n $('.containerMultiAddress').addClass('d-none');\r\n }\r\n }\r\n */\n if (node === 'addressEqual') {\n if (value == 1) {\n $(CSSSelectorForm + ' .containerMultiAddress').addClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').addClass('d-none');\n } else {\n $(CSSSelectorForm + ' .containerMultiAddress').removeClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').removeClass('d-none');\n }\n }\n }\n });\n $(CSSSelectorForm + \" :input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $(CSSSelectorForm + ' button.FormSaveButton').off('click');\n $(CSSSelectorForm + ' button.FormSaveButton').on('click', root.clickSaveButton);\n /*\r\n $(\"input[name=logoFile]\").change(function(){\r\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\r\n });\r\n */\n\n //Opts.onAfterInitViewDetails();\n debug('**end initViewDetails ');\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n var CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil'];\n $.each(needToSet, function () {\n // debug(this); //alapadatok beallitasanak logolasa\n if (typeof root.ProfitCenter[this] != 'undefined') {\n /* //alapadatok beallitasanak logolasa\r\n debug(root.ProfitCenter[this]);\r\n debug(CSSSelectorForm+' input[name='+this+']');\r\n debug($(CSSSelectorForm+' input[name='+this+']'));\r\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\n }\n $(CSSSelectorForm + ' *[data-toggle=addressEqual][data-title=' + root.ProfitCenter.addressEqual + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=multiAddress][data-title=' + root.ProfitCenter.multiAddress + ']').click();\n /*debug(root.ProfitCenter.address.length);\r\n if(root.ProfitCenter.address.length>0){\r\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\r\n if(root.ProfitCenter.address.length>1){\r\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\r\n }\r\n }\r\n */\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.ProfitCenter.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n $('.contactTable .buttonDelete').unbind('click');\n $('.contactTable .buttonDelete').bind('click', root.contactDeleteClick);\n $('.contactTable .buttonEdit').unbind('click');\n $('.contactTable .buttonEdit').bind('click', root.contactEditClick);\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.ProfitCenter.contact = root.ProfitCenter.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.contact.push(contactData);\n contactData.rowNum = root.ProfitCenter.contact.length;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $(CSSSelectorForm + ' .contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.ProfitCenter.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.ProfitCenter.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n /***************\r\n *\r\n * Address function\r\n *\r\n */\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\n };\n this.renderAddress = function () {\n var rowNum = 1;\n console.log('renderingAddress');\n $.each(root.ProfitCenter.getData('address'), function () {\n var itemData = this;\n itemData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n debug(itemData);\n var render = Mustache.render(template, itemData);\n $('.addressTable tbody').append(render);\n rowNum++;\n });\n root.bindAddressClickAction();\n };\n this.bindAddressClickAction = function () {\n $('.addressTable .buttonDelete').unbind('click');\n $('.addressTable .buttonDelete').bind('click', root.addressDeleteClick);\n $('.addressTable .buttonEdit').unbind('click');\n $('.addressTable .buttonEdit').bind('click', root.addressEditClick);\n };\n this.addressDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.ProfitCenter.address = root.ProfitCenter.address.filter(function (value, index, arr) {\n if (value.id != id) return true;\n });\n console.log(root.ProfitCenter.address);\n row.remove();\n root.resetAddressTable();\n };\n this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\n };\n this.addressEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.setAddressPopupWorkflow('edit');\n APP.AddressPopUp.loadData(id);\n };\n this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n this.addAddress = function (ItemData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.address.push(ItemData);\n ItemData.rowNum = root.ProfitCenter.address.length;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n var render = Mustache.render(template, ItemData);\n $(CSSSelectorForm + ' .addressTable tbody').append(render);\n root.bindAddressClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Cím hozzáadva!\", ItemData.street + \" hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.editAddress = function (id, itemData) {\n var newItem = [];\n $.each(root.ProfitCenter.getData('address'), function (index) {\n if (this.id == id) {\n newItem.push(itemData);\n } else {\n newItem.push(this);\n }\n });\n root.ProfitCenter.address = newItem;\n root.resetAddressTable();\n Toast.create(\"cím adatai módosítva!\", itemData.street + \" módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\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 this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n console.log(ajaxUrl);\r\n */\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n /*\r\n debug(ajaxUrl);\r\n debug(ajaxMethod);\r\n debug(ajaxData.entries());\r\n for (var pair of ajaxData.entries()) {\r\n console.log(pair[0]+ ', ' + pair[1]);\r\n }\r\n */\n\n console.table(Object.fromEntries(ajaxData));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create(\"Sikeres rögzítés!\", ajaxData.get('name') + \" nevű beszálllító elmentve\", TOAST_STATUS.SUCCESS, 5000);\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\r\n $.each(ajaxData.getAll('productGroup'),function(key,value){\r\n ajaxData.append('productGroup[]',value);\r\n })\r\n */\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('supplier[]', value);\n });\n return ajaxData;\n };\n this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJfRGF0YU1vZGVsIiwiX0RhdGFNb2RlbFByb2ZpdENlbnRlciIsImRhdGEiLCJvcHRpb25zIiwiX3RoaXMiLCJfY2xhc3NDYWxsQ2hlY2siLCJfY2FsbFN1cGVyIiwiY29udGFjdCIsImFkZHJlc3MiLCJjb25zb2xlIiwibG9nIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiUHJvZml0Q2VudGVyQWRtaW4iLCJQcm9maXRDZW50ZXJJdGVtIiwiT3B0cyIsInRva2VuIiwiY29udGFpbmVyQ3NzU2VsZWN0b3IiLCJ0ZXN0TW9kZSIsIlVSTCIsImdldERhdGFUYWJsZUNvbnRlbnQiLCJpbmRleCIsInNob3ciLCJlZGl0IiwiY3JlYXRlIiwic3RvcmUiLCJ1cGRhdGUiLCJkZXN0cm95IiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwiUHJvZml0Q2VudGVyIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiYWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJDU1NTZWxlY3RvckZvcm0iLCJkYXRhVGFibGVDU1NTZWxlY3RvciIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZ2V0RGF0YSIsImluaXQiLCJpbml0Vmlld0xpc3QiLCJjbGlja05ldyIsImRlYnVnIiwibG9hZE1haW5Db250ZW50IiwiY2xpY2tOZXdDYWxsQmFjayIsImluaXRWaWV3RGV0YWlscyIsIlN1cHBsaWVySXRlbSIsIkNvbnRhY3RQb3BVcCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJBZGRyZXNzUG9wVXAiLCJhZGRyZXNzQWN0aW9uIiwicmVuZGVyQWRkcmVzcyIsInNldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwidG9vbHRpcCIsImluaXRSYWRpb0J1dHRvbnMiLCJvbkNoYW5nZSIsInZhbHVlIiwibm9kZSIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJpbnB1dG1hc2siLCJvbmluY29tcGxldGUiLCJ2YWwiLCJsZW5ndGgiLCJvbmNvbXBsZXRlIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJjbGlja1NhdmVCdXR0b24iLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJlYWNoIiwibm90ZSIsImNhblNlZSIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwiYXR0ciIsImFkZHJlc3NFcXVhbCIsIm11bHRpQWRkcmVzcyIsInN1cHBsaWVyIiwic3VwcGxpZXJzIiwicHVzaCIsImVzY2FwZVNlbGVjdG9yIiwicHJvcCIsInJlc2V0Q29udGFjdFRhYmxlIiwicmVtb3ZlIiwicm93TnVtIiwiY29udGFjdERhdGEiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJyZW5kZXIiLCJNdXN0YWNoZSIsImFwcGVuZCIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiZXZlbnQiLCJyb3ciLCJjbG9zZXN0IiwiaWQiLCJmaW5kIiwiZmlsdGVyIiwiYXJyIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJzdGF0dXMiLCJsb2FkRGF0YSIsImFkZENvbnRhY3QiLCJlZGl0Q29udGFjdCIsIlRvYXN0IiwiZW5hYmxlVGltZXJzIiwiVE9BU1RfU1RBVFVTIiwiU1VDQ0VTUyIsIm5ld0NvbnRhY3RzIiwicmVzZXRBZGRyZXNzVGFibGUiLCJpdGVtRGF0YSIsImJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24iLCJhZGRyZXNzRGVsZXRlQ2xpY2siLCJhZGRyZXNzRWRpdENsaWNrIiwiZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3ciLCJhZGRBZGRyZXNzIiwiZWRpdEFkZHJlc3MiLCJJdGVtRGF0YSIsInN0cmVldCIsIm5ld0l0ZW0iLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsIkRhdGFUYWJsZSIsImxhbmd1YWdlIiwidXJsIiwidHlwZSIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsInRleHQiLCJjbGFzc05hbWUiLCJhcGkiLCJjb25maWciLCJhY3Rpb24iLCJlIiwiZHQiLCJkcmF3Q2FsbGJhY2siLCJzZXR0aW5ncyIsImRhdGF0YWJsZUFkZFJvd0FjdGlvbiIsImN1cnJlbnRUYXJnZXQiLCJwYXJlbnRzIiwicm93RGF0YSIsImFjdGlvbk5hbWUiLCJjYXBpdGFsaXplIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsImFqYXhVcmwiLCJyZXBsYWNlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiYWpheERhdGEiLCJfdG9rZW4iLCJhamF4IiwibWV0aG9kIiwic3VjY2VzcyIsImRyYXciLCJwcmV2ZW50RGVmYXVsdCIsImNoZWNrVmFsaWRpdHkiLCJzdG9wUHJvcGFnYXRpb24iLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJhamF4TWV0aG9kIiwidGFibGUiLCJPYmplY3QiLCJmcm9tRW50cmllcyIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwiZ2V0IiwiRm9ybURhdGEiLCJnZXRBbGwiLCJrZXkiLCJpbmRleEtleSIsInNldCJdLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzP2NkMTUiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIERhdGFNb2RlbFByb2ZpdENlbnRlcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIERhdGFNb2RlbFByb2ZpdENlbnRlciBleHRlbmRzIERhdGFNb2RlbHtcclxuXHJcbiAgICAgICAgLypcclxuICAgICAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGNvbnN0cnVjdG9yIChkYXRhLG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgc3VwZXIoZGF0YSxvcHRpb25zKVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jb250YWN0ID09PVwidW5kZWZpbmVkXCIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWN0PVtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmFkZHJlc3MgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZHJlc3M9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyPURhdGFNb2RlbFByb2ZpdENlbnRlcjtcclxufVxyXG5cclxud2luZG93LlByb2ZpdENlbnRlckFkbWluPWZ1bmN0aW9uIChvcHRpb25zLFByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclByb2ZpdENlbnRlcicsXHJcbiAgICAgICAgdGVzdE1vZGU6IGZhbHNlLFxyXG4gICAgICAgIFVSTDoge1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OiAnJyxcclxuICAgICAgICAgICAgaW5kZXg6ICcnLFxyXG4gICAgICAgICAgICBzaG93OiAnJyxcclxuICAgICAgICAgICAgZWRpdDogJycsXHJcbiAgICAgICAgICAgIGNyZWF0ZTogJycsXHJcbiAgICAgICAgICAgIHN0b3JlOiAnJyxcclxuICAgICAgICAgICAgdXBkYXRlOiAnJyxcclxuICAgICAgICAgICAgZGVzdHJveTogJycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6IHtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6IFsxLCAnYXNjJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIG9uQWZ0ZXJJbml0Vmlld0RldGFpbHM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgbGV0IFByb2ZpdENlbnRlciA9IHt9O1xyXG4gICAgbGV0IHJvb3QgPSB0aGlzO1xyXG4gICAgbGV0IGNvbnRhY3RQb3B1cFdvcmtmbG93ID0gJ25ldyc7XHJcbiAgICBsZXQgYWRkcmVzc1BvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBDU1NTZWxlY3RvckZvcm09Jyc7XHJcbiAgICBsZXQgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9Jyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucywgUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdQcm9maXRDZW50ZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZiAoIVByb2ZpdENlbnRlckl0ZW0pIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlcnQgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZiAoIUFQUC5Qcm9maXRDZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXIgPSBuZXcgd2luZG93LkRhdGFNb2RlbFByb2ZpdENlbnRlcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuUHJvZml0Q2VudGVyID0gQVBQLlByb2ZpdENlbnRlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAucHJvZml0Q2VudGVyRm9ybSc7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRPcHRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBPcHRzO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXREYXRhPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHJldHVybiByb290LlByb2ZpdENlbnRlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXQ9ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSl7XHJcbiAgICAgICAgJC5leHRlbmQoT3B0cywgb3B0aW9ucyk7XHJcblxyXG4gICAgICAgIGlmKE9wdHMudGVzdE1vZGUpe1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdC50ZXN0TW9kZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9UHJvZml0Q2VudGVySXRlbVxyXG4gICAgICAgIH1cclxuICAgICAgICByb290LmluaXRWaWV3TGlzdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jbGlja05ldz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrTmV3Jyk7XHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5jcmVhdGUscm9vdC5jbGlja05ld0NhbGxCYWNrKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrTmV3Q2FsbEJhY2s9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjYWxsYmFja05ldycpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyPW5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0RldGFpbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3RGV0YWlscz1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgIGRlYnVnKCcqKmNhbGwgaW5pdFZpZXdEZXRhaWxzICcpO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIENvbnRhY3QgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5Db250YWN0UG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqIEFkZHJlc3MgUG9wdXAgc2V0dXBcclxuICAgICAgICAgKi9cclxuICAgICAgICBpZighQVBQLkFkZHJlc3NQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcCA9IG5ldyB3aW5kb3cuQWRkcmVzc1BvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQWRkcmVzc1BvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuYWRkcmVzc0FjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQWRkcmVzcygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmJ1dHRvbk5ld0FkZHJlc3MnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5Qcm9maXRDZW50ZXJBZG1pbi5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygnbmV3Jyk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuY2xlYXJEYXRhKCk7XHJcbiAgICAgICAgICAgIEFQUC5BZGRyZXNzUG9wVXAuc2hvdygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8qKlxyXG4gICAgICAgICAqXHJcbiAgICAgICAgICovXHJcblxyXG4gICAgICAgICQoJ1tkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIl0nKS50b29sdGlwKCk7XHJcbiAgICAgICAgaW5pdFJhZGlvQnV0dG9ucyh7XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbiAodmFsdWUsbm9kZSkge1xyXG4gICAgICAgICAgICAgICAgZGVidWcodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAvKlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm9kZT09PSdwcm9maXRDZW50ZXJNdWx0aUFkZHJlc3MnKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICBpZihub2RlPT09J2FkZHJlc3NFcXVhbCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHZhbHVlPT0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzcycpLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzU3dpdGNoJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybStcIiA6aW5wdXRcIikuaW5wdXRtYXNrKHtcclxuICAgICAgICAgICAgXCJvbmluY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpKTtcclxuICAgICAgICAgICAgICAgIGlmICgkKHRoaXMpLnZhbCgpLmxlbmd0aCA+IDAgfHwgJCh0aGlzKS5kYXRhKCdyZXF1aXJlZCcpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY29tcGxldGVcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnaXMtdmFsaWQnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJvbmNsZWFyZWRcIjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NsZWFyZWQnKTtcclxuICAgICAgICAgICAgICAgICQodGhpcykucmVtb3ZlQ2xhc3MoJ2lzLWludmFsaWQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9uKCdjbGljaycscm9vdC5jbGlja1NhdmVCdXR0b24pO1xyXG4vKlxyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG4qL1xyXG5cclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgICAgIGRlYnVnKCcqKmVuZCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGxldCBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ2VtYWlsJywncG9zdENvZGUnLCdjaXR5Jywnc3RyZWV0JywncGhvbmUnLCdtb2JpbCdcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAvLyBkZWJ1Zyh0aGlzKTsgLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgaWYodHlwZW9mIHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdIT0ndW5kZWZpbmVkJyl7XHJcbi8qIC8vYWxhcGFkYXRvayBiZWFsbGl0YXNhbmFrIGxvZ29sYXNhXHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpO1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpKTtcclxuKi9cclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5Qcm9maXRDZW50ZXJbdGhpc10pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ25vdGUnXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIHRleHRhcmVhW25hbWU9bm90ZV0nKS52YWwocm9vdC5Qcm9maXRDZW50ZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5jYW5TZWUrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5ob29yZXljYURhdGFBY3RpdmUrJ10nKS5jbGljaygpO1xyXG5cclxuICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10hPSd1bmRlZmluZWQnICYmIChyb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5hZGRyZXNzRXF1YWwrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9Jytyb290LlByb2ZpdENlbnRlci5tdWx0aUFkZHJlc3MrJ10nKS5jbGljaygpO1xyXG4gICAgICAgIC8qZGVidWcocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGgpO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9YWRkcmVzc0VxdWFsXVtkYXRhLXRpdGxlPTBdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MSl7XHJcbiAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnICpbZGF0YS10b2dnbGU9bXVsdGlBZGRyZXNzXVtkYXRhLXRpdGxlPTFdJykuY2xpY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAqL1xyXG4gICAgICAgIGxldCBzdXBwbGllcj1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuc3VwcGxpZXJzLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc3VwcGxpZXIucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vJChDU1NTZWxlY3RvckZvcm0rJyAucHJvZml0Q2VudGVyU2VsZWN0JykudmFsKHByb2ZpdENlbnRlcikuY2hhbmdlKCk7XHJcbiAgICAgICAgJC5lYWNoKHN1cHBsaWVyLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgJCgnaW5wdXRbdmFsdWU9XCInKyQuZXNjYXBlU2VsZWN0b3IodGhpcykrJ1wiXScpLnByb3AoIFwiY2hlY2tlZFwiLCB0cnVlICk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldENvbnRhY3RUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWN0VGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckNvbnRhY3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQ29udGFjdD1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0NvbnRhY3RzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGNvbnRhY3REYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgICAgIHJvd051bSsrO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYmluZENvbnRhY3RDbGlja0FjdGlvbiA9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpLmJpbmQoJ2NsaWNrJyxyb290LmNvbnRhY3REZWxldGVDbGljayk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRWRpdCcpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdEVkaXRDbGljayk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0RGVsZXRlQ2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9Y29udGFjdElkXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0PXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QuZmlsdGVyKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdCk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGNvbnRhY3RQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBjb250YWN0UG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuY29udGFjdEVkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGFjdEFjdGlvbj1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQ29udGFjdChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRDb250YWN0UG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRDb250YWN0KGNvbnRhY3REYXRhLmlkLGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZENvbnRhY3Q9ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5jb250YWN0Lmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsY29udGFjdERhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZENvbnRhY3RDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IHRhcnTDsyBob3p6w6FhZHZhIVwiLCBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcG9jc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbmV3Q29udGFjdHMucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3Q9bmV3Q29udGFjdHM7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkthcGNzb2xhdCBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqKioqKioqKioqKioqKlxyXG4gICAgICpcclxuICAgICAqIEFkZHJlc3MgZnVuY3Rpb25cclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIHRoaXMucmVzZXRBZGRyZXNzVGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYWRkcmVzc1RhYmxlIHRib2R5IHRyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBZGRyZXNzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckFkZHJlc3M9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBZGRyZXNzJyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2FkZHJlc3MnKSxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgbGV0IGl0ZW1EYXRhPXRoaXM7XHJcbiAgICAgICAgICAgIGl0ZW1EYXRhLnJvd051bT1yb3dOdW07XHJcbiAgICAgICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJBZGRyZXNzVGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICAgICAgZGVidWcoaXRlbURhdGEpO1xyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxpdGVtRGF0YSk7XHJcbiAgICAgICAgICAgICQoJy5hZGRyZXNzVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgcm93TnVtKys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQWRkcmVzc0NsaWNrQWN0aW9uID1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRGVsZXRlJykuYmluZCgnY2xpY2snLHJvb3QuYWRkcmVzc0RlbGV0ZUNsaWNrKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25FZGl0JykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5hZGRyZXNzRWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZHJlc3NEZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1cImFkZHJlc3NJZFtdXCJdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3M9cm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT1pZCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3MpO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0QWRkcmVzc1RhYmxlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldEFkZHJlc3NQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBhZGRyZXNzUG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHRoaXMuc2V0QWRkcmVzc1BvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgYWRkcmVzc1BvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmFkZHJlc3NFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzKTtcclxuICAgICAgICBsZXQgcm93PSQodGhpcykuY2xvc2VzdCgndHInKTtcclxuICAgICAgICBsZXQgaWQ9cm93LmZpbmQoJ2lucHV0W25hbWU9XCJhZGRyZXNzSWRbXVwiXScpLnZhbCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGlkKTtcclxuICAgICAgICByb290LnNldEFkZHJlc3NQb3B1cFdvcmtmbG93KCdlZGl0Jyk7XHJcbiAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5sb2FkRGF0YShpZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZHJlc3NBY3Rpb249ZnVuY3Rpb24gKGl0ZW1EYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZEFkZHJlc3MoaXRlbURhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0QWRkcmVzcyhpdGVtRGF0YS5pZCxpdGVtRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRBZGRyZXNzPWZ1bmN0aW9uIChJdGVtRGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5wdXNoKEl0ZW1EYXRhKTtcclxuICAgICAgICBJdGVtRGF0YS5yb3dOdW09cm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg7XHJcbiAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckFkZHJlc3NUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLEl0ZW1EYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkPDrW0gaG96esOhYWR2YSFcIiwgSXRlbURhdGEuc3RyZWV0K1wiIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVkaXRBZGRyZXNzPWZ1bmN0aW9uIChpZCxpdGVtRGF0YSl7XHJcblxyXG4gICAgICAgIGxldCBuZXdJdGVtPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5nZXREYXRhKCdhZGRyZXNzJyksZnVuY3Rpb24gKGluZGV4KXtcclxuICAgICAgICAgICAgaWYodGhpcy5pZD09aWQpe1xyXG4gICAgICAgICAgICAgICAgbmV3SXRlbS5wdXNoKGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2godGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzPW5ld0l0ZW07XHJcbiAgICAgICAgcm9vdC5yZXNldEFkZHJlc3NUYWJsZSgpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcImPDrW0gYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBpdGVtRGF0YS5zdHJlZXQrXCIgbcOzZG9zw610dmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIC8vXCJzdGF0ZVNhdmVcIjogdHJ1ZSxcclxuICAgICAgICAgICAgXCJkcmF3Q2FsbGJhY2tcIjogZnVuY3Rpb24oIHNldHRpbmdzICkge1xyXG4gICAgICAgICAgICAgICAgQVBQLmRhdGF0YWJsZUFkZFJvd0FjdGlvbihkYXRhVGFibGVDU1NTZWxlY3Rvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICk7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGVuZCcpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGRlYnVnKCdkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljaycpO1xyXG4gICAgICAgIGxldCBub2RlPSQoZXZlbnRbMF0uY3VycmVudFRhcmdldCk7XHJcbiAgICAgICAgbGV0IHJvdz0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKS5EYXRhVGFibGUoKS5yb3cobm9kZS5wYXJlbnRzKCd0cicpKTtcclxuICAgICAgICBsZXQgcm93RGF0YT1yb3cuZGF0YSgpO1xyXG4gICAgICAgIGxldCBhY3Rpb25OYW1lPSdkYXRhdGFibGVSb3dBY3Rpb24nK25vZGUuZGF0YSgnYnV0dG9udHlwZScpLmNhcGl0YWxpemUoKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJvb3RbYWN0aW9uTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcm9vdFthY3Rpb25OYW1lXShyb3dEYXRhLG5vZGUpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhPcHRzLlVSTCk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhamF4VXJsKTtcclxuICAgICAgICAqL1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCBhamF4RGF0YT17fTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXN0cm95LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIGFqYXhEYXRhLl90b2tlbj0kKCdpbnB1dFtuYW1lPV90b2tlbl0nKS52YWwoKTtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTphamF4RGF0YSxcclxuICAgICAgICAgICAgbWV0aG9kOlwiREVMRVRFXCIsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5zdWNjZXNzPT10cnVlKXtcclxuICAgICAgICAgICAgICAgICAgICByb3cucmVtb3ZlKCkuZHJhdygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGRlYnVnKENTU1NlbGVjdG9yRm9ybSk7XHJcbiAgICAgICAgZGVidWcoJChDU1NTZWxlY3RvckZvcm0pKTtcclxuICAgICAgICBpZiAoJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZShcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3BDQSxzQkFBcUIsMEJBQUFDLFVBQUE7SUFFdkI7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsdUJBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUFBQyxlQUFBLE9BQUFKLHNCQUFBO01BQ3ZCRyxLQUFBLEdBQUFFLFVBQUEsT0FBQUwsc0JBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0EsSUFBRyxPQUFPSCxLQUFBLENBQUtJLE9BQU8sS0FBSSxXQUFXLEVBQUM7UUFDbENKLEtBQUEsQ0FBS0ksT0FBTyxHQUFDLEVBQUU7TUFDbkI7TUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUNOLEtBQUEsQ0FBS08sV0FBVyxDQUFDQyxJQUFJLEdBQUMscUJBQXFCLENBQUM7TUFBQyxPQUFBUixLQUFBO0lBQzdEO0lBQUNTLFNBQUEsQ0FBQVosc0JBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFjLFlBQUEsQ0FBQWIsc0JBQUE7RUFBQSxFQWQrQmMsU0FBUztFQWU1QztFQUNEQyxNQUFNLENBQUNqQixxQkFBcUIsR0FBQ0Esc0JBQXFCO0FBQ3REO0FBRUFpQixNQUFNLENBQUND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\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.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 _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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _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 DataModelProfitCenter === 'undefined') {\n var _DataModelProfitCenter = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _DataModelProfitCenter(data, options) {\n var _this;\n _classCallCheck(this, _DataModelProfitCenter);\n _this = _callSuper(this, _DataModelProfitCenter, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.address === \"undefined\") {\n _this.address = [];\n }\n console.log(_this.constructor.name + ' constructor called');\n return _this;\n }\n _inherits(_DataModelProfitCenter, _DataModel);\n return _createClass(_DataModelProfitCenter);\n }(DataModel);\n ;\n window.DataModelProfitCenter = _DataModelProfitCenter;\n}\nwindow.ProfitCenterAdmin = function (options, ProfitCenterItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerProfitCenter',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var ProfitCenter = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n var addressPopupWorkflow = 'new';\n var CSSSelectorForm = '';\n var dataTableCSSSelector = '';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, ProfitCenterItem) {\n console.log('ProfitCenterAdmin constructor called');\n $.extend(Opts, options);\n if (!ProfitCenterItem) {\n console.log('ProfitCentert letre kellet hozni ');\n if (!APP.ProfitCenter) {\n APP.ProfitCenter = new window.DataModelProfitCenter();\n }\n root.ProfitCenter = APP.ProfitCenter;\n }\n CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n };\n this.getOpts = function () {\n return Opts;\n };\n this.getData = function () {\n return root.ProfitCenter;\n };\n this.init = function (options, ProfitCenterItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (ProfitCenterItem) {\n root.ProfitCenter = ProfitCenterItem;\n }\n root.initViewList();\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.ProfitCenter = new window.DataModelProfitCenter();\n root.initViewDetails();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n /**\r\n * Contact Popup setup\r\n */\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $(CSSSelectorForm + ' .buttonNewContact').bind('click', function () {\n APP.ProfitCenterAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n /**\r\n * Address Popup setup\r\n */\n if (!APP.AddressPopUp) {\n console.log('nincs APP.AddressPopUp');\n APP.AddressPopUp = new window.AddressPopUp();\n } else {\n console.log('mar van APP.AddressPopUp');\n }\n APP.AddressPopUp.init({\n active: true,\n onAfterSave: root.addressAction\n });\n root.renderAddress();\n $(CSSSelectorForm + ' .buttonNewAddress').bind('click', function () {\n APP.ProfitCenterAdmin.setAddressPopupWorkflow('new');\n APP.AddressPopUp.clearData();\n APP.AddressPopUp.show();\n });\n /**\r\n *\r\n */\n\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons({\n onChange: function onChange(value, node) {\n debug(value);\n debug(node);\n /*\r\n if(node==='profitCenterMultiAddress'){\r\n if(value==1){\r\n $('.containerMultiAddress').removeClass('d-none');\r\n }else{\r\n $('.containerMultiAddress').addClass('d-none');\r\n }\r\n }\r\n */\n if (node === 'addressEqual') {\n if (value == 1) {\n $(CSSSelectorForm + ' .containerMultiAddress').addClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').addClass('d-none');\n } else {\n $(CSSSelectorForm + ' .containerMultiAddress').removeClass('d-none');\n $(CSSSelectorForm + ' .containerMultiAddressSwitch').removeClass('d-none');\n }\n }\n }\n });\n $(CSSSelectorForm + \" :input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $(CSSSelectorForm + ' button.FormSaveButton').off('click');\n $(CSSSelectorForm + ' button.FormSaveButton').on('click', root.clickSaveButton);\n /*\r\n $(\"input[name=logoFile]\").change(function(){\r\n setImageFromLocal(this,Opts.containerCssSelector+' .imageLogo');\r\n });\r\n */\n\n //Opts.onAfterInitViewDetails();\n debug('**end initViewDetails ');\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n var CSSSelectorForm = Opts.containerCssSelector + ' .profitCenterForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'email', 'postCode', 'city', 'street', 'phone', 'mobil'];\n $.each(needToSet, function () {\n // debug(this); //alapadatok beallitasanak logolasa\n if (typeof root.ProfitCenter[this] != 'undefined') {\n /* //alapadatok beallitasanak logolasa\r\n debug(root.ProfitCenter[this]);\r\n debug(CSSSelectorForm+' input[name='+this+']');\r\n debug($(CSSSelectorForm+' input[name='+this+']'));\r\n */\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.ProfitCenter[this]);\n }\n });\n if (typeof root.ProfitCenter['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.ProfitCenter.note);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.ProfitCenter.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.ProfitCenter.hooreycaDataActive + ']').click();\n if (typeof root.ProfitCenter['logoFile'] != 'undefined' && root.ProfitCenter['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.ProfitCenter['logoFile']);\n }\n $(CSSSelectorForm + ' *[data-toggle=addressEqual][data-title=' + root.ProfitCenter.addressEqual + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=multiAddress][data-title=' + root.ProfitCenter.multiAddress + ']').click();\n /*debug(root.ProfitCenter.address.length);\r\n if(root.ProfitCenter.address.length>0){\r\n $(CSSSelectorForm+' *[data-toggle=addressEqual][data-title=0]').click();\r\n if(root.ProfitCenter.address.length>1){\r\n $(CSSSelectorForm+' *[data-toggle=multiAddress][data-title=1]').click();\r\n }\r\n }\r\n */\n var supplier = [];\n $.each(root.ProfitCenter.suppliers, function () {\n supplier.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n $.each(supplier, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n };\n this.resetContactTable = function () {\n $(CSSSelectorForm + ' .contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.ProfitCenter.getData('contact'), function () {\n var contactData = this;\n contactData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n rowNum++;\n });\n root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n $('.contactTable .buttonDelete').unbind('click');\n $('.contactTable .buttonDelete').bind('click', root.contactDeleteClick);\n $('.contactTable .buttonEdit').unbind('click');\n $('.contactTable .buttonEdit').bind('click', root.contactEditClick);\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.ProfitCenter.contact = root.ProfitCenter.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n console.log(root.ProfitCenter.contact);\n row.remove();\n root.resetContactTable();\n };\n this.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n this.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n console.log(id);\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.contact.push(contactData);\n contactData.rowNum = root.ProfitCenter.contact.length;\n var template = $('template[data-name=\"profitCenterContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $(CSSSelectorForm + ' .contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Kapcsolat tartó hozzáadva!\", contactData.name + \" nevű kapocsolattartó hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.ProfitCenter.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.ProfitCenter.contact = newContacts;\n root.resetContactTable();\n Toast.create(\"Kapcsolat adatai módosítva!\", contactData.name + \" nevű kapocsolattartó módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n\n /***************\r\n *\r\n * Address function\r\n *\r\n */\n this.resetAddressTable = function () {\n $(CSSSelectorForm + ' .addressTable tbody tr').remove();\n root.renderAddress();\n };\n this.renderAddress = function () {\n var rowNum = 1;\n console.log('renderingAddress');\n $.each(root.ProfitCenter.getData('address'), function () {\n var itemData = this;\n itemData.rowNum = rowNum;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n debug(itemData);\n var render = Mustache.render(template, itemData);\n $('.addressTable tbody').append(render);\n rowNum++;\n });\n root.bindAddressClickAction();\n };\n this.bindAddressClickAction = function () {\n $('.addressTable .buttonDelete').unbind('click');\n $('.addressTable .buttonDelete').bind('click', root.addressDeleteClick);\n $('.addressTable .buttonEdit').unbind('click');\n $('.addressTable .buttonEdit').bind('click', root.addressEditClick);\n };\n this.addressDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.ProfitCenter.address = root.ProfitCenter.address.filter(function (value, index, arr) {\n if (value.id != id) return true;\n });\n console.log(root.ProfitCenter.address);\n row.remove();\n root.resetAddressTable();\n };\n this.getAddressPopupWorkflow = function () {\n return addressPopupWorkflow;\n };\n this.setAddressPopupWorkflow = function (status) {\n addressPopupWorkflow = status;\n };\n this.addressEditClick = function (event) {\n console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=\"addressId[]\"]').val();\n console.log(id);\n root.setAddressPopupWorkflow('edit');\n APP.AddressPopUp.loadData(id);\n };\n this.addressAction = function (itemData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getAddressPopupWorkflow() == 'new') {\n root.addAddress(itemData);\n } else if (root.getAddressPopupWorkflow() == 'edit') {\n root.editAddress(itemData.id, itemData);\n }\n };\n this.addAddress = function (ItemData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.ProfitCenter.address.push(ItemData);\n ItemData.rowNum = root.ProfitCenter.address.length;\n var template = $('template[data-name=\"profitCenterAddressTableRow\"]').html();\n var render = Mustache.render(template, ItemData);\n $(CSSSelectorForm + ' .addressTable tbody').append(render);\n root.bindAddressClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Cím hozzáadva!\", ItemData.street + \" hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.editAddress = function (id, itemData) {\n var newItem = [];\n $.each(root.ProfitCenter.getData('address'), function (index) {\n if (this.id == id) {\n newItem.push(itemData);\n } else {\n newItem.push(this);\n }\n });\n root.ProfitCenter.address = newItem;\n root.resetAddressTable();\n Toast.create(\"cím adatai módosítva!\", itemData.street + \" módosítva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\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 this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n /*\r\n console.log(Opts.URL);\r\n console.log(ajaxUrl);\r\n */\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var ajaxData = {};\n var ajaxUrl = Opts.URL.destroy.replace('%id%', rowData.id);\n ajaxData._token = $('input[name=_token]').val();\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n }\n }\n });\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n event.preventDefault();\n debug(CSSSelectorForm);\n debug($(CSSSelectorForm));\n if ($(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.ProfitCenter.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.ProfitCenter.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n /*\r\n debug(ajaxUrl);\r\n debug(ajaxMethod);\r\n debug(ajaxData.entries());\r\n for (var pair of ajaxData.entries()) {\r\n console.log(pair[0]+ ', ' + pair[1]);\r\n }\r\n */\n\n console.table(Object.fromEntries(ajaxData));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű profitcenter elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n /*\r\n $.each(ajaxData.getAll('productGroup'),function(key,value){\r\n ajaxData.append('productGroup[]',value);\r\n })\r\n */\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n $.each(ajaxData.getAll('supplier'), function (key, value) {\n ajaxData.append('supplier[]', value);\n });\n return ajaxData;\n };\n this.construct(options, ProfitCenterItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vcHJvZml0Q2VudGVyLmpzIiwibmFtZXMiOlsiRGF0YU1vZGVsUHJvZml0Q2VudGVyIiwiX0RhdGFNb2RlbCIsIl9EYXRhTW9kZWxQcm9maXRDZW50ZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJhZGRyZXNzIiwiY29uc29sZSIsImxvZyIsImNvbnN0cnVjdG9yIiwibmFtZSIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlByb2ZpdENlbnRlckFkbWluIiwiUHJvZml0Q2VudGVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsIlByb2ZpdENlbnRlciIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImFkZHJlc3NQb3B1cFdvcmtmbG93IiwiQ1NTU2VsZWN0b3JGb3JtIiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJjb25zdHJ1Y3QiLCIkIiwiZXh0ZW5kIiwiQVBQIiwiZ2V0T3B0cyIsImdldERhdGEiLCJpbml0IiwiaW5pdFZpZXdMaXN0IiwiY2xpY2tOZXciLCJkZWJ1ZyIsImxvYWRNYWluQ29udGVudCIsImNsaWNrTmV3Q2FsbEJhY2siLCJpbml0Vmlld0RldGFpbHMiLCJTdXBwbGllckl0ZW0iLCJDb250YWN0UG9wVXAiLCJhY3RpdmUiLCJvbkFmdGVyU2F2ZSIsImNvbnRhY3RBY3Rpb24iLCJyZW5kZXJDb250YWN0IiwiYmluZCIsInNldENvbnRhY3RQb3B1cFdvcmtmbG93IiwiY2xlYXJEYXRhIiwiQWRkcmVzc1BvcFVwIiwiYWRkcmVzc0FjdGlvbiIsInJlbmRlckFkZHJlc3MiLCJzZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyIsInRvb2x0aXAiLCJpbml0UmFkaW9CdXR0b25zIiwib25DaGFuZ2UiLCJ2YWx1ZSIsIm5vZGUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5wdXRtYXNrIiwib25pbmNvbXBsZXRlIiwidmFsIiwibGVuZ3RoIiwib25jb21wbGV0ZSIsIm9uY2xlYXJlZCIsIm9mZiIsIm9uIiwiY2xpY2tTYXZlQnV0dG9uIiwic2V0RGV0YWlsc1ZpZXdEYXRhIiwibmVlZFRvU2V0IiwiZWFjaCIsIm5vdGUiLCJjYW5TZWUiLCJjbGljayIsImhvb3JleWNhRGF0YUFjdGl2ZSIsImF0dHIiLCJhZGRyZXNzRXF1YWwiLCJtdWx0aUFkZHJlc3MiLCJzdXBwbGllciIsInN1cHBsaWVycyIsInB1c2giLCJlc2NhcGVTZWxlY3RvciIsInByb3AiLCJyZXNldENvbnRhY3RUYWJsZSIsInJlbW92ZSIsInJvd051bSIsImNvbnRhY3REYXRhIiwidGVtcGxhdGUiLCJodG1sIiwicmVuZGVyIiwiTXVzdGFjaGUiLCJhcHBlbmQiLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImV2ZW50Iiwicm93IiwiY2xvc2VzdCIsImlkIiwiZmluZCIsImZpbHRlciIsImFyciIsImdldENvbnRhY3RQb3B1cFdvcmtmbG93Iiwic3RhdHVzIiwibG9hZERhdGEiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJUb2FzdCIsImVuYWJsZVRpbWVycyIsIlRPQVNUX1NUQVRVUyIsIlNVQ0NFU1MiLCJuZXdDb250YWN0cyIsInJlc2V0QWRkcmVzc1RhYmxlIiwiaXRlbURhdGEiLCJiaW5kQWRkcmVzc0NsaWNrQWN0aW9uIiwiYWRkcmVzc0RlbGV0ZUNsaWNrIiwiYWRkcmVzc0VkaXRDbGljayIsImdldEFkZHJlc3NQb3B1cFdvcmtmbG93IiwiYWRkQWRkcmVzcyIsImVkaXRBZGRyZXNzIiwiSXRlbURhdGEiLCJzdHJlZXQiLCJuZXdJdGVtIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiY29sTnVtIiwic2V0T3B0cyIsImRhdGF0YWJsZUFjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJEYXRhVGFibGUiLCJsYW5ndWFnZSIsInVybCIsInR5cGUiLCJidXR0b25zIiwiZGF0YXRhYmxlQWRkUm93VHJhc2hCdXR0b24iLCJkYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uIiwibGF0aW5pc2UiLCJhdXRvUHJpbnQiLCJ0ZXh0IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJjdXJyZW50VGFyZ2V0IiwicGFyZW50cyIsInJvd0RhdGEiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJhamF4VXJsIiwicmVwbGFjZSIsImRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSIsImFqYXhEYXRhIiwiX3Rva2VuIiwiYWpheCIsIm1ldGhvZCIsInN1Y2Nlc3MiLCJkcmF3IiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5IiwicmVwb3J0VmFsaWRpdHkiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJEQU5HRVIiLCJ0aW1lb3V0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsIiwiYWpheE1ldGhvZCIsInRhYmxlIiwiT2JqZWN0IiwiZnJvbUVudHJpZXMiLCJjb250ZW50VHlwZSIsInByb2Nlc3NEYXRhIiwiaGVhZGVycyIsImdldCIsIkZvcm1EYXRhIiwiZ2V0QWxsIiwia2V5IiwiaW5kZXhLZXkiLCJzZXQiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9wcm9maXRDZW50ZXIuanM/Y2QxNSJdLCJzb3VyY2VzQ29udGVudCI6WyJpZih0eXBlb2YgRGF0YU1vZGVsUHJvZml0Q2VudGVyPT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgRGF0YU1vZGVsUHJvZml0Q2VudGVyIGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuYWRkcmVzcyA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkcmVzcz1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmNvbnN0cnVjdG9yLm5hbWUrJyBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICB9O1xyXG4gICAgfTtcclxuICAgIHdpbmRvdy5EYXRhTW9kZWxQcm9maXRDZW50ZXI9RGF0YU1vZGVsUHJvZml0Q2VudGVyO1xyXG59XHJcblxyXG53aW5kb3cuUHJvZml0Q2VudGVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgLypcclxuICAgICAqIFZhcmlhYmxlcyBhY2Nlc3NpYmxlXHJcbiAgICAgKiBpbiB0aGUgY2xhc3NcclxuICAgICAqL1xyXG4gICAgbGV0IE9wdHMgPSB7XHJcbiAgICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6ICcuY29udGFpbmVyUHJvZml0Q2VudGVyJyxcclxuICAgICAgICB0ZXN0TW9kZTogZmFsc2UsXHJcbiAgICAgICAgVVJMOiB7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6ICcnLFxyXG4gICAgICAgICAgICBpbmRleDogJycsXHJcbiAgICAgICAgICAgIHNob3c6ICcnLFxyXG4gICAgICAgICAgICBlZGl0OiAnJyxcclxuICAgICAgICAgICAgY3JlYXRlOiAnJyxcclxuICAgICAgICAgICAgc3RvcmU6ICcnLFxyXG4gICAgICAgICAgICB1cGRhdGU6ICcnLFxyXG4gICAgICAgICAgICBkZXN0cm95OiAnJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGFUYWJsZToge1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTogWzEsICdhc2MnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICBsZXQgUHJvZml0Q2VudGVyID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3cgPSAnbmV3JztcclxuICAgIGxldCBhZGRyZXNzUG9wdXBXb3JrZmxvdyA9ICduZXcnO1xyXG4gICAgbGV0IENTU1NlbGVjdG9yRm9ybT0nJztcclxuICAgIGxldCBkYXRhVGFibGVDU1NTZWxlY3Rvcj0nJztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLCBQcm9maXRDZW50ZXJJdGVtKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1Byb2ZpdENlbnRlckFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmICghUHJvZml0Q2VudGVySXRlbSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUHJvZml0Q2VudGVydCBsZXRyZSBrZWxsZXQgaG96bmkgJyk7XHJcbiAgICAgICAgICAgIGlmICghQVBQLlByb2ZpdENlbnRlcikge1xyXG4gICAgICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlciA9IG5ldyB3aW5kb3cuRGF0YU1vZGVsUHJvZml0Q2VudGVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIgPSBBUFAuUHJvZml0Q2VudGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBDU1NTZWxlY3RvckZvcm09T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5wcm9maXRDZW50ZXJGb3JtJztcclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdldERhdGE9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuUHJvZml0Q2VudGVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxQcm9maXRDZW50ZXJJdGVtKXtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgaWYoT3B0cy50ZXN0TW9kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiByb290LnRlc3RNb2RlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKFByb2ZpdENlbnRlckl0ZW0pe1xyXG4gICAgICAgICAgICByb290LlByb2ZpdENlbnRlcj1Qcm9maXRDZW50ZXJJdGVtXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvb3QuaW5pdFZpZXdMaXN0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsaWNrTmV3PWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2xpY2tOZXcnKTtcclxuICAgICAgICBBUFAubG9hZE1haW5Db250ZW50KE9wdHMuVVJMLmNyZWF0ZSxyb290LmNsaWNrTmV3Q2FsbEJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXdDYWxsQmFjaz1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ2NhbGxiYWNrTmV3Jyk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXI9bmV3IHdpbmRvdy5EYXRhTW9kZWxQcm9maXRDZW50ZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdFZpZXdEZXRhaWxzPWZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSl7XHJcbiAgICAgICAgZGVidWcoJyoqY2FsbCBpbml0Vmlld0RldGFpbHMgJyk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQ29udGFjdCBQb3B1cCBzZXR1cFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKCFBUFAuQ29udGFjdFBvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQ29udGFjdFBvcFVwID0gbmV3IHdpbmRvdy5Db250YWN0UG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5Db250YWN0UG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQ29udGFjdFBvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5jb250YWN0QWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJDb250YWN0KCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYnV0dG9uTmV3Q29udGFjdCcpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICogQWRkcmVzcyBQb3B1cCBzZXR1cFxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIGlmKCFBUFAuQWRkcmVzc1BvcFVwKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ25pbmNzIEFQUC5BZGRyZXNzUG9wVXAnKVxyXG4gICAgICAgICAgICBBUFAuQWRkcmVzc1BvcFVwID0gbmV3IHdpbmRvdy5BZGRyZXNzUG9wVXAoKTtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ21hciB2YW4gIEFQUC5BZGRyZXNzUG9wVXAnKVxyXG4gICAgICAgIH1cclxuICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLmluaXQoe1xyXG4gICAgICAgICAgICBhY3RpdmU6dHJ1ZSxcclxuICAgICAgICAgICAgb25BZnRlclNhdmU6cm9vdC5hZGRyZXNzQWN0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5yZW5kZXJBZGRyZXNzKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuYnV0dG9uTmV3QWRkcmVzcycpLmJpbmQoJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgQVBQLlByb2ZpdENlbnRlckFkbWluLnNldEFkZHJlc3NQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkFkZHJlc3NQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLyoqXHJcbiAgICAgICAgICpcclxuICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKHtcclxuICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uICh2YWx1ZSxub2RlKSB7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1Zyhub2RlKTtcclxuICAgICAgICAgICAgICAgIC8qXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub2RlPT09J3Byb2ZpdENlbnRlck11bHRpQWRkcmVzcycpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5jb250YWluZXJNdWx0aUFkZHJlc3MnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyTXVsdGlBZGRyZXNzJykuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIGlmKG5vZGU9PT0nYWRkcmVzc0VxdWFsJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodmFsdWU9PTEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3MnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhaW5lck11bHRpQWRkcmVzc1N3aXRjaCcpLmFkZENsYXNzKCdkLW5vbmUnKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFpbmVyTXVsdGlBZGRyZXNzJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5jb250YWluZXJNdWx0aUFkZHJlc3NTd2l0Y2gnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtK1wiIDppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub2ZmKCdjbGljaycpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgYnV0dG9uLkZvcm1TYXZlQnV0dG9uJykub24oJ2NsaWNrJyxyb290LmNsaWNrU2F2ZUJ1dHRvbik7XHJcbi8qXHJcbiAgICAgICAgJChcImlucHV0W25hbWU9bG9nb0ZpbGVdXCIpLmNoYW5nZShmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBzZXRJbWFnZUZyb21Mb2NhbCh0aGlzLE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuaW1hZ2VMb2dvJyk7XHJcbiAgICAgICAgfSk7XHJcbiovXHJcblxyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0RGV0YWlsc1ZpZXdEYXRhPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1Zygnc2V0RGV0YWlsc1ZpZXdEYXRhJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnByb2ZpdENlbnRlckZvcm0nO1xyXG4gICAgICAgIGxldCBuZWVkVG9TZXQ9W1xyXG4gICAgICAgICAgICAnbmFtZScsJ2hvb3JleWNhSWQnLCduYW1lSWQnLFxyXG4gICAgICAgICAgICAnZW1haWwnLCdwb3N0Q29kZScsJ2NpdHknLCdzdHJlZXQnLCdwaG9uZScsJ21vYmlsJ1xyXG4gICAgICAgIF07XHJcbiAgICAgICAgJC5lYWNoKG5lZWRUb1NldCxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vIGRlYnVnKHRoaXMpOyAvL2FsYXBhZGF0b2sgYmVhbGxpdGFzYW5hayBsb2dvbGFzYVxyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5Qcm9maXRDZW50ZXJbdGhpc10hPSd1bmRlZmluZWQnKXtcclxuLyogLy9hbGFwYWRhdG9rIGJlYWxsaXRhc2FuYWsgbG9nb2xhc2FcclxuICAgICAgICAgICAgICAgIGRlYnVnKHJvb3QuUHJvZml0Q2VudGVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgIGRlYnVnKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9Jyt0aGlzKyddJykpO1xyXG4qL1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlByb2ZpdENlbnRlclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlByb2ZpdENlbnRlclsnbm90ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT1ub3RlXScpLnZhbChyb290LlByb2ZpdENlbnRlci5ub3RlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZV1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWhvb3JleWNhRGF0YUFjdGl2ZV1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlByb2ZpdENlbnRlclsnbG9nb0ZpbGUnXSE9J3VuZGVmaW5lZCcgJiYgKHJvb3QuUHJvZml0Q2VudGVyWydsb2dvRmlsZSddKSl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgaW1nLmltYWdlTG9nbycpLmF0dHIoJ3NyYycscm9vdC5Qcm9maXRDZW50ZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWFkZHJlc3NFcXVhbF1bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3NFcXVhbCsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPW11bHRpQWRkcmVzc11bZGF0YS10aXRsZT0nK3Jvb3QuUHJvZml0Q2VudGVyLm11bHRpQWRkcmVzcysnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgLypkZWJ1Zyhyb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aCk7XHJcbiAgICAgICAgaWYocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcy5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1hZGRyZXNzRXF1YWxdW2RhdGEtdGl0bGU9MF0nKS5jbGljaygpO1xyXG4gICAgICAgICAgICBpZihyb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1tdWx0aUFkZHJlc3NdW2RhdGEtdGl0bGU9MV0nKS5jbGljaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgbGV0IHN1cHBsaWVyPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlByb2ZpdENlbnRlci5zdXBwbGllcnMsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBzdXBwbGllci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAkLmVhY2goc3VwcGxpZXIsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAkKCdpbnB1dFt2YWx1ZT1cIicrJC5lc2NhcGVTZWxlY3Rvcih0aGlzKSsnXCJdJykucHJvcCggXCJjaGVja2VkXCIsIHRydWUgKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0Q29udGFjdFRhYmxlPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnY29udGFjdCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgY29udGFjdERhdGE9dGhpcztcclxuICAgICAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWN0VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICAgICAgcm93TnVtKys7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQ29udGFjdENsaWNrQWN0aW9uID1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25EZWxldGUnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSAuYnV0dG9uRGVsZXRlJykuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0JykudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgICQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkVkaXQnKS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3REZWxldGVDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3Q9cm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdC5maWx0ZXIoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh2YWx1ZSxpbmRleCxhcnIpe1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlkIT09aWQqMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhyb290LlByb2ZpdENlbnRlci5jb250YWN0KTtcclxuICAgICAgICByb3cucmVtb3ZlKCk7XHJcbiAgICAgICAgcm9vdC5yZXNldENvbnRhY3RUYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5nZXRDb250YWN0UG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gY29udGFjdFBvcHVwV29ya2Zsb3c7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKHN0YXR1cykge1xyXG4gICAgICAgIGNvbnRhY3RQb3B1cFdvcmtmbG93PXN0YXR1cztcclxuICAgIH1cclxuXHJcblxyXG4gICAgdGhpcy5jb250YWN0RWRpdENsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcyk7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb250YWN0QWN0aW9uPWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ25haCBtb3N0IGtlbGxlbmUgbWVnIHZhbGFtaXQgY3NpbmFsbmkuJylcclxuICAgICAgICBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSduZXcnKXtcclxuICAgICAgICAgICAgcm9vdC5hZGRDb250YWN0KGNvbnRhY3REYXRhKTtcclxuICAgICAgICB9ZWxzZSBpZihyb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93KCk9PSdlZGl0Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuZWRpdENvbnRhY3QoY29udGFjdERhdGEuaWQsY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuYWRkQ29udGFjdD1mdW5jdGlvbiAoY29udGFjdERhdGEpe1xyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZmVsIGtlbGwgdmVubmkgYSBzb3JiYVxyXG4gICAgICAgICAqL1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QucHVzaChjb250YWN0RGF0YSk7XHJcbiAgICAgICAgY29udGFjdERhdGEucm93TnVtPXJvb3QuUHJvZml0Q2VudGVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJwcm9maXRDZW50ZXJDb250YWN0VGFibGVSb3dcIl0nKS5odG1sKClcclxuICAgICAgICBsZXQgcmVuZGVyPU11c3RhY2hlLnJlbmRlcih0ZW1wbGF0ZSxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoXCJLYXBjc29sYXQgdGFydMOzIGhvenrDoWFkdmEhXCIsIGNvbnRhY3REYXRhLm5hbWUrXCIgbmV2xbEga2Fwb2Nzb2xhdHRhcnTDsyBob3p6w6FhZHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lZGl0Q29udGFjdD1mdW5jdGlvbiAoaWQsY29udGFjdERhdGEpe1xyXG5cclxuICAgICAgICBsZXQgbmV3Q29udGFjdHM9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuY29udGFjdD1uZXdDb250YWN0cztcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiS2FwY3NvbGF0IGFkYXRhaSBtw7Nkb3PDrXR2YSFcIiwgY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBvY3NvbGF0dGFydMOzIG3Ds2Rvc8OtdHZhXCIsIFRPQVNUX1NUQVRVUy5TVUNDRVNTLDUwMDApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKioqKioqKioqKioqKioqXHJcbiAgICAgKlxyXG4gICAgICogQWRkcmVzcyBmdW5jdGlvblxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgdGhpcy5yZXNldEFkZHJlc3NUYWJsZT1mdW5jdGlvbiAoKXtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hZGRyZXNzVGFibGUgdGJvZHkgdHInKS5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlbmRlckFkZHJlc3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyQWRkcmVzcz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBsZXQgcm93TnVtPTE7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3JlbmRlcmluZ0FkZHJlc3MnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5Qcm9maXRDZW50ZXIuZ2V0RGF0YSgnYWRkcmVzcycpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaXRlbURhdGE9dGhpcztcclxuICAgICAgICAgICAgaXRlbURhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInByb2ZpdENlbnRlckFkZHJlc3NUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgICAgICBkZWJ1ZyhpdGVtRGF0YSk7XHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGl0ZW1EYXRhKTtcclxuICAgICAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRBZGRyZXNzQ2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkRlbGV0ZScpLnVuYmluZCgnY2xpY2snKTtcclxuICAgICAgICAkKCcuYWRkcmVzc1RhYmxlIC5idXR0b25EZWxldGUnKS5iaW5kKCdjbGljaycscm9vdC5hZGRyZXNzRGVsZXRlQ2xpY2spO1xyXG4gICAgICAgICQoJy5hZGRyZXNzVGFibGUgLmJ1dHRvbkVkaXQnKS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnLmFkZHJlc3NUYWJsZSAuYnV0dG9uRWRpdCcpLmJpbmQoJ2NsaWNrJyxyb290LmFkZHJlc3NFZGl0Q2xpY2spO1xyXG5cclxuICAgIH1cclxuICAgIHRoaXMuYWRkcmVzc0RlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPVwiYWRkcmVzc0lkW11cIl0nKS52YWwoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhpZCk7XHJcbiAgICAgICAgcm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcz1yb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPWlkKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2cocm9vdC5Qcm9maXRDZW50ZXIuYWRkcmVzcyk7XHJcbiAgICAgICAgcm93LnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVzZXRBZGRyZXNzVGFibGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZ2V0QWRkcmVzc1BvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIGFkZHJlc3NQb3B1cFdvcmtmbG93O1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRBZGRyZXNzUG9wdXBXb3JrZmxvdyA9IGZ1bmN0aW9uIChzdGF0dXMpIHtcclxuICAgICAgICBhZGRyZXNzUG9wdXBXb3JrZmxvdz1zdGF0dXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMuYWRkcmVzc0VkaXRDbGljaz1mdW5jdGlvbiAoZXZlbnQpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1cImFkZHJlc3NJZFtdXCJdJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coaWQpO1xyXG4gICAgICAgIHJvb3Quc2V0QWRkcmVzc1BvcHVwV29ya2Zsb3coJ2VkaXQnKTtcclxuICAgICAgICBBUFAuQWRkcmVzc1BvcFVwLmxvYWREYXRhKGlkKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWRkcmVzc0FjdGlvbj1mdW5jdGlvbiAoaXRlbURhdGEpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCduYWggbW9zdCBrZWxsZW5lIG1lZyB2YWxhbWl0IGNzaW5hbG5pLicpXHJcbiAgICAgICAgaWYocm9vdC5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygpPT0nbmV3Jyl7XHJcbiAgICAgICAgICAgIHJvb3QuYWRkQWRkcmVzcyhpdGVtRGF0YSk7XHJcbiAgICAgICAgfWVsc2UgaWYocm9vdC5nZXRBZGRyZXNzUG9wdXBXb3JrZmxvdygpPT0nZWRpdCcpe1xyXG4gICAgICAgICAgICByb290LmVkaXRBZGRyZXNzKGl0ZW1EYXRhLmlkLGl0ZW1EYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkZEFkZHJlc3M9ZnVuY3Rpb24gKEl0ZW1EYXRhKXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGZlbCBrZWxsIHZlbm5pIGEgc29yYmFcclxuICAgICAgICAgKi9cclxuICAgICAgICByb290LlByb2ZpdENlbnRlci5hZGRyZXNzLnB1c2goSXRlbURhdGEpO1xyXG4gICAgICAgIEl0ZW1EYXRhLnJvd051bT1yb290LlByb2ZpdENlbnRlci5hZGRyZXNzLmxlbmd0aDtcclxuICAgICAgICBsZXQgdGVtcGxhdGU9JCgndGVtcGxhdGVbZGF0YS1uYW1lPVwicHJvZml0Q2VudGVyQWRkcmVzc1RhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgbGV0IHJlbmRlcj1NdXN0YWNoZS5yZW5kZXIodGVtcGxhdGUsSXRlbURhdGEpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLmFkZHJlc3NUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgIHJvb3QuYmluZEFkZHJlc3NDbGlja0FjdGlvbigpO1xyXG4gICAgICAgIFRvYXN0LmVuYWJsZVRpbWVycyhmYWxzZSk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiQ8OtbSBob3p6w6FhZHZhIVwiLCBJdGVtRGF0YS5zdHJlZXQrXCIgaG96esOhYWR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZWRpdEFkZHJlc3M9ZnVuY3Rpb24gKGlkLGl0ZW1EYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0l0ZW09W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuUHJvZml0Q2VudGVyLmdldERhdGEoJ2FkZHJlc3MnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdJdGVtLnB1c2goaXRlbURhdGEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIG5ld0l0ZW0ucHVzaCh0aGlzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QuUHJvZml0Q2VudGVyLmFkZHJlc3M9bmV3SXRlbTtcclxuICAgICAgICByb290LnJlc2V0QWRkcmVzc1RhYmxlKCk7XHJcbiAgICAgICAgVG9hc3QuY3JlYXRlKFwiY8OtbSBhZGF0YWkgbcOzZG9zw610dmEhXCIsIGl0ZW1EYXRhLnN0cmVldCtcIiBtw7Nkb3PDrXR2YVwiLCBUT0FTVF9TVEFUVVMuU1VDQ0VTUyw1MDAwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRWaWV3TGlzdCA9IGZ1bmN0aW9uIChvcHRpb25zPXt9KSB7XHJcbiAgICAgICAgZGVidWcoJ2xpc3R2aWV3IGluaWNpYWxpemF0aW9uJyk7XHJcbiAgICAgICAgZGF0YVRhYmxlQ1NTU2VsZWN0b3I9T3B0cy5jb250YWluZXJDc3NTZWxlY3RvcisnIC5kYXRhVGFibGUnOyAvL1xyXG5cclxuICAgICAgICBsZXQgY29sTnVtPSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IrJyB0aGVhZCB0aCcpLmxlbmd0aDsgLy9idXR0b25zIGluc2VydCBwb3NpdGlvbiBuZWVkXHJcbiAgICAgICAgQVBQLnNldE9wdHMoe1xyXG4gICAgICAgICAgICBkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuY2xpY2tOZXcsXHJcbiAgICAgICAgICAgIGRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2s6cm9vdC5kYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayxcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICBsZXQgb3JkZXJEaXJlY3RpdmU9T3B0cy5kYXRhVGFibGUub3JkZXJEaXJlY3RpdmU7XHJcbiAgICAgICAgaWYodHlwZW9mIG9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU9b3B0aW9uc1snb3JkZXJEaXJlY3RpdmUnXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgJChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCB7XHJcbiAgICAgICAgICAgIGxhbmd1YWdlOiB7XHJcbiAgICAgICAgICAgICAgICB1cmw6ICcvL2Nkbi5kYXRhdGFibGVzLm5ldC9wbHVnLWlucy8xLjEwLjI0L2kxOG4vSHVuZ2FyaWFuLmpzb24nXHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICAvL1wiYWpheFwiOiBcInt7YXNzZXQoJ2V4YXBtbGUyLmpzb24nKX19XCIsXHJcbiAgICAgICAgICAgIFwiYWpheFwiOiBPcHRzLlVSTC5nZXREYXRhVGFibGVDb250ZW50LFxyXG4gICAgICAgICAgICBcImNvbHVtbkRlZnNcIjogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIFwidGFyZ2V0c1wiOiBjb2xOdW0tMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGJ1dHRvbnM9QVBQLmRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9ucys9QVBQLmRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24oMCxhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnV0dG9ucztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogMSxcclxuICAgICAgICAgICAgICAgICAgICBcInJlbmRlclwiOiBmdW5jdGlvbiAoIGRhdGEsIHR5cGUsIHJvdyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwic29ydFwiID8gZGF0YS5sYXRpbmlzZSgpIDogZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8veyBcInZpc2libGVcIjogZmFsc2UsICBcInRhcmdldHNcIjogWyAwIF0gfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBidXR0b25zOntcclxuICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFtcclxuICAgICAgICAgICAgICAgICAgICAnZXhjZWwnLCdwZGYnLFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kOiAncHJpbnQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RleHQ6ICdQcmludCBjdXJyZW50IHBhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiAndGl0bGUgY3VzdG9tIHRleHQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZVRvcCc6ICdNZXNzYWdlIE9uIFRvcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9QcmludDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLyoqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICfDmmogZmVsdml0ZWxlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1zdWNjZXNzIG5ld0l0ZW0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyOntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGE6MSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYjoyXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGF0YSc6J25ld0l0ZW0nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uKGFwaSwgbm9kZSwgY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKG5vZGUpLnJlbW92ZUNsYXNzKCd1aS1idXR0b24nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGZ1bmN0aW9uICggZSwgZHQsIG5vZGUsIGNvbmZpZyApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjb25zb2xlLmxvZyhlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhkdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cobm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnKTsqL1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2x1bW5zXCI6IFtcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwiaG9vcmV5Y2FJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcIm5hbWVJZFwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImNyZWF0ZWRfYXRcIiB9LFxyXG4gICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgXCJvcmRlclwiOiBvcmRlckRpcmVjdGl2ZSxcclxuICAgICAgICAgICAgLy9cInN0YXRlU2F2ZVwiOiB0cnVlLFxyXG4gICAgICAgICAgICBcImRyYXdDYWxsYmFja1wiOiBmdW5jdGlvbiggc2V0dGluZ3MgKSB7XHJcbiAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWRkUm93QWN0aW9uKGRhdGFUYWJsZUNTU1NlbGVjdG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gKTtcclxuICAgICAgICBkZWJ1ZygnbGlzdHZpZXcgZW5kJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkVkaXQ9ZnVuY3Rpb24gKHJvd0RhdGEsbm9kZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhdGFibGVSb3dBY3Rpb25FZGl0IENhbGxlZCcpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmVkaXQucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgLypcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKE9wdHMuVVJMKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGFqYXhVcmwpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChhamF4VXJsLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBFbmQnKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlPWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIENhbGxlZCcpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KG5vZGUucGFyZW50cygndHInKSk7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXt9O1xyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmRlc3Ryb3kucmVwbGFjZSgnJWlkJScscm93RGF0YS5pZCk7XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja1NhdmVCdXR0b249ZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgZGVidWcoJ1NhdmUgY2xpY2tlZCcpO1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZGVidWcoQ1NTU2VsZWN0b3JGb3JtKTtcclxuICAgICAgICBkZWJ1ZygkKENTU1NlbGVjdG9yRm9ybSkpO1xyXG4gICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG4gICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLnN0b3JlO1xyXG4gICAgICAgIGxldCBhamF4TWV0aG9kPVwiUE9TVFwiO1xyXG4gICAgICAgIGlmKHJvb3QuUHJvZml0Q2VudGVyLmlkKXtcclxuICAgICAgICAgICAgYWpheFVybD1PcHRzLlVSTC51cGRhdGUucmVwbGFjZSgnJWlkJScscm9vdC5Qcm9maXRDZW50ZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG4vKlxyXG4gICAgICAgIGRlYnVnKGFqYXhVcmwpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhNZXRob2QpO1xyXG4gICAgICAgIGRlYnVnKGFqYXhEYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgZm9yICh2YXIgcGFpciBvZiBhamF4RGF0YS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2cocGFpclswXSsgJywgJyArIHBhaXJbMV0pO1xyXG4gICAgICAgIH1cclxuKi9cclxuXHJcbiAgICAgICAgY29uc29sZS50YWJsZShPYmplY3QuZnJvbUVudHJpZXMoYWpheERhdGEpKTtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOmFqYXhVcmwsXHJcbiAgICAgICAgICAgIGRhdGE6YWpheERhdGEsXHJcbiAgICAgICAgICAgIHR5cGU6YWpheE1ldGhvZCxcclxuICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcclxuICAgICAgICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICAgICAgICAgJ1gtQ1NSRi1UT0tFTic6ICQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIHByb2ZpdGNlbnRlciBlbG1lbnR2ZVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuaW5kZXgrJz9pbml0PTAnLHJvb3QuaW5pdFZpZXdMaXN0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuLypcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuKi9cclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJC5lYWNoKGFqYXhEYXRhLmdldEFsbCgnc3VwcGxpZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuY29uc3RydWN0KG9wdGlvbnMsIFByb2ZpdENlbnRlckl0ZW0pO1xyXG5cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFHLE9BQU9BLHFCQUFxQixLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3BDQSxzQkFBcUIsMEJBQUFDLFVBQUE7SUFFdkI7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsdUJBQWFDLElBQUksRUFBQ0MsT0FBTyxFQUFFO01BQUEsSUFBQUMs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\n//# sourceURL=webpack-internal:///./resources/js/admin/profitCenter.js\n\n}");
/***/ },
@@ -65,7 +65,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 _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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _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 Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug('d1: Save success ');\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű beszálllító elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\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 this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.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 root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\r\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapcsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolattartó hozzáadva!\",\n message: contactData.name + \" nevű kapcsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjb25zb2xlIiwibG9nIiwiX2luaGVyaXRzIiwiX2NyZWF0ZUNsYXNzIiwiRGF0YU1vZGVsIiwid2luZG93IiwiU3VwcGxpZXJBZG1pbiIsIlN1cHBsaWVySXRlbSIsIk9wdHMiLCJ0b2tlbiIsImNvbnRhaW5lckNzc1NlbGVjdG9yIiwidGVzdE1vZGUiLCJVUkwiLCJnZXREYXRhVGFibGVDb250ZW50IiwiaW5kZXgiLCJzaG93IiwiZWRpdCIsImNyZWF0ZSIsInN0b3JlIiwidXBkYXRlIiwiZGVzdHJveSIsImF0dGFjaEZpbGUiLCJkZXRhY2hGaWxlIiwiZGF0YVRhYmxlIiwib3JkZXJEaXJlY3RpdmUiLCJvbkFmdGVySW5pdFZpZXdEZXRhaWxzIiwicm9vdCIsImNvbnRhY3RQb3B1cFdvcmtmbG93IiwiY29uc3RydWN0IiwiJCIsImV4dGVuZCIsIkFQUCIsImdldE9wdHMiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQiLCJDU1NTZWxlY3RvciIsIkZvcm1EYXRhIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZm9ybUpTT04iLCJmb3JFYWNoIiwidmFsdWUiLCJrZXkiLCJSZWZsZWN0IiwiaGFzIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsImVhY2giLCJhdHRyIiwicmVwbGFjZSIsImZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbCIsIkNTU1NlbGVjdG9yRm9ybSIsImFqYXhEYXRhIiwiZ2V0QWxsIiwiYXBwZW5kIiwidmFsIiwiaW5kZXhLZXkiLCJnZXQiLCJzZXQiLCJjbGlja1NhdmVCdXR0b24iLCJldmVudCIsImRlYnVnIiwicHJldmVudERlZmF1bHQiLCJjaGVja1ZhbGlkaXR5Iiwic3RvcFByb3BhZ2F0aW9uIiwiYWpheFVybCIsImFqYXhNZXRob2QiLCJpZCIsImFqYXgiLCJ1cmwiLCJ0eXBlIiwiY29udGVudFR5cGUiLCJwcm9jZXNzRGF0YSIsImhlYWRlcnMiLCJzdWNjZXNzIiwiVG9hc3QiLCJ0aXRsZSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJUT0FTVF9TVEFUVVMiLCJTVUNDRVNTIiwidGltZW91dCIsImxvYWRNYWluQ29udGVudCIsImluaXRWaWV3TGlzdCIsInNldERldGFpbHNWaWV3RGF0YSIsIm5lZWRUb1NldCIsIm5vdGUiLCJwcm9wIiwiY2FuU2VlIiwiY2xpY2siLCJjYW5TZWVJbk9yZGVyIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwicHJvZHVjdEdyb3VwIiwicHJvZHVjdF9ncm91cCIsIm5hbWUiLCJjaGFuZ2UiLCJzZXJ2aWNlIiwicHJvZml0Q2VudGVyIiwicHJvZml0X2NlbnRlciIsImVzY2FwZVNlbGVjdG9yIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsImFkZENsYXNzIiwib25jb21wbGV0ZSIsInJlbW92ZUNsYXNzIiwib25jbGVhcmVkIiwib2ZmIiwib24iLCJzZWxlY3QyIiwidGFncyIsImNyZWF0ZVRhZyIsInBhcmFtcyIsInRlcm0iLCJ0cmltIiwidGV4dCIsIm5ld1RhZyIsInNldEltYWdlRnJvbUxvY2FsIiwiaXMiLCJyZW5kZXJBdHRhY2htZW50IiwiaW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZSIsInNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZSIsImZpbGVJbnB1dCIsImZpbGVzIiwiZ3JvdXAiLCJEQU5HRVIiLCJmaW5kIiwiZ3JvdXBFbmQiLCJiZWZvcmVTZW5kIiwiYWRkQXR0YWNobWVudCIsImF0dGFjaG1lbnQiLCJlcnJvciIsInJlc3BvbnNlSlNPTiIsImFqYXhFcnJvckZpZWxkSGFuZGxlciIsImNsaWNrTmV3IiwiY2xpY2tOZXdDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkVkaXQiLCJyb3dEYXRhIiwibm9kZSIsImNsaWNrT3JkZXJEZWxldGVDb25maXJtZWQiLCJtb2RhbCIsIl90b2tlbiIsInJvdyIsImRhdGFUYWJsZUNTU1NlbGVjdG9yIiwiRGF0YVRhYmxlIiwiZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwicGFyZW50cyIsIm1ldGhvZCIsInJlbW92ZSIsImRyYXciLCJkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlIiwiZGF0YXRhYmxlUm93QWN0aW9uRGVsZXRlIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2siLCJjdXJyZW50VGFyZ2V0IiwiYWN0aW9uTmFtZSIsImNhcGl0YWxpemUiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJjb2xOdW0iLCJzZXRPcHRzIiwiZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrQ2FsbEJhY2siLCJsYW5ndWFnZSIsInJlbmRlciIsImJ1dHRvbnMiLCJkYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbiIsImRhdGF0YWJsZUFkZFJvd0VkaXRCdXR0b24iLCJsYXRpbmlzZSIsImF1dG9QcmludCIsImNsYXNzTmFtZSIsImFwaSIsImNvbmZpZyIsImFjdGlvbiIsImUiLCJkdCIsImRyYXdDYWxsYmFjayIsInNldHRpbmdzIiwiZGF0YXRhYmxlQWRkUm93QWN0aW9uIiwiYXV0b2ZpbGxEZXRhaWxzIiwicmFuZG9tTnVtYmVyIiwiZ2V0UmFuZG9tSW50Iiwicm93TnVtIiwiZ2V0RGF0YSIsImF0dGFjaG1lbnREYXRhIiwiZGF0ZSIsIkRhdGUiLCJjcmVhdGVkX2F0IiwidG9Mb2NhbGVTdHJpbmciLCJsaW5rIiwiUHVibGljVXJsIiwiZmlsZW5hbWUiLCJ0ZW1wbGF0ZSIsImh0bWwiLCJNdXN0YWNoZSIsImJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24iLCJiaW5kQ29udGFjdENsaWNrQWN0aW9uIiwiZW5hYmxlVGltZXJzIiwib3JpZ2luYWxfZmlsZW5hbWUiLCJyZXNldENvbnRhY3RUYWJsZSIsImNvbnRhY3REYXRhIiwidW5iaW5kIiwiY29udGFjdERlbGV0ZUNsaWNrIiwiY29udGFjdEVkaXRDbGljayIsImF0dGFjaG1lbnREZWxldGVDbGljayIsImN1cnJlbnRBdHRhY2htZW50Um93IiwiY2xvc2VzdCIsImF0dGFjaGVtbnRJZCIsImZpbHRlciIsImFyciIsInJlc2V0QXR0YWNobWVudFRhYmxlIiwiZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJsb2FkRGF0YSIsImdldFN1cHBsaWVyIiwiYWRkQ29udGFjdCIsImVkaXRDb250YWN0IiwibmV3Q29udGFjdHMiXSwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL3Jlc291cmNlcy9qcy9hZG1pbi9zdXBwbGllci5qcz9hN2M0Il0sInNvdXJjZXNDb250ZW50IjpbImlmKHR5cGVvZiBTdXBwbGllcj09PSd1bmRlZmluZWQnKXtcclxuICAgIGNsYXNzIFN1cHBsaWVyIGV4dGVuZHMgRGF0YU1vZGVse1xyXG5cclxuICAgICAgICAvKlxyXG4gICAgICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgY29uc3RydWN0b3IgKGRhdGEsb3B0aW9ucykge1xyXG4gICAgICAgICAgICBzdXBlcihkYXRhLG9wdGlvbnMpXHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNvbnRhY3QgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhY3Q9W107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ1N1cHBsaWVyIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgIH07XHJcbiAgICB9O1xyXG4gICAgd2luZG93LlN1cHBsaWVyPVN1cHBsaWVyO1xyXG59XHJcblxyXG5cclxud2luZG93LlN1cHBsaWVyQWRtaW49ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKSB7XHJcbiAgICAvKlxyXG4gICAgICogVmFyaWFibGVzIGFjY2Vzc2libGVcclxuICAgICAqIGluIHRoZSBjbGFzc1xyXG4gICAgICovXHJcbiAgICBsZXQgT3B0cyA9IHtcclxuICAgICAgICB0b2tlbjpudWxsLFxyXG4gICAgICAgIGNvbnRhaW5lckNzc1NlbGVjdG9yOiAnLmNvbnRhaW5lclN1cHBsaWVyJyxcclxuICAgICAgICB0ZXN0TW9kZTpmYWxzZSxcclxuICAgICAgICBVUkw6e1xyXG4gICAgICAgICAgICBnZXREYXRhVGFibGVDb250ZW50OicnLFxyXG4gICAgICAgICAgICBpbmRleDonJyxcclxuICAgICAgICAgICAgc2hvdzonJyxcclxuICAgICAgICAgICAgZWRpdDonJyxcclxuICAgICAgICAgICAgY3JlYXRlOicnLFxyXG4gICAgICAgICAgICBzdG9yZTonJyxcclxuICAgICAgICAgICAgdXBkYXRlOicnLFxyXG4gICAgICAgICAgICBkZXN0cm95OicnLFxyXG4gICAgICAgICAgICBhdHRhY2hGaWxlOicnLFxyXG4gICAgICAgICAgICBkZXRhY2hGaWxlOicnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YVRhYmxlOntcclxuICAgICAgICAgICAgb3JkZXJEaXJlY3RpdmU6WzEsICdhc2MnXVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25BZnRlckluaXRWaWV3RGV0YWlsczpmdW5jdGlvbiAoKXt9XHJcbiAgICB9O1xyXG4gICAgbGV0IFN1cHBsaWVyID0ge307XHJcbiAgICBsZXQgcm9vdCA9IHRoaXM7XHJcbiAgICBsZXQgY29udGFjdFBvcHVwV29ya2Zsb3c9J25ldyc7XHJcbiAgICAvKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgdGhpcy5jb25zdHJ1Y3QgPSBmdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXJBZG1pbiBjb25zdHJ1Y3RvciBjYWxsZWQnKTtcclxuICAgICAgICAkLmV4dGVuZChPcHRzLCBvcHRpb25zKTtcclxuICAgICAgICBpZighU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3N1cHBsaWVyIGxldHJlIGtlbGxldCBob3puaSAnKTtcclxuICAgICAgICAgICAgaWYoIUFQUC5TdXBwbGllcil7XHJcbiAgICAgICAgICAgICAgICBBUFAuU3VwcGxpZXI9bmV3IHdpbmRvdy5TdXBwbGllcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJvb3QuU3VwcGxpZXI9QVBQLlN1cHBsaWVyO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLmdldE9wdHM9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIE9wdHM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGxPbGQ9IGZ1bmN0aW9uIChDU1NTZWxlY3Rvcikge1xyXG4gICAgICAgIGxldCBkYXRhID0gbmV3IEZvcm1EYXRhKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoQ1NTU2VsZWN0b3IpKTtcclxuICAgICAgICAvL2xldCBmb3JtSlNPTiA9IE9iamVjdC5mcm9tRW50cmllcyhkYXRhLmVudHJpZXMoKSk7XHJcbiAgICAgICAgdmFyIGZvcm1KU09OID0ge307XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJlZmxlY3QuaGFzIGluIGZhdm9yIG9mOiBmb3JtSlNPTi5oYXNPd25Qcm9wZXJ0eShrZXkpXHJcbiAgICAgICAgICAgIGlmKCFSZWZsZWN0Lmhhcyhmb3JtSlNPTiwga2V5KSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkoZm9ybUpTT05ba2V5XSkpe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05ba2V5XSA9IFtmb3JtSlNPTltrZXldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3JtSlNPTltrZXldLnB1c2godmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yKycgaW5wdXRbZGF0YS1pbnB1dG1hc2tdJykuZWFjaChmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgaWYoZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXT1mb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0ucmVwbGFjZSgvW18gXSskL2csXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICAvL2Zvcm1KU09OLnByb2R1Y3RHcm91cHM9JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xyXG5cclxuXHJcbiAgICAgICAgLypNdWx0aXNlbGVjdCBvciBjaGVja2JveCB0byBhcnJheTpcclxuICAgICAgICBhamF4RGF0YVsncHJvZHVjdEdyb3VwJ109JChcIi5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3RcIikuc2VsZWN0MigpLnZhbCgpO1xyXG5cclxuICAgICAgICBmb3JtSlNPTi5tdWx0aXNlbGVjdE5hbWUgPSBkYXRhLmdldEFsbCgnbXVsdGlzZWxlY3ROYW1lJyk7XHJcbiAgICAgICAgJC5lYWNoKGZvcm1KU09OLCBmdW5jdGlvbiAoaXRlbSwgdmFsdWUpIHtcclxuICAgICAgICAgICAgZm9ybUpTT05bJC5sY0ZpcnN0KGl0ZW0ucmVwbGFjZSgnY29udGFjdCcsICcnKSldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIGRlbGV0ZSBmb3JtSlNPTltpdGVtXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZihmb3JtSlNPTi5waG9uZSl7XHJcbiAgICAgICAgICAgIGZvcm1KU09OLnBob25lPWZvcm1KU09OLnBob25lLnJlcGxhY2VBbGwoJ18nLCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZm9ybUpTT04uZW1haWwpe1xyXG4gICAgICAgICAgICBmb3JtSlNPTi5lbWFpbD1mb3JtSlNPTi5lbWFpbC5yZXBsYWNlQWxsKCdfJywnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICovXHJcbiAgICAgICAgcmV0dXJuIGZvcm1KU09OO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsID0gZnVuY3Rpb24gKENTU1NlbGVjdG9yRm9ybSkge1xyXG4gICAgICAgIGxldCBhamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9maXRDZW50ZXInKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2ZpdENlbnRlcltdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdwcm9kdWN0R3JvdXAnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3Byb2R1Y3RHcm91cFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdzdXBwbGllclNlcnZpY2UnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ3N1cHBsaWVyU2VydmljZVtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAkLmVhY2goYWpheERhdGEuZ2V0QWxsKCdjb250YWN0SWQnKSxmdW5jdGlvbihrZXksdmFsdWUpe1xyXG4gICAgICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ2NvbnRhY3RJZFtdJyx2YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfdG9rZW4nLCQoJ2lucHV0W25hbWU9X3Rva2VuXScpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgaW5kZXhLZXk9JCh0aGlzKS5hdHRyKCduYW1lJyk7XHJcbiAgICAgICAgICAgIGlmKGFqYXhEYXRhLmdldChpbmRleEtleSkpe1xyXG4gICAgICAgICAgICAgICAgYWpheERhdGEuc2V0KGluZGV4S2V5LGFqYXhEYXRhLmdldChpbmRleEtleSkucmVwbGFjZSgvW18gXSskL2csXCJcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBhamF4RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNsaWNrU2F2ZUJ1dHRvbj1mdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBkZWJ1ZygnU2F2ZSBjbGlja2VkJyk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgIGlmICgkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W25hbWU9XCJjYW5TZWVJbk9yZGVyXCJdJykudmFsKCk9PTEgJiYgJChDU1NTZWxlY3RvckZvcm0pWzBdLmNoZWNrVmFsaWRpdHkoKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBmYWxzZScpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd2YWxpZGF0b24gb2snKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XHJcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJ2QxOiBTYXZlIHN1Y2Nlc3MgJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRDb250YWN0PWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLFN1cHBsaWVySXRlbSk7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsUUFBUSxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3ZCQSxTQUFRLDBCQUFBQyxVQUFBO0lBRVY7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsVUFBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosU0FBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFBLE9BQUFMLFNBQUEsR0FBTUMsSUFBSSxFQUFDQyxPQUFPO01BQ2xCLElBQUcsT0FBT0MsS0FBQSxDQUFLRyxPQUFPLEtBQUksV0FBVyxFQUFDO1FBQ2xDSCxLQUFBLENBQUtHLE9BQU8sR0FBQyxFQUFFO01BQ25CO01BQ0FDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLDZCQUE2QixDQUFDO01BQUMsT0FBQUwsS0FBQTtJQUMvQztJQUFDTSxTQUFBLENBQUFULFNBQUEsRUFBQUQsVUFBQTtJQUFBLE9BQUFXLFlBQUEsQ0FBQVYsU0FBQTtFQUFBLEVBWGtCVyxTQUFTO0VBWS9CO0VBQ0RDLE1BQU0sQ0FBQ2QsUUFBUSxHQUFDQSxTQUFRO0FBQzVCO0FBR0FjLE1BQU0sQ0FBQ0MsYUFBYSxHQUFDLFVBQVVYLE9BQU8sRUFBQ1ksWUFBWSxFQUFFO0VBQ2pEO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBSUMsSUFBSSxHQUFHO0lBQ1BDLEtBQUssRUFBQyxJQUFJO0lBQ1ZDLG9CQUFvQixFQUFFLG9CQUFvQjtJQUMxQ0MsUUFBUSxFQUFDLEtBQUs7SUFDZEMsR0FBRyxFQUFDO01BQ0FDLG1CQUFtQixFQUFDLEVBQUU7TUFDdEJDLEtBQUssRUFBQyxFQUFFO01BQ1JDLElBQUksRUFBQyxFQUFFO01BQ1BDLElBQUksRUFBQyxFQUFFO01BQ1BDLE1BQU0sRUFBQyxFQUFF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\n//# sourceURL=webpack-internal:///./resources/js/admin/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 _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 _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\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 _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 Supplier === 'undefined') {\n var _Supplier = /*#__PURE__*/function (_DataModel) {\n /*\r\n * Constructor\r\n */\n function _Supplier(data, options) {\n var _this;\n _classCallCheck(this, _Supplier);\n _this = _callSuper(this, _Supplier, [data, options]);\n if (typeof _this.contact === \"undefined\") {\n _this.contact = [];\n }\n if (typeof _this.canSee === \"undefined\") {\n _this.canSee = 1;\n }\n if (typeof _this.canSeeInOrder === \"undefined\") {\n _this.canSeeInOrder = 1;\n }\n console.log('Supplier constructor called');\n return _this;\n }\n _inherits(_Supplier, _DataModel);\n return _createClass(_Supplier);\n }(DataModel);\n ;\n window.Supplier = _Supplier;\n}\nwindow.SupplierAdmin = function (options, SupplierItem) {\n /*\r\n * Variables accessible\r\n * in the class\r\n */\n var Opts = {\n token: null,\n containerCssSelector: '.containerSupplier',\n testMode: false,\n URL: {\n getDataTableContent: '',\n index: '',\n show: '',\n edit: '',\n create: '',\n store: '',\n update: '',\n destroy: '',\n attachFile: '',\n detachFile: ''\n },\n dataTable: {\n orderDirective: [1, 'asc']\n },\n onAfterInitViewDetails: function onAfterInitViewDetails() {}\n };\n var Supplier = {};\n var root = this;\n var contactPopupWorkflow = 'new';\n /*\r\n * Constructor\r\n */\n this.construct = function (options, SupplierItem) {\n console.log('SupplierAdmin constructor called');\n $.extend(Opts, options);\n if (!SupplierItem) {\n console.log('supplier letre kellet hozni ');\n if (!APP.Supplier) {\n APP.Supplier = new window.Supplier();\n }\n root.Supplier = APP.Supplier;\n }\n };\n this.getOpts = function () {\n return Opts;\n };\n this.formDataToDataObjectAPICallOld = function (CSSSelector) {\n var data = new FormData(document.querySelector(CSSSelector));\n //let formJSON = Object.fromEntries(data.entries());\n var formJSON = {};\n data.forEach(function (value, key) {\n // Reflect.has in favor of: formJSON.hasOwnProperty(key)\n if (!Reflect.has(formJSON, key)) {\n formJSON[key] = value;\n return;\n }\n if (!Array.isArray(formJSON[key])) {\n formJSON[key] = [formJSON[key]];\n }\n formJSON[key].push(value);\n });\n $(CSSSelector + ' input[data-inputmask]').each(function () {\n if (formJSON[$(this).attr('name')]) {\n formJSON[$(this).attr('name')] = formJSON[$(this).attr('name')].replace(/[_ ]+$/g, \"\");\n }\n });\n //formJSON.productGroups=$(\".productCategorySelect\").select2().val();\n\n /*Multiselect or checkbox to array:\r\n ajaxData['productGroup']=$(\".productCategorySelect\").select2().val();\r\n formJSON.multiselectName = data.getAll('multiselectName');\r\n $.each(formJSON, function (item, value) {\r\n formJSON[$.lcFirst(item.replace('contact', ''))] = value;\r\n delete formJSON[item];\r\n });\r\n if(formJSON.phone){\r\n formJSON.phone=formJSON.phone.replaceAll('_','');\r\n }\r\n if(formJSON.email){\r\n formJSON.email=formJSON.email.replaceAll('_','');\r\n }\r\n */\n return formJSON;\n };\n this.formDataToDataObjectAPICall = function (CSSSelectorForm) {\n var ajaxData = new FormData($(CSSSelectorForm)[0]);\n $.each(ajaxData.getAll('profitCenter'), function (key, value) {\n ajaxData.append('profitCenter[]', value);\n });\n $.each(ajaxData.getAll('productGroup'), function (key, value) {\n ajaxData.append('productGroup[]', value);\n });\n $.each(ajaxData.getAll('supplierService'), function (key, value) {\n ajaxData.append('supplierService[]', value);\n });\n $.each(ajaxData.getAll('contactId'), function (key, value) {\n ajaxData.append('contactId[]', value);\n });\n ajaxData.append('_token', $('input[name=_token]').val());\n $(CSSSelectorForm + ' input[data-inputmask]').each(function () {\n var indexKey = $(this).attr('name');\n if (ajaxData.get(indexKey)) {\n ajaxData.set(indexKey, ajaxData.get(indexKey).replace(/[_ ]+$/g, \"\"));\n }\n });\n return ajaxData;\n };\n this.clickSaveButton = function (event) {\n debug('Save clicked');\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n event.preventDefault();\n if ($(CSSSelectorForm + ' input[name=\"canSeeInOrder\"]').val() == 1 && $(CSSSelectorForm)[0].checkValidity() === false) {\n console.log('validaton false');\n $(CSSSelectorForm).addClass('was-validated');\n $(CSSSelectorForm)[0].reportValidity();\n Toast.create({\n title: \"Validációs hiba!\",\n message: \"Kérjük, töltse ki a kötelező mezőket!\",\n status: TOAST_STATUS.DANGER,\n timeout: 5000\n });\n event.stopPropagation();\n return;\n } else {\n console.log('validaton ok');\n $(CSSSelectorForm).removeClass('was-validated');\n //do your ajax submition here\n }\n var ajaxData = root.formDataToDataObjectAPICall(CSSSelectorForm);\n var ajaxUrl = Opts.URL.store;\n var ajaxMethod = \"POST\";\n if (root.Supplier.id) {\n ajaxUrl = Opts.URL.update.replace('%id%', root.Supplier.id);\n //ajaxMethod=\"PUT\";\n //ajaxData=new FormData($(CSSSelectorForm)[0]);\n ajaxData.append('_method', 'PUT');\n }\n debug(ajaxMethod);\n debug(ajaxData);\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n type: ajaxMethod,\n contentType: false,\n processData: false,\n headers: {\n 'X-CSRF-TOKEN': $('input[name=\"_token\"]').val()\n },\n success: function success(data) {\n debug('d1: Save success ');\n debug(data);\n if (data.success == true) {\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n Opts.dataTable.orderDirective = [0, 'desc'];\n Toast.create({\n title: \"Sikeres rögzítés!\",\n message: ajaxData.get('name') + \" nevű beszálllító elmentve\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n APP.loadMainContent(Opts.URL.index + '?init=0', root.initViewList);\n }\n }\n });\n };\n this.setDetailsViewData = function () {\n debug('setDetailsViewData');\n console.log(Supplier);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n var needToSet = ['name', 'hooreycaId', 'nameId', 'orderEmail', 'orderEmail2', 'address', 'mailingAddress', 'phone', 'fax', 'customerServicePhone', 'name22', 'openHours', 'ordersDeadline', 'minOrderValue'];\n $.each(needToSet, function () {\n if (typeof root.Supplier[this] != 'undefined') {\n $(CSSSelectorForm + ' input[name=' + this + ']').val(root.Supplier[this]);\n $(CSSSelectorForm + ' textarea[name=' + this + ']').val(root.Supplier[this]);\n }\n });\n if (typeof root.Supplier['note'] != 'undefined') {\n $(CSSSelectorForm + ' textarea[name=note]').val(root.Supplier.note);\n }\n if (typeof root.Supplier['emailAttachmentType'] != 'undefined') {\n $(CSSSelectorForm + ' input[name=emailAttachmentType][value=' + root.Supplier['emailAttachmentType'] + ']').prop('checked', true);\n }\n $(CSSSelectorForm + ' *[data-toggle=canSee][data-title=' + root.Supplier.canSee + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=canSeeInOrder][data-title=' + root.Supplier.canSeeInOrder + ']').click();\n $(CSSSelectorForm + ' *[data-toggle=hooreycaDataActive][data-title=' + root.Supplier.hooreycaDataActive + ']').click();\n var productGroup = [];\n $.each(root.Supplier.product_group, function () {\n productGroup.push(this.name);\n });\n $(CSSSelectorForm + ' .productCategorySelect').val(productGroup).change();\n var service = [];\n $.each(root.Supplier.service, function () {\n service.push(this.name);\n });\n $(CSSSelectorForm + ' .serviceSelect').val(service).change();\n var profitCenter = [];\n $.each(root.Supplier.profit_center, function () {\n profitCenter.push(this.name);\n });\n //$(CSSSelectorForm+' .profitCenterSelect').val(profitCenter).change();\n //debug(profitCenter);\n $.each(profitCenter, function () {\n $('input[value=\"' + $.escapeSelector(this) + '\"]').prop(\"checked\", true);\n });\n if (typeof root.Supplier['logoFile'] != 'undefined' && root.Supplier['logoFile']) {\n $(CSSSelectorForm + ' img.imageLogo').attr('src', root.Supplier['logoFile']);\n }\n\n //debug(APP.SupplierAdmin.formDataToDataObjectAPICall('.supplierForm')['productGroup']);\n //$('[name=productGroup]').val(['Büféáru_édesipari_termékek','Tojás']).change();\n //root.setDetailsViewData();\n };\n this.initViewDetails = function (options, SupplierItem) {\n debug('**call initViewDetails ');\n if (!APP.ContactPopUp) {\n console.log('nincs APP.ContactPopUp');\n APP.ContactPopUp = new window.ContactPopUp();\n } else {\n console.log('mar van APP.ContactPopUp');\n }\n APP.ContactPopUp.init({\n active: true,\n onAfterSave: root.contactAction\n });\n root.renderContact();\n $('.supplierForm .buttonNewContact').bind('click', function () {\n APP.SupplierAdmin.setContactPopupWorkflow('new');\n APP.ContactPopUp.clearData();\n APP.ContactPopUp.show();\n });\n $('[data-toggle=\"tooltip\"]').tooltip();\n initRadioButtons();\n $(\":input\").inputmask({\n \"onincomplete\": function onincomplete() {\n console.log($(this).data('required'));\n if ($(this).val().length > 0 || $(this).data('required') === true) {\n $(this).addClass('is-invalid');\n }\n },\n \"oncomplete\": function oncomplete() {\n $(this).removeClass('is-invalid');\n $(this).addClass('is-valid');\n },\n \"oncleared\": function oncleared() {\n console.log('cleared');\n $(this).removeClass('is-invalid');\n }\n });\n $('form.supplierForm button.FormSaveButton').off('click');\n $('form.supplierForm button.FormSaveButton').on('click', root.clickSaveButton);\n root.setDetailsViewData();\n $(\".productCategorySelect\").select2();\n $(\".serviceSelect\").select2({\n tags: true,\n createTag: function createTag(params) {\n var term = $.trim(params.term);\n if (term === '') {\n return null;\n }\n return {\n id: term,\n text: term,\n newTag: true // add additional parameters\n };\n }\n });\n\n //$(\".profitCenterSelect\").select2();\n $(\"input[name=logoFile]\").change(function () {\n setImageFromLocal(this, Opts.containerCssSelector + ' .imageLogo');\n });\n $('form.supplierForm .profitCenterSelectCheckboxAll').off('click');\n $('form.supplierForm .profitCenterSelectCheckboxAll').on('click', function () {\n //console.log();\n //let checked=$(this).is(\":checked\")\n $('form.supplierForm input.profitCenterSelectCheckbox').prop('checked', $(this).is(\":checked\"));\n });\n root.renderAttachment();\n //Opts.onAfterInitViewDetails();\n root.initFileAttachmentFeature();\n debug('**end initViewDetails ');\n };\n this.selectedUploadFileToggle = function (fileInput) {\n /*\r\n console.log(fileInput.attr('name'));\r\n console.log(fileInput[0].files[0]);\r\n console.log(fileInput[0].files[0].name);\r\n */\n if (fileInput) {\n $('.containerFileUpload').addClass('d-none');\n if (fileInput[0].files[0]) {\n $('.containerUploadedFileName').text(fileInput[0].files[0].name);\n }\n $('.containerFileUploadStarted').removeClass('d-none');\n $('.containerUploadedSpinner').removeClass('d-none');\n } else {\n $('.containerUploadedFileName').text('');\n $('.custom-file-label.selected').text('');\n $('.containerFileUploadStarted').addClass('d-none');\n $('.uploadStatusRow').addClass('d-none');\n $('.containerFileUpload').removeClass('d-none');\n }\n };\n this.initFileAttachmentFeature = function () {\n console.log('-------initFileAttachmentFeature-----------');\n if (root.Supplier.id) {\n $('.containerFileUpload').removeClass('d-none');\n $('.containerFileUploadNone').addClass('d-none');\n }\n $(Opts.containerCssSelector + ' .buttonUpload').off('click');\n $(Opts.containerCssSelector + ' .buttonUpload').on('click', function () {\n console.group('-------buttonUpload-----------');\n var fileInput = $('#inputGroupAttacheFile');\n if (fileInput[0].files.length < 1) {\n Toast.create(\"Hiba!\", 'Vállaszon ki fájlt!', TOAST_STATUS.DANGER, 10000);\n return;\n }\n console.log($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n var data = new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n data.append(fileInput.attr('name'), fileInput[0].files[0]);\n root.selectedUploadFileToggle(fileInput);\n var ajaxUrl = Opts.URL.attachFile.replace('%id%', root.Supplier.id);\n console.groupEnd();\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n contentType: false,\n processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.addAttachment(data.data.attachment);\n root.selectedUploadFileToggle();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n });\n };\n this.clickNew = function () {\n debug('clickNew');\n APP.loadMainContent(Opts.URL.create, root.clickNewCallBack);\n };\n this.clickNewCallBack = function () {\n debug('callbackNew');\n root.Supplier = new window.Supplier();\n root.initViewDetails();\n };\n this.datatableRowActionEdit = function (rowData, node) {\n console.log('datatableRowActionEdit Called');\n //Opts.onAfterInitViewDetails=root.autofillDetails;\n var ajaxUrl = Opts.URL.edit.replace('%id%', rowData.id);\n APP.loadMainContent(ajaxUrl, root.initViewDetails);\n console.log('datatableRowActionEdit End');\n };\n this.clickOrderDeleteConfirmed = function (event) {\n debug('clickSupplierDeleteConfirmed');\n debug(event);\n debug(event.data);\n $('#dialogModal').modal('hide');\n var ajaxData = {};\n ajaxData._token = Opts.token;\n var ajaxUrl = Opts.URL.destroy.replace('%id%', event.data.id);\n ajaxData._token = $('input[name=_token]').val();\n console.log(ajaxUrl);\n console.log(ajaxData);\n var row = $(dataTableCSSSelector).DataTable().row(root.dadatatableRowActionCallerNode.parents('tr'));\n $.ajax({\n url: ajaxUrl,\n data: ajaxData,\n method: \"DELETE\",\n success: function success(data) {\n if (data.success == true) {\n row.remove().draw();\n root.dadatatableRowActionCallerNode = false;\n }\n }\n });\n };\n var datatableRowActionCallerNode = false;\n this.datatableRowActionDelete = function (rowData, node) {\n console.log('datatableRowActionDelete Called');\n root.dadatatableRowActionCallerNode = node;\n $('#dialogModal').on('show.bs.modal', function (event) {\n // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n var modal = $(this);\n modal.find('.modal-title').text('Megerősítés ');\n modal.find('.modal-body').text('Biztosan törli a beszállítót?');\n modal.find('.buttonYes').off('click');\n modal.find('.buttonYes').on('click', {\n id: rowData.id\n }, root.clickOrderDeleteConfirmed);\n });\n $('#dialogModal').modal('show');\n };\n this.datatableRowActionButtonClick = function (event) {\n debug('datatableRowActionButtonClick');\n var node = $(event[0].currentTarget);\n var row = $(dataTableCSSSelector).DataTable().row(node.parents('tr'));\n var rowData = row.data();\n var actionName = 'datatableRowAction' + node.data('buttontype').capitalize();\n if (typeof root[actionName] === \"function\") {\n return root[actionName](rowData, node);\n }\n };\n this.initViewList = function () {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n debug('listview inicialization');\n dataTableCSSSelector = Opts.containerCssSelector + ' .dataTable'; //\n\n var colNum = $(dataTableCSSSelector + ' thead th').length; //buttons insert position need\n APP.setOpts({\n datatableActionButtonClickCallBack: root.clickNew,\n datatableRowActionButtonClickCallBack: root.datatableRowActionButtonClick\n });\n var orderDirective = Opts.dataTable.orderDirective;\n if (typeof options['orderDirective'] != 'undefined') {\n orderDirective = options['orderDirective'];\n }\n $(dataTableCSSSelector).DataTable({\n language: {\n url: '//cdn.datatables.net/plug-ins/1.10.24/i18n/Hungarian.json'\n },\n //\"ajax\": \"{{asset('exapmle2.json')}}\",\n \"ajax\": Opts.URL.getDataTableContent,\n \"columnDefs\": [{\n \"targets\": colNum - 1,\n \"render\": function render(data, type, row) {\n var buttons = APP.datatableAddRowTrashButton(0, arguments);\n buttons += APP.datatableAddRowEditButton(0, arguments);\n return buttons;\n }\n }, {\n \"targets\": 1,\n \"render\": function render(data, type, row) {\n return type === \"sort\" ? data.latinise() : data;\n }\n }\n //{ \"visible\": false, \"targets\": [ 0 ] }\n ],\n buttons: {\n buttons: ['excel', 'pdf', {\n extend: 'print',\n //text: 'Print current page',\n 'title': 'title custom text',\n 'messageTop': 'Message On Top',\n autoPrint: true\n }, /**/\n\n {\n text: 'Új felvitele',\n className: 'btn btn-success newItem',\n attr: {\n /*\r\n data:{\r\n a:1,\r\n b:2\r\n }\r\n */\n 'data': 'newItem'\n },\n init: function init(api, node, config) {\n $(node).removeClass('ui-button');\n },\n action: function action(e, dt, node, config) {\n APP.datatableActionButtonClickCallBack(arguments);\n /* console.log(e);\r\n console.log(dt);\r\n console.log(node);\r\n console.log(config);*/\n }\n }]\n },\n \"columns\": [{\n \"data\": \"id\"\n }, {\n \"data\": \"name\"\n }, {\n \"data\": \"hooreycaId\"\n }, {\n \"data\": \"nameId\"\n }, {\n \"data\": \"created_at\"\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 this.autofillDetails = function () {\n debug('nyeresre allunk');\n var randomNumber = getRandomInt(9999);\n $('input[name=name]').val('Beszalító' + randomNumber);\n $('input[name=hooreycaId]').val('hb' + randomNumber);\n $('input[name=nameId]').val('be' + randomNumber);\n $('input[name=orderEmail]').val('kapcsolat' + randomNumber + '@beszallito.hu');\n $('input[name=orderEmail2]').val('informacio' + randomNumber + '@beszallito.hu');\n $('input[name=address]').val('8989 Supplier utca ' + randomNumber);\n $('input[name=mailingAddress]').val('8989 Postai út' + randomNumber);\n $('input[name=phone]').val('+36301234567');\n $('input[name=fax]').val('36308889999');\n $('input[name=customerServicePhone]').val('+36761234444');\n $('textarea[name=note]').val('Megjegyzem ' + randomNumber);\n };\n this.testMode = function () {\n console.debug('!!!!testmode !!!!');\n root.Supplier = new window.Supplier({\n 'contact': [{\n id: 2\n }, {\n id: 3\n }\n /*\r\n {\r\n id:3,\r\n name:'Kósa Veronika',\r\n email:'szamlazas4@funkcio.hu',\r\n phone:'{{formatterPhoneNumber(\"+36204589180\")}}'\r\n }\r\n */]\n });\n Opts.onAfterInitViewDetails = root.autofillDetails;\n APP.loadMainContent(Opts.URL.create, root.initViewDetails);\n };\n this.init = function (options, SupplierItem) {\n $.extend(Opts, options);\n if (Opts.testMode) {\n return root.testMode();\n }\n if (SupplierItem) {\n root.Supplier = SupplierItem;\n }\n root.initViewList();\n };\n this.renderAttachment = function () {\n var rowNum = 1;\n console.log('renderingAttachment');\n $.each(root.Supplier.getData('attachment'), function () {\n var attachmentData = this;\n attachmentData.rowNum = rowNum;\n date = new Date(attachmentData.created_at);\n attachmentData.date = date.toLocaleString();\n attachmentData.link = attachmentData.PublicUrl + '/' + attachmentData.filename;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $('.attachmentTable tbody').append(render);\n rowNum++;\n });\n root.bindAttachmentClickAction();\n };\n this.addAttachment = function (attachmentData) {\n console.log(attachmentData);\n var CSSSelectorForm = Opts.containerCssSelector + ' .supplierForm';\n root.Supplier.attachment.push(attachmentData);\n attachmentData.rowNum = root.Supplier.attachment.length;\n var template = $('template[data-name=\"supplierAttachmentTableRow\"]').html();\n var render = Mustache.render(template, attachmentData);\n $(CSSSelectorForm + ' .attachmentTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create(\"Fájl hozzáadva!\", attachmentData.original_filename + \" fájl hozzáadva\", TOAST_STATUS.SUCCESS, 5000);\n };\n this.resetContactTable = function () {\n $('.contactTable tbody tr').remove();\n root.renderContact();\n };\n this.renderContact = function () {\n var rowNum = 1;\n console.log('renderingContacts');\n $.each(root.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 root.bindContactClickAction();\n };\n this.bindContactClickAction = function () {\n var node = $('.contactTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.contactDeleteClick);\n node = $('.contactTable .buttonEdit');\n node.unbind('click');\n node.bind('click', root.contactEditClick);\n };\n this.bindAttachmentClickAction = function () {\n var node = $('.attachmentTable .buttonDelete');\n node.unbind('click');\n node.bind('click', root.attachmentDeleteClick);\n };\n var currentAttachmentRow = false;\n this.attachmentDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=attachmentId]').val();\n var ajaxUrl = Opts.URL.detachFile.replace('%id%', root.Supplier.id);\n //let data= new FormData($(Opts.containerCssSelector).find('form.supplierForm')[0]);\n //data.append(fileInput.attr('name'),fileInput[0].files[0]);\n var data = {};\n data._token = $('input[name=\"_token\"]').val();\n data.attachemntId = id;\n $.ajax({\n url: ajaxUrl,\n data: data,\n type: 'POST',\n //contentType:false,\n //processData: false,\n beforeSend: function beforeSend() {},\n success: function success(data) {\n console.log(data);\n if (data.success == true) {\n root.Supplier.attachment = root.Supplier.attachment.filter(function (value, index, arr) {\n if (value.id !== data.data.attachment.id * 1) {\n return true;\n }\n return false;\n });\n /*\r\n */\n //row.remove();\n root.resetAttachmentTable();\n }\n },\n error: function error(data) {\n console.log(data.responseJSON);\n root.selectedUploadFileToggle();\n ajaxErrorFieldHandler(data.responseJSON.error);\n }\n });\n };\n this.resetAttachmentTable = function () {\n $('.attachmentTable tbody tr').remove();\n root.renderAttachment();\n };\n this.contactDeleteClick = function (event) {\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.Supplier.contact = root.Supplier.contact.filter(function (value, index, arr) {\n if (value.id !== id * 1) {\n return true;\n }\n return false;\n });\n row.remove();\n root.resetContactTable();\n };\n root.getContactPopupWorkflow = function () {\n return contactPopupWorkflow;\n };\n root.setContactPopupWorkflow = function (status) {\n contactPopupWorkflow = status;\n };\n this.contactEditClick = function (event) {\n //console.log(this);\n var row = $(this).closest('tr');\n var id = row.find('input[name=contactId]').val();\n root.setContactPopupWorkflow('edit');\n APP.ContactPopUp.loadData(id);\n };\n this.getSupplier = function () {\n return root.Supplier;\n };\n this.contactAction = function (contactData) {\n console.log('nah most kellene meg valamit csinalni.');\n if (root.getContactPopupWorkflow() == 'new') {\n root.addContact(contactData);\n } else if (root.getContactPopupWorkflow() == 'edit') {\n root.editContact(contactData.id, contactData);\n }\n };\n this.editContact = function (id, contactData) {\n var newContacts = [];\n $.each(root.Supplier.getData('contact'), function (index) {\n if (this.id == id) {\n newContacts.push(contactData);\n } else {\n newContacts.push(this);\n }\n });\n root.Supplier.contact = newContacts;\n root.resetContactTable();\n Toast.create({\n title: \"Kapcsolat adatai módosítva!\",\n message: contactData.name + \" nevű kapcsolattartó módosítva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.addContact = function (contactData) {\n /*\r\n fel kell venni a sorba\r\n */\n root.Supplier.contact.push(contactData);\n contactData.rowNum = root.Supplier.contact.length;\n var template = $('template[data-name=\"supplierContactTableRow\"]').html();\n var render = Mustache.render(template, contactData);\n $('.contactTable tbody').append(render);\n root.bindContactClickAction();\n Toast.enableTimers(false);\n Toast.create({\n title: \"Kapcsolattartó hozzáadva!\",\n message: contactData.name + \" nevű kapcsolattartó hozzáadva\",\n status: TOAST_STATUS.SUCCESS,\n timeout: 5000\n });\n };\n this.construct(options, SupplierItem);\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9yZXNvdXJjZXMvanMvYWRtaW4vc3VwcGxpZXIuanMiLCJuYW1lcyI6WyJTdXBwbGllciIsIl9EYXRhTW9kZWwiLCJfU3VwcGxpZXIiLCJkYXRhIiwib3B0aW9ucyIsIl90aGlzIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2NhbGxTdXBlciIsImNvbnRhY3QiLCJjYW5TZWUiLCJjYW5TZWVJbk9yZGVyIiwiY29uc29sZSIsImxvZyIsIl9pbmhlcml0cyIsIl9jcmVhdGVDbGFzcyIsIkRhdGFNb2RlbCIsIndpbmRvdyIsIlN1cHBsaWVyQWRtaW4iLCJTdXBwbGllckl0ZW0iLCJPcHRzIiwidG9rZW4iLCJjb250YWluZXJDc3NTZWxlY3RvciIsInRlc3RNb2RlIiwiVVJMIiwiZ2V0RGF0YVRhYmxlQ29udGVudCIsImluZGV4Iiwic2hvdyIsImVkaXQiLCJjcmVhdGUiLCJzdG9yZSIsInVwZGF0ZSIsImRlc3Ryb3kiLCJhdHRhY2hGaWxlIiwiZGV0YWNoRmlsZSIsImRhdGFUYWJsZSIsIm9yZGVyRGlyZWN0aXZlIiwib25BZnRlckluaXRWaWV3RGV0YWlscyIsInJvb3QiLCJjb250YWN0UG9wdXBXb3JrZmxvdyIsImNvbnN0cnVjdCIsIiQiLCJleHRlbmQiLCJBUFAiLCJnZXRPcHRzIiwiZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsT2xkIiwiQ1NTU2VsZWN0b3IiLCJGb3JtRGF0YSIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvciIsImZvcm1KU09OIiwiZm9yRWFjaCIsInZhbHVlIiwia2V5IiwiUmVmbGVjdCIsImhhcyIsIkFycmF5IiwiaXNBcnJheSIsInB1c2giLCJlYWNoIiwiYXR0ciIsInJlcGxhY2UiLCJmb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwiLCJDU1NTZWxlY3RvckZvcm0iLCJhamF4RGF0YSIsImdldEFsbCIsImFwcGVuZCIsInZhbCIsImluZGV4S2V5IiwiZ2V0Iiwic2V0IiwiY2xpY2tTYXZlQnV0dG9uIiwiZXZlbnQiLCJkZWJ1ZyIsInByZXZlbnREZWZhdWx0IiwiY2hlY2tWYWxpZGl0eSIsImFkZENsYXNzIiwicmVwb3J0VmFsaWRpdHkiLCJUb2FzdCIsInRpdGxlIiwibWVzc2FnZSIsInN0YXR1cyIsIlRPQVNUX1NUQVRVUyIsIkRBTkdFUiIsInRpbWVvdXQiLCJzdG9wUHJvcGFnYXRpb24iLCJyZW1vdmVDbGFzcyIsImFqYXhVcmwiLCJhamF4TWV0aG9kIiwiaWQiLCJhamF4IiwidXJsIiwidHlwZSIsImNvbnRlbnRUeXBlIiwicHJvY2Vzc0RhdGEiLCJoZWFkZXJzIiwic3VjY2VzcyIsIlNVQ0NFU1MiLCJsb2FkTWFpbkNvbnRlbnQiLCJpbml0Vmlld0xpc3QiLCJzZXREZXRhaWxzVmlld0RhdGEiLCJuZWVkVG9TZXQiLCJub3RlIiwicHJvcCIsImNsaWNrIiwiaG9vcmV5Y2FEYXRhQWN0aXZlIiwicHJvZHVjdEdyb3VwIiwicHJvZHVjdF9ncm91cCIsIm5hbWUiLCJjaGFuZ2UiLCJzZXJ2aWNlIiwicHJvZml0Q2VudGVyIiwicHJvZml0X2NlbnRlciIsImVzY2FwZVNlbGVjdG9yIiwiaW5pdFZpZXdEZXRhaWxzIiwiQ29udGFjdFBvcFVwIiwiaW5pdCIsImFjdGl2ZSIsIm9uQWZ0ZXJTYXZlIiwiY29udGFjdEFjdGlvbiIsInJlbmRlckNvbnRhY3QiLCJiaW5kIiwic2V0Q29udGFjdFBvcHVwV29ya2Zsb3ciLCJjbGVhckRhdGEiLCJ0b29sdGlwIiwiaW5pdFJhZGlvQnV0dG9ucyIsImlucHV0bWFzayIsIm9uaW5jb21wbGV0ZSIsImxlbmd0aCIsIm9uY29tcGxldGUiLCJvbmNsZWFyZWQiLCJvZmYiLCJvbiIsInNlbGVjdDIiLCJ0YWdzIiwiY3JlYXRlVGFnIiwicGFyYW1zIiwidGVybSIsInRyaW0iLCJ0ZXh0IiwibmV3VGFnIiwic2V0SW1hZ2VGcm9tTG9jYWwiLCJpcyIsInJlbmRlckF0dGFjaG1lbnQiLCJpbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlIiwic2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlIiwiZmlsZUlucHV0IiwiZmlsZXMiLCJncm91cCIsImZpbmQiLCJncm91cEVuZCIsImJlZm9yZVNlbmQiLCJhZGRBdHRhY2htZW50IiwiYXR0YWNobWVudCIsImVycm9yIiwicmVzcG9uc2VKU09OIiwiYWpheEVycm9yRmllbGRIYW5kbGVyIiwiY2xpY2tOZXciLCJjbGlja05ld0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uRWRpdCIsInJvd0RhdGEiLCJub2RlIiwiY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCIsIm1vZGFsIiwiX3Rva2VuIiwicm93IiwiZGF0YVRhYmxlQ1NTU2VsZWN0b3IiLCJEYXRhVGFibGUiLCJkYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJwYXJlbnRzIiwibWV0aG9kIiwicmVtb3ZlIiwiZHJhdyIsImRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGUiLCJkYXRhdGFibGVSb3dBY3Rpb25EZWxldGUiLCJkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGljayIsImN1cnJlbnRUYXJnZXQiLCJhY3Rpb25OYW1lIiwiY2FwaXRhbGl6ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImNvbE51bSIsInNldE9wdHMiLCJkYXRhdGFibGVBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrIiwiZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayIsImxhbmd1YWdlIiwicmVuZGVyIiwiYnV0dG9ucyIsImRhdGF0YWJsZUFkZFJvd1RyYXNoQnV0dG9uIiwiZGF0YXRhYmxlQWRkUm93RWRpdEJ1dHRvbiIsImxhdGluaXNlIiwiYXV0b1ByaW50IiwiY2xhc3NOYW1lIiwiYXBpIiwiY29uZmlnIiwiYWN0aW9uIiwiZSIsImR0IiwiZHJhd0NhbGxiYWNrIiwic2V0dGluZ3MiLCJkYXRhdGFibGVBZGRSb3dBY3Rpb24iLCJhdXRvZmlsbERldGFpbHMiLCJyYW5kb21OdW1iZXIiLCJnZXRSYW5kb21JbnQiLCJyb3dOdW0iLCJnZXREYXRhIiwiYXR0YWNobWVudERhdGEiLCJkYXRlIiwiRGF0ZSIsImNyZWF0ZWRfYXQiLCJ0b0xvY2FsZVN0cmluZyIsImxpbmsiLCJQdWJsaWNVcmwiLCJmaWxlbmFtZSIsInRlbXBsYXRlIiwiaHRtbCIsIk11c3RhY2hlIiwiYmluZEF0dGFjaG1lbnRDbGlja0FjdGlvbiIsImJpbmRDb250YWN0Q2xpY2tBY3Rpb24iLCJlbmFibGVUaW1lcnMiLCJvcmlnaW5hbF9maWxlbmFtZSIsInJlc2V0Q29udGFjdFRhYmxlIiwiY29udGFjdERhdGEiLCJ1bmJpbmQiLCJjb250YWN0RGVsZXRlQ2xpY2siLCJjb250YWN0RWRpdENsaWNrIiwiYXR0YWNobWVudERlbGV0ZUNsaWNrIiwiY3VycmVudEF0dGFjaG1lbnRSb3ciLCJjbG9zZXN0IiwiYXR0YWNoZW1udElkIiwiZmlsdGVyIiwiYXJyIiwicmVzZXRBdHRhY2htZW50VGFibGUiLCJnZXRDb250YWN0UG9wdXBXb3JrZmxvdyIsImxvYWREYXRhIiwiZ2V0U3VwcGxpZXIiLCJhZGRDb250YWN0IiwiZWRpdENvbnRhY3QiLCJuZXdDb250YWN0cyJdLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vcmVzb3VyY2VzL2pzL2FkbWluL3N1cHBsaWVyLmpzP2E3YzQiXSwic291cmNlc0NvbnRlbnQiOlsiaWYodHlwZW9mIFN1cHBsaWVyPT09J3VuZGVmaW5lZCcpe1xyXG4gICAgY2xhc3MgU3VwcGxpZXIgZXh0ZW5kcyBEYXRhTW9kZWx7XHJcblxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICogQ29uc3RydWN0b3JcclxuICAgICAgICAgKi9cclxuICAgICAgICBjb25zdHJ1Y3RvciAoZGF0YSxvcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHN1cGVyKGRhdGEsb3B0aW9ucylcclxuICAgICAgICAgICAgaWYodHlwZW9mIHRoaXMuY29udGFjdCA9PT1cInVuZGVmaW5lZFwiKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFjdD1bXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0eXBlb2YgdGhpcy5jYW5TZWUgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhblNlZT0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHR5cGVvZiB0aGlzLmNhblNlZUluT3JkZXIgPT09XCJ1bmRlZmluZWRcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhblNlZUluT3JkZXI9MTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnU3VwcGxpZXIgY29uc3RydWN0b3IgY2FsbGVkJyk7XHJcbiAgICAgICAgfTtcclxuICAgIH07XHJcbiAgICB3aW5kb3cuU3VwcGxpZXI9U3VwcGxpZXI7XHJcbn1cclxuXHJcblxyXG53aW5kb3cuU3VwcGxpZXJBZG1pbj1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pIHtcclxuICAgIC8qXHJcbiAgICAgKiBWYXJpYWJsZXMgYWNjZXNzaWJsZVxyXG4gICAgICogaW4gdGhlIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIGxldCBPcHRzID0ge1xyXG4gICAgICAgIHRva2VuOm51bGwsXHJcbiAgICAgICAgY29udGFpbmVyQ3NzU2VsZWN0b3I6ICcuY29udGFpbmVyU3VwcGxpZXInLFxyXG4gICAgICAgIHRlc3RNb2RlOmZhbHNlLFxyXG4gICAgICAgIFVSTDp7XHJcbiAgICAgICAgICAgIGdldERhdGFUYWJsZUNvbnRlbnQ6JycsXHJcbiAgICAgICAgICAgIGluZGV4OicnLFxyXG4gICAgICAgICAgICBzaG93OicnLFxyXG4gICAgICAgICAgICBlZGl0OicnLFxyXG4gICAgICAgICAgICBjcmVhdGU6JycsXHJcbiAgICAgICAgICAgIHN0b3JlOicnLFxyXG4gICAgICAgICAgICB1cGRhdGU6JycsXHJcbiAgICAgICAgICAgIGRlc3Ryb3k6JycsXHJcbiAgICAgICAgICAgIGF0dGFjaEZpbGU6JycsXHJcbiAgICAgICAgICAgIGRldGFjaEZpbGU6JycsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhVGFibGU6e1xyXG4gICAgICAgICAgICBvcmRlckRpcmVjdGl2ZTpbMSwgJ2FzYyddXHJcbiAgICAgICAgfSxcclxuICAgICAgICBvbkFmdGVySW5pdFZpZXdEZXRhaWxzOmZ1bmN0aW9uICgpe31cclxuICAgIH07XHJcbiAgICBsZXQgU3VwcGxpZXIgPSB7fTtcclxuICAgIGxldCByb290ID0gdGhpcztcclxuICAgIGxldCBjb250YWN0UG9wdXBXb3JrZmxvdz0nbmV3JztcclxuICAgIC8qXHJcbiAgICAgKiBDb25zdHJ1Y3RvclxyXG4gICAgICovXHJcbiAgICB0aGlzLmNvbnN0cnVjdCA9IGZ1bmN0aW9uIChvcHRpb25zLFN1cHBsaWVySXRlbSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdTdXBwbGllckFkbWluIGNvbnN0cnVjdG9yIGNhbGxlZCcpO1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG4gICAgICAgIGlmKCFTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnc3VwcGxpZXIgbGV0cmUga2VsbGV0IGhvem5pICcpO1xyXG4gICAgICAgICAgICBpZighQVBQLlN1cHBsaWVyKXtcclxuICAgICAgICAgICAgICAgIEFQUC5TdXBwbGllcj1uZXcgd2luZG93LlN1cHBsaWVyKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1BUFAuU3VwcGxpZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMuZ2V0T3B0cz1mdW5jdGlvbiAoKXtcclxuICAgICAgICByZXR1cm4gT3B0cztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZvcm1EYXRhVG9EYXRhT2JqZWN0QVBJQ2FsbE9sZD0gZnVuY3Rpb24gKENTU1NlbGVjdG9yKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBuZXcgRm9ybURhdGEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihDU1NTZWxlY3RvcikpO1xyXG4gICAgICAgIC8vbGV0IGZvcm1KU09OID0gT2JqZWN0LmZyb21FbnRyaWVzKGRhdGEuZW50cmllcygpKTtcclxuICAgICAgICB2YXIgZm9ybUpTT04gPSB7fTtcclxuICAgICAgICBkYXRhLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgICAgLy8gUmVmbGVjdC5oYXMgaW4gZmF2b3Igb2Y6IGZvcm1KU09OLmhhc093blByb3BlcnR5KGtleSlcclxuICAgICAgICAgICAgaWYoIVJlZmxlY3QuaGFzKGZvcm1KU09OLCBrZXkpKXtcclxuICAgICAgICAgICAgICAgIGZvcm1KU09OW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShmb3JtSlNPTltrZXldKSl7XHJcbiAgICAgICAgICAgICAgICBmb3JtSlNPTltrZXldID0gW2Zvcm1KU09OW2tleV1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvcm1KU09OW2tleV0ucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3IrJyBpbnB1dFtkYXRhLWlucHV0bWFza10nKS5lYWNoKGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBpZihmb3JtSlNPTlskKHRoaXMpLmF0dHIoJ25hbWUnKV0pe1xyXG4gICAgICAgICAgICAgICAgZm9ybUpTT05bJCh0aGlzKS5hdHRyKCduYW1lJyldPWZvcm1KU09OWyQodGhpcykuYXR0cignbmFtZScpXS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vZm9ybUpTT04ucHJvZHVjdEdyb3Vwcz0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XHJcblxyXG5cclxuICAgICAgICAvKk11bHRpc2VsZWN0IG9yIGNoZWNrYm94IHRvIGFycmF5OlxyXG4gICAgICAgIGFqYXhEYXRhWydwcm9kdWN0R3JvdXAnXT0kKFwiLnByb2R1Y3RDYXRlZ29yeVNlbGVjdFwiKS5zZWxlY3QyKCkudmFsKCk7XHJcblxyXG4gICAgICAgIGZvcm1KU09OLm11bHRpc2VsZWN0TmFtZSA9IGRhdGEuZ2V0QWxsKCdtdWx0aXNlbGVjdE5hbWUnKTtcclxuICAgICAgICAkLmVhY2goZm9ybUpTT04sIGZ1bmN0aW9uIChpdGVtLCB2YWx1ZSkge1xyXG4gICAgICAgICAgICBmb3JtSlNPTlskLmxjRmlyc3QoaXRlbS5yZXBsYWNlKCdjb250YWN0JywgJycpKV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgZGVsZXRlIGZvcm1KU09OW2l0ZW1dO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmKGZvcm1KU09OLnBob25lKXtcclxuICAgICAgICAgICAgZm9ybUpTT04ucGhvbmU9Zm9ybUpTT04ucGhvbmUucmVwbGFjZUFsbCgnXycsJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihmb3JtSlNPTi5lbWFpbCl7XHJcbiAgICAgICAgICAgIGZvcm1KU09OLmVtYWlsPWZvcm1KU09OLmVtYWlsLnJlcGxhY2VBbGwoJ18nLCcnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKi9cclxuICAgICAgICByZXR1cm4gZm9ybUpTT047XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwgPSBmdW5jdGlvbiAoQ1NTU2VsZWN0b3JGb3JtKSB7XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPW5ldyBGb3JtRGF0YSgkKENTU1NlbGVjdG9yRm9ybSlbMF0pO1xyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2ZpdENlbnRlcicpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZml0Q2VudGVyW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3Byb2R1Y3RHcm91cCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgncHJvZHVjdEdyb3VwW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ3N1cHBsaWVyU2VydmljZScpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnc3VwcGxpZXJTZXJ2aWNlW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgICQuZWFjaChhamF4RGF0YS5nZXRBbGwoJ2NvbnRhY3RJZCcpLGZ1bmN0aW9uKGtleSx2YWx1ZSl7XHJcbiAgICAgICAgICAgIGFqYXhEYXRhLmFwcGVuZCgnY29udGFjdElkW10nLHZhbHVlKTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBhamF4RGF0YS5hcHBlbmQoJ190b2tlbicsJCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCkpO1xyXG5cclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGlucHV0W2RhdGEtaW5wdXRtYXNrXScpLmVhY2goZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBpbmRleEtleT0kKHRoaXMpLmF0dHIoJ25hbWUnKTtcclxuICAgICAgICAgICAgaWYoYWpheERhdGEuZ2V0KGluZGV4S2V5KSl7XHJcbiAgICAgICAgICAgICAgICBhamF4RGF0YS5zZXQoaW5kZXhLZXksYWpheERhdGEuZ2V0KGluZGV4S2V5KS5yZXBsYWNlKC9bXyBdKyQvZyxcIlwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFqYXhEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tTYXZlQnV0dG9uPWZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgIGRlYnVnKCdTYXZlIGNsaWNrZWQnKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgaWYgKCQoQ1NTU2VsZWN0b3JGb3JtKycgaW5wdXRbbmFtZT1cImNhblNlZUluT3JkZXJcIl0nKS52YWwoKT09MSAmJiAkKENTU1NlbGVjdG9yRm9ybSlbMF0uY2hlY2tWYWxpZGl0eSgpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndmFsaWRhdG9uIGZhbHNlJyk7XHJcbiAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKS5hZGRDbGFzcygnd2FzLXZhbGlkYXRlZCcpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSlbMF0ucmVwb3J0VmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgVG9hc3QuY3JlYXRlKHsgdGl0bGU6IFwiVmFsaWTDoWNpw7NzIGhpYmEhXCIsIG1lc3NhZ2U6IFwiS8OpcmrDvGssIHTDtmx0c2Uga2kgYSBrw7Z0ZWxlesWRIG1lesWRa2V0IVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5EQU5HRVIsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3ZhbGlkYXRvbiBvaycpO1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSkucmVtb3ZlQ2xhc3MoJ3dhcy12YWxpZGF0ZWQnKTtcclxuICAgICAgICAgICAgLy9kbyB5b3VyIGFqYXggc3VibWl0aW9uIGhlcmVcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGFqYXhEYXRhPXJvb3QuZm9ybURhdGFUb0RhdGFPYmplY3RBUElDYWxsKENTU1NlbGVjdG9yRm9ybSk7XHJcblxyXG5cclxuXHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuc3RvcmU7XHJcbiAgICAgICAgbGV0IGFqYXhNZXRob2Q9XCJQT1NUXCI7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgIGFqYXhVcmw9T3B0cy5VUkwudXBkYXRlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgICAgICAvL2FqYXhNZXRob2Q9XCJQVVRcIjtcclxuICAgICAgICAgICAgLy9hamF4RGF0YT1uZXcgRm9ybURhdGEoJChDU1NTZWxlY3RvckZvcm0pWzBdKTtcclxuICAgICAgICAgICAgYWpheERhdGEuYXBwZW5kKCdfbWV0aG9kJywnUFVUJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkZWJ1ZyhhamF4TWV0aG9kKTtcclxuICAgICAgICBkZWJ1ZyhhamF4RGF0YSk7XHJcblxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICB0eXBlOmFqYXhNZXRob2QsXHJcbiAgICAgICAgICAgIGNvbnRlbnRUeXBlOmZhbHNlLFxyXG4gICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICAgICAgICdYLUNTUkYtVE9LRU4nOiAkKCdpbnB1dFtuYW1lPVwiX3Rva2VuXCJdJykudmFsKClcclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6ZnVuY3Rpb24gKGRhdGEpe1xyXG4gICAgICAgICAgICAgICAgZGVidWcoJ2QxOiBTYXZlIHN1Y2Nlc3MgJyk7XHJcbiAgICAgICAgICAgICAgICBkZWJ1ZyhkYXRhKTtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIE9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlPVswLCAnZGVzYyddO1xyXG4gICAgICAgICAgICAgICAgICAgIFRvYXN0LmNyZWF0ZSh7IHRpdGxlOiBcIlNpa2VyZXMgcsO2Z3rDrXTDqXMhXCIsIG1lc3NhZ2U6IGFqYXhEYXRhLmdldCgnbmFtZScpK1wiIG5ldsWxIGJlc3rDoWxsbMOtdMOzIGVsbWVudHZlXCIsIHN0YXR1czogVE9BU1RfU1RBVFVTLlNVQ0NFU1MsIHRpbWVvdXQ6IDUwMDAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgQVBQLmxvYWRNYWluQ29udGVudChPcHRzLlVSTC5pbmRleCsnP2luaXQ9MCcscm9vdC5pbml0Vmlld0xpc3QpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldERldGFpbHNWaWV3RGF0YT1mdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZGVidWcoJ3NldERldGFpbHNWaWV3RGF0YScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFN1cHBsaWVyKTtcclxuICAgICAgICBsZXQgQ1NTU2VsZWN0b3JGb3JtPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuc3VwcGxpZXJGb3JtJztcclxuICAgICAgICBsZXQgbmVlZFRvU2V0PVtcclxuICAgICAgICAgICAgJ25hbWUnLCdob29yZXljYUlkJywnbmFtZUlkJyxcclxuICAgICAgICAgICAgJ29yZGVyRW1haWwnLCdvcmRlckVtYWlsMicsJ2FkZHJlc3MnLCdtYWlsaW5nQWRkcmVzcycsJ3Bob25lJywnZmF4JywnY3VzdG9tZXJTZXJ2aWNlUGhvbmUnLFxyXG4gICAgICAgICAgICAnbmFtZTIyJyxcclxuICAgICAgICAgICAgJ29wZW5Ib3VycycsICdvcmRlcnNEZWFkbGluZScsICdtaW5PcmRlclZhbHVlJyxcclxuICAgICAgICBdO1xyXG4gICAgICAgICQuZWFjaChuZWVkVG9TZXQsZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZih0eXBlb2Ygcm9vdC5TdXBwbGllclt0aGlzXSE9J3VuZGVmaW5lZCcpe1xyXG4gICAgICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPScrdGhpcysnXScpLnZhbChyb290LlN1cHBsaWVyW3RoaXNdKTtcclxuICAgICAgICAgICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgdGV4dGFyZWFbbmFtZT0nK3RoaXMrJ10nKS52YWwocm9vdC5TdXBwbGllclt0aGlzXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydub3RlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyB0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKHJvb3QuU3VwcGxpZXIubm90ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydlbWFpbEF0dGFjaG1lbnRUeXBlJ10hPSd1bmRlZmluZWQnKXtcclxuICAgICAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyBpbnB1dFtuYW1lPWVtYWlsQXR0YWNobWVudFR5cGVdW3ZhbHVlPScrcm9vdC5TdXBwbGllclsnZW1haWxBdHRhY2htZW50VHlwZSddKyddJykucHJvcCgnY2hlY2tlZCcsdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1jYW5TZWVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgJChDU1NTZWxlY3RvckZvcm0rJyAqW2RhdGEtdG9nZ2xlPWNhblNlZUluT3JkZXJdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmNhblNlZUluT3JkZXIrJ10nKS5jbGljaygpO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgKltkYXRhLXRvZ2dsZT1ob29yZXljYURhdGFBY3RpdmVdW2RhdGEtdGl0bGU9Jytyb290LlN1cHBsaWVyLmhvb3JleWNhRGF0YUFjdGl2ZSsnXScpLmNsaWNrKCk7XHJcbiAgICAgICAgbGV0IHByb2R1Y3RHcm91cD1bXTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5wcm9kdWN0X2dyb3VwLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcHJvZHVjdEdyb3VwLnB1c2godGhpcy5uYW1lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9kdWN0Q2F0ZWdvcnlTZWxlY3QnKS52YWwocHJvZHVjdEdyb3VwKS5jaGFuZ2UoKTtcclxuXHJcbiAgICAgICAgbGV0IHNlcnZpY2U9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuc2VydmljZSxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNlcnZpY2UucHVzaCh0aGlzLm5hbWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoQ1NTU2VsZWN0b3JGb3JtKycgLnNlcnZpY2VTZWxlY3QnKS52YWwoc2VydmljZSkuY2hhbmdlKCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9maXRDZW50ZXI9W107XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIucHJvZml0X2NlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHByb2ZpdENlbnRlci5wdXNoKHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8kKENTU1NlbGVjdG9yRm9ybSsnIC5wcm9maXRDZW50ZXJTZWxlY3QnKS52YWwocHJvZml0Q2VudGVyKS5jaGFuZ2UoKTtcclxuICAgICAgICAvL2RlYnVnKHByb2ZpdENlbnRlcik7XHJcbiAgICAgICAgJC5lYWNoKHByb2ZpdENlbnRlcixmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoJ2lucHV0W3ZhbHVlPVwiJyskLmVzY2FwZVNlbGVjdG9yKHRoaXMpKydcIl0nKS5wcm9wKCBcImNoZWNrZWRcIiwgdHJ1ZSApO1xyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmKHR5cGVvZiByb290LlN1cHBsaWVyWydsb2dvRmlsZSddIT0ndW5kZWZpbmVkJyAmJiAocm9vdC5TdXBwbGllclsnbG9nb0ZpbGUnXSkpe1xyXG4gICAgICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIGltZy5pbWFnZUxvZ28nKS5hdHRyKCdzcmMnLHJvb3QuU3VwcGxpZXJbJ2xvZ29GaWxlJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9kZWJ1ZyhBUFAuU3VwcGxpZXJBZG1pbi5mb3JtRGF0YVRvRGF0YU9iamVjdEFQSUNhbGwoJy5zdXBwbGllckZvcm0nKVsncHJvZHVjdEdyb3VwJ10pO1xyXG4gICAgICAgIC8vJCgnW25hbWU9cHJvZHVjdEdyb3VwXScpLnZhbChbJ0LDvGbDqcOhcnVfw6lkZXNpcGFyaV90ZXJtw6lrZWsnLCdUb2rDoXMnXSkuY2hhbmdlKCk7XHJcbiAgICAgICAgLy9yb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pbml0Vmlld0RldGFpbHM9ZnVuY3Rpb24gKG9wdGlvbnMsU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICBkZWJ1ZygnKipjYWxsIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgICAgICBpZighQVBQLkNvbnRhY3RQb3BVcCl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCduaW5jcyBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcCA9IG5ldyB3aW5kb3cuQ29udGFjdFBvcFVwKCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdtYXIgdmFuICBBUFAuQ29udGFjdFBvcFVwJylcclxuICAgICAgICB9XHJcbiAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5pbml0KHtcclxuICAgICAgICAgICAgYWN0aXZlOnRydWUsXHJcbiAgICAgICAgICAgIG9uQWZ0ZXJTYXZlOnJvb3QuY29udGFjdEFjdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgICAgICQoJy5zdXBwbGllckZvcm0gLmJ1dHRvbk5ld0NvbnRhY3QnKS5iaW5kKCdjbGljaycsZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIEFQUC5TdXBwbGllckFkbWluLnNldENvbnRhY3RQb3B1cFdvcmtmbG93KCduZXcnKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5jbGVhckRhdGEoKTtcclxuICAgICAgICAgICAgQVBQLkNvbnRhY3RQb3BVcC5zaG93KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnW2RhdGEtdG9nZ2xlPVwidG9vbHRpcFwiXScpLnRvb2x0aXAoKTtcclxuICAgICAgICBpbml0UmFkaW9CdXR0b25zKCk7XHJcbiAgICAgICAgJChcIjppbnB1dFwiKS5pbnB1dG1hc2soe1xyXG4gICAgICAgICAgICBcIm9uaW5jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCQodGhpcykudmFsKCkubGVuZ3RoID4gMCB8fCAkKHRoaXMpLmRhdGEoJ3JlcXVpcmVkJykgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwib25jb21wbGV0ZVwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdpcy1pbnZhbGlkJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdpcy12YWxpZCcpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcIm9uY2xlYXJlZFwiOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnY2xlYXJlZCcpO1xyXG4gICAgICAgICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnaXMtaW52YWxpZCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoJ2Zvcm0uc3VwcGxpZXJGb3JtIGJ1dHRvbi5Gb3JtU2F2ZUJ1dHRvbicpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSBidXR0b24uRm9ybVNhdmVCdXR0b24nKS5vbignY2xpY2snLHJvb3QuY2xpY2tTYXZlQnV0dG9uKTtcclxuICAgICAgICByb290LnNldERldGFpbHNWaWV3RGF0YSgpO1xyXG4gICAgICAgICQoXCIucHJvZHVjdENhdGVnb3J5U2VsZWN0XCIpLnNlbGVjdDIoKTtcclxuICAgICAgICAkKFwiLnNlcnZpY2VTZWxlY3RcIikuc2VsZWN0Mih7XHJcbiAgICAgICAgICAgIHRhZ3M6IHRydWUsXHJcbiAgICAgICAgICAgIGNyZWF0ZVRhZzogZnVuY3Rpb24gKHBhcmFtcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlcm0gPSAkLnRyaW0ocGFyYW1zLnRlcm0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0ZXJtID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHRlcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogdGVybSxcclxuICAgICAgICAgICAgICAgICAgICBuZXdUYWc6IHRydWUgLy8gYWRkIGFkZGl0aW9uYWwgcGFyYW1ldGVyc1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vJChcIi5wcm9maXRDZW50ZXJTZWxlY3RcIikuc2VsZWN0MigpO1xyXG4gICAgICAgICQoXCJpbnB1dFtuYW1lPWxvZ29GaWxlXVwiKS5jaGFuZ2UoZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgc2V0SW1hZ2VGcm9tTG9jYWwodGhpcyxPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmltYWdlTG9nbycpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCdmb3JtLnN1cHBsaWVyRm9ybSAucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3hBbGwnKS5vZmYoJ2NsaWNrJyk7XHJcbiAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gLnByb2ZpdENlbnRlclNlbGVjdENoZWNrYm94QWxsJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coKTtcclxuICAgICAgICAgICAgLy9sZXQgY2hlY2tlZD0kKHRoaXMpLmlzKFwiOmNoZWNrZWRcIilcclxuICAgICAgICAgICAgJCgnZm9ybS5zdXBwbGllckZvcm0gaW5wdXQucHJvZml0Q2VudGVyU2VsZWN0Q2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywkKHRoaXMpLmlzKFwiOmNoZWNrZWRcIikpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgICAgIC8vT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzKCk7XHJcbiAgICAgICAgcm9vdC5pbml0RmlsZUF0dGFjaG1lbnRGZWF0dXJlKCk7XHJcbiAgICAgICAgZGVidWcoJyoqZW5kIGluaXRWaWV3RGV0YWlscyAnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkVXBsb2FkRmlsZVRvZ2dsZT1mdW5jdGlvbiAoZmlsZUlucHV0KXtcclxuICAgICAgICAvKlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dC5hdHRyKCduYW1lJykpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGZpbGVJbnB1dFswXS5maWxlc1swXSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG4gICAgICAgICovXHJcbiAgICAgICAgaWYoZmlsZUlucHV0KXtcclxuICAgICAgICAgICAgJCgnLmNvbnRhaW5lckZpbGVVcGxvYWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgIGlmKGZpbGVJbnB1dFswXS5maWxlc1swXSl7XHJcbiAgICAgICAgICAgICAgICAkKCcuY29udGFpbmVyVXBsb2FkZWRGaWxlTmFtZScpLnRleHQoZmlsZUlucHV0WzBdLmZpbGVzWzBdLm5hbWUpO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZFNwaW5uZXInKS5yZW1vdmVDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJVcGxvYWRlZEZpbGVOYW1lJykudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICQoJy5jdXN0b20tZmlsZS1sYWJlbC5zZWxlY3RlZCcpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZFN0YXJ0ZWQnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy51cGxvYWRTdGF0dXNSb3cnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXRGaWxlQXR0YWNobWVudEZlYXR1cmU9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCctLS0tLS0taW5pdEZpbGVBdHRhY2htZW50RmVhdHVyZS0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgaWYocm9vdC5TdXBwbGllci5pZCl7XHJcbiAgICAgICAgICAgICQoJy5jb250YWluZXJGaWxlVXBsb2FkJykucmVtb3ZlQ2xhc3MoJ2Qtbm9uZScpO1xyXG4gICAgICAgICAgICAkKCcuY29udGFpbmVyRmlsZVVwbG9hZE5vbmUnKS5hZGRDbGFzcygnZC1ub25lJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgJChPcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLmJ1dHRvblVwbG9hZCcpLm9mZignY2xpY2snKTtcclxuICAgICAgICAkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuYnV0dG9uVXBsb2FkJykub24oJ2NsaWNrJyxmdW5jdGlvbiAoKXtcclxuICAgICAgICAgICAgY29uc29sZS5ncm91cCgnLS0tLS0tLWJ1dHRvblVwbG9hZC0tLS0tLS0tLS0tJyk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlSW5wdXQ9JCgnI2lucHV0R3JvdXBBdHRhY2hlRmlsZScpO1xyXG4gICAgICAgICAgICBpZihmaWxlSW5wdXRbMF0uZmlsZXMubGVuZ3RoPDEpe1xyXG4gICAgICAgICAgICAgICAgVG9hc3QuY3JlYXRlKFwiSGliYSFcIiwgJ1bDoWxsYXN6b24ga2kgZsOhamx0IScsIFRPQVNUX1NUQVRVUy5EQU5HRVIsIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgICAgICBsZXQgZGF0YT0gbmV3IEZvcm1EYXRhKCQoT3B0cy5jb250YWluZXJDc3NTZWxlY3RvcikuZmluZCgnZm9ybS5zdXBwbGllckZvcm0nKVswXSk7XHJcbiAgICAgICAgICAgIGRhdGEuYXBwZW5kKGZpbGVJbnB1dC5hdHRyKCduYW1lJyksZmlsZUlucHV0WzBdLmZpbGVzWzBdKTtcclxuXHJcbiAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKGZpbGVJbnB1dCk7XHJcbiAgICAgICAgICAgIGxldCBhamF4VXJsPU9wdHMuVVJMLmF0dGFjaEZpbGUucmVwbGFjZSgnJWlkJScscm9vdC5TdXBwbGllci5pZCk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgICAgIGRhdGE6ZGF0YSxcclxuICAgICAgICAgICAgICAgIHR5cGU6J1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBwcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmVTZW5kOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGEuc3VjY2Vzcz09dHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3QuYWRkQXR0YWNobWVudChkYXRhLmRhdGEuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS5yZXNwb25zZUpTT04pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYWpheEVycm9yRmllbGRIYW5kbGVyKGRhdGEucmVzcG9uc2VKU09OLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2xpY2tOZXc9ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGRlYnVnKCdjbGlja05ldycpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuY2xpY2tOZXdDYWxsQmFjayk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja05ld0NhbGxCYWNrPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBkZWJ1ZygnY2FsbGJhY2tOZXcnKTtcclxuICAgICAgICByb290LlN1cHBsaWVyPW5ldyB3aW5kb3cuU3VwcGxpZXIoKTtcclxuICAgICAgICByb290LmluaXRWaWV3RGV0YWlscygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kYXRhdGFibGVSb3dBY3Rpb25FZGl0PWZ1bmN0aW9uIChyb3dEYXRhLG5vZGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZGF0YXRhYmxlUm93QWN0aW9uRWRpdCBDYWxsZWQnKTtcclxuICAgICAgICAvL09wdHMub25BZnRlckluaXRWaWV3RGV0YWlscz1yb290LmF1dG9maWxsRGV0YWlscztcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5lZGl0LnJlcGxhY2UoJyVpZCUnLHJvd0RhdGEuaWQpO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoYWpheFVybCxyb290LmluaXRWaWV3RGV0YWlscyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkVkaXQgRW5kJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGlja09yZGVyRGVsZXRlQ29uZmlybWVkPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2NsaWNrU3VwcGxpZXJEZWxldGVDb25maXJtZWQnKTtcclxuICAgICAgICBkZWJ1ZyhldmVudCk7XHJcbiAgICAgICAgZGVidWcoZXZlbnQuZGF0YSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ2hpZGUnKTtcclxuICAgICAgICBsZXQgYWpheERhdGE9e307XHJcbiAgICAgICAgYWpheERhdGEuX3Rva2VuPU9wdHMudG9rZW47XHJcbiAgICAgICAgbGV0IGFqYXhVcmw9T3B0cy5VUkwuZGVzdHJveS5yZXBsYWNlKCclaWQlJyxldmVudC5kYXRhLmlkKTtcclxuICAgICAgICBhamF4RGF0YS5fdG9rZW49JCgnaW5wdXRbbmFtZT1fdG9rZW5dJykudmFsKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheFVybCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coYWpheERhdGEpO1xyXG4gICAgICAgIGxldCByb3c9JChkYXRhVGFibGVDU1NTZWxlY3RvcikuRGF0YVRhYmxlKCkucm93KHJvb3QuZGFkYXRhdGFibGVSb3dBY3Rpb25DYWxsZXJOb2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDphamF4VXJsLFxyXG4gICAgICAgICAgICBkYXRhOmFqYXhEYXRhLFxyXG4gICAgICAgICAgICBtZXRob2Q6XCJERUxFVEVcIixcclxuICAgICAgICAgICAgc3VjY2VzczpmdW5jdGlvbiAoZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvdy5yZW1vdmUoKS5kcmF3KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdC5kYWRhdGF0YWJsZVJvd0FjdGlvbkNhbGxlck5vZGU9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1mYWxzZTtcclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZT1mdW5jdGlvbiAocm93RGF0YSxub2RlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGF0YWJsZVJvd0FjdGlvbkRlbGV0ZSBDYWxsZWQnKTtcclxuICAgICAgICByb290LmRhZGF0YXRhYmxlUm93QWN0aW9uQ2FsbGVyTm9kZT1ub2RlO1xyXG4gICAgICAgICQoJyNkaWFsb2dNb2RhbCcpLm9uKCdzaG93LmJzLm1vZGFsJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIC8vIElmIG5lY2Vzc2FyeSwgeW91IGNvdWxkIGluaXRpYXRlIGFuIEFKQVggcmVxdWVzdCBoZXJlIChhbmQgdGhlbiBkbyB0aGUgdXBkYXRpbmcgaW4gYSBjYWxsYmFjaykuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgbW9kYWwncyBjb250ZW50LiBXZSdsbCB1c2UgalF1ZXJ5IGhlcmUsIGJ1dCB5b3UgY291bGQgdXNlIGEgZGF0YSBiaW5kaW5nIGxpYnJhcnkgb3Igb3RoZXIgbWV0aG9kcyBpbnN0ZWFkLlxyXG4gICAgICAgICAgICB2YXIgbW9kYWwgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBtb2RhbC5maW5kKCcubW9kYWwtdGl0bGUnKS50ZXh0KCdNZWdlcsWRc8OtdMOpcyAnKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLm1vZGFsLWJvZHknKS50ZXh0KCdCaXp0b3NhbiB0w7ZybGkgYSBiZXN6w6FsbMOtdMOzdD8nKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9mZignY2xpY2snKTtcclxuICAgICAgICAgICAgbW9kYWwuZmluZCgnLmJ1dHRvblllcycpLm9uKCdjbGljaycse2lkOnJvd0RhdGEuaWR9LHJvb3QuY2xpY2tPcmRlckRlbGV0ZUNvbmZpcm1lZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJCgnI2RpYWxvZ01vZGFsJykubW9kYWwoJ3Nob3cnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgZGVidWcoJ2RhdGF0YWJsZVJvd0FjdGlvbkJ1dHRvbkNsaWNrJyk7XHJcbiAgICAgICAgbGV0IG5vZGU9JChldmVudFswXS5jdXJyZW50VGFyZ2V0KTtcclxuICAgICAgICBsZXQgcm93PSQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgpLnJvdyhub2RlLnBhcmVudHMoJ3RyJykpO1xyXG4gICAgICAgIGxldCByb3dEYXRhPXJvdy5kYXRhKCk7XHJcbiAgICAgICAgbGV0IGFjdGlvbk5hbWU9J2RhdGF0YWJsZVJvd0FjdGlvbicrbm9kZS5kYXRhKCdidXR0b250eXBlJykuY2FwaXRhbGl6ZSgpO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygcm9vdFthY3Rpb25OYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByb290W2FjdGlvbk5hbWVdKHJvd0RhdGEsbm9kZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbml0Vmlld0xpc3QgPSBmdW5jdGlvbiAob3B0aW9ucz17fSkge1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBpbmljaWFsaXphdGlvbicpO1xyXG4gICAgICAgIGRhdGFUYWJsZUNTU1NlbGVjdG9yPU9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IrJyAuZGF0YVRhYmxlJzsgLy9cclxuXHJcbiAgICAgICAgbGV0IGNvbE51bT0kKGRhdGFUYWJsZUNTU1NlbGVjdG9yKycgdGhlYWQgdGgnKS5sZW5ndGg7IC8vYnV0dG9ucyBpbnNlcnQgcG9zaXRpb24gbmVlZFxyXG4gICAgICAgIEFQUC5zZXRPcHRzKHtcclxuICAgICAgICAgICAgZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjazpyb290LmNsaWNrTmV3LFxyXG4gICAgICAgICAgICBkYXRhdGFibGVSb3dBY3Rpb25CdXR0b25DbGlja0NhbGxCYWNrOnJvb3QuZGF0YXRhYmxlUm93QWN0aW9uQnV0dG9uQ2xpY2ssXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgbGV0IG9yZGVyRGlyZWN0aXZlPU9wdHMuZGF0YVRhYmxlLm9yZGVyRGlyZWN0aXZlO1xyXG4gICAgICAgIGlmKHR5cGVvZiBvcHRpb25zWydvcmRlckRpcmVjdGl2ZSddIT0ndW5kZWZpbmVkJyl7XHJcbiAgICAgICAgICAgIG9yZGVyRGlyZWN0aXZlPW9wdGlvbnNbJ29yZGVyRGlyZWN0aXZlJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoZGF0YVRhYmxlQ1NTU2VsZWN0b3IpLkRhdGFUYWJsZSgge1xyXG4gICAgICAgICAgICBsYW5ndWFnZToge1xyXG4gICAgICAgICAgICAgICAgdXJsOiAnLy9jZG4uZGF0YXRhYmxlcy5uZXQvcGx1Zy1pbnMvMS4xMC4yNC9pMThuL0h1bmdhcmlhbi5qc29uJ1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgLy9cImFqYXhcIjogXCJ7e2Fzc2V0KCdleGFwbWxlMi5qc29uJyl9fVwiLFxyXG4gICAgICAgICAgICBcImFqYXhcIjogT3B0cy5VUkwuZ2V0RGF0YVRhYmxlQ29udGVudCxcclxuICAgICAgICAgICAgXCJjb2x1bW5EZWZzXCI6IFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBcInRhcmdldHNcIjogY29sTnVtLTEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBidXR0b25zPUFQUC5kYXRhdGFibGVBZGRSb3dUcmFzaEJ1dHRvbigwLGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnMrPUFQUC5kYXRhdGFibGVBZGRSb3dFZGl0QnV0dG9uKDAsYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0YXJnZXRzXCI6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJyZW5kZXJcIjogZnVuY3Rpb24gKCBkYXRhLCB0eXBlLCByb3cgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlID09PSBcInNvcnRcIiA/IGRhdGEubGF0aW5pc2UoKSA6IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAvL3sgXCJ2aXNpYmxlXCI6IGZhbHNlLCAgXCJ0YXJnZXRzXCI6IFsgMCBdIH1cclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgYnV0dG9uczp7XHJcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgJ2V4Y2VsJywncGRmJyxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZDogJ3ByaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy90ZXh0OiAnUHJpbnQgY3VycmVudCBwYWdlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ3RpdGxlIGN1c3RvbSB0ZXh0JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2VUb3AnOiAnTWVzc2FnZSBPbiBUb3AnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvUHJpbnQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIC8qKi9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnw5pqIGZlbHZpdGVsZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tc3VjY2VzcyBuZXdJdGVtJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cjp7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhOjEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGI6MlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiduZXdJdGVtJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbml0OiBmdW5jdGlvbihhcGksIG5vZGUsIGNvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChub2RlKS5yZW1vdmVDbGFzcygndWktYnV0dG9uJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBmdW5jdGlvbiAoIGUsIGR0LCBub2RlLCBjb25maWcgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUFAuZGF0YXRhYmxlQWN0aW9uQnV0dG9uQ2xpY2tDYWxsQmFjayhhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29uc29sZS5sb2coZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNvbmZpZyk7Ki9cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFwiY29sdW1uc1wiOiBbXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImlkXCIgfSxcclxuICAgICAgICAgICAgICAgIHsgXCJkYXRhXCI6IFwibmFtZVwiIH0sXHJcbiAgICAgICAgICAgICAgICB7IFwiZGF0YVwiOiBcImhvb3JleWNhSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJuYW1lSWRcIiB9LFxyXG4gICAgICAgICAgICAgICAgeyBcImRhdGFcIjogXCJjcmVhdGVkX2F0XCIgfSxcclxuICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIFwib3JkZXJcIjogb3JkZXJEaXJlY3RpdmUsXHJcbiAgICAgICAgICAgIFwic3RhdGVTYXZlXCI6IHRydWUsXHJcbiAgICAgICAgICAgIFwiZHJhd0NhbGxiYWNrXCI6IGZ1bmN0aW9uKCBzZXR0aW5ncyApIHtcclxuICAgICAgICAgICAgICAgIEFQUC5kYXRhdGFibGVBZGRSb3dBY3Rpb24oZGF0YVRhYmxlQ1NTU2VsZWN0b3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSApO1xyXG4gICAgICAgIGRlYnVnKCdsaXN0dmlldyBlbmQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmF1dG9maWxsRGV0YWlscz1mdW5jdGlvbiAoKXtcclxuICAgICAgICBkZWJ1ZygnbnllcmVzcmUgYWxsdW5rJyk7XHJcbiAgICAgICAgbGV0IHJhbmRvbU51bWJlcj1nZXRSYW5kb21JbnQoOTk5OSk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lXScpLnZhbCgnQmVzemFsw610w7MnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1ob29yZXljYUlkXScpLnZhbCgnaGInK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1uYW1lSWRdJykudmFsKCdiZScrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWxdJykudmFsKCdrYXBjc29sYXQnK3JhbmRvbU51bWJlcisnQGJlc3phbGxpdG8uaHUnKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPW9yZGVyRW1haWwyXScpLnZhbCgnaW5mb3JtYWNpbycrcmFuZG9tTnVtYmVyKydAYmVzemFsbGl0by5odScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9YWRkcmVzc10nKS52YWwoJzg5ODkgU3VwcGxpZXIgdXRjYSAnK3JhbmRvbU51bWJlcik7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1tYWlsaW5nQWRkcmVzc10nKS52YWwoJzg5ODkgUG9zdGFpIMO6dCcrcmFuZG9tTnVtYmVyKTtcclxuICAgICAgICAkKCdpbnB1dFtuYW1lPXBob25lXScpLnZhbCgnKzM2MzAxMjM0NTY3Jyk7XHJcbiAgICAgICAgJCgnaW5wdXRbbmFtZT1mYXhdJykudmFsKCczNjMwODg4OTk5OScpO1xyXG4gICAgICAgICQoJ2lucHV0W25hbWU9Y3VzdG9tZXJTZXJ2aWNlUGhvbmVdJykudmFsKCcrMzY3NjEyMzQ0NDQnKTtcclxuICAgICAgICAkKCd0ZXh0YXJlYVtuYW1lPW5vdGVdJykudmFsKCdNZWdqZWd5emVtICcrcmFuZG9tTnVtYmVyKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLnRlc3RNb2RlPWZ1bmN0aW9uICgpIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCchISEhdGVzdG1vZGUgISEhIScpO1xyXG4gICAgICAgIHJvb3QuU3VwcGxpZXIgPSBuZXcgd2luZG93LlN1cHBsaWVyKHtcclxuICAgICAgICAgICAgJ2NvbnRhY3QnOltcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDoyLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIC8qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDozLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOidLw7NzYSBWZXJvbmlrYScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOidzemFtbGF6YXM0QGZ1bmtjaW8uaHUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaG9uZTone3tmb3JtYXR0ZXJQaG9uZU51bWJlcihcIiszNjIwNDU4OTE4MFwiKX19J1xyXG4gICAgICAgICAgICB9XHJcbiovXHJcblxyXG4gICAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT3B0cy5vbkFmdGVySW5pdFZpZXdEZXRhaWxzPXJvb3QuYXV0b2ZpbGxEZXRhaWxzO1xyXG4gICAgICAgIEFQUC5sb2FkTWFpbkNvbnRlbnQoT3B0cy5VUkwuY3JlYXRlLHJvb3QuaW5pdFZpZXdEZXRhaWxzKTtcclxuICAgIH1cclxuICAgIHRoaXMuaW5pdD1mdW5jdGlvbiAob3B0aW9ucyxTdXBwbGllckl0ZW0pe1xyXG4gICAgICAgICQuZXh0ZW5kKE9wdHMsIG9wdGlvbnMpO1xyXG5cclxuICAgICAgICBpZihPcHRzLnRlc3RNb2RlKXtcclxuICAgICAgICAgICAgcmV0dXJuIHJvb3QudGVzdE1vZGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoU3VwcGxpZXJJdGVtKXtcclxuICAgICAgICAgICAgcm9vdC5TdXBwbGllcj1TdXBwbGllckl0ZW1cclxuICAgICAgICB9XHJcbiAgICAgICAgcm9vdC5pbml0Vmlld0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckF0dGFjaG1lbnQ9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgbGV0IHJvd051bT0xO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdyZW5kZXJpbmdBdHRhY2htZW50Jyk7XHJcbiAgICAgICAgJC5lYWNoKHJvb3QuU3VwcGxpZXIuZ2V0RGF0YSgnYXR0YWNobWVudCcpLGZ1bmN0aW9uICgpe1xyXG4gICAgICAgICAgICBsZXQgYXR0YWNobWVudERhdGE9dGhpcztcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEucm93TnVtPXJvd051bTtcclxuICAgICAgICAgICAgZGF0ZT1uZXcgRGF0ZShhdHRhY2htZW50RGF0YS5jcmVhdGVkX2F0KTtcclxuICAgICAgICAgICAgYXR0YWNobWVudERhdGEuZGF0ZT1kYXRlLnRvTG9jYWxlU3RyaW5nKCk7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnREYXRhLmxpbms9YXR0YWNobWVudERhdGEuUHVibGljVXJsKycvJythdHRhY2htZW50RGF0YS5maWxlbmFtZTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQXR0YWNobWVudFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRBdHRhY2htZW50Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFkZEF0dGFjaG1lbnQ9ZnVuY3Rpb24gKGF0dGFjaG1lbnREYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhhdHRhY2htZW50RGF0YSk7XHJcbiAgICAgICAgbGV0IENTU1NlbGVjdG9yRm9ybT1PcHRzLmNvbnRhaW5lckNzc1NlbGVjdG9yKycgLnN1cHBsaWVyRm9ybSc7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5hdHRhY2htZW50LnB1c2goYXR0YWNobWVudERhdGEpO1xyXG4gICAgICAgIGF0dGFjaG1lbnREYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckF0dGFjaG1lbnRUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGF0dGFjaG1lbnREYXRhKTtcclxuICAgICAgICAkKENTU1NlbGVjdG9yRm9ybSsnIC5hdHRhY2htZW50VGFibGUgdGJvZHknKS5hcHBlbmQocmVuZGVyKTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgICAgICBUb2FzdC5lbmFibGVUaW1lcnMoZmFsc2UpO1xyXG4gICAgICAgIFRvYXN0LmNyZWF0ZShcIkbDoWpsIGhvenrDoWFkdmEhXCIsIGF0dGFjaG1lbnREYXRhLm9yaWdpbmFsX2ZpbGVuYW1lK1wiIGbDoWpsIGhvenrDoWFkdmFcIiwgVE9BU1RfU1RBVFVTLlNVQ0NFU1MsNTAwMCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRDb250YWN0VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQ29udGFjdCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZW5kZXJDb250YWN0PWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCByb3dOdW09MTtcclxuICAgICAgICBjb25zb2xlLmxvZygncmVuZGVyaW5nQ29udGFjdHMnKTtcclxuICAgICAgICAkLmVhY2gocm9vdC5TdXBwbGllci5nZXREYXRhKCdjb250YWN0JyksZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgICAgIGxldCBjb250YWN0RGF0YT10aGlzO1xyXG4gICAgICAgICAgICBjb250YWN0RGF0YS5yb3dOdW09cm93TnVtO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgbGV0IHRlbXBsYXRlPSQoJ3RlbXBsYXRlW2RhdGEtbmFtZT1cInN1cHBsaWVyQ29udGFjdFRhYmxlUm93XCJdJykuaHRtbCgpXHJcbiAgICAgICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgJCgnLmNvbnRhY3RUYWJsZSB0Ym9keScpLmFwcGVuZChyZW5kZXIpO1xyXG4gICAgICAgICAgICByb3dOdW0rKztcclxuICAgICAgICB9KTtcclxuICAgICAgICByb290LmJpbmRDb250YWN0Q2xpY2tBY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmJpbmRDb250YWN0Q2xpY2tBY3Rpb24gPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5jb250YWN0VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuY29udGFjdERlbGV0ZUNsaWNrKTtcclxuXHJcbiAgICAgICAgbm9kZT0kKCcuY29udGFjdFRhYmxlIC5idXR0b25FZGl0Jyk7XHJcbiAgICAgICAgbm9kZS51bmJpbmQoJ2NsaWNrJyk7XHJcbiAgICAgICAgbm9kZS5iaW5kKCdjbGljaycscm9vdC5jb250YWN0RWRpdENsaWNrKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5iaW5kQXR0YWNobWVudENsaWNrQWN0aW9uPWZ1bmN0aW9uICgpe1xyXG4gICAgICAgIGxldCBub2RlPSQoJy5hdHRhY2htZW50VGFibGUgLmJ1dHRvbkRlbGV0ZScpO1xyXG4gICAgICAgIG5vZGUudW5iaW5kKCdjbGljaycpO1xyXG4gICAgICAgIG5vZGUuYmluZCgnY2xpY2snLHJvb3QuYXR0YWNobWVudERlbGV0ZUNsaWNrKTtcclxuICAgIH1cclxuICAgIGxldCBjdXJyZW50QXR0YWNobWVudFJvdz1mYWxzZTtcclxuICAgIHRoaXMuYXR0YWNobWVudERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWF0dGFjaG1lbnRJZF0nKS52YWwoKTtcclxuICAgICAgICBsZXQgYWpheFVybD1PcHRzLlVSTC5kZXRhY2hGaWxlLnJlcGxhY2UoJyVpZCUnLHJvb3QuU3VwcGxpZXIuaWQpO1xyXG4gICAgICAgIC8vbGV0IGRhdGE9IG5ldyBGb3JtRGF0YSgkKE9wdHMuY29udGFpbmVyQ3NzU2VsZWN0b3IpLmZpbmQoJ2Zvcm0uc3VwcGxpZXJGb3JtJylbMF0pO1xyXG4gICAgICAgIC8vZGF0YS5hcHBlbmQoZmlsZUlucHV0LmF0dHIoJ25hbWUnKSxmaWxlSW5wdXRbMF0uZmlsZXNbMF0pO1xyXG4gICAgICAgIGxldCBkYXRhPXt9O1xyXG4gICAgICAgIGRhdGEuX3Rva2VuPSQoJ2lucHV0W25hbWU9XCJfdG9rZW5cIl0nKS52YWwoKTtcclxuICAgICAgICBkYXRhLmF0dGFjaGVtbnRJZD1pZDtcclxuICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICB1cmw6YWpheFVybCxcclxuICAgICAgICAgICAgZGF0YTpkYXRhLFxyXG4gICAgICAgICAgICB0eXBlOidQT1NUJyxcclxuICAgICAgICAgICAgLy9jb250ZW50VHlwZTpmYWxzZSxcclxuICAgICAgICAgICAgLy9wcm9jZXNzRGF0YTogZmFsc2UsXHJcbiAgICAgICAgICAgIGJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCkge1xyXG5cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLnN1Y2Nlc3M9PXRydWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QuU3VwcGxpZXIuYXR0YWNobWVudD1yb290LlN1cHBsaWVyLmF0dGFjaG1lbnQuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAodmFsdWUsaW5kZXgsYXJyKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pZCE9PWRhdGEuZGF0YS4gICBhdHRhY2htZW50LmlkKjEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLypcclxuICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vcm93LnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3QucmVzZXRBdHRhY2htZW50VGFibGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEucmVzcG9uc2VKU09OKTtcclxuICAgICAgICAgICAgICAgIHJvb3Quc2VsZWN0ZWRVcGxvYWRGaWxlVG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICBhamF4RXJyb3JGaWVsZEhhbmRsZXIoZGF0YS5yZXNwb25zZUpTT04uZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG5cclxuICAgIHRoaXMucmVzZXRBdHRhY2htZW50VGFibGU9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgJCgnLmF0dGFjaG1lbnRUYWJsZSB0Ym9keSB0cicpLnJlbW92ZSgpO1xyXG4gICAgICAgIHJvb3QucmVuZGVyQXR0YWNobWVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29udGFjdERlbGV0ZUNsaWNrPWZ1bmN0aW9uIChldmVudCl7XHJcbiAgICAgICAgbGV0IHJvdz0kKHRoaXMpLmNsb3Nlc3QoJ3RyJyk7XHJcbiAgICAgICAgbGV0IGlkPXJvdy5maW5kKCdpbnB1dFtuYW1lPWNvbnRhY3RJZF0nKS52YWwoKTtcclxuICAgICAgICByb290LlN1cHBsaWVyLmNvbnRhY3Q9cm9vdC5TdXBwbGllci5jb250YWN0LmZpbHRlcihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHZhbHVlLGluZGV4LGFycil7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUuaWQhPT1pZCoxKXtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJvdy5yZW1vdmUoKTtcclxuICAgICAgICByb290LnJlc2V0Q29udGFjdFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgICByb290LmdldENvbnRhY3RQb3B1cFdvcmtmbG93ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWN0UG9wdXBXb3JrZmxvdztcclxuICAgIH1cclxuICAgIHJvb3Quc2V0Q29udGFjdFBvcHVwV29ya2Zsb3cgPSBmdW5jdGlvbiAoc3RhdHVzKSB7XHJcbiAgICAgICAgY29udGFjdFBvcHVwV29ya2Zsb3c9c3RhdHVzO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnRhY3RFZGl0Q2xpY2s9ZnVuY3Rpb24gKGV2ZW50KXtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMpO1xyXG4gICAgICAgIGxldCByb3c9JCh0aGlzKS5jbG9zZXN0KCd0cicpO1xyXG4gICAgICAgIGxldCBpZD1yb3cuZmluZCgnaW5wdXRbbmFtZT1jb250YWN0SWRdJykudmFsKCk7XHJcbiAgICAgICAgcm9vdC5zZXRDb250YWN0UG9wdXBXb3JrZmxvdygnZWRpdCcpO1xyXG4gICAgICAgIEFQUC5Db250YWN0UG9wVXAubG9hZERhdGEoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2V0U3VwcGxpZXI9ZnVuY3Rpb24gKCl7XHJcbiAgICAgICAgcmV0dXJuIHJvb3QuU3VwcGxpZXI7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbnRhY3RBY3Rpb249ZnVuY3Rpb24gKGNvbnRhY3REYXRhKXtcclxuICAgICAgICBjb25zb2xlLmxvZygnbmFoIG1vc3Qga2VsbGVuZSBtZWcgdmFsYW1pdCBjc2luYWxuaS4nKVxyXG4gICAgICAgIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J25ldycpe1xyXG4gICAgICAgICAgICByb290LmFkZENvbnRhY3QoY29udGFjdERhdGEpO1xyXG4gICAgICAgIH1lbHNlIGlmKHJvb3QuZ2V0Q29udGFjdFBvcHVwV29ya2Zsb3coKT09J2VkaXQnKXtcclxuICAgICAgICAgICAgcm9vdC5lZGl0Q29udGFjdChjb250YWN0RGF0YS5pZCxjb250YWN0RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZWRpdENvbnRhY3Q9ZnVuY3Rpb24gKGlkLGNvbnRhY3REYXRhKXtcclxuXHJcbiAgICAgICAgbGV0IG5ld0NvbnRhY3RzPVtdO1xyXG4gICAgICAgICQuZWFjaChyb290LlN1cHBsaWVyLmdldERhdGEoJ2NvbnRhY3QnKSxmdW5jdGlvbiAoaW5kZXgpe1xyXG4gICAgICAgICAgICBpZih0aGlzLmlkPT1pZCl7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKGNvbnRhY3REYXRhKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBuZXdDb250YWN0cy5wdXNoKHRoaXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0PW5ld0NvbnRhY3RzO1xyXG4gICAgICAgIHJvb3QucmVzZXRDb250YWN0VGFibGUoKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXQgYWRhdGFpIG3Ds2Rvc8OtdHZhIVwiLCBtZXNzYWdlOiBjb250YWN0RGF0YS5uYW1lK1wiIG5ldsWxIGthcGNzb2xhdHRhcnTDsyBtw7Nkb3PDrXR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZGRDb250YWN0PWZ1bmN0aW9uIChjb250YWN0RGF0YSl7XHJcbiAgICAgICAgLypcclxuICAgICAgICBmZWwga2VsbCB2ZW5uaSBhIHNvcmJhXHJcbiAgICAgICAgICovXHJcbiAgICAgICAgcm9vdC5TdXBwbGllci5jb250YWN0LnB1c2goY29udGFjdERhdGEpO1xyXG4gICAgICAgIGNvbnRhY3REYXRhLnJvd051bT1yb290LlN1cHBsaWVyLmNvbnRhY3QubGVuZ3RoO1xyXG4gICAgICAgIGxldCB0ZW1wbGF0ZT0kKCd0ZW1wbGF0ZVtkYXRhLW5hbWU9XCJzdXBwbGllckNvbnRhY3RUYWJsZVJvd1wiXScpLmh0bWwoKVxyXG4gICAgICAgIGxldCByZW5kZXI9TXVzdGFjaGUucmVuZGVyKHRlbXBsYXRlLGNvbnRhY3REYXRhKTtcclxuICAgICAgICAkKCcuY29udGFjdFRhYmxlIHRib2R5JykuYXBwZW5kKHJlbmRlcik7XHJcbiAgICAgICAgcm9vdC5iaW5kQ29udGFjdENsaWNrQWN0aW9uKCk7XHJcbiAgICAgICAgVG9hc3QuZW5hYmxlVGltZXJzKGZhbHNlKTtcclxuICAgICAgICBUb2FzdC5jcmVhdGUoeyB0aXRsZTogXCJLYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YSFcIiwgbWVzc2FnZTogY29udGFjdERhdGEubmFtZStcIiBuZXbFsSBrYXBjc29sYXR0YXJ0w7MgaG96esOhYWR2YVwiLCBzdGF0dXM6IFRPQVNUX1NUQVRVUy5TVUNDRVNTLCB0aW1lb3V0OiA1MDAwIH0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICB0aGlzLmNvbnN0cnVjdChvcHRpb25zLFN1cHBsaWVySXRlbSk7XHJcbn07XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUcsT0FBT0EsUUFBUSxLQUFHLFdBQVcsRUFBQztFQUFBLElBQ3ZCQSxTQUFRLDBCQUFBQyxVQUFBO0lBRVY7QUFDUjtBQUNBO0lBQ1EsU0FBQUMsVUFBYUMsSUFBSSxFQUFDQyxPQUFPLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQUFDLGVBQUEsT0FBQUosU0FBQTtNQUN2QkcsS0FBQSxHQUFBRSxVQUFB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\n//# sourceURL=webpack-internal:///./resources/js/admin/supplier.js\n\n}");
/***/ }
diff --git a/public/js/app.js b/public/js/app.js
index 657dfd9..fc71c4d 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 console.log(txt);\n } catch (e) {}\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 var activeValue = $('.customRadioBtnGroup .active').data('title');\n var target = $('.customRadioBtnGroup .active').data('toggle');\n $('input[name=' + target + ']').prop('value', activeValue);\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 += '