/******/ (function(modules) { // webpackBootstrap /******/ // install a JSONP callback for chunk loading /******/ function webpackJsonpCallback(data) { /******/ var chunkIds = data[0]; /******/ var moreModules = data[1]; /******/ var executeModules = data[2]; /******/ /******/ // add "moreModules" to the modules object, /******/ // then flag all "chunkIds" as loaded and fire callback /******/ var moduleId, chunkId, i = 0, resolves = []; /******/ for(;i < chunkIds.length; i++) { /******/ chunkId = chunkIds[i]; /******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { /******/ resolves.push(installedChunks[chunkId][0]); /******/ } /******/ installedChunks[chunkId] = 0; /******/ } /******/ for(moduleId in moreModules) { /******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { /******/ modules[moduleId] = moreModules[moduleId]; /******/ } /******/ } /******/ if(parentJsonpFunction) parentJsonpFunction(data); /******/ /******/ while(resolves.length) { /******/ resolves.shift()(); /******/ } /******/ /******/ // add entry modules from loaded chunk to deferred list /******/ deferredModules.push.apply(deferredModules, executeModules || []); /******/ /******/ // run deferred modules when all chunks ready /******/ return checkDeferredModules(); /******/ }; /******/ function checkDeferredModules() { /******/ var result; /******/ for(var i = 0; i < deferredModules.length; i++) { /******/ var deferredModule = deferredModules[i]; /******/ var fulfilled = true; /******/ for(var j = 1; j < deferredModule.length; j++) { /******/ var depId = deferredModule[j]; /******/ if(installedChunks[depId] !== 0) fulfilled = false; /******/ } /******/ if(fulfilled) { /******/ deferredModules.splice(i--, 1); /******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); /******/ } /******/ } /******/ /******/ return result; /******/ } /******/ /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // object to store loaded and loading chunks /******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched /******/ // Promise = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ "app": 0 /******/ }; /******/ /******/ var deferredModules = []; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function(value, mode) { /******/ if(mode & 1) value = __webpack_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/build/"; /******/ /******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; /******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); /******/ jsonpArray.push = webpackJsonpCallback; /******/ jsonpArray = jsonpArray.slice(); /******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); /******/ var parentJsonpFunction = oldJsonpFunction; /******/ /******/ /******/ // add entry module to deferred list /******/ deferredModules.push(["./app/js/index.js","vendors~app"]); /******/ // run deferred modules when ready /******/ return checkDeferredModules(); /******/ }) /************************************************************************/ /******/ ({ /***/ "./app/js/App.vue": /*!************************!*\ !*** ./app/js/App.vue ***! \************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./App.vue?vue&type=template&id=f3d8e912& */ "./app/js/App.vue?vue&type=template&id=f3d8e912&"); /* harmony import */ var _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App.vue?vue&type=script&lang=js& */ "./app/js/App.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__["render"], _App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/App.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/App.vue?vue&type=script&lang=js&": /*!*************************************************!*\ !*** ./app/js/App.vue?vue&type=script&lang=js& ***! \*************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib??ref--0-0!../../node_modules/vue-loader/lib??vue-loader-options!./App.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/App.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/App.vue?vue&type=template&id=f3d8e912&": /*!*******************************************************!*\ !*** ./app/js/App.vue?vue&type=template&id=f3d8e912& ***! \*******************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib??vue-loader-options!./App.vue?vue&type=template&id=f3d8e912& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/App.vue?vue&type=template&id=f3d8e912&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_App_vue_vue_type_template_id_f3d8e912___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/components/Calculator.vue": /*!******************************************!*\ !*** ./app/js/components/Calculator.vue ***! \******************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Calculator.vue?vue&type=template&id=e899a69e& */ "./app/js/components/Calculator.vue?vue&type=template&id=e899a69e&"); /* harmony import */ var _Calculator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Calculator.vue?vue&type=script&lang=js& */ "./app/js/components/Calculator.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _Calculator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__["render"], _Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/components/Calculator.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/components/Calculator.vue?vue&type=script&lang=js&": /*!*******************************************************************!*\ !*** ./app/js/components/Calculator.vue?vue&type=script&lang=js& ***! \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Calculator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./Calculator.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/Calculator.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Calculator_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/components/Calculator.vue?vue&type=template&id=e899a69e&": /*!*************************************************************************!*\ !*** ./app/js/components/Calculator.vue?vue&type=template&id=e899a69e& ***! \*************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./Calculator.vue?vue&type=template&id=e899a69e& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/Calculator.vue?vue&type=template&id=e899a69e&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_Calculator_vue_vue_type_template_id_e899a69e___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/components/InventoryItem.css": /*!*********************************************!*\ !*** ./app/js/components/InventoryItem.css ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "./app/js/components/InventoryItem.vue": /*!*********************************************!*\ !*** ./app/js/components/InventoryItem.vue ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InventoryItem.vue?vue&type=template&id=1b5be230& */ "./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230&"); /* harmony import */ var _InventoryItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InventoryItem.vue?vue&type=script&lang=js& */ "./app/js/components/InventoryItem.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _InventoryItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__["render"], _InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/components/InventoryItem.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/components/InventoryItem.vue?vue&type=script&lang=js&": /*!**********************************************************************!*\ !*** ./app/js/components/InventoryItem.vue?vue&type=script&lang=js& ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./InventoryItem.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryItem.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryItem_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230&": /*!****************************************************************************!*\ !*** ./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230& ***! \****************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./InventoryItem.vue?vue&type=template&id=1b5be230& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryItem_vue_vue_type_template_id_1b5be230___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/components/InventoryTable.css": /*!**********************************************!*\ !*** ./app/js/components/InventoryTable.css ***! \**********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "./app/js/components/InventoryTable.vue": /*!**********************************************!*\ !*** ./app/js/components/InventoryTable.vue ***! \**********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./InventoryTable.vue?vue&type=template&id=5bd9a201& */ "./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201&"); /* harmony import */ var _InventoryTable_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InventoryTable.vue?vue&type=script&lang=js& */ "./app/js/components/InventoryTable.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _InventoryTable_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__["render"], _InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/components/InventoryTable.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/components/InventoryTable.vue?vue&type=script&lang=js&": /*!***********************************************************************!*\ !*** ./app/js/components/InventoryTable.vue?vue&type=script&lang=js& ***! \***********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryTable_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./InventoryTable.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryTable.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryTable_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201&": /*!*****************************************************************************!*\ !*** ./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201& ***! \*****************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./InventoryTable.vue?vue&type=template&id=5bd9a201& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_InventoryTable_vue_vue_type_template_id_5bd9a201___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/components/NavigationBar.vue": /*!*********************************************!*\ !*** ./app/js/components/NavigationBar.vue ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NavigationBar.vue?vue&type=template&id=4d965e00& */ "./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00&"); /* harmony import */ var _NavigationBar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NavigationBar.vue?vue&type=script&lang=js& */ "./app/js/components/NavigationBar.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _NavigationBar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__["render"], _NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/components/NavigationBar.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/components/NavigationBar.vue?vue&type=script&lang=js&": /*!**********************************************************************!*\ !*** ./app/js/components/NavigationBar.vue?vue&type=script&lang=js& ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NavigationBar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./NavigationBar.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/NavigationBar.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NavigationBar_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00&": /*!****************************************************************************!*\ !*** ./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00& ***! \****************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./NavigationBar.vue?vue&type=template&id=4d965e00& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_NavigationBar_vue_vue_type_template_id_4d965e00___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/components/TweenedNumber.css": /*!*********************************************!*\ !*** ./app/js/components/TweenedNumber.css ***! \*********************************************/ /*! no static exports found */ /***/ (function(module, exports, __webpack_require__) { // extracted by mini-css-extract-plugin /***/ }), /***/ "./app/js/components/TweenedNumber.vue": /*!*********************************************!*\ !*** ./app/js/components/TweenedNumber.vue ***! \*********************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TweenedNumber.vue?vue&type=template&id=2f547c58& */ "./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58&"); /* harmony import */ var _TweenedNumber_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TweenedNumber.vue?vue&type=script&lang=js& */ "./app/js/components/TweenedNumber.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); /* normalize component */ var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( _TweenedNumber_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], _TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__["render"], _TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], false, null, null, null ) /* hot reload */ if (false) { var api; } component.options.__file = "app/js/components/TweenedNumber.vue" /* harmony default export */ __webpack_exports__["default"] = (component.exports); /***/ }), /***/ "./app/js/components/TweenedNumber.vue?vue&type=script&lang=js&": /*!**********************************************************************!*\ !*** ./app/js/components/TweenedNumber.vue?vue&type=script&lang=js& ***! \**********************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_TweenedNumber_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib??ref--0-0!../../../node_modules/vue-loader/lib??vue-loader-options!./TweenedNumber.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/TweenedNumber.vue?vue&type=script&lang=js&"); /* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_TweenedNumber_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); /***/ }), /***/ "./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58&": /*!****************************************************************************!*\ !*** ./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58& ***! \****************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib??vue-loader-options!./TweenedNumber.vue?vue&type=template&id=2f547c58& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58&"); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__["render"]; }); /* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_TweenedNumber_vue_vue_type_template_id_2f547c58___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); /***/ }), /***/ "./app/js/index.js": /*!*************************!*\ !*** ./app/js/index.js ***! \*************************/ /*! no exports provided */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js"); /* harmony import */ var _App__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./App */ "./app/js/App.vue"); /* harmony import */ var materialize_css_dist_css_materialize_min_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! materialize-css/dist/css/materialize.min.css */ "./node_modules/materialize-css/dist/css/materialize.min.css"); /* harmony import */ var materialize_css_dist_css_materialize_min_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(materialize_css_dist_css_materialize_min_css__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js"); /* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var materialize_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! materialize-css */ "./node_modules/materialize-css/dist/js/materialize.js"); /* harmony import */ var materialize_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(materialize_css__WEBPACK_IMPORTED_MODULE_4__); vue__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.$http = axios__WEBPACK_IMPORTED_MODULE_3___default.a; vue__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.$M = materialize_css__WEBPACK_IMPORTED_MODULE_4___default.a; new vue__WEBPACK_IMPORTED_MODULE_0__["default"]({ delimiters: ["${", "}"], components: { App: _App__WEBPACK_IMPORTED_MODULE_1__["default"] }, template: "" }).$mount("#app"); /***/ }), /***/ "./app/js/model/article.js": /*!*********************************!*\ !*** ./app/js/model/article.js ***! \*********************************/ /*! exports provided: Article, thawArticle */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Article", function() { return Article; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thawArticle", function() { return thawArticle; }); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ "./node_modules/core-js/modules/es.function.name.js"); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__); var Article = /*#__PURE__*/ function () { function Article() { _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, Article); this.name = ""; this.short = ""; this.dimension = ""; this.content = { size: 0, price: 0 }; this.portion = { size: 0, price: 0, type: "" }; } _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(Article, [{ key: "Name", get: function get() { return this.name; }, set: function set(value) { this.name = value; } }, { key: "Short", get: function get() { return this.short; }, set: function set(value) { this.short = value; } }, { key: "ContentSize", get: function get() { return this.content.size; }, set: function set(value) { this.content.size = value; } }, { key: "Dimension", get: function get() { return this.dimension; }, set: function set(value) { this.dimension = value; } }, { key: "PortionSize", get: function get() { return this.portion.size; }, set: function set(value) { this.portion.size = value; } }, { key: "PortionType", get: function get() { return this.portion.type; }, set: function set(value) { this.portion.type = value; } }, { key: "PortionPrice", get: function get() { return this.portion.price; }, set: function set(value) { this.portion.price = value; } }, { key: "ContentPrice", get: function get() { return this.Portions * this.portion.price; } }, { key: "Portions", get: function get() { return this.content.size / (this.portion.size || 1); } }]); return Article; }(); Article.thaw = function (json) { var article = new Article(); article.id = json.id; article.Name = json.name; article.Short = json.short; article.Dimension = json.dimension; article.ContentSize = json.content.size; article.PortionPrice = json.portion.price; article.PortionSize = json.portion.size; article.PortionType = json.portion.type; return article; }; var thawArticle = Article.thaw; /***/ }), /***/ "./app/js/model/inventory_article.js": /*!*******************************************!*\ !*** ./app/js/model/inventory_article.js ***! \*******************************************/ /*! exports provided: InventoryArticle, thawInventoryArticle */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InventoryArticle", function() { return InventoryArticle; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "thawInventoryArticle", function() { return thawInventoryArticle; }); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.function.name */ "./node_modules/core-js/modules/es.function.name.js"); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "./node_modules/@babel/runtime/helpers/classCallCheck.js"); /* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ "./node_modules/@babel/runtime/helpers/createClass.js"); /* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2__); var InventoryArticle = /*#__PURE__*/ function () { function InventoryArticle(article) { _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_1___default()(this, InventoryArticle); this.article = article; this.end = 0; this.start = 0; this.fetched = 0; this.lost = 0; } _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_2___default()(InventoryArticle, [{ key: "reset", value: function reset() { this.start = 0; this.fetched = 0; this.end = 0; this.lost = 0; } }, { key: "StartPortions", get: function get() { var countFull = Math.floor(this.start); var fullPortions = countFull * this.article.Portions; var rest = this.start - countFull; var restPortions = rest / this.article.PortionSize; return fullPortions + restPortions; } }, { key: "FetchedPortions", get: function get() { var countFull = Math.floor(this.fetched); var fullPortions = countFull * this.article.Portions; var rest = this.fetched - countFull; var restPortions = rest / this.article.PortionSize; return fullPortions + restPortions; } }, { key: "EndPortions", get: function get() { var countFull = Math.floor(this.end); var fullPortions = countFull * this.article.Portions; var rest = this.end - countFull; var restPortions = rest / this.article.PortionSize; return fullPortions + restPortions; } }, { key: "LostPortions", get: function get() { var countFull = Math.floor(this.lost); var fullPortions = countFull * this.article.Portions; var rest = this.lost - countFull; var restPortions = rest / this.article.PortionSize; return fullPortions + restPortions; } }, { key: "Sold", get: function get() { var adds = this.StartPortions + this.FetchedPortions; var subs = this.EndPortions + this.LostPortions; return adds - subs; } }, { key: "Sale", get: function get() { return this.Sold * this.article.PortionPrice; } }, { key: "StepSize", get: function get() { var singlePack = this.article.Portions == 1; return singlePack ? 1 : 0.05; } }, { key: "PortionPrecision", get: function get() { var singlePack = this.article.Portions == 1; return singlePack ? 0 : 2; } }]); return InventoryArticle; }(); InventoryArticle.thaw = function (json) { this.name = json.name; this.start = json.start; this.fetched = json.fetched; this.end = json.end; this.lost = json.lost; }; var thawInventoryArticle = InventoryArticle.thaw; /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/App.vue?vue&type=script&lang=js&": /*!*********************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/App.vue?vue&type=script&lang=js& ***! \*********************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.for-each */ "./node_modules/core-js/modules/es.array.for-each.js"); /* harmony import */ var core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_for_each__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each */ "./node_modules/core-js/modules/web.dom-collections.for-each.js"); /* harmony import */ var core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_Calculator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/Calculator */ "./app/js/components/Calculator.vue"); /* harmony import */ var _components_InventoryTable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/InventoryTable */ "./app/js/components/InventoryTable.vue"); /* harmony import */ var _components_NavigationBar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/NavigationBar */ "./app/js/components/NavigationBar.vue"); /* harmony import */ var _model_article__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./model/article */ "./app/js/model/article.js"); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ name: "App", components: { InventoryTable: _components_InventoryTable__WEBPACK_IMPORTED_MODULE_3__["default"], NavigationBar: _components_NavigationBar__WEBPACK_IMPORTED_MODULE_4__["default"], Calculator: _components_Calculator__WEBPACK_IMPORTED_MODULE_2__["default"] }, data: function data() { return { articles: [], bon: [], ready: false, caretPosition: 0, fab: null, view: "inventory" }; }, computed: { primaryColor: function primaryColor() { switch (this.view) { case "inventory": return "teal"; case "calc": return "orange"; case "article": return "blue"; default: return "red"; } } }, created: function created() { this.loadArticles(); }, mounted: function mounted() { var fab = this.$refs.fab; this.fab = this.$M.FloatingActionButton.init(fab, {}); }, methods: { changeView: function changeView(tabId) { this.view = tabId; }, addArticle: function addArticle() { this.articles.push(new _model_article__WEBPACK_IMPORTED_MODULE_5__["Article"]()); }, storeArticles: function storeArticles() { var _this = this; this.$http.post("/api/artikel", JSON.stringify(this.articles)).then(function (response) { _this.$M.toast({ html: response.body }); }); }, loadArticles: function loadArticles() { var _this2 = this; var app = this; this.$http.get("api/artikel/theater").then(function (response) { return response.data; }).then(function (json) { console.log(json); json.forEach(function (element) { app.articles.push(Object(_model_article__WEBPACK_IMPORTED_MODULE_5__["thawArticle"])(element)); }); }).then(function () { _this2.$M.toast({ html: "Artikel wurden geladen." }); }).then(function () { _this2.$M.updateTextFields(); app.ready = true; }); }, exportInventur: function exportInventur() {} } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/Calculator.vue?vue&type=script&lang=js&": /*!***************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/Calculator.vue?vue&type=script&lang=js& ***! \***************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.map */ "./node_modules/core-js/modules/es.array.map.js"); /* harmony import */ var core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.reduce */ "./node_modules/core-js/modules/es.array.reduce.js"); /* harmony import */ var core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.function.name */ "./node_modules/core-js/modules/es.function.name.js"); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _TweenedNumber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./TweenedNumber */ "./app/js/components/TweenedNumber.vue"); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ name: "Calculator", components: { TweenedNumber: _TweenedNumber__WEBPACK_IMPORTED_MODULE_3__["default"] }, props: { articles: { type: Array, default: function _default() { return []; } } }, data: function data() { return { items: [] }; }, computed: { totalSum: function totalSum() { return this.items.reduce(function (total, item) { return total + item.sum; }, 0); }, totalCount: function totalCount() { return this.items.reduce(function (total, item) { return total + item.count; }, 0); } }, mounted: function mounted() { this.resetBon(); }, methods: { resetBon: function resetBon() { this.items = this.articles.map(function (a) { return { count: 0, name: a.name, short: a.short, price: a.portion.price, sum: 0 }; }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryItem.vue?vue&type=script&lang=js&": /*!******************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/InventoryItem.vue?vue&type=script&lang=js& ***! \******************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.number.constructor */ "./node_modules/core-js/modules/es.number.constructor.js"); /* harmony import */ var core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_number_to_fixed__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.number.to-fixed */ "./node_modules/core-js/modules/es.number.to-fixed.js"); /* harmony import */ var core_js_modules_es_number_to_fixed__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_to_fixed__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ "./node_modules/core-js/modules/es.regexp.exec.js"); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.match */ "./node_modules/core-js/modules/es.string.match.js"); /* harmony import */ var core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.string.replace */ "./node_modules/core-js/modules/es.string.replace.js"); /* harmony import */ var core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _TweenedNumber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TweenedNumber */ "./app/js/components/TweenedNumber.vue"); /* harmony import */ var _InventoryItem_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./InventoryItem.css */ "./app/js/components/InventoryItem.css"); /* harmony import */ var _InventoryItem_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_InventoryItem_css__WEBPACK_IMPORTED_MODULE_6__); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ name: "InventoryItem", components: { TweenedNumber: _TweenedNumber__WEBPACK_IMPORTED_MODULE_5__["default"] }, props: { item: { type: Object, default: function _default() { return {}; } }, total: { type: Number, default: 0 } }, data: function data() { return { tweenedSold: 0, tweenedSale: 0, classObject: { active: null } }; }, computed: { SoldAnimated: function SoldAnimated() { return this.tweenedSold.toFixed(this.item.PortionPrecision); }, SaleAnimated: function SaleAnimated() { return this.tweenedSale.toFixed(2); } }, watch: {}, methods: { setCaretPosition: function setCaretPosition(el) { if (el != null) { var range = document.createRange(); var sel = window.getSelection(); range.setStart(el.firstChild, el.innerText.length); range.collapse(true); sel.removeAllRanges(); sel.addRange(range); el.focus(); } }, restrictInput: function restrictInput(prop, event) { var x = event.key; console.log(prop + " inserting " + x); if (x === "Enter") { event.target.blur(); } if (isNaN(x) && x != ',') { event.preventDefault(); } }, onFocus: function onFocus(property, event) { this.classObject.active = property; var range = document.createRange(); var sel = window.getSelection(); range.selectNodeContents(event.target); sel.removeAllRanges(); sel.addRange(range); }, onBlur: function onBlur(property, event) { this.classObject.active = null; var value = event.target.innerText; value = value.replace(',', '.'); console.log(property + " left value: " + value); if (!isNaN(value)) { this.item[property] = Number(value); } }, onInput: function onInput(property, event) { if (event.inputType == "insertText") { var regex = /\d+\.?\d{0,2}/; if (event.data.match(regex)) { var value = event.target.innerText; this.item[property] = Number(value); } } this.setCaretPosition(event.target); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryTable.vue?vue&type=script&lang=js&": /*!*******************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/InventoryTable.vue?vue&type=script&lang=js& ***! \*******************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.map */ "./node_modules/core-js/modules/es.array.map.js"); /* harmony import */ var core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_map__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.array.reduce */ "./node_modules/core-js/modules/es.array.reduce.js"); /* harmony import */ var core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_reduce__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.date.to-string */ "./node_modules/core-js/modules/es.date.to-string.js"); /* harmony import */ var core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_date_to_string__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.function.name */ "./node_modules/core-js/modules/es.function.name.js"); /* harmony import */ var core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_function_name__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.object.to-string */ "./node_modules/core-js/modules/es.object.to-string.js"); /* harmony import */ var core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string */ "./node_modules/core-js/modules/es.regexp.to-string.js"); /* harmony import */ var core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _InventoryItem__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./InventoryItem */ "./app/js/components/InventoryItem.vue"); /* harmony import */ var _TweenedNumber__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./TweenedNumber */ "./app/js/components/TweenedNumber.vue"); /* harmony import */ var _model_inventory_article__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../model/inventory_article */ "./app/js/model/inventory_article.js"); /* harmony import */ var _InventoryTable_css__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./InventoryTable.css */ "./app/js/components/InventoryTable.css"); /* harmony import */ var _InventoryTable_css__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_InventoryTable_css__WEBPACK_IMPORTED_MODULE_9__); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ name: "InventoryTable", components: { InventoryItem: _InventoryItem__WEBPACK_IMPORTED_MODULE_6__["default"], TweenedNumber: _TweenedNumber__WEBPACK_IMPORTED_MODULE_7__["default"] }, props: { articles: { type: Array, default: function _default() { return []; } } }, data: function data() { return { inventory: [] }; }, computed: { meta: function meta() { return { datum: new Date().toString() }; }, sales: function sales() { var total_sales = this.inventory.reduce(function (total, item) { return total + item.Sale; }, 0); return total_sales; }, sold: function sold() { var total_sold = this.inventory.reduce(function (total, item) { return total + item.Sold; }, 0); return total_sold; } }, mounted: function mounted() { this.$on('reset-inventur', this.resetInventory); this.$on('export-inventur', this.exportInventory); this.resetInventory(); }, methods: { resetInventory: function resetInventory() { this.inventory = this.articles.map(function (item) { return new _model_inventory_article__WEBPACK_IMPORTED_MODULE_8__["InventoryArticle"](item); }); }, getInventurBlob: function getInventurBlob() { var inventur = this.inventory.map(function (T) { return { name: T.article.name, preis: T.article.portion.price, beginn: T.start, zugang: T.fetched, ende: T.end, verlust: T.lost, verkauft: T.Sold, umsatz: T.Sale }; }); var data = JSON.stringify({ meta: this.meta, data: inventur }); var blob = new Blob([data], { type: 'text/json' }); return blob; }, exportInventory: function exportInventory() { var _this = this; var formData = new FormData(); formData.append('file', this.getInventurBlob(), 'inventur.json'); this.$http.post("/api/inventur", formData, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(function (response) { _this.$M.toast({ html: response.body }); }); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/NavigationBar.vue?vue&type=script&lang=js&": /*!******************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/NavigationBar.vue?vue&type=script&lang=js& ***! \******************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var materialize_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! materialize-css */ "./node_modules/materialize-css/dist/js/materialize.js"); /* harmony import */ var materialize_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(materialize_css__WEBPACK_IMPORTED_MODULE_0__); // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ props: { primaryColor: { type: String, default: "red" } }, data: function data() { return { tabs: [] }; }, mounted: function mounted() { var tabs = document.getElementsByClassName("tabs")[0]; materialize_css__WEBPACK_IMPORTED_MODULE_0___default.a.Tabs.init(tabs, {}); this.tabs = materialize_css__WEBPACK_IMPORTED_MODULE_0___default.a.Tabs.getInstance(tabs); }, methods: { changeTab: function changeTab(tabId, event) { this.view = tabId; this.tabs._handleTabClick(event); this.tabs.updateTabIndicator(); this.$emit("changed-tab", this.view); } } }); /***/ }), /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/TweenedNumber.vue?vue&type=script&lang=js&": /*!******************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/TweenedNumber.vue?vue&type=script&lang=js& ***! \******************************************************************************************************************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.number.constructor */ "./node_modules/core-js/modules/es.number.constructor.js"); /* harmony import */ var core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.regexp.exec */ "./node_modules/core-js/modules/es.regexp.exec.js"); /* harmony import */ var core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.string.split */ "./node_modules/core-js/modules/es.string.split.js"); /* harmony import */ var core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! gsap */ "./node_modules/gsap/index.js"); /* harmony import */ var _TweenedNumber_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./TweenedNumber.css */ "./app/js/components/TweenedNumber.css"); /* harmony import */ var _TweenedNumber_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_TweenedNumber_css__WEBPACK_IMPORTED_MODULE_4__); // // // // // // // // // // // /* harmony default export */ __webpack_exports__["default"] = ({ name: "TweenedNumber", props: { wert: { type: Number, default: 0 }, einheit: { type: String, default: "" }, precision: { type: Number, default: 0 } }, data: function data() { return { tweenedValue: 0 }; }, computed: { valueAnimated: function valueAnimated() { return this.tweenedValue.toLocaleString("de-DE", { maximumFractionDigits: 2, minimumFractionDigits: this.precision }); }, intAnimated: function intAnimated() { return this.valueAnimated.split(',')[0]; }, deciAnimated: function deciAnimated() { return this.valueAnimated.split(',')[1]; } }, watch: { wert: { handler: function handler(newValue) { gsap__WEBPACK_IMPORTED_MODULE_3__["default"].to(this.$data, 0.5, { tweenedValue: newValue }); }, deep: true } } }); /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/App.vue?vue&type=template&id=f3d8e912&": /*!*************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/App.vue?vue&type=template&id=f3d8e912& ***! \*************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c( "div", [ _c("NavigationBar", { attrs: { "primary-color": _vm.primaryColor }, on: { "changed-tab": _vm.changeView } }), _vm._v(" "), _c( "div", { staticClass: "container" }, [ !_vm.ready ? _c( "div", { staticClass: "valign-wrapper", staticStyle: { height: "90vh" } }, [_vm._m(0)] ) : _vm._e(), _vm._v(" "), _c("transition", { attrs: { name: "fade" } }, [ _vm.ready && _vm.view == "inventory" ? _c( "div", { staticClass: "col s12", attrs: { id: "inventory" } }, [ _c("InventoryTable", { ref: "inventory", attrs: { articles: _vm.articles } }) ], 1 ) : _vm._e(), _vm._v(" "), _vm.ready && _vm.view == "calc" ? _c( "div", { staticClass: "col s12", attrs: { id: "calc" } }, [_c("Calculator", { attrs: { articles: _vm.articles } })], 1 ) : _vm._e(), _vm._v(" "), _vm.ready && _vm.view == "article" ? _c( "div", { staticClass: "col s12", attrs: { id: "article" } }, _vm._l(_vm.articles, function(a, index) { return _c( "div", { key: "article_" + index, staticClass: "card" }, [ _c("div", { staticClass: "card-content row" }, [ _c("span", { staticClass: "card-title" }, [ _vm._v(_vm._s(a.name)) ]), _vm._v(" "), _c( "div", { staticClass: "input-field inline col s8" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model", value: a.name, expression: "a.name" } ], staticClass: "validate", attrs: { id: "a_name_" + index, placeholder: "Artikelname" }, domProps: { value: a.name }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set(a, "name", $event.target.value) } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_name_" + index } }, [_vm._v("Name")] ) ] ), _vm._v(" "), _c( "div", { staticClass: "input-field inline col s4" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model", value: a.short, expression: "a.short" } ], staticClass: "validate", attrs: { id: "a_short_" + index, placeholder: "Kurzname" }, domProps: { value: a.short }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set(a, "short", $event.target.value) } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_short_" + index } }, [_vm._v("Kürzel")] ) ] ), _vm._v(" "), _c("div", { staticClass: "input-field col s8" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model.number", value: a.content.size, expression: "a.content.size", modifiers: { number: true } } ], staticClass: "validate", attrs: { id: "a_csize_" + index, placeholder: "Gesamtinhalt", type: "number", step: "0.01" }, domProps: { value: a.content.size }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set( a.content, "size", _vm._n($event.target.value) ) }, blur: function($event) { return _vm.$forceUpdate() } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_csize_" + index } }, [_vm._v("Gesamtinhalt")] ) ]), _vm._v(" "), _c("div", { staticClass: "input-field col s4" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model", value: a.dimension, expression: "a.dimension" } ], staticClass: "validate", attrs: { id: "a_dim_" + index, placeholder: "Dimension", max: "5" }, domProps: { value: a.dimension }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set(a, "dimension", $event.target.value) } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_dim_" + index } }, [_vm._v("Dimension")] ), _vm._v(" "), _c("span", { staticClass: "helper-text" }, [ _vm._v("z.B. Liter(l), Stück(Stk.)") ]) ]), _vm._v(" "), _c("div", { staticClass: "input-field col s4" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model.number", value: a.portion.size, expression: "a.portion.size", modifiers: { number: true } } ], staticClass: "validate", attrs: { id: "a_psize_" + index, placeholder: "Gesamtinhalt", type: "number", step: "0.01", max: "5" }, domProps: { value: a.portion.size }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set( a.portion, "size", _vm._n($event.target.value) ) }, blur: function($event) { return _vm.$forceUpdate() } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_psize_" + index } }, [_vm._v("Portionsinhalt")] ) ]), _vm._v(" "), _c("div", { staticClass: "input-field col s4" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model", value: a.portion.type, expression: "a.portion.type" } ], staticClass: "validate", attrs: { id: "a_ptype_" + index, placeholder: "Art", max: "5" }, domProps: { value: a.portion.type }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set( a.portion, "type", $event.target.value ) } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_ptype_" + index } }, [_vm._v("Portionsbezeichnung")] ) ]), _vm._v(" "), _c("div", { staticClass: "input-field col s4" }, [ _c("input", { directives: [ { name: "model", rawName: "v-model.number", value: a.portion.price, expression: "a.portion.price", modifiers: { number: true } } ], staticClass: "validate", attrs: { id: "a_pprice_" + index, placeholder: "Preis", type: "number", step: "0.01" }, domProps: { value: a.portion.price }, on: { input: function($event) { if ($event.target.composing) { return } _vm.$set( a.portion, "price", _vm._n($event.target.value) ) }, blur: function($event) { return _vm.$forceUpdate() } } }), _vm._v(" "), _c( "label", { staticClass: "active", attrs: { for: "a_pprice_" + index } }, [_vm._v("Portionspreis in €")] ) ]), _vm._v(" "), _c("div", { staticClass: "col s12 right" }, [ _c("span", { staticClass: "right" }, [ _vm._v("Gesamtpreis " + _vm._s(a.ContentPrice)) ]) ]) ]), _vm._v(" "), _c("div", { staticClass: "card-action" }, [ _c("a", { attrs: { href: "#" } }, [ _vm._v("Artikel löschen") ]) ]) ] ) }), 0 ) : _vm._e() ]) ], 1 ), _vm._v(" "), _c("div", { ref: "fab", staticClass: "fixed-action-btn" }, [ _c( "a", { staticClass: "btn-floating btn-large", class: _vm.primaryColor }, [ _c("i", { staticClass: "large material-icons" }, [ _vm._v("more_vert") ]) ] ), _vm._v(" "), _c("ul", [ _c( "li", { directives: [ { name: "show", rawName: "v-show", value: _vm.view == "article", expression: "view == 'article'" } ] }, [ _c( "a", { staticClass: "btn-floating tooltipped", attrs: { href: "#", "data-position": "left", "data-tooltip": "Artikelliste speichern" }, on: { click: _vm.storeArticles } }, [_c("i", { staticClass: "material-icons" }, [_vm._v("save")])] ) ] ), _vm._v(" "), _c( "li", { directives: [ { name: "show", rawName: "v-show", value: _vm.view == "article", expression: "view == 'article'" } ] }, [ _c( "a", { staticClass: "btn-floating tooltipped", attrs: { href: "#", "data-position": "left", "data-tooltip": "Artikel hinzufügen" }, on: { click: _vm.addArticle } }, [_c("i", { staticClass: "material-icons" }, [_vm._v("add")])] ) ] ), _vm._v(" "), _c( "li", { directives: [ { name: "show", rawName: "v-show", value: _vm.view == "inventory", expression: "view == 'inventory'" } ] }, [ _c( "a", { staticClass: "btn-floating tooltipped", attrs: { href: "#", "data-position": "left", "data-tooltip": "Inventur zurücksetzen" }, on: { click: function($event) { return _vm.$refs.inventory.$emit("reset-inventur") } } }, [ _c("i", { staticClass: "material-icons" }, [ _vm._v("clear_all") ]) ] ) ] ), _vm._v(" "), _c( "li", { directives: [ { name: "show", rawName: "v-show", value: _vm.view == "inventory", expression: "view == 'inventory'" } ] }, [ _c( "a", { staticClass: "btn-floating tooltipped", attrs: { href: "#", "data-position": "left", "data-tooltip": "Inventur exportieren" }, on: { click: function($event) { return _vm.$refs.inventory.$emit("export-inventur") } } }, [_c("i", { staticClass: "material-icons" }, [_vm._v("save")])] ) ] ) ]) ]) ], 1 ) } var staticRenderFns = [ function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("div", { staticClass: "progress" }, [ _c("div", { staticClass: "indeterminate" }) ]) } ] render._withStripped = true /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/Calculator.vue?vue&type=template&id=e899a69e&": /*!*******************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/Calculator.vue?vue&type=template&id=e899a69e& ***! \*******************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("div", { staticClass: "row pin-top" }, [ _c( "div", { staticClass: "col s12 m4 card darken-4 grey grey-text text-lighten-2" }, [ _c("table", { staticClass: "card-content" }, [ _c( "tbody", { staticStyle: { "max-height": "300px" } }, _vm._l(_vm.items, function(item) { return _c( "tr", { directives: [ { name: "show", rawName: "v-show", value: item.count > 0, expression: "item.count > 0" } ], key: "bon_" + item.short }, [ _c("td", { staticClass: "right-align" }, [ _vm._v( "\n " + _vm._s(item.count) + " ×\n " ) ]), _vm._v(" "), _c("td", [_vm._v(_vm._s(item.name))]), _vm._v(" "), _c( "td", { staticClass: "right-align" }, [ _c("TweenedNumber", { attrs: { wert: item.sum, einheit: "€", precision: 2 } }) ], 1 ) ] ) }), 0 ), _vm._v(" "), _c("tfoot", [ _c("tr", { staticClass: "white-text" }, [ _c( "th", { staticClass: "right-align" }, [_c("TweenedNumber", { attrs: { wert: _vm.totalCount } })], 1 ), _vm._v(" "), _c("th", [_vm._v("\n Artikel\n ")]), _vm._v(" "), _c( "th", { staticClass: "right-align" }, [ _c("TweenedNumber", { attrs: { wert: _vm.totalSum, einheit: "€", precision: 2 } }) ], 1 ) ]) ]) ]) ] ), _vm._v(" "), _c("div", { staticClass: "col s12 m8" }, [ _c( "div", { staticClass: "row" }, _vm._l(_vm.items, function(a) { return _c( "div", { key: "bon_btn_" + a.short, staticClass: "col s3" }, [ _c( "button", { staticClass: "waves-effect waves-light btn-large btn-flat col s12", on: { click: function($event) { a.count++ a.sum += a.price } } }, [_vm._v("\n " + _vm._s(a.short) + "\n ")] ) ] ) }), 0 ), _vm._v(" "), _c("div", { staticClass: "row" }, [ _c("div", { staticClass: "col s3" }, [ _c( "button", { staticClass: "waves-effect waves-light btn-large orange col s12", on: { click: _vm.resetBon } }, [_vm._v("\n Reset\n ")] ) ]) ]) ]) ]) } var staticRenderFns = [] render._withStripped = true /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230&": /*!**********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/InventoryItem.vue?vue&type=template&id=1b5be230& ***! \**********************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c( "tr", { staticClass: "inventory-item", class: { "teal lighten-5": _vm.item.Sale > 0, "orange darken-2 white-text": _vm.item.Sold % 1 != 0, "red darken-2 white-text": _vm.item.Sale < 0 }, staticStyle: { border: "0" } }, [ _c("th", { staticClass: "right-align" }, [ _vm._v("\n " + _vm._s(_vm.item.article.name) + "\n ") ]), _vm._v(" "), _vm._l(["start", "fetched", "end", "lost"], function(prop) { return _c( "td", { key: _vm.item.article.short + "_" + prop, staticClass: "border-bottom center-align", class: { active: _vm.classObject.active == prop }, attrs: { contenteditable: "" }, on: { keypress: function($event) { return _vm.restrictInput(prop, $event) }, focus: function($event) { return _vm.onFocus(prop, $event) }, blur: function($event) { return _vm.onBlur(prop, $event) } } }, [_vm._v("\n " + _vm._s(_vm.item[prop]) + "\n ")] ) }), _vm._v(" "), _c( "td", { staticClass: "right-align border-bottom border-diagram" }, [ _c("TweenedNumber", { style: { "border-image": "linear-gradient(to right , rgba(0,150,136,.01) 0%, rgba(0,150,136,.3) " + (_vm.item.Sold * 100) / _vm.total + "%, transparent " + (_vm.item.Sold * 100) / _vm.total + "%,transparent 100%) 1" }, attrs: { wert: _vm.item.Sold, einheit: _vm.item.article.PortionType, precision: _vm.item.PortionPrecision } }) ], 1 ), _vm._v(" "), _c( "td", { staticClass: "right-align border-bottom" }, [ _c("TweenedNumber", { attrs: { wert: _vm.item.Sale, einheit: "€", precision: 2 } }) ], 1 ) ], 2 ) } var staticRenderFns = [] render._withStripped = true /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201&": /*!***********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/InventoryTable.vue?vue&type=template&id=5bd9a201& ***! \***********************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("table", { staticClass: "table condensed highlight" }, [ _vm._m(0), _vm._v(" "), _c( "tbody", _vm._l(_vm.inventory, function(item, index) { return _c("InventoryItem", { key: "item-" + index, attrs: { item: item, total: _vm.sold } }) }), 1 ), _vm._v(" "), _c("tfoot", [ _c("tr", [ _c("th", { staticClass: "right-align", attrs: { colspan: "6" } }, [ _vm._v("\n Gesamtsumme:\n ") ]), _vm._v(" "), _c( "td", { staticClass: "right-align" }, [ _c("TweenedNumber", { attrs: { wert: _vm.sales, precision: 2, einheit: "€" } }) ], 1 ) ]) ]) ]) } var staticRenderFns = [ function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("thead", [ _c("tr", [ _c("th", { staticClass: "right-align" }, [ _vm._v("\n Artikel\n ") ]), _vm._v(" "), _c("th", { staticClass: "center-align" }, [ _vm._v("\n Beginn\n ") ]), _vm._v(" "), _c("th", { staticClass: "center-align" }, [ _vm._v("\n Zugang\n ") ]), _vm._v(" "), _c("th", { staticClass: "center-align" }, [ _vm._v("\n Ende\n ") ]), _vm._v(" "), _c("th", { staticClass: "center-align" }, [ _vm._v("\n Verlust\n ") ]), _vm._v(" "), _c("th", { staticClass: "right-align" }, [ _vm._v("\n Verkauft\n ") ]), _vm._v(" "), _c("th", { staticClass: "right-align" }, [ _vm._v("\n Summe\n ") ]) ]) ]) } ] render._withStripped = true /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00&": /*!**********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/NavigationBar.vue?vue&type=template&id=4d965e00& ***! \**********************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("nav", { staticClass: "nav-extended", class: _vm.primaryColor }, [ _c("div", { staticClass: "nav-wrapper container" }), _vm._v(" "), _c("div", { staticClass: "nav-content container" }, [ _c("ul", { staticClass: "tabs tabs-transparent" }, [ _c("li", { staticClass: "tab" }, [ _c( "a", { staticClass: "active", on: { click: function($event) { $event.stopPropagation() $event.preventDefault() return _vm.changeTab("inventory", $event) } } }, [_vm._v("Inventur")] ) ]), _vm._v(" "), _c("li", { staticClass: "tab" }, [ _c( "a", { on: { click: function($event) { $event.stopPropagation() $event.preventDefault() return _vm.changeTab("article", $event) } } }, [_vm._v("Artikelliste")] ) ]), _vm._v(" "), _c("li", { staticClass: "tab" }, [ _c( "a", { on: { click: function($event) { $event.stopPropagation() $event.preventDefault() return _vm.changeTab("calc", $event) } } }, [_vm._v("Rechner")] ) ]) ]) ]) ]) } var staticRenderFns = [] render._withStripped = true /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58&": /*!**********************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./app/js/components/TweenedNumber.vue?vue&type=template&id=2f547c58& ***! \**********************************************************************************************************************************************************************************************************/ /*! exports provided: render, staticRenderFns */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h return _c("div", { staticClass: "tweened" }, [ _c("div", [_vm._v(_vm._s(_vm.intAnimated))]), _vm._v(" "), _vm.precision > 0 ? _c("div", [_vm._v("\n ," + _vm._s(_vm.deciAnimated) + "\n ")]) : _c("div"), _vm._v(" "), _c("div", [_vm._v(_vm._s(_vm.einheit))]) ]) } var staticRenderFns = [] render._withStripped = true /***/ }) /******/ }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL0FwcC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL0FwcC52dWU/OWMyZSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvQXBwLnZ1ZT8xMWU1Iiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL0NhbGN1bGF0b3IudnVlIiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL0NhbGN1bGF0b3IudnVlPzQ1ZjkiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvQ2FsY3VsYXRvci52dWU/NTdkMiIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlJdGVtLmNzcyIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlJdGVtLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlJdGVtLnZ1ZT8wYjQ2Iiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL0ludmVudG9yeUl0ZW0udnVlP2FmZjUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvSW52ZW50b3J5VGFibGUuY3NzIiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL0ludmVudG9yeVRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlUYWJsZS52dWU/ZWM1NCIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlUYWJsZS52dWU/OGIyNSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9OYXZpZ2F0aW9uQmFyLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9OYXZpZ2F0aW9uQmFyLnZ1ZT9iYTdhIiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL05hdmlnYXRpb25CYXIudnVlPzYxZGUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvVHdlZW5lZE51bWJlci5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvVHdlZW5lZE51bWJlci52dWUiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvVHdlZW5lZE51bWJlci52dWU/ZjliMyIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9Ud2VlbmVkTnVtYmVyLnZ1ZT9lY2RlIiwid2VicGFjazovLy8uL2FwcC9qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9hcHAvanMvbW9kZWwvYXJ0aWNsZS5qcyIsIndlYnBhY2s6Ly8vLi9hcHAvanMvbW9kZWwvaW52ZW50b3J5X2FydGljbGUuanMiLCJ3ZWJwYWNrOi8vL2FwcC9qcy9BcHAudnVlIiwid2VicGFjazovLy9hcHAvanMvY29tcG9uZW50cy9DYWxjdWxhdG9yLnZ1ZSIsIndlYnBhY2s6Ly8vYXBwL2pzL2NvbXBvbmVudHMvSW52ZW50b3J5SXRlbS52dWUiLCJ3ZWJwYWNrOi8vL2FwcC9qcy9jb21wb25lbnRzL0ludmVudG9yeVRhYmxlLnZ1ZSIsIndlYnBhY2s6Ly8vYXBwL2pzL2NvbXBvbmVudHMvTmF2aWdhdGlvbkJhci52dWUiLCJ3ZWJwYWNrOi8vL2FwcC9qcy9jb21wb25lbnRzL1R3ZWVuZWROdW1iZXIudnVlIiwid2VicGFjazovLy8uL2FwcC9qcy9BcHAudnVlPzAyNGQiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvQ2FsY3VsYXRvci52dWU/NTIzYSIsIndlYnBhY2s6Ly8vLi9hcHAvanMvY29tcG9uZW50cy9JbnZlbnRvcnlJdGVtLnZ1ZT81ZGNhIiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL0ludmVudG9yeVRhYmxlLnZ1ZT9iYzQ5Iiwid2VicGFjazovLy8uL2FwcC9qcy9jb21wb25lbnRzL05hdmlnYXRpb25CYXIudnVlPzY5ZGEiLCJ3ZWJwYWNrOi8vLy4vYXBwL2pzL2NvbXBvbmVudHMvVHdlZW5lZE51bWJlci52dWU/ZTlkZCJdLCJuYW1lcyI6WyJWdWUiLCJwcm90b3R5cGUiLCIkaHR0cCIsIkF4aW9zIiwiJE0iLCJNIiwiZGVsaW1pdGVycyIsImNvbXBvbmVudHMiLCJBcHAiLCJ0ZW1wbGF0ZSIsIiRtb3VudCIsIkFydGljbGUiLCJuYW1lIiwic2hvcnQiLCJkaW1lbnNpb24iLCJjb250ZW50Iiwic2l6ZSIsInByaWNlIiwicG9ydGlvbiIsInR5cGUiLCJ2YWx1ZSIsIlBvcnRpb25zIiwidGhhdyIsImpzb24iLCJhcnRpY2xlIiwiaWQiLCJOYW1lIiwiU2hvcnQiLCJEaW1lbnNpb24iLCJDb250ZW50U2l6ZSIsIlBvcnRpb25QcmljZSIsIlBvcnRpb25TaXplIiwiUG9ydGlvblR5cGUiLCJ0aGF3QXJ0aWNsZSIsIkludmVudG9yeUFydGljbGUiLCJlbmQiLCJzdGFydCIsImZldGNoZWQiLCJsb3N0IiwiY291bnRGdWxsIiwiTWF0aCIsImZsb29yIiwiZnVsbFBvcnRpb25zIiwicmVzdCIsInJlc3RQb3J0aW9ucyIsImFkZHMiLCJTdGFydFBvcnRpb25zIiwiRmV0Y2hlZFBvcnRpb25zIiwic3VicyIsIkVuZFBvcnRpb25zIiwiTG9zdFBvcnRpb25zIiwiU29sZCIsInNpbmdsZVBhY2siLCJ0aGF3SW52ZW50b3J5QXJ0aWNsZSJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsUUFBUSxvQkFBb0I7UUFDNUI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxpQkFBaUIsNEJBQTRCO1FBQzdDO1FBQ0E7UUFDQSxrQkFBa0IsMkJBQTJCO1FBQzdDO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtR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O0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixxQkFBcUI7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQzlEQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJhcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbiBcdGZ1bmN0aW9uIHdlYnBhY2tKc29ucENhbGxiYWNrKGRhdGEpIHtcbiBcdFx0dmFyIGNodW5rSWRzID0gZGF0YVswXTtcbiBcdFx0dmFyIG1vcmVNb2R1bGVzID0gZGF0YVsxXTtcbiBcdFx0dmFyIGV4ZWN1dGVNb2R1bGVzID0gZGF0YVsyXTtcblxuIFx0XHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVzIG9iamVjdCxcbiBcdFx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG4gXHRcdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDAsIHJlc29sdmVzID0gW107XG4gXHRcdGZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG4gXHRcdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuIFx0XHRcdGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpbnN0YWxsZWRDaHVua3MsIGNodW5rSWQpICYmIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuIFx0XHRcdFx0cmVzb2x2ZXMucHVzaChpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF1bMF0pO1xuIFx0XHRcdH1cbiBcdFx0XHRpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gPSAwO1xuIFx0XHR9XG4gXHRcdGZvcihtb2R1bGVJZCBpbiBtb3JlTW9kdWxlcykge1xuIFx0XHRcdGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb3JlTW9kdWxlcywgbW9kdWxlSWQpKSB7XG4gXHRcdFx0XHRtb2R1bGVzW21vZHVsZUlkXSA9IG1vcmVNb2R1bGVzW21vZHVsZUlkXTtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcdFx0aWYocGFyZW50SnNvbnBGdW5jdGlvbikgcGFyZW50SnNvbnBGdW5jdGlvbihkYXRhKTtcblxuIFx0XHR3aGlsZShyZXNvbHZlcy5sZW5ndGgpIHtcbiBcdFx0XHRyZXNvbHZlcy5zaGlmdCgpKCk7XG4gXHRcdH1cblxuIFx0XHQvLyBhZGQgZW50cnkgbW9kdWxlcyBmcm9tIGxvYWRlZCBjaHVuayB0byBkZWZlcnJlZCBsaXN0XG4gXHRcdGRlZmVycmVkTW9kdWxlcy5wdXNoLmFwcGx5KGRlZmVycmVkTW9kdWxlcywgZXhlY3V0ZU1vZHVsZXMgfHwgW10pO1xuXG4gXHRcdC8vIHJ1biBkZWZlcnJlZCBtb2R1bGVzIHdoZW4gYWxsIGNodW5rcyByZWFkeVxuIFx0XHRyZXR1cm4gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKTtcbiBcdH07XG4gXHRmdW5jdGlvbiBjaGVja0RlZmVycmVkTW9kdWxlcygpIHtcbiBcdFx0dmFyIHJlc3VsdDtcbiBcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlZmVycmVkTW9kdWxlcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdHZhciBkZWZlcnJlZE1vZHVsZSA9IGRlZmVycmVkTW9kdWxlc1tpXTtcbiBcdFx0XHR2YXIgZnVsZmlsbGVkID0gdHJ1ZTtcbiBcdFx0XHRmb3IodmFyIGogPSAxOyBqIDwgZGVmZXJyZWRNb2R1bGUubGVuZ3RoOyBqKyspIHtcbiBcdFx0XHRcdHZhciBkZXBJZCA9IGRlZmVycmVkTW9kdWxlW2pdO1xuIFx0XHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtzW2RlcElkXSAhPT0gMCkgZnVsZmlsbGVkID0gZmFsc2U7XG4gXHRcdFx0fVxuIFx0XHRcdGlmKGZ1bGZpbGxlZCkge1xuIFx0XHRcdFx0ZGVmZXJyZWRNb2R1bGVzLnNwbGljZShpLS0sIDEpO1xuIFx0XHRcdFx0cmVzdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBkZWZlcnJlZE1vZHVsZVswXSk7XG4gXHRcdFx0fVxuIFx0XHR9XG5cbiBcdFx0cmV0dXJuIHJlc3VsdDtcbiBcdH1cblxuIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gb2JqZWN0IHRvIHN0b3JlIGxvYWRlZCBhbmQgbG9hZGluZyBjaHVua3NcbiBcdC8vIHVuZGVmaW5lZCA9IGNodW5rIG5vdCBsb2FkZWQsIG51bGwgPSBjaHVuayBwcmVsb2FkZWQvcHJlZmV0Y2hlZFxuIFx0Ly8gUHJvbWlzZSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbiBcdHZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG4gXHRcdFwiYXBwXCI6IDBcbiBcdH07XG5cbiBcdHZhciBkZWZlcnJlZE1vZHVsZXMgPSBbXTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvYnVpbGQvXCI7XG5cbiBcdHZhciBqc29ucEFycmF5ID0gd2luZG93W1wid2VicGFja0pzb25wXCJdID0gd2luZG93W1wid2VicGFja0pzb25wXCJdIHx8IFtdO1xuIFx0dmFyIG9sZEpzb25wRnVuY3Rpb24gPSBqc29ucEFycmF5LnB1c2guYmluZChqc29ucEFycmF5KTtcbiBcdGpzb25wQXJyYXkucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrO1xuIFx0anNvbnBBcnJheSA9IGpzb25wQXJyYXkuc2xpY2UoKTtcbiBcdGZvcih2YXIgaSA9IDA7IGkgPCBqc29ucEFycmF5Lmxlbmd0aDsgaSsrKSB3ZWJwYWNrSnNvbnBDYWxsYmFjayhqc29ucEFycmF5W2ldKTtcbiBcdHZhciBwYXJlbnRKc29ucEZ1bmN0aW9uID0gb2xkSnNvbnBGdW5jdGlvbjtcblxuXG4gXHQvLyBhZGQgZW50cnkgbW9kdWxlIHRvIGRlZmVycmVkIGxpc3RcbiBcdGRlZmVycmVkTW9kdWxlcy5wdXNoKFtcIi4vYXBwL2pzL2luZGV4LmpzXCIsXCJ2ZW5kb3JzfmFwcFwiXSk7XG4gXHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIHJlYWR5XG4gXHRyZXR1cm4gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKTtcbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vQXBwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1mM2Q4ZTkxMiZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9jaHJvc2V5L0Rva3VtZW50ZS9kZXYvaW52L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJ2YzZDhlOTEyJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJ2YzZDhlOTEyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJ2YzZDhlOTEyJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9BcHAudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWYzZDhlOTEyJlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJ2YzZDhlOTEyJywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJhcHAvanMvQXBwLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3JlZi0tMC0wIS4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vQXBwLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0wLTAhLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9BcHAudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0FwcC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZjNkOGU5MTImXCIiLCJpbXBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IGZyb20gXCIuL0NhbGN1bGF0b3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPWU4OTlhNjllJlwiXG5pbXBvcnQgc2NyaXB0IGZyb20gXCIuL0NhbGN1bGF0b3IudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9DYWxjdWxhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuXG5cbi8qIG5vcm1hbGl6ZSBjb21wb25lbnQgKi9cbmltcG9ydCBub3JtYWxpemVyIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL3J1bnRpbWUvY29tcG9uZW50Tm9ybWFsaXplci5qc1wiXG52YXIgY29tcG9uZW50ID0gbm9ybWFsaXplcihcbiAgc2NyaXB0LFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZmFsc2UsXG4gIG51bGwsXG4gIG51bGwsXG4gIG51bGxcbiAgXG4pXG5cbi8qIGhvdCByZWxvYWQgKi9cbmlmIChtb2R1bGUuaG90KSB7XG4gIHZhciBhcGkgPSByZXF1aXJlKFwiL2hvbWUvY2hyb3NleS9Eb2t1bWVudGUvZGV2L2ludi9ub2RlX21vZHVsZXMvdnVlLWhvdC1yZWxvYWQtYXBpL2Rpc3QvaW5kZXguanNcIilcbiAgYXBpLmluc3RhbGwocmVxdWlyZSgndnVlJykpXG4gIGlmIChhcGkuY29tcGF0aWJsZSkge1xuICAgIG1vZHVsZS5ob3QuYWNjZXB0KClcbiAgICBpZiAoIWFwaS5pc1JlY29yZGVkKCdlODk5YTY5ZScpKSB7XG4gICAgICBhcGkuY3JlYXRlUmVjb3JkKCdlODk5YTY5ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVsb2FkKCdlODk5YTY5ZScsIGNvbXBvbmVudC5vcHRpb25zKVxuICAgIH1cbiAgICBtb2R1bGUuaG90LmFjY2VwdChcIi4vQ2FsY3VsYXRvci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9ZTg5OWE2OWUmXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFwaS5yZXJlbmRlcignZTg5OWE2OWUnLCB7XG4gICAgICAgIHJlbmRlcjogcmVuZGVyLFxuICAgICAgICBzdGF0aWNSZW5kZXJGbnM6IHN0YXRpY1JlbmRlckZuc1xuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5jb21wb25lbnQub3B0aW9ucy5fX2ZpbGUgPSBcImFwcC9qcy9jb21wb25lbnRzL0NhbGN1bGF0b3IudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9DYWxjdWxhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIjsgZXhwb3J0IGRlZmF1bHQgbW9kOyBleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9DYWxjdWxhdG9yLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIiIsImV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9sb2FkZXJzL3RlbXBsYXRlTG9hZGVyLmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9DYWxjdWxhdG9yLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD1lODk5YTY5ZSZcIiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpbiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vSW52ZW50b3J5SXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MWI1YmUyMzAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW52ZW50b3J5SXRlbS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL0ludmVudG9yeUl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9jaHJvc2V5L0Rva3VtZW50ZS9kZXYvaW52L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzFiNWJlMjMwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzFiNWJlMjMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzFiNWJlMjMwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9JbnZlbnRvcnlJdGVtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0xYjViZTIzMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCcxYjViZTIzMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2pzL2NvbXBvbmVudHMvSW52ZW50b3J5SXRlbS52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ludmVudG9yeUl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ludmVudG9yeUl0ZW0udnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ludmVudG9yeUl0ZW0udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTFiNWJlMjMwJlwiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9JbnZlbnRvcnlUYWJsZS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NWJkOWEyMDEmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vSW52ZW50b3J5VGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5leHBvcnQgKiBmcm9tIFwiLi9JbnZlbnRvcnlUYWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL2Nocm9zZXkvRG9rdW1lbnRlL2Rldi9pbnYvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnNWJkOWEyMDEnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnNWJkOWEyMDEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnNWJkOWEyMDEnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL0ludmVudG9yeVRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ5YTIwMSZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc1YmQ5YTIwMScsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2pzL2NvbXBvbmVudHMvSW52ZW50b3J5VGFibGUudnVlXCJcbmV4cG9ydCBkZWZhdWx0IGNvbXBvbmVudC5leHBvcnRzIiwiaW1wb3J0IG1vZCBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/cmVmLS0wLTAhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2luZGV4LmpzPz92dWUtbG9hZGVyLW9wdGlvbnMhLi9JbnZlbnRvcnlUYWJsZS52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vSW52ZW50b3J5VGFibGUudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL0ludmVudG9yeVRhYmxlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD01YmQ5YTIwMSZcIiIsImltcG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0gZnJvbSBcIi4vTmF2aWdhdGlvbkJhci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9NGQ5NjVlMDAmXCJcbmltcG9ydCBzY3JpcHQgZnJvbSBcIi4vTmF2aWdhdGlvbkJhci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcbmV4cG9ydCAqIGZyb20gXCIuL05hdmlnYXRpb25CYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiXG5cblxuLyogbm9ybWFsaXplIGNvbXBvbmVudCAqL1xuaW1wb3J0IG5vcm1hbGl6ZXIgZnJvbSBcIiEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzXCJcbnZhciBjb21wb25lbnQgPSBub3JtYWxpemVyKFxuICBzY3JpcHQsXG4gIHJlbmRlcixcbiAgc3RhdGljUmVuZGVyRm5zLFxuICBmYWxzZSxcbiAgbnVsbCxcbiAgbnVsbCxcbiAgbnVsbFxuICBcbilcblxuLyogaG90IHJlbG9hZCAqL1xuaWYgKG1vZHVsZS5ob3QpIHtcbiAgdmFyIGFwaSA9IHJlcXVpcmUoXCIvaG9tZS9jaHJvc2V5L0Rva3VtZW50ZS9kZXYvaW52L25vZGVfbW9kdWxlcy92dWUtaG90LXJlbG9hZC1hcGkvZGlzdC9pbmRleC5qc1wiKVxuICBhcGkuaW5zdGFsbChyZXF1aXJlKCd2dWUnKSlcbiAgaWYgKGFwaS5jb21wYXRpYmxlKSB7XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoKVxuICAgIGlmICghYXBpLmlzUmVjb3JkZWQoJzRkOTY1ZTAwJykpIHtcbiAgICAgIGFwaS5jcmVhdGVSZWNvcmQoJzRkOTY1ZTAwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFwaS5yZWxvYWQoJzRkOTY1ZTAwJywgY29tcG9uZW50Lm9wdGlvbnMpXG4gICAgfVxuICAgIG1vZHVsZS5ob3QuYWNjZXB0KFwiLi9OYXZpZ2F0aW9uQmFyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD00ZDk2NWUwMCZcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgYXBpLnJlcmVuZGVyKCc0ZDk2NWUwMCcsIHtcbiAgICAgICAgcmVuZGVyOiByZW5kZXIsXG4gICAgICAgIHN0YXRpY1JlbmRlckZuczogc3RhdGljUmVuZGVyRm5zXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cbmNvbXBvbmVudC5vcHRpb25zLl9fZmlsZSA9IFwiYXBwL2pzL2NvbXBvbmVudHMvTmF2aWdhdGlvbkJhci52dWVcIlxuZXhwb3J0IGRlZmF1bHQgY29tcG9uZW50LmV4cG9ydHMiLCJpbXBvcnQgbW9kIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL05hdmlnYXRpb25CYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiOyBleHBvcnQgZGVmYXVsdCBtb2Q7IGV4cG9ydCAqIGZyb20gXCItIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9iYWJlbC1sb2FkZXIvbGliL2luZGV4LmpzPz9yZWYtLTAtMCEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL05hdmlnYXRpb25CYXIudnVlP3Z1ZSZ0eXBlPXNjcmlwdCZsYW5nPWpzJlwiIiwiZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvdGVtcGxhdGVMb2FkZXIuanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/P3Z1ZS1sb2FkZXItb3B0aW9ucyEuL05hdmlnYXRpb25CYXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTRkOTY1ZTAwJlwiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luIiwiaW1wb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSBmcm9tIFwiLi9Ud2VlbmVkTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZpZD0yZjU0N2M1OCZcIlxuaW1wb3J0IHNjcmlwdCBmcm9tIFwiLi9Ud2VlbmVkTnVtYmVyLnZ1ZT92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyZcIlxuZXhwb3J0ICogZnJvbSBcIi4vVHdlZW5lZE51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCJcblxuXG4vKiBub3JtYWxpemUgY29tcG9uZW50ICovXG5pbXBvcnQgbm9ybWFsaXplciBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9ydW50aW1lL2NvbXBvbmVudE5vcm1hbGl6ZXIuanNcIlxudmFyIGNvbXBvbmVudCA9IG5vcm1hbGl6ZXIoXG4gIHNjcmlwdCxcbiAgcmVuZGVyLFxuICBzdGF0aWNSZW5kZXJGbnMsXG4gIGZhbHNlLFxuICBudWxsLFxuICBudWxsLFxuICBudWxsXG4gIFxuKVxuXG4vKiBob3QgcmVsb2FkICovXG5pZiAobW9kdWxlLmhvdCkge1xuICB2YXIgYXBpID0gcmVxdWlyZShcIi9ob21lL2Nocm9zZXkvRG9rdW1lbnRlL2Rldi9pbnYvbm9kZV9tb2R1bGVzL3Z1ZS1ob3QtcmVsb2FkLWFwaS9kaXN0L2luZGV4LmpzXCIpXG4gIGFwaS5pbnN0YWxsKHJlcXVpcmUoJ3Z1ZScpKVxuICBpZiAoYXBpLmNvbXBhdGlibGUpIHtcbiAgICBtb2R1bGUuaG90LmFjY2VwdCgpXG4gICAgaWYgKCFhcGkuaXNSZWNvcmRlZCgnMmY1NDdjNTgnKSkge1xuICAgICAgYXBpLmNyZWF0ZVJlY29yZCgnMmY1NDdjNTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbG9hZCgnMmY1NDdjNTgnLCBjb21wb25lbnQub3B0aW9ucylcbiAgICB9XG4gICAgbW9kdWxlLmhvdC5hY2NlcHQoXCIuL1R3ZWVuZWROdW1iZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmlkPTJmNTQ3YzU4JlwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhcGkucmVyZW5kZXIoJzJmNTQ3YzU4Jywge1xuICAgICAgICByZW5kZXI6IHJlbmRlcixcbiAgICAgICAgc3RhdGljUmVuZGVyRm5zOiBzdGF0aWNSZW5kZXJGbnNcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuY29tcG9uZW50Lm9wdGlvbnMuX19maWxlID0gXCJhcHAvanMvY29tcG9uZW50cy9Ud2VlbmVkTnVtYmVyLnZ1ZVwiXG5leHBvcnQgZGVmYXVsdCBjb21wb25lbnQuZXhwb3J0cyIsImltcG9ydCBtb2QgZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVHdlZW5lZE51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCI7IGV4cG9ydCBkZWZhdWx0IG1vZDsgZXhwb3J0ICogZnJvbSBcIi0hLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2JhYmVsLWxvYWRlci9saWIvaW5kZXguanM/P3JlZi0tMC0wIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVHdlZW5lZE51bWJlci52dWU/dnVlJnR5cGU9c2NyaXB0Jmxhbmc9anMmXCIiLCJleHBvcnQgKiBmcm9tIFwiLSEuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvbG9hZGVycy90ZW1wbGF0ZUxvYWRlci5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtbG9hZGVyL2xpYi9pbmRleC5qcz8/dnVlLWxvYWRlci1vcHRpb25zIS4vVHdlZW5lZE51bWJlci52dWU/dnVlJnR5cGU9dGVtcGxhdGUmaWQ9MmY1NDdjNTgmXCIiLCJpbXBvcnQgVnVlIGZyb20gXCJ2dWVcIjtcbmltcG9ydCBBcHAgZnJvbSBcIi4vQXBwXCI7XG5pbXBvcnQgJ21hdGVyaWFsaXplLWNzcy9kaXN0L2Nzcy9tYXRlcmlhbGl6ZS5taW4uY3NzJztcbmltcG9ydCBBeGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgTSBmcm9tICdtYXRlcmlhbGl6ZS1jc3MnO1xuXG5WdWUucHJvdG90eXBlLiRodHRwID0gQXhpb3M7XG5WdWUucHJvdG90eXBlLiRNID0gTTtcblxubmV3IFZ1ZSh7XG4gIGRlbGltaXRlcnM6IFtcIiR7XCIsIFwifVwiXSxcbiAgY29tcG9uZW50czoge1xuICAgIEFwcFxuICB9LFxuICB0ZW1wbGF0ZTogXCI8QXBwLz5cIlxufSkuJG1vdW50KFwiI2FwcFwiKTsiLCJleHBvcnQgY2xhc3MgQXJ0aWNsZXtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICB0aGlzLnNob3J0ID0gXCJcIjtcbiAgICB0aGlzLmRpbWVuc2lvbiA9IFwiXCI7XG4gICAgdGhpcy5jb250ZW50ID0ge1xuICAgICAgc2l6ZSA6IDAsXG4gICAgICBwcmljZTogMFxuICAgIH07XG4gICAgdGhpcy5wb3J0aW9uID0ge1xuICAgICAgc2l6ZSA6IDAsXG4gICAgICBwcmljZSA6IDAsXG4gICAgICB0eXBlIDogXCJcIlxuICAgIH07XG4gIH1cbiAgZ2V0IE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICBzZXQgTmFtZSh2YWx1ZSkge1xuICAgIHRoaXMubmFtZSA9IHZhbHVlO1xuICB9XG4gIGdldCBTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5zaG9ydDtcbiAgfVxuICBzZXQgU2hvcnQodmFsdWUpIHtcbiAgICB0aGlzLnNob3J0ID0gdmFsdWU7XG4gIH1cbiAgZ2V0IENvbnRlbnRTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuc2l6ZTtcbiAgfVxuICBzZXQgQ29udGVudFNpemUodmFsdWUpIHtcbiAgICB0aGlzLmNvbnRlbnQuc2l6ZSA9IHZhbHVlO1xuICB9XG4gIGdldCBEaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGltZW5zaW9uO1xuICB9XG4gIHNldCBEaW1lbnNpb24odmFsdWUpIHtcbiAgICB0aGlzLmRpbWVuc2lvbiA9IHZhbHVlO1xuICB9XG4gIGdldCBQb3J0aW9uU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3J0aW9uLnNpemU7XG4gIH1cbiAgc2V0IFBvcnRpb25TaXplKHZhbHVlKSB7XG4gICAgdGhpcy5wb3J0aW9uLnNpemUgPSB2YWx1ZTtcbiAgfVxuICBnZXQgUG9ydGlvblR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucG9ydGlvbi50eXBlO1xuICB9XG4gIHNldCBQb3J0aW9uVHlwZSh2YWx1ZSkge1xuICAgIHRoaXMucG9ydGlvbi50eXBlID0gdmFsdWU7XG4gIH1cbiAgZ2V0IFBvcnRpb25QcmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wb3J0aW9uLnByaWNlO1xuICB9XG4gIHNldCBQb3J0aW9uUHJpY2UodmFsdWUpIHtcbiAgICB0aGlzLnBvcnRpb24ucHJpY2UgPSB2YWx1ZTtcbiAgfVxuICBnZXQgQ29udGVudFByaWNlKCkge1xuICAgIHJldHVybiB0aGlzLlBvcnRpb25zICogdGhpcy5wb3J0aW9uLnByaWNlO1xuICB9XG4gIGdldCBQb3J0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnNpemUgLyAodGhpcy5wb3J0aW9uLnNpemUgfHwgMSk7XG4gIH1cbn1cblxuQXJ0aWNsZS50aGF3ID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgdmFyIGFydGljbGUgPSBuZXcgQXJ0aWNsZSgpO1xuICBhcnRpY2xlLmlkID0ganNvbi5pZDtcbiAgYXJ0aWNsZS5OYW1lID0ganNvbi5uYW1lO1xuICBhcnRpY2xlLlNob3J0ID0ganNvbi5zaG9ydDtcbiAgYXJ0aWNsZS5EaW1lbnNpb24gPSBqc29uLmRpbWVuc2lvbjtcbiAgYXJ0aWNsZS5Db250ZW50U2l6ZSA9IGpzb24uY29udGVudC5zaXplO1xuICBhcnRpY2xlLlBvcnRpb25QcmljZSA9IGpzb24ucG9ydGlvbi5wcmljZTtcbiAgYXJ0aWNsZS5Qb3J0aW9uU2l6ZSA9IGpzb24ucG9ydGlvbi5zaXplO1xuICBhcnRpY2xlLlBvcnRpb25UeXBlID0ganNvbi5wb3J0aW9uLnR5cGU7XG5cbiAgcmV0dXJuIGFydGljbGU7XG59O1xuXG5leHBvcnQgY29uc3QgdGhhd0FydGljbGUgPSBBcnRpY2xlLnRoYXc7IiwiZXhwb3J0IGNsYXNzIEludmVudG9yeUFydGljbGUge1xuICBjb25zdHJ1Y3RvcihhcnRpY2xlKSB7XG4gICAgdGhpcy5hcnRpY2xlID0gYXJ0aWNsZTtcbiAgICB0aGlzLmVuZCA9IDA7XG4gICAgdGhpcy5zdGFydCA9IDA7XG4gICAgdGhpcy5mZXRjaGVkID0gMDtcbiAgICB0aGlzLmxvc3QgPSAwO1xuICB9XG4gIGdldCBTdGFydFBvcnRpb25zKCkge1xuICAgIHZhciBjb3VudEZ1bGwgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQpO1xuICAgIHZhciBmdWxsUG9ydGlvbnMgPSBjb3VudEZ1bGwgKiB0aGlzLmFydGljbGUuUG9ydGlvbnM7XG4gICAgdmFyIHJlc3QgPSB0aGlzLnN0YXJ0IC0gY291bnRGdWxsO1xuICAgIHZhciByZXN0UG9ydGlvbnMgPSByZXN0IC8gdGhpcy5hcnRpY2xlLlBvcnRpb25TaXplO1xuXG4gICAgcmV0dXJuIGZ1bGxQb3J0aW9ucyArIHJlc3RQb3J0aW9ucztcbiAgfVxuICBnZXQgRmV0Y2hlZFBvcnRpb25zKCkge1xuICAgIHZhciBjb3VudEZ1bGwgPSBNYXRoLmZsb29yKHRoaXMuZmV0Y2hlZCk7XG4gICAgdmFyIGZ1bGxQb3J0aW9ucyA9IGNvdW50RnVsbCAqIHRoaXMuYXJ0aWNsZS5Qb3J0aW9ucztcbiAgICB2YXIgcmVzdCA9IHRoaXMuZmV0Y2hlZCAtIGNvdW50RnVsbDtcbiAgICB2YXIgcmVzdFBvcnRpb25zID0gcmVzdCAvIHRoaXMuYXJ0aWNsZS5Qb3J0aW9uU2l6ZTtcblxuICAgIHJldHVybiBmdWxsUG9ydGlvbnMgKyByZXN0UG9ydGlvbnM7XG4gIH1cbiAgZ2V0IEVuZFBvcnRpb25zKCkge1xuICAgIHZhciBjb3VudEZ1bGwgPSBNYXRoLmZsb29yKHRoaXMuZW5kKTtcbiAgICB2YXIgZnVsbFBvcnRpb25zID0gY291bnRGdWxsICogdGhpcy5hcnRpY2xlLlBvcnRpb25zO1xuICAgIHZhciByZXN0ID0gdGhpcy5lbmQgLSBjb3VudEZ1bGw7XG4gICAgdmFyIHJlc3RQb3J0aW9ucyA9IHJlc3QgLyB0aGlzLmFydGljbGUuUG9ydGlvblNpemU7XG5cbiAgICByZXR1cm4gZnVsbFBvcnRpb25zICsgcmVzdFBvcnRpb25zO1xuICB9XG4gIGdldCBMb3N0UG9ydGlvbnMoKSB7XG4gICAgdmFyIGNvdW50RnVsbCA9IE1hdGguZmxvb3IodGhpcy5sb3N0KTtcbiAgICB2YXIgZnVsbFBvcnRpb25zID0gY291bnRGdWxsICogdGhpcy5hcnRpY2xlLlBvcnRpb25zO1xuICAgIHZhciByZXN0ID0gdGhpcy5sb3N0IC0gY291bnRGdWxsO1xuICAgIHZhciByZXN0UG9ydGlvbnMgPSByZXN0IC8gdGhpcy5hcnRpY2xlLlBvcnRpb25TaXplO1xuXG4gICAgcmV0dXJuIGZ1bGxQb3J0aW9ucyArIHJlc3RQb3J0aW9ucztcbiAgfVxuICBnZXQgU29sZCgpIHtcbiAgICB2YXIgYWRkcyA9IHRoaXMuU3RhcnRQb3J0aW9ucyArIHRoaXMuRmV0Y2hlZFBvcnRpb25zO1xuICAgIHZhciBzdWJzID0gdGhpcy5FbmRQb3J0aW9ucyArIHRoaXMuTG9zdFBvcnRpb25zO1xuICAgIHJldHVybiBhZGRzIC0gc3VicztcbiAgfVxuICBnZXQgU2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5Tb2xkICogdGhpcy5hcnRpY2xlLlBvcnRpb25QcmljZTtcbiAgfVxuICBnZXQgU3RlcFNpemUoKSB7XG4gICAgdmFyIHNpbmdsZVBhY2sgPSB0aGlzLmFydGljbGUuUG9ydGlvbnMgPT0gMTtcbiAgICByZXR1cm4gc2luZ2xlUGFjayA/IDEgOiAwLjA1O1xuICB9XG4gIGdldCBQb3J0aW9uUHJlY2lzaW9uKCkge1xuICAgIHZhciBzaW5nbGVQYWNrID0gdGhpcy5hcnRpY2xlLlBvcnRpb25zID09IDE7XG4gICAgcmV0dXJuIHNpbmdsZVBhY2sgPyAwIDogMjtcbiAgfVxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICB0aGlzLmZldGNoZWQgPSAwO1xuICAgIHRoaXMuZW5kID0gMDtcbiAgICB0aGlzLmxvc3QgPSAwO1xuICB9XG59XG5cbkludmVudG9yeUFydGljbGUudGhhdyA9IGZ1bmN0aW9uIChqc29uKSB7XG4gIHRoaXMubmFtZSA9IGpzb24ubmFtZTtcbiAgdGhpcy5zdGFydCA9IGpzb24uc3RhcnQ7XG4gIHRoaXMuZmV0Y2hlZCA9IGpzb24uZmV0Y2hlZDtcbiAgdGhpcy5lbmQgPSBqc29uLmVuZDtcbiAgdGhpcy5sb3N0ID0ganNvbi5sb3N0O1xufTtcbmV4cG9ydCBjb25zdCB0aGF3SW52ZW50b3J5QXJ0aWNsZSA9IEludmVudG9yeUFydGljbGUudGhhdzsiLCI8dGVtcGxhdGU+XG4gIDxkaXY+XG4gICAgPE5hdmlnYXRpb25CYXJcbiAgICAgIDpwcmltYXJ5LWNvbG9yPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIEBjaGFuZ2VkLXRhYj1cImNoYW5nZVZpZXdcIlxuICAgIC8+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgPGRpdlxuICAgICAgICB2LWlmPVwiIXJlYWR5XCJcbiAgICAgICAgY2xhc3M9XCJ2YWxpZ24td3JhcHBlclwiXG4gICAgICAgIHN0eWxlPVwiaGVpZ2h0OiA5MHZoXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRyYW5zaXRpb24gbmFtZT1cImZhZGVcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHYtaWY9XCJyZWFkeSAmJiB2aWV3ID09ICdpbnZlbnRvcnknXCJcbiAgICAgICAgICBpZD1cImludmVudG9yeVwiXG4gICAgICAgICAgY2xhc3M9XCJjb2wgczEyXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJbnZlbnRvcnlUYWJsZVxuICAgICAgICAgICAgcmVmPVwiaW52ZW50b3J5XCJcbiAgICAgICAgICAgIDphcnRpY2xlcz1cImFydGljbGVzXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHYtaWY9XCJyZWFkeSAmJiB2aWV3ID09ICdjYWxjJ1wiXG4gICAgICAgICAgaWQ9XCJjYWxjXCJcbiAgICAgICAgICBjbGFzcz1cImNvbCBzMTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPENhbGN1bGF0b3IgOmFydGljbGVzPVwiYXJ0aWNsZXNcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHYtaWY9XCJyZWFkeSAmJiB2aWV3ID09ICdhcnRpY2xlJ1wiXG4gICAgICAgICAgaWQ9XCJhcnRpY2xlXCJcbiAgICAgICAgICBjbGFzcz1cImNvbCBzMTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgdi1mb3I9XCIoYSwgaW5kZXgpIGluIGFydGljbGVzXCJcbiAgICAgICAgICAgIDprZXk9XCInYXJ0aWNsZV8nK2luZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2FyZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudCByb3dcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYXJkLXRpdGxlXCI+e3sgYS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgaW5saW5lIGNvbCBzOFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgOmlkPVwiJ2FfbmFtZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJhLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBcnRpa2VsbmFtZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICA6Zm9yPVwiJ2FfbmFtZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+TmFtZTwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgaW5saW5lIGNvbCBzNFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgOmlkPVwiJ2Ffc2hvcnRfJytpbmRleFwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYS5zaG9ydFwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkt1cnpuYW1lXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIDpmb3I9XCInYV9zaG9ydF8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+S8O8cnplbDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgY29sIHM4XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICA6aWQ9XCInYV9jc2l6ZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWwubnVtYmVyPVwiYS5jb250ZW50LnNpemVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJHZXNhbXRpbmhhbHRcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICAgIHN0ZXA9XCIwLjAxXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICA6Zm9yPVwiJ2FfY3NpemVfJytpbmRleFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgPkdlc2FtdGluaGFsdDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgY29sIHM0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICA6aWQ9XCInYV9kaW1fJytpbmRleFwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiYS5kaW1lbnNpb25cIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaW1lbnNpb25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgICBtYXg9XCI1XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICA6Zm9yPVwiJ2FfZGltXycraW5kZXhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgID5EaW1lbnNpb248L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVscGVyLXRleHRcIj56LkIuIExpdGVyKGwpLCBTdMO8Y2soU3RrLik8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1maWVsZCBjb2wgczRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIDppZD1cIidhX3BzaXplXycraW5kZXhcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbC5udW1iZXI9XCJhLnBvcnRpb24uc2l6ZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkdlc2FtdGluaGFsdFwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidmFsaWRhdGVcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxuICAgICAgICAgICAgICAgICAgbWF4PVwiNVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgOmZvcj1cIidhX3BzaXplXycraW5kZXhcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3RpdmVcIlxuICAgICAgICAgICAgICAgID5Qb3J0aW9uc2luaGFsdDwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgY29sIHM0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICA6aWQ9XCInYV9wdHlwZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJhLnBvcnRpb24udHlwZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFydFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInZhbGlkYXRlXCJcbiAgICAgICAgICAgICAgICAgIG1heD1cIjVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgIDpmb3I9XCInYV9wdHlwZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+UG9ydGlvbnNiZXplaWNobnVuZzwvbGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZmllbGQgY29sIHM0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICA6aWQ9XCInYV9wcHJpY2VfJytpbmRleFwiXG4gICAgICAgICAgICAgICAgICB2LW1vZGVsLm51bWJlcj1cImEucG9ydGlvbi5wcmljZVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlByZWlzXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgc3RlcD1cIjAuMDFcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2YWxpZGF0ZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgOmZvcj1cIidhX3BwcmljZV8nK2luZGV4XCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aXZlXCJcbiAgICAgICAgICAgICAgICA+UG9ydGlvbnNwcmVpcyBpbiDigqw8L2xhYmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sIHMxMiByaWdodFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmlnaHRcIj5HZXNhbXRwcmVpcyB7eyBhLkNvbnRlbnRQcmljZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvblwiPlxuICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGNsYXNzXG4gICAgICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgICA+QXJ0aWtlbCBsw7ZzY2hlbjwvYT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdHJhbnNpdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2XG4gICAgICByZWY9XCJmYWJcIlxuICAgICAgY2xhc3M9XCJmaXhlZC1hY3Rpb24tYnRuXCJcbiAgICA+XG4gICAgICA8YVxuICAgICAgICBjbGFzcz1cImJ0bi1mbG9hdGluZyBidG4tbGFyZ2VcIlxuICAgICAgICA6Y2xhc3M9XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgPlxuICAgICAgICA8aSBjbGFzcz1cImxhcmdlIG1hdGVyaWFsLWljb25zXCI+bW9yZV92ZXJ0PC9pPlxuICAgICAgPC9hPlxuICAgICAgPHVsPlxuICAgICAgICA8bGkgdi1zaG93PVwidmlldyA9PSAnYXJ0aWNsZSdcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tZmxvYXRpbmcgdG9vbHRpcHBlZFwiXG4gICAgICAgICAgICBkYXRhLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBkYXRhLXRvb2x0aXA9XCJBcnRpa2VsbGlzdGUgc3BlaWNoZXJuXCJcbiAgICAgICAgICAgIEBjbGljaz1cInN0b3JlQXJ0aWNsZXNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIj5zYXZlPC9pPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIHYtc2hvdz1cInZpZXcgPT0gJ2FydGljbGUnXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWZsb2F0aW5nIHRvb2x0aXBwZWRcIlxuICAgICAgICAgICAgZGF0YS1wb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwPVwiQXJ0aWtlbCBoaW56dWbDvGdlblwiXG4gICAgICAgICAgICBAY2xpY2s9XCJhZGRBcnRpY2xlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCI+YWRkPC9pPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIHYtc2hvdz1cInZpZXcgPT0gJ2ludmVudG9yeSdcIj5cbiAgICAgICAgICA8YVxuICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4tZmxvYXRpbmcgdG9vbHRpcHBlZFwiXG4gICAgICAgICAgICBkYXRhLXBvc2l0aW9uPVwibGVmdFwiXG4gICAgICAgICAgICBkYXRhLXRvb2x0aXA9XCJJbnZlbnR1ciB6dXLDvGNrc2V0emVuXCJcbiAgICAgICAgICAgIEBjbGljaz1cIiRyZWZzLmludmVudG9yeS4kZW1pdCgncmVzZXQtaW52ZW50dXInKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPmNsZWFyX2FsbDwvaT5cbiAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSB2LXNob3c9XCJ2aWV3ID09ICdpbnZlbnRvcnknXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWZsb2F0aW5nIHRvb2x0aXBwZWRcIlxuICAgICAgICAgICAgZGF0YS1wb3NpdGlvbj1cImxlZnRcIlxuICAgICAgICAgICAgZGF0YS10b29sdGlwPVwiSW52ZW50dXIgZXhwb3J0aWVyZW5cIlxuICAgICAgICAgICAgQGNsaWNrPVwiJHJlZnMuaW52ZW50b3J5LiRlbWl0KCdleHBvcnQtaW52ZW50dXInKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiPnNhdmU8L2k+XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IENhbGN1bGF0b3IgZnJvbSAnLi9jb21wb25lbnRzL0NhbGN1bGF0b3InO1xuaW1wb3J0IEludmVudG9yeVRhYmxlIGZyb20gJy4vY29tcG9uZW50cy9JbnZlbnRvcnlUYWJsZSc7XG5pbXBvcnQgTmF2aWdhdGlvbkJhciBmcm9tICcuL2NvbXBvbmVudHMvTmF2aWdhdGlvbkJhcic7XG5pbXBvcnQge0FydGljbGUsIHRoYXdBcnRpY2xlfSBmcm9tICcuL21vZGVsL2FydGljbGUnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6IFwiQXBwXCIsXG4gIGNvbXBvbmVudHM6IHsgSW52ZW50b3J5VGFibGUsIE5hdmlnYXRpb25CYXIsIENhbGN1bGF0b3IgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXJ0aWNsZXM6IFtdLFxuICAgICAgYm9uOiBbXSxcbiAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgIGNhcmV0UG9zaXRpb246IDAsXG4gICAgICBmYWI6IG51bGwsXG4gICAgICB2aWV3OiBcImludmVudG9yeVwiLFxuICAgIH07XG4gIH0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJpbWFyeUNvbG9yKCkge1xuICAgICAgc3dpdGNoICh0aGlzLnZpZXcpIHtcbiAgICAgIGNhc2UgXCJpbnZlbnRvcnlcIjpcbiAgICAgICAgcmV0dXJuIFwidGVhbFwiO1xuICAgICAgY2FzZSBcImNhbGNcIjpcbiAgICAgICAgcmV0dXJuIFwib3JhbmdlXCI7XG4gICAgICBjYXNlIFwiYXJ0aWNsZVwiOlxuICAgICAgICByZXR1cm4gXCJibHVlXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJyZWRcIjtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMubG9hZEFydGljbGVzKCk7XG4gIH0sXG4gIG1vdW50ZWQoKSB7XG4gICAgdmFyIGZhYiA9IHRoaXMuJHJlZnMuZmFiO1xuICAgIHRoaXMuZmFiID0gdGhpcy4kTS5GbG9hdGluZ0FjdGlvbkJ1dHRvbi5pbml0KGZhYiwge30pO1xuICB9LFxuICBtZXRob2RzOiB7XG4gICAgY2hhbmdlVmlldyh0YWJJZCkge1xuICAgICAgdGhpcy52aWV3ID0gdGFiSWQ7XG4gICAgfSxcbiAgICBhZGRBcnRpY2xlOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuYXJ0aWNsZXMucHVzaChuZXcgQXJ0aWNsZSgpKTtcbiAgICB9LFxuICAgIHN0b3JlQXJ0aWNsZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy4kaHR0cFxuICAgICAgICAucG9zdChcbiAgICAgICAgICBcIi9hcGkvYXJ0aWtlbFwiLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuYXJ0aWNsZXMpXG4gICAgICAgIClcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuJE0udG9hc3QoeyBodG1sOiByZXNwb25zZS5ib2R5IH0pO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIGxvYWRBcnRpY2xlczogZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYXBwID0gdGhpcztcbiAgICAgIHRoaXMuJGh0dHBcbiAgICAgICAgLmdldChcImFwaS9hcnRpa2VsL3RoZWF0ZXJcIilcbiAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihqc29uID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhqc29uKTtcbiAgICAgICAgICBqc29uLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBhcHAuYXJ0aWNsZXMucHVzaCh0aGF3QXJ0aWNsZShlbGVtZW50KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLiRNLnRvYXN0KHsgaHRtbDogXCJBcnRpa2VsIHd1cmRlbiBnZWxhZGVuLlwiIH0pO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy4kTS51cGRhdGVUZXh0RmllbGRzKCk7XG4gICAgICAgICAgYXBwLnJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBleHBvcnRJbnZlbnR1cigpIHtcblxuICAgIH1cbiAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPlxuXG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJyb3cgcGluLXRvcFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wgczEyIG00IGNhcmQgZGFya2VuLTQgZ3JleSBncmV5LXRleHQgdGV4dC1saWdodGVuLTJcIj5cbiAgICAgIDx0YWJsZSBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgICAgICA8dGJvZHkgc3R5bGU9XCJtYXgtaGVpZ2h0OjMwMHB4XCI+XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICB2LWZvcj1cIml0ZW0gaW4gaXRlbXNcIlxuICAgICAgICAgICAgdi1zaG93PVwiaXRlbS5jb3VudCA+IDBcIlxuICAgICAgICAgICAgOmtleT1cIidib25fJytpdGVtLnNob3J0XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJyaWdodC1hbGlnblwiPlxuICAgICAgICAgICAgICB7eyBpdGVtLmNvdW50IH19ICZ0aW1lcztcbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGQ+e3sgaXRlbS5uYW1lIH19PC90ZD5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJpZ2h0LWFsaWduXCI+XG4gICAgICAgICAgICAgIDxUd2VlbmVkTnVtYmVyXG4gICAgICAgICAgICAgICAgOndlcnQ9XCJpdGVtLnN1bVwiXG4gICAgICAgICAgICAgICAgOmVpbmhlaXQ9XCIn4oKsJ1wiXG4gICAgICAgICAgICAgICAgOnByZWNpc2lvbj1cIjJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgPHRyIGNsYXNzPVwid2hpdGUtdGV4dFwiPlxuICAgICAgICAgICAgPHRoIGNsYXNzPVwicmlnaHQtYWxpZ25cIj5cbiAgICAgICAgICAgICAgPFR3ZWVuZWROdW1iZXJcbiAgICAgICAgICAgICAgICA6d2VydD1cInRvdGFsQ291bnRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aD5cbiAgICAgICAgICAgICAgQXJ0aWtlbFxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cInJpZ2h0LWFsaWduXCI+XG4gICAgICAgICAgICAgIDxUd2VlbmVkTnVtYmVyXG4gICAgICAgICAgICAgICAgOndlcnQ9XCJ0b3RhbFN1bVwiXG4gICAgICAgICAgICAgICAgOmVpbmhlaXQ9XCIn4oKsJ1wiXG4gICAgICAgICAgICAgICAgOnByZWNpc2lvbj1cIjJcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3Rmb290PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sIHMxMiBtOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgdi1mb3I9XCJhIGluIGl0ZW1zXCJcbiAgICAgICAgICA6a2V5PVwiJ2Jvbl9idG5fJythLnNob3J0XCJcbiAgICAgICAgICBjbGFzcz1cImNvbCBzM1wiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIndhdmVzLWVmZmVjdCB3YXZlcy1saWdodCBidG4tbGFyZ2UgYnRuLWZsYXQgY29sIHMxMlwiXG4gICAgICAgICAgICBAY2xpY2s9XCJhLmNvdW50Kys7YS5zdW0rPWEucHJpY2U7XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBhLnNob3J0IH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgczNcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIndhdmVzLWVmZmVjdCB3YXZlcy1saWdodCBidG4tbGFyZ2Ugb3JhbmdlIGNvbCBzMTJcIlxuICAgICAgICAgICAgQGNsaWNrPVwicmVzZXRCb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFJlc2V0XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUd2VlbmVkTnVtYmVyIGZyb20gJy4vVHdlZW5lZE51bWJlcic7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogXCJDYWxjdWxhdG9yXCIsXG4gIGNvbXBvbmVudHM6IHsgVHdlZW5lZE51bWJlciB9LFxuICBwcm9wczoge1xuICAgIGFydGljbGVzOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQoKSB7IHJldHVybiBbXTsgfVxuICAgIH1cbiAgfSxcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IFtdXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHRvdGFsU3VtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXRlbXMucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gdG90YWwgKyBpdGVtLnN1bTtcbiAgICAgIH0sIDApO1xuICAgIH0sXG4gICAgdG90YWxDb3VudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLml0ZW1zLnJlZHVjZSgodG90YWwsIGl0ZW0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRvdGFsICsgaXRlbS5jb3VudDtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnJlc2V0Qm9uKCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldEJvbigpIHtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmFydGljbGVzLm1hcChhID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb3VudDogMCxcbiAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgc2hvcnQ6IGEuc2hvcnQsXG4gICAgICAgICAgcHJpY2U6IGEucG9ydGlvbi5wcmljZSxcbiAgICAgICAgICBzdW06IDAsXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDx0clxuICAgIHN0eWxlPVwiYm9yZGVyOiAwO1wiXG4gICAgY2xhc3M9XCJpbnZlbnRvcnktaXRlbVwiXG4gICAgOmNsYXNzPVwieyBcbiAgICAgICd0ZWFsIGxpZ2h0ZW4tNScgOiBpdGVtLlNhbGUgPiAwLFxuICAgICAgJ29yYW5nZSBkYXJrZW4tMiB3aGl0ZS10ZXh0JyA6IGl0ZW0uU29sZCAlMSAhPTAsXG4gICAgICAncmVkIGRhcmtlbi0yIHdoaXRlLXRleHQnIDogaXRlbS5TYWxlIDwgMCxcbiAgICB9XCJcbiAgPlxuICAgIDx0aFxuICAgICAgY2xhc3M9XCJyaWdodC1hbGlnblwiXG4gICAgPlxuICAgICAge3sgaXRlbS5hcnRpY2xlLm5hbWUgfX1cbiAgICA8L3RoPlxuXG4gICAgPHRkXG4gICAgICB2LWZvcj1cInByb3AgaW4gWydzdGFydCcsJ2ZldGNoZWQnLCdlbmQnLCdsb3N0J11cIlxuICAgICAgOmtleT1cIml0ZW0uYXJ0aWNsZS5zaG9ydCsnXycrcHJvcFwiXG4gICAgICBjbGFzcz1cImJvcmRlci1ib3R0b20gY2VudGVyLWFsaWduXCJcbiAgICAgIDpjbGFzcz1cInthY3RpdmU6Y2xhc3NPYmplY3QuYWN0aXZlID09IHByb3B9XCJcbiAgICAgIGNvbnRlbnRlZGl0YWJsZVxuICAgICAgQGtleXByZXNzPVwicmVzdHJpY3RJbnB1dChwcm9wLCAkZXZlbnQpXCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXMocHJvcCwgJGV2ZW50KVwiXG4gICAgICBAYmx1cj1cIm9uQmx1cihwcm9wLCAkZXZlbnQpXCJcbiAgICA+XG4gICAgICB7eyBpdGVtW3Byb3BdIH19XG4gICAgPC90ZD5cbiAgICBcbiAgICA8dGRcbiAgICAgIGNsYXNzPVwicmlnaHQtYWxpZ24gYm9yZGVyLWJvdHRvbSBib3JkZXItZGlhZ3JhbVwiXG4gICAgPlxuICAgICAgPFR3ZWVuZWROdW1iZXJcbiAgICAgICAgOnN0eWxlPVwieyBcbiAgICAgICAgICAnYm9yZGVyLWltYWdlJzogJ2xpbmVhci1ncmFkaWVudCh0byByaWdodCAsIHJnYmEoMCwxNTAsMTM2LC4wMSkgMCUsIHJnYmEoMCwxNTAsMTM2LC4zKSAnIFxuICAgICAgICAgICAgKyBpdGVtLlNvbGQqMTAwL3RvdGFsIFxuICAgICAgICAgICAgKyAnJSwgdHJhbnNwYXJlbnQgJ1xuICAgICAgICAgICAgKyBpdGVtLlNvbGQqMTAwL3RvdGFsXG4gICAgICAgICAgICArJyUsdHJhbnNwYXJlbnQgMTAwJSkgMSdcbiAgICAgICAgfVwiXG4gICAgICAgIDp3ZXJ0PVwiaXRlbS5Tb2xkXCJcbiAgICAgICAgOmVpbmhlaXQ9XCJpdGVtLmFydGljbGUuUG9ydGlvblR5cGVcIlxuICAgICAgICA6cHJlY2lzaW9uPVwiaXRlbS5Qb3J0aW9uUHJlY2lzaW9uXCJcbiAgICAgIC8+XG4gICAgPC90ZD5cbiAgICA8dGRcbiAgICAgIGNsYXNzPVwicmlnaHQtYWxpZ24gYm9yZGVyLWJvdHRvbVwiXG4gICAgPlxuICAgICAgPFR3ZWVuZWROdW1iZXJcbiAgICAgICAgOndlcnQ9XCJpdGVtLlNhbGVcIlxuICAgICAgICA6ZWluaGVpdD1cIifigqwnXCJcbiAgICAgICAgOnByZWNpc2lvbj1cIjJcIlxuICAgICAgLz5cbiAgICA8L3RkPlxuICA8L3RyPlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUd2VlbmVkTnVtYmVyIGZyb20gJy4vVHdlZW5lZE51bWJlcic7XG5pbXBvcnQgJy4vSW52ZW50b3J5SXRlbS5jc3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6XCJJbnZlbnRvcnlJdGVtXCIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICBUd2VlbmVkTnVtYmVyLFxuICB9LFxuICBwcm9wczoge1xuICAgIGl0ZW06IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB7fVxuICAgICAgfVxuICAgIH0sXG4gICAgdG90YWw6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR3ZWVuZWRTb2xkOiAwLFxuICAgICAgdHdlZW5lZFNhbGU6IDAsXG4gICAgICBjbGFzc09iamVjdDoge2FjdGl2ZSA6IG51bGx9XG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIFNvbGRBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnR3ZWVuZWRTb2xkLnRvRml4ZWQodGhpcy5pdGVtLlBvcnRpb25QcmVjaXNpb24pO1xuICAgIH0sXG4gICAgU2FsZUFuaW1hdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMudHdlZW5lZFNhbGUudG9GaXhlZCgyKTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgICAgIFxuICB9LFxuICBtZXRob2RzOiB7XG4gICAgc2V0Q2FyZXRQb3NpdGlvbihlbCl7XG4gICAgICBpZiAoZWwgIT0gbnVsbCkge1xuICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgICB2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICAgICAgICByYW5nZS5zZXRTdGFydChlbC5maXJzdENoaWxkLCBlbC5pbm5lclRleHQubGVuZ3RoKTtcbiAgICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICAgICAgZWwuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc3RyaWN0SW5wdXQocHJvcCwgZXZlbnQpe1xuICAgICAgdmFyIHggPSBldmVudC5rZXk7XG4gICAgICBjb25zb2xlLmxvZyhwcm9wICsgXCIgaW5zZXJ0aW5nIFwiICsgeClcbiAgICAgIGlmICh4ID09PSBcIkVudGVyXCIgKSB7XG4gICAgICAgIGV2ZW50LnRhcmdldC5ibHVyKCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNOYU4oeCkgJiYgeCAhPSAnLCcpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uRm9jdXMocHJvcGVydHksIGV2ZW50KXtcbiAgICAgIHRoaXMuY2xhc3NPYmplY3QuYWN0aXZlID0gcHJvcGVydHk7XG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgICAgdmFyIHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhldmVudC50YXJnZXQpO1xuICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9LFxuICAgIG9uQmx1cihwcm9wZXJ0eSwgZXZlbnQpIHtcbiAgICAgIHRoaXMuY2xhc3NPYmplY3QuYWN0aXZlID0gbnVsbDtcbiAgICAgIHZhciB2YWx1ZSA9IGV2ZW50LnRhcmdldC5pbm5lclRleHQ7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoJywnLCAnLicpXG4gICAgICBjb25zb2xlLmxvZyhwcm9wZXJ0eSArIFwiIGxlZnQgdmFsdWU6IFwiICsgdmFsdWUpO1xuICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5pdGVtW3Byb3BlcnR5XSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbklucHV0KHByb3BlcnR5LCBldmVudCl7XG4gICAgICBpZiAoZXZlbnQuaW5wdXRUeXBlID09IFwiaW5zZXJ0VGV4dFwiKSB7XG4gICAgICAgIHZhciByZWdleCA9IC9cXGQrXFwuP1xcZHswLDJ9LztcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEubWF0Y2gocmVnZXgpKXtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmVudC50YXJnZXQuaW5uZXJUZXh0O1xuICAgICAgICAgIHRoaXMuaXRlbVtwcm9wZXJ0eV0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICB9IFxuICAgICAgfVxuICAgICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKGV2ZW50LnRhcmdldCk7ICAgICAgICAgICAgXG4gICAgfSxcbiAgfVxuICAgIFxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDx0YWJsZSBjbGFzcz1cInRhYmxlIGNvbmRlbnNlZCBoaWdobGlnaHRcIj5cbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBjbGFzcz1cInJpZ2h0LWFsaWduXCI+XG4gICAgICAgICAgQXJ0aWtlbFxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJjZW50ZXItYWxpZ25cIj5cbiAgICAgICAgICBCZWdpbm5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiY2VudGVyLWFsaWduXCI+XG4gICAgICAgICAgWnVnYW5nXG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cImNlbnRlci1hbGlnblwiPlxuICAgICAgICAgIEVuZGVcbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiY2VudGVyLWFsaWduXCI+XG4gICAgICAgICAgVmVybHVzdFxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggY2xhc3M9XCJyaWdodC1hbGlnblwiPlxuICAgICAgICAgIFZlcmthdWZ0XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aCBjbGFzcz1cInJpZ2h0LWFsaWduXCI+XG4gICAgICAgICAgU3VtbWVcbiAgICAgICAgPC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC90aGVhZD5cbiAgICA8dGJvZHk+XG4gICAgICA8SW52ZW50b3J5SXRlbVxuICAgICAgICB2LWZvcj1cIihpdGVtLGluZGV4KSBpbiBpbnZlbnRvcnlcIlxuICAgICAgICA6a2V5PVwiJ2l0ZW0tJytpbmRleFwiXG4gICAgICAgIDppdGVtPVwiaXRlbVwiXG4gICAgICAgIDp0b3RhbD1cInNvbGRcIlxuICAgICAgLz5cbiAgICA8L3Rib2R5PlxuICAgIDx0Zm9vdD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoXG4gICAgICAgICAgY29sc3Bhbj1cIjZcIlxuICAgICAgICAgIGNsYXNzPVwicmlnaHQtYWxpZ25cIlxuICAgICAgICA+XG4gICAgICAgICAgR2VzYW10c3VtbWU6XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBjbGFzcz1cInJpZ2h0LWFsaWduXCI+XG4gICAgICAgICAgPFR3ZWVuZWROdW1iZXJcbiAgICAgICAgICAgIDp3ZXJ0PVwic2FsZXNcIlxuICAgICAgICAgICAgOnByZWNpc2lvbj1cIjJcIlxuICAgICAgICAgICAgOmVpbmhlaXQ9XCIn4oKsJ1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvdHI+XG4gICAgPC90Zm9vdD5cbiAgPC90YWJsZT5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgSW52ZW50b3J5SXRlbSBmcm9tIFwiLi9JbnZlbnRvcnlJdGVtXCI7XG5pbXBvcnQgVHdlZW5lZE51bWJlciBmcm9tIFwiLi9Ud2VlbmVkTnVtYmVyXCI7XG5pbXBvcnQgeyBJbnZlbnRvcnlBcnRpY2xlIH0gZnJvbSAnLi4vbW9kZWwvaW52ZW50b3J5X2FydGljbGUnO1xuaW1wb3J0ICcuL0ludmVudG9yeVRhYmxlLmNzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogXCJJbnZlbnRvcnlUYWJsZVwiLFxuICBjb21wb25lbnRzOiB7IEludmVudG9yeUl0ZW0sIFR3ZWVuZWROdW1iZXIgfSxcbiAgcHJvcHM6IHtcbiAgICBhcnRpY2xlczoge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbnZlbnRvcnk6IFtdXG4gICAgfTtcbiAgfSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0dW06IG5ldyBEYXRlKCkudG9TdHJpbmcoKSxcbiAgICAgIH1cbiAgICB9LFxuICAgIHNhbGVzKCkge1xuICAgICAgdmFyIHRvdGFsX3NhbGVzID0gdGhpcy5pbnZlbnRvcnkucmVkdWNlKGZ1bmN0aW9uKHRvdGFsLCBpdGVtKSB7XG4gICAgICAgIHJldHVybiB0b3RhbCArIGl0ZW0uU2FsZTtcbiAgICAgIH0sIDApO1xuICAgICAgcmV0dXJuIHRvdGFsX3NhbGVzO1xuICAgIH0sXG4gICAgc29sZCgpIHtcbiAgICAgIHZhciB0b3RhbF9zb2xkID0gdGhpcy5pbnZlbnRvcnkucmVkdWNlKCh0b3RhbCwgaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gdG90YWwgKyBpdGVtLlNvbGQ7XG4gICAgICB9LDApO1xuICAgICAgcmV0dXJuIHRvdGFsX3NvbGQ7XG4gICAgfVxuICB9LFxuICBtb3VudGVkKCkge1xuICAgIHRoaXMuJG9uKCdyZXNldC1pbnZlbnR1cicsIHRoaXMucmVzZXRJbnZlbnRvcnkpO1xuICAgIHRoaXMuJG9uKCdleHBvcnQtaW52ZW50dXInLCB0aGlzLmV4cG9ydEludmVudG9yeSk7XG5cbiAgICB0aGlzLnJlc2V0SW52ZW50b3J5KCk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldEludmVudG9yeSgpIHtcbiAgICAgIHRoaXMuaW52ZW50b3J5ID0gdGhpcy5hcnRpY2xlcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgSW52ZW50b3J5QXJ0aWNsZShpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZ2V0SW52ZW50dXJCbG9iKCkge1xuICAgICAgbGV0IGludmVudHVyID0gdGhpcy5pbnZlbnRvcnkubWFwKFQgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IFQuYXJ0aWNsZS5uYW1lLFxuICAgICAgICAgIHByZWlzOiBULmFydGljbGUucG9ydGlvbi5wcmljZSxcbiAgICAgICAgICBiZWdpbm46IFQuc3RhcnQsXG4gICAgICAgICAgenVnYW5nOiBULmZldGNoZWQsXG4gICAgICAgICAgZW5kZTogVC5lbmQsXG4gICAgICAgICAgdmVybHVzdDogVC5sb3N0LFxuICAgICAgICAgIHZlcmthdWZ0OiBULlNvbGQsXG4gICAgICAgICAgdW1zYXR6OiBULlNhbGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGF0YSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbWV0YTogdGhpcy5tZXRhLFxuICAgICAgICBkYXRhOiBpbnZlbnR1clxuICAgICAgfSk7XG4gICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2RhdGFdLHt0eXBlOiAndGV4dC9qc29uJyB9KTtcbiAgICAgIHJldHVybiBibG9iO1xuICAgIH0sXG4gICAgZXhwb3J0SW52ZW50b3J5KCkge1xuICAgICAgdmFyIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCB0aGlzLmdldEludmVudHVyQmxvYigpLCAnaW52ZW50dXIuanNvbicpO1xuICAgICAgdGhpcy4kaHR0cFxuICAgICAgICAucG9zdChcbiAgICAgICAgICBcIi9hcGkvaW52ZW50dXJcIixcbiAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgdGhpcy4kTS50b2FzdCh7IGh0bWw6IHJlc3BvbnNlLmJvZHkgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcbjwvc2NyaXB0PlxuXG48c3R5bGU+XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPG5hdlxuICAgIGNsYXNzPVwibmF2LWV4dGVuZGVkXCJcbiAgICA6Y2xhc3M9XCJwcmltYXJ5Q29sb3JcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm5hdi13cmFwcGVyIGNvbnRhaW5lclwiIC8+XG4gICAgPGRpdiBjbGFzcz1cIm5hdi1jb250ZW50IGNvbnRhaW5lclwiPlxuICAgICAgPHVsIGNsYXNzPVwidGFicyB0YWJzLXRyYW5zcGFyZW50XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cInRhYlwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBjbGFzcz1cImFjdGl2ZVwiXG4gICAgICAgICAgICBAY2xpY2suc3RvcC5wcmV2ZW50PVwiY2hhbmdlVGFiKCdpbnZlbnRvcnknLCAkZXZlbnQpXCJcbiAgICAgICAgICA+SW52ZW50dXI8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cInRhYlwiPlxuICAgICAgICAgIDxhXG4gICAgICAgICAgICBAY2xpY2suc3RvcC5wcmV2ZW50PVwiY2hhbmdlVGFiKCdhcnRpY2xlJywgJGV2ZW50KVwiXG4gICAgICAgICAgPkFydGlrZWxsaXN0ZTwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIGNsYXNzPVwidGFiXCI+XG4gICAgICAgICAgPGFcbiAgICAgICAgICAgIEBjbGljay5zdG9wLnByZXZlbnQ9XCJjaGFuZ2VUYWIoJ2NhbGMnLCAkZXZlbnQpXCJcbiAgICAgICAgICA+UmVjaG5lcjwvYT5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gIDwvbmF2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBNIGZyb20gJ21hdGVyaWFsaXplLWNzcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBwcmltYXJ5Q29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwicmVkXCJcbiAgICB9XG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYnM6IFtdIFxuICAgIH1cbiAgfSxcbiAgbW91bnRlZCgpIHtcbiAgICB2YXIgdGFicyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJ0YWJzXCIpWzBdO1xuICAgIE0uVGFicy5pbml0KHRhYnMsIHt9KTtcbiAgICB0aGlzLnRhYnMgPSBNLlRhYnMuZ2V0SW5zdGFuY2UodGFicyk7XG4gIH0sXG4gIG1ldGhvZHM6IHtcbiAgICBjaGFuZ2VUYWIodGFiSWQsIGV2ZW50KSB7XG4gICAgICB0aGlzLnZpZXcgPSB0YWJJZDtcbiAgICAgIHRoaXMudGFicy5faGFuZGxlVGFiQ2xpY2soZXZlbnQpO1xuICAgICAgdGhpcy50YWJzLnVwZGF0ZVRhYkluZGljYXRvcigpO1xuICAgICAgdGhpcy4kZW1pdChcImNoYW5nZWQtdGFiXCIsIHRoaXMudmlldyk7XG4gICAgfSxcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJ0d2VlbmVkXCI+XG4gICAgPGRpdj57eyBpbnRBbmltYXRlZCB9fTwvZGl2PlxuICAgIDxkaXYgdi1pZj1cInByZWNpc2lvbj4wXCI+XG4gICAgICAse3sgZGVjaUFuaW1hdGVkIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiB2LWVsc2UgLz5cbiAgICA8ZGl2Pnt7IGVpbmhlaXQgfX08L2Rpdj5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IGdzYXAgZnJvbSAnZ3NhcCc7XG5pbXBvcnQgJy4vVHdlZW5lZE51bWJlci5jc3MnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6IFwiVHdlZW5lZE51bWJlclwiLFxuICBwcm9wczoge1xuICAgIHdlcnQ6IHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGRlZmF1bHQ6IDBcbiAgICB9LFxuICAgIGVpbmhlaXQ6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiXCJcbiAgICB9LFxuICAgIHByZWNpc2lvbjoge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZGVmYXVsdDogMFxuICAgIH1cbiAgfSxcbiAgZGF0YSgpe1xuICAgIHJldHVybiB7XG4gICAgICB0d2VlbmVkVmFsdWU6IDAsXG4gICAgfVxuICB9LFxuICBjb21wdXRlZDoge1xuICAgIHZhbHVlQW5pbWF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50d2VlbmVkVmFsdWUudG9Mb2NhbGVTdHJpbmcoXG4gICAgICAgIFwiZGUtREVcIiwgXG4gICAgICAgIHsgXG4gICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyLCBcbiAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IHRoaXMucHJlY2lzaW9uXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSxcbiAgICBpbnRBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlQW5pbWF0ZWQuc3BsaXQoJywnKVswXTtcbiAgICB9LFxuICAgIGRlY2lBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlQW5pbWF0ZWQuc3BsaXQoJywnKVsxXTtcbiAgICB9XG4gIH0sXG4gIHdhdGNoOiB7XG4gICAgd2VydDoge1xuICAgICAgaGFuZGxlcihuZXdWYWx1ZSkge1xuICAgICAgICBnc2FwLnRvKHRoaXMuJGRhdGEsIDAuNSwge3R3ZWVuZWRWYWx1ZTogbmV3VmFsdWUgfSk7XG4gICAgICB9LFxuICAgICAgZGVlcDogdHJ1ZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFxuICAgIFwiZGl2XCIsXG4gICAgW1xuICAgICAgX2MoXCJOYXZpZ2F0aW9uQmFyXCIsIHtcbiAgICAgICAgYXR0cnM6IHsgXCJwcmltYXJ5LWNvbG9yXCI6IF92bS5wcmltYXJ5Q29sb3IgfSxcbiAgICAgICAgb246IHsgXCJjaGFuZ2VkLXRhYlwiOiBfdm0uY2hhbmdlVmlldyB9XG4gICAgICB9KSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcbiAgICAgICAgXCJkaXZcIixcbiAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb250YWluZXJcIiB9LFxuICAgICAgICBbXG4gICAgICAgICAgIV92bS5yZWFkeVxuICAgICAgICAgICAgPyBfYyhcbiAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZhbGlnbi13cmFwcGVyXCIsXG4gICAgICAgICAgICAgICAgICBzdGF0aWNTdHlsZTogeyBoZWlnaHQ6IFwiOTB2aFwiIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX20oMCldXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInRyYW5zaXRpb25cIiwgeyBhdHRyczogeyBuYW1lOiBcImZhZGVcIiB9IH0sIFtcbiAgICAgICAgICAgIF92bS5yZWFkeSAmJiBfdm0udmlldyA9PSBcImludmVudG9yeVwiXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyXCIsIGF0dHJzOiB7IGlkOiBcImludmVudG9yeVwiIH0gfSxcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgX2MoXCJJbnZlbnRvcnlUYWJsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgcmVmOiBcImludmVudG9yeVwiLFxuICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGFydGljbGVzOiBfdm0uYXJ0aWNsZXMgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnJlYWR5ICYmIF92bS52aWV3ID09IFwiY2FsY1wiXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyXCIsIGF0dHJzOiB7IGlkOiBcImNhbGNcIiB9IH0sXG4gICAgICAgICAgICAgICAgICBbX2MoXCJDYWxjdWxhdG9yXCIsIHsgYXR0cnM6IHsgYXJ0aWNsZXM6IF92bS5hcnRpY2xlcyB9IH0pXSxcbiAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogX3ZtLl9lKCksXG4gICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgX3ZtLnJlYWR5ICYmIF92bS52aWV3ID09IFwiYXJ0aWNsZVwiXG4gICAgICAgICAgICAgID8gX2MoXG4gICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyXCIsIGF0dHJzOiB7IGlkOiBcImFydGljbGVcIiB9IH0sXG4gICAgICAgICAgICAgICAgICBfdm0uX2woX3ZtLmFydGljbGVzLCBmdW5jdGlvbihhLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2MoXG4gICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICB7IGtleTogXCJhcnRpY2xlX1wiICsgaW5kZXgsIHN0YXRpY0NsYXNzOiBcImNhcmRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1jb250ZW50IHJvd1wiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC10aXRsZVwiIH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoX3ZtLl9zKGEubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImRpdlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZmllbGQgaW5saW5lIGNvbCBzOFwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGl2ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtbW9kZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImEubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ2YWxpZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImFfbmFtZV9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkFydGlrZWxuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGEubmFtZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS4kc2V0KGEsIFwibmFtZVwiLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImFjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZvcjogXCJhX25hbWVfXCIgKyBpbmRleCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJOYW1lXCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJkaXZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcImlucHV0LWZpZWxkIGlubGluZSBjb2wgczRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYS5zaG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiYS5zaG9ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ2YWxpZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImFfc2hvcnRfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJLdXJ6bmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBhLnNob3J0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoYSwgXCJzaG9ydFwiLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImFjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZvcjogXCJhX3Nob3J0X1wiICsgaW5kZXggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiS8O8cnplbFwiKV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZmllbGQgY29sIHM4XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbC5udW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYS5jb250ZW50LnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhLmNvbnRlbnQuc2l6ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyczogeyBudW1iZXI6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidmFsaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImFfY3NpemVfXCIgKyBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IFwiR2VzYW10aW5oYWx0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXA6IFwiMC4wMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGEuY29udGVudC5zaXplIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInNpemVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fbigkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYWN0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZvcjogXCJhX2NzaXplX1wiICsgaW5kZXggfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJHZXNhbXRpbmhhbHRcIildXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbnB1dC1maWVsZCBjb2wgczRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGEuZGltZW5zaW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwiYS5kaW1lbnNpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwidmFsaWRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImFfZGltX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkRpbWVuc2lvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IFwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGEuZGltZW5zaW9uIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoYSwgXCJkaW1lbnNpb25cIiwgJGV2ZW50LnRhcmdldC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxhYmVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImFjdGl2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczogeyBmb3I6IFwiYV9kaW1fXCIgKyBpbmRleCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIkRpbWVuc2lvblwiKV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJzcGFuXCIsIHsgc3RhdGljQ2xhc3M6IFwiaGVscGVyLXRleHRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJ6LkIuIExpdGVyKGwpLCBTdMO8Y2soU3RrLilcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbnB1dC1maWVsZCBjb2wgczRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsLm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhLnBvcnRpb24uc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImEucG9ydGlvbi5zaXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzOiB7IG51bWJlcjogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ2YWxpZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiYV9wc2l6ZV9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJHZXNhbXRpbmhhbHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcDogXCIwLjAxXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heDogXCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21Qcm9wczogeyB2YWx1ZTogYS5wb3J0aW9uLnNpemUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucG9ydGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwic2l6ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl9uKCRldmVudC50YXJnZXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVyOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRmb3JjZVVwZGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhY3RpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZm9yOiBcImFfcHNpemVfXCIgKyBpbmRleCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIlBvcnRpb25zaW5oYWx0XCIpXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaW5wdXQtZmllbGQgY29sIHM0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwiaW5wdXRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJtb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd05hbWU6IFwidi1tb2RlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhLnBvcnRpb24udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcImEucG9ydGlvbi50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZhbGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJhX3B0eXBlX1wiICsgaW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBcIkFydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXg6IFwiNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tUHJvcHM6IHsgdmFsdWU6IGEucG9ydGlvbi50eXBlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRldmVudC50YXJnZXQuY29tcG9zaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLiRzZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLnBvcnRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInR5cGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJhY3RpdmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgZm9yOiBcImFfcHR5cGVfXCIgKyBpbmRleCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW192bS5fdihcIlBvcnRpb25zYmV6ZWljaG51bmdcIildXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJpbnB1dC1maWVsZCBjb2wgczRcIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJpbnB1dFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIm1vZGVsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LW1vZGVsLm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhLnBvcnRpb24ucHJpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJhLnBvcnRpb24ucHJpY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllcnM6IHsgbnVtYmVyOiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcInZhbGlkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJhX3BwcmljZV9cIiArIGluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogXCJQcmVpc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwOiBcIjAuMDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVByb3BzOiB7IHZhbHVlOiBhLnBvcnRpb24ucHJpY2UgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC5jb21wb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uJHNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEucG9ydGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwicHJpY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fbigkZXZlbnQudGFyZ2V0LnZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS4kZm9yY2VVcGRhdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGFiZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYWN0aXZlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IGZvcjogXCJhX3BwcmljZV9cIiArIGluZGV4IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX3ZtLl92KFwiUG9ydGlvbnNwcmVpcyBpbiDigqxcIildXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyIHJpZ2h0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jKFwic3BhblwiLCB7IHN0YXRpY0NsYXNzOiBcInJpZ2h0XCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiR2VzYW10cHJlaXMgXCIgKyBfdm0uX3MoYS5Db250ZW50UHJpY2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcImNhcmQtYWN0aW9uXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICBfYyhcImFcIiwgeyBhdHRyczogeyBocmVmOiBcIiNcIiB9IH0sIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJBcnRpa2VsIGzDtnNjaGVuXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IF92bS5fZSgpXG4gICAgICAgICAgXSlcbiAgICAgICAgXSxcbiAgICAgICAgMVxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHJlZjogXCJmYWJcIiwgc3RhdGljQ2xhc3M6IFwiZml4ZWQtYWN0aW9uLWJ0blwiIH0sIFtcbiAgICAgICAgX2MoXG4gICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJidG4tZmxvYXRpbmcgYnRuLWxhcmdlXCIsIGNsYXNzOiBfdm0ucHJpbWFyeUNvbG9yIH0sXG4gICAgICAgICAgW1xuICAgICAgICAgICAgX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibGFyZ2UgbWF0ZXJpYWwtaWNvbnNcIiB9LCBbXG4gICAgICAgICAgICAgIF92bS5fdihcIm1vcmVfdmVydFwiKVxuICAgICAgICAgICAgXSlcbiAgICAgICAgICBdXG4gICAgICAgICksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwidWxcIiwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52aWV3ID09IFwiYXJ0aWNsZVwiLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aWV3ID09ICdhcnRpY2xlJ1wiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJidG4tZmxvYXRpbmcgdG9vbHRpcHBlZFwiLFxuICAgICAgICAgICAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICAgICAgICAgICAgaHJlZjogXCIjXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS1wb3NpdGlvblwiOiBcImxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXRvb2x0aXBcIjogXCJBcnRpa2VsbGlzdGUgc3BlaWNoZXJuXCJcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBvbjogeyBjbGljazogX3ZtLnN0b3JlQXJ0aWNsZXMgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgW19jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW192bS5fdihcInNhdmVcIildKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlldyA9PSBcImFydGljbGVcIixcbiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb246IFwidmlldyA9PSAnYXJ0aWNsZSdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuLWZsb2F0aW5nIHRvb2x0aXBwZWRcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGEtcG9zaXRpb25cIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS10b29sdGlwXCI6IFwiQXJ0aWtlbCBoaW56dWbDvGdlblwiXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgb246IHsgY2xpY2s6IF92bS5hZGRBcnRpY2xlIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfYyhcImlcIiwgeyBzdGF0aWNDbGFzczogXCJtYXRlcmlhbC1pY29uc1wiIH0sIFtfdm0uX3YoXCJhZGRcIildKV1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgXVxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcbiAgICAgICAgICAgIFwibGlcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZGlyZWN0aXZlczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwic2hvd1wiLFxuICAgICAgICAgICAgICAgICAgcmF3TmFtZTogXCJ2LXNob3dcIixcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdm0udmlldyA9PSBcImludmVudG9yeVwiLFxuICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbjogXCJ2aWV3ID09ICdpbnZlbnRvcnknXCJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgIFwiYVwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRpY0NsYXNzOiBcImJ0bi1mbG9hdGluZyB0b29sdGlwcGVkXCIsXG4gICAgICAgICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICAgICAgICBocmVmOiBcIiNcIixcbiAgICAgICAgICAgICAgICAgICAgXCJkYXRhLXBvc2l0aW9uXCI6IFwibGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGEtdG9vbHRpcFwiOiBcIkludmVudHVyIHp1csO8Y2tzZXR6ZW5cIlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRyZWZzLmludmVudG9yeS4kZW1pdChcInJlc2V0LWludmVudHVyXCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiaVwiLCB7IHN0YXRpY0NsYXNzOiBcIm1hdGVyaWFsLWljb25zXCIgfSwgW1xuICAgICAgICAgICAgICAgICAgICBfdm0uX3YoXCJjbGVhcl9hbGxcIilcbiAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJsaVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgbmFtZTogXCJzaG93XCIsXG4gICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IF92bS52aWV3ID09IFwiaW52ZW50b3J5XCIsXG4gICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcInZpZXcgPT0gJ2ludmVudG9yeSdcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYnRuLWZsb2F0aW5nIHRvb2x0aXBwZWRcIixcbiAgICAgICAgICAgICAgICAgIGF0dHJzOiB7XG4gICAgICAgICAgICAgICAgICAgIGhyZWY6IFwiI1wiLFxuICAgICAgICAgICAgICAgICAgICBcImRhdGEtcG9zaXRpb25cIjogXCJsZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZGF0YS10b29sdGlwXCI6IFwiSW52ZW50dXIgZXhwb3J0aWVyZW5cIlxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLiRyZWZzLmludmVudG9yeS4kZW1pdChcImV4cG9ydC1pbnZlbnR1clwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbX2MoXCJpXCIsIHsgc3RhdGljQ2xhc3M6IFwibWF0ZXJpYWwtaWNvbnNcIiB9LCBbX3ZtLl92KFwic2F2ZVwiKV0pXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdLFxuICAgIDFcbiAgKVxufVxudmFyIHN0YXRpY1JlbmRlckZucyA9IFtcbiAgZnVuY3Rpb24oKSB7XG4gICAgdmFyIF92bSA9IHRoaXNcbiAgICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgICByZXR1cm4gX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJwcm9ncmVzc1wiIH0sIFtcbiAgICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwiaW5kZXRlcm1pbmF0ZVwiIH0pXG4gICAgXSlcbiAgfVxuXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwicm93IHBpbi10b3BcIiB9LCBbXG4gICAgX2MoXG4gICAgICBcImRpdlwiLFxuICAgICAgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyIG00IGNhcmQgZGFya2VuLTQgZ3JleSBncmV5LXRleHQgdGV4dC1saWdodGVuLTJcIiB9LFxuICAgICAgW1xuICAgICAgICBfYyhcInRhYmxlXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2FyZC1jb250ZW50XCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJ0Ym9keVwiLFxuICAgICAgICAgICAgeyBzdGF0aWNTdHlsZTogeyBcIm1heC1oZWlnaHRcIjogXCIzMDBweFwiIH0gfSxcbiAgICAgICAgICAgIF92bS5fbChfdm0uaXRlbXMsIGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9jKFxuICAgICAgICAgICAgICAgIFwidHJcIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcInNob3dcIixcbiAgICAgICAgICAgICAgICAgICAgICByYXdOYW1lOiBcInYtc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmNvdW50ID4gMCxcbiAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uOiBcIml0ZW0uY291bnQgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgIGtleTogXCJib25fXCIgKyBpdGVtLnNob3J0XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICBfYyhcInRkXCIsIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiB9LCBbXG4gICAgICAgICAgICAgICAgICAgIF92bS5fdihcbiAgICAgICAgICAgICAgICAgICAgICBcIlxcbiAgICAgICAgICAgIFwiICsgX3ZtLl9zKGl0ZW0uY291bnQpICsgXCIgw5dcXG4gICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICAgICAgICAgICAgX2MoXCJ0ZFwiLCBbX3ZtLl92KF92bS5fcyhpdGVtLm5hbWUpKV0pLFxuICAgICAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgICAgIF9jKFxuICAgICAgICAgICAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgX2MoXCJUd2VlbmVkTnVtYmVyXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHdlcnQ6IGl0ZW0uc3VtLCBlaW5oZWl0OiBcIuKCrFwiLCBwcmVjaXNpb246IDIgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgMFxuICAgICAgICAgICksXG4gICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICBfYyhcInRmb290XCIsIFtcbiAgICAgICAgICAgIF9jKFwidHJcIiwgeyBzdGF0aWNDbGFzczogXCJ3aGl0ZS10ZXh0XCIgfSwgW1xuICAgICAgICAgICAgICBfYyhcbiAgICAgICAgICAgICAgICBcInRoXCIsXG4gICAgICAgICAgICAgICAgeyBzdGF0aWNDbGFzczogXCJyaWdodC1hbGlnblwiIH0sXG4gICAgICAgICAgICAgICAgW19jKFwiVHdlZW5lZE51bWJlclwiLCB7IGF0dHJzOiB7IHdlcnQ6IF92bS50b3RhbENvdW50IH0gfSldLFxuICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXCJ0aFwiLCBbX3ZtLl92KFwiXFxuICAgICAgICAgICAgQXJ0aWtlbFxcbiAgICAgICAgICBcIildKSxcbiAgICAgICAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJ0aFwiLFxuICAgICAgICAgICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiB9LFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIF9jKFwiVHdlZW5lZE51bWJlclwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IHdlcnQ6IF92bS50b3RhbFN1bSwgZWluaGVpdDogXCLigqxcIiwgcHJlY2lzaW9uOiAyIH1cbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIF0pXG4gICAgICAgICAgXSlcbiAgICAgICAgXSlcbiAgICAgIF1cbiAgICApLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb2wgczEyIG04XCIgfSwgW1xuICAgICAgX2MoXG4gICAgICAgIFwiZGl2XCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicm93XCIgfSxcbiAgICAgICAgX3ZtLl9sKF92bS5pdGVtcywgZnVuY3Rpb24oYSkge1xuICAgICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICAgIFwiZGl2XCIsXG4gICAgICAgICAgICB7IGtleTogXCJib25fYnRuX1wiICsgYS5zaG9ydCwgc3RhdGljQ2xhc3M6IFwiY29sIHMzXCIgfSxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgX2MoXG4gICAgICAgICAgICAgICAgXCJidXR0b25cIixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdGF0aWNDbGFzczpcbiAgICAgICAgICAgICAgICAgICAgXCJ3YXZlcy1lZmZlY3Qgd2F2ZXMtbGlnaHQgYnRuLWxhcmdlIGJ0bi1mbGF0IGNvbCBzMTJcIixcbiAgICAgICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhLmNvdW50KytcbiAgICAgICAgICAgICAgICAgICAgICBhLnN1bSArPSBhLnByaWNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgICAgICAgXCIgKyBfdm0uX3MoYS5zaG9ydCkgKyBcIlxcbiAgICAgICAgXCIpXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICBdXG4gICAgICAgICAgKVxuICAgICAgICB9KSxcbiAgICAgICAgMFxuICAgICAgKSxcbiAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcInJvd1wiIH0sIFtcbiAgICAgICAgX2MoXCJkaXZcIiwgeyBzdGF0aWNDbGFzczogXCJjb2wgczNcIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImJ1dHRvblwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzdGF0aWNDbGFzczogXCJ3YXZlcy1lZmZlY3Qgd2F2ZXMtbGlnaHQgYnRuLWxhcmdlIG9yYW5nZSBjb2wgczEyXCIsXG4gICAgICAgICAgICAgIG9uOiB7IGNsaWNrOiBfdm0ucmVzZXRCb24gfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJcXG4gICAgICAgICAgUmVzZXRcXG4gICAgICAgIFwiKV1cbiAgICAgICAgICApXG4gICAgICAgIF0pXG4gICAgICBdKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW11cbnJlbmRlci5fd2l0aFN0cmlwcGVkID0gdHJ1ZVxuXG5leHBvcnQgeyByZW5kZXIsIHN0YXRpY1JlbmRlckZucyB9IiwidmFyIHJlbmRlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgX3ZtID0gdGhpc1xuICB2YXIgX2ggPSBfdm0uJGNyZWF0ZUVsZW1lbnRcbiAgdmFyIF9jID0gX3ZtLl9zZWxmLl9jIHx8IF9oXG4gIHJldHVybiBfYyhcbiAgICBcInRyXCIsXG4gICAge1xuICAgICAgc3RhdGljQ2xhc3M6IFwiaW52ZW50b3J5LWl0ZW1cIixcbiAgICAgIGNsYXNzOiB7XG4gICAgICAgIFwidGVhbCBsaWdodGVuLTVcIjogX3ZtLml0ZW0uU2FsZSA+IDAsXG4gICAgICAgIFwib3JhbmdlIGRhcmtlbi0yIHdoaXRlLXRleHRcIjogX3ZtLml0ZW0uU29sZCAlIDEgIT0gMCxcbiAgICAgICAgXCJyZWQgZGFya2VuLTIgd2hpdGUtdGV4dFwiOiBfdm0uaXRlbS5TYWxlIDwgMFxuICAgICAgfSxcbiAgICAgIHN0YXRpY1N0eWxlOiB7IGJvcmRlcjogXCIwXCIgfVxuICAgIH0sXG4gICAgW1xuICAgICAgX2MoXCJ0aFwiLCB7IHN0YXRpY0NsYXNzOiBcInJpZ2h0LWFsaWduXCIgfSwgW1xuICAgICAgICBfdm0uX3YoXCJcXG4gICAgXCIgKyBfdm0uX3MoX3ZtLml0ZW0uYXJ0aWNsZS5uYW1lKSArIFwiXFxuICBcIilcbiAgICAgIF0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF92bS5fbChbXCJzdGFydFwiLCBcImZldGNoZWRcIiwgXCJlbmRcIiwgXCJsb3N0XCJdLCBmdW5jdGlvbihwcm9wKSB7XG4gICAgICAgIHJldHVybiBfYyhcbiAgICAgICAgICBcInRkXCIsXG4gICAgICAgICAge1xuICAgICAgICAgICAga2V5OiBfdm0uaXRlbS5hcnRpY2xlLnNob3J0ICsgXCJfXCIgKyBwcm9wLFxuICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYm9yZGVyLWJvdHRvbSBjZW50ZXItYWxpZ25cIixcbiAgICAgICAgICAgIGNsYXNzOiB7IGFjdGl2ZTogX3ZtLmNsYXNzT2JqZWN0LmFjdGl2ZSA9PSBwcm9wIH0sXG4gICAgICAgICAgICBhdHRyczogeyBjb250ZW50ZWRpdGFibGU6IFwiXCIgfSxcbiAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgIGtleXByZXNzOiBmdW5jdGlvbigkZXZlbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLnJlc3RyaWN0SW5wdXQocHJvcCwgJGV2ZW50KVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmb2N1czogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkZvY3VzKHByb3AsICRldmVudClcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYmx1cjogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF92bS5vbkJsdXIocHJvcCwgJGV2ZW50KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBbX3ZtLl92KFwiXFxuICAgIFwiICsgX3ZtLl9zKF92bS5pdGVtW3Byb3BdKSArIFwiXFxuICBcIildXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInRkXCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ24gYm9yZGVyLWJvdHRvbSBib3JkZXItZGlhZ3JhbVwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlR3ZWVuZWROdW1iZXJcIiwge1xuICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgXCJib3JkZXItaW1hZ2VcIjpcbiAgICAgICAgICAgICAgICBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCAsIHJnYmEoMCwxNTAsMTM2LC4wMSkgMCUsIHJnYmEoMCwxNTAsMTM2LC4zKSBcIiArXG4gICAgICAgICAgICAgICAgKF92bS5pdGVtLlNvbGQgKiAxMDApIC8gX3ZtLnRvdGFsICtcbiAgICAgICAgICAgICAgICBcIiUsIHRyYW5zcGFyZW50IFwiICtcbiAgICAgICAgICAgICAgICAoX3ZtLml0ZW0uU29sZCAqIDEwMCkgLyBfdm0udG90YWwgK1xuICAgICAgICAgICAgICAgIFwiJSx0cmFuc3BhcmVudCAxMDAlKSAxXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhdHRyczoge1xuICAgICAgICAgICAgICB3ZXJ0OiBfdm0uaXRlbS5Tb2xkLFxuICAgICAgICAgICAgICBlaW5oZWl0OiBfdm0uaXRlbS5hcnRpY2xlLlBvcnRpb25UeXBlLFxuICAgICAgICAgICAgICBwcmVjaXNpb246IF92bS5pdGVtLlBvcnRpb25QcmVjaXNpb25cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApLFxuICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgIF9jKFxuICAgICAgICBcInRkXCIsXG4gICAgICAgIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ24gYm9yZGVyLWJvdHRvbVwiIH0sXG4gICAgICAgIFtcbiAgICAgICAgICBfYyhcIlR3ZWVuZWROdW1iZXJcIiwge1xuICAgICAgICAgICAgYXR0cnM6IHsgd2VydDogX3ZtLml0ZW0uU2FsZSwgZWluaGVpdDogXCLigqxcIiwgcHJlY2lzaW9uOiAyIH1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICAxXG4gICAgICApXG4gICAgXSxcbiAgICAyXG4gIClcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwidGFibGVcIiwgeyBzdGF0aWNDbGFzczogXCJ0YWJsZSBjb25kZW5zZWQgaGlnaGxpZ2h0XCIgfSwgW1xuICAgIF92bS5fbSgwKSxcbiAgICBfdm0uX3YoXCIgXCIpLFxuICAgIF9jKFxuICAgICAgXCJ0Ym9keVwiLFxuICAgICAgX3ZtLl9sKF92bS5pbnZlbnRvcnksIGZ1bmN0aW9uKGl0ZW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBfYyhcIkludmVudG9yeUl0ZW1cIiwge1xuICAgICAgICAgIGtleTogXCJpdGVtLVwiICsgaW5kZXgsXG4gICAgICAgICAgYXR0cnM6IHsgaXRlbTogaXRlbSwgdG90YWw6IF92bS5zb2xkIH1cbiAgICAgICAgfSlcbiAgICAgIH0pLFxuICAgICAgMVxuICAgICksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcInRmb290XCIsIFtcbiAgICAgIF9jKFwidHJcIiwgW1xuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiwgYXR0cnM6IHsgY29sc3BhbjogXCI2XCIgfSB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBHZXNhbXRzdW1tZTpcXG4gICAgICBcIilcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFxuICAgICAgICAgIFwidGRcIixcbiAgICAgICAgICB7IHN0YXRpY0NsYXNzOiBcInJpZ2h0LWFsaWduXCIgfSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBfYyhcIlR3ZWVuZWROdW1iZXJcIiwge1xuICAgICAgICAgICAgICBhdHRyczogeyB3ZXJ0OiBfdm0uc2FsZXMsIHByZWNpc2lvbjogMiwgZWluaGVpdDogXCLigqxcIiB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF0sXG4gICAgICAgICAgMVxuICAgICAgICApXG4gICAgICBdKVxuICAgIF0pXG4gIF0pXG59XG52YXIgc3RhdGljUmVuZGVyRm5zID0gW1xuICBmdW5jdGlvbigpIHtcbiAgICB2YXIgX3ZtID0gdGhpc1xuICAgIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICAgIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICAgIHJldHVybiBfYyhcInRoZWFkXCIsIFtcbiAgICAgIF9jKFwidHJcIiwgW1xuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBBcnRpa2VsXFxuICAgICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VudGVyLWFsaWduXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgQmVnaW5uXFxuICAgICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VudGVyLWFsaWduXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgWnVnYW5nXFxuICAgICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwiY2VudGVyLWFsaWduXCIgfSwgW1xuICAgICAgICAgIF92bS5fdihcIlxcbiAgICAgICAgRW5kZVxcbiAgICAgIFwiKVxuICAgICAgICBdKSxcbiAgICAgICAgX3ZtLl92KFwiIFwiKSxcbiAgICAgICAgX2MoXCJ0aFwiLCB7IHN0YXRpY0NsYXNzOiBcImNlbnRlci1hbGlnblwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFZlcmx1c3RcXG4gICAgICBcIilcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwidGhcIiwgeyBzdGF0aWNDbGFzczogXCJyaWdodC1hbGlnblwiIH0sIFtcbiAgICAgICAgICBfdm0uX3YoXCJcXG4gICAgICAgIFZlcmthdWZ0XFxuICAgICAgXCIpXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcInRoXCIsIHsgc3RhdGljQ2xhc3M6IFwicmlnaHQtYWxpZ25cIiB9LCBbXG4gICAgICAgICAgX3ZtLl92KFwiXFxuICAgICAgICBTdW1tZVxcbiAgICAgIFwiKVxuICAgICAgICBdKVxuICAgICAgXSlcbiAgICBdKVxuICB9XG5dXG5yZW5kZXIuX3dpdGhTdHJpcHBlZCA9IHRydWVcblxuZXhwb3J0IHsgcmVuZGVyLCBzdGF0aWNSZW5kZXJGbnMgfSIsInZhciByZW5kZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIF92bSA9IHRoaXNcbiAgdmFyIF9oID0gX3ZtLiRjcmVhdGVFbGVtZW50XG4gIHZhciBfYyA9IF92bS5fc2VsZi5fYyB8fCBfaFxuICByZXR1cm4gX2MoXCJuYXZcIiwgeyBzdGF0aWNDbGFzczogXCJuYXYtZXh0ZW5kZWRcIiwgY2xhc3M6IF92bS5wcmltYXJ5Q29sb3IgfSwgW1xuICAgIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwibmF2LXdyYXBwZXIgY29udGFpbmVyXCIgfSksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImRpdlwiLCB7IHN0YXRpY0NsYXNzOiBcIm5hdi1jb250ZW50IGNvbnRhaW5lclwiIH0sIFtcbiAgICAgIF9jKFwidWxcIiwgeyBzdGF0aWNDbGFzczogXCJ0YWJzIHRhYnMtdHJhbnNwYXJlbnRcIiB9LCBbXG4gICAgICAgIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJ0YWJcIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3RhdGljQ2xhc3M6IFwiYWN0aXZlXCIsXG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jaGFuZ2VUYWIoXCJpbnZlbnRvcnlcIiwgJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJJbnZlbnR1clwiKV1cbiAgICAgICAgICApXG4gICAgICAgIF0pLFxuICAgICAgICBfdm0uX3YoXCIgXCIpLFxuICAgICAgICBfYyhcImxpXCIsIHsgc3RhdGljQ2xhc3M6IFwidGFiXCIgfSwgW1xuICAgICAgICAgIF9jKFxuICAgICAgICAgICAgXCJhXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uKCRldmVudCkge1xuICAgICAgICAgICAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF92bS5jaGFuZ2VUYWIoXCJhcnRpY2xlXCIsICRldmVudClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbX3ZtLl92KFwiQXJ0aWtlbGxpc3RlXCIpXVxuICAgICAgICAgIClcbiAgICAgICAgXSksXG4gICAgICAgIF92bS5fdihcIiBcIiksXG4gICAgICAgIF9jKFwibGlcIiwgeyBzdGF0aWNDbGFzczogXCJ0YWJcIiB9LCBbXG4gICAgICAgICAgX2MoXG4gICAgICAgICAgICBcImFcIixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb246IHtcbiAgICAgICAgICAgICAgICBjbGljazogZnVuY3Rpb24oJGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gX3ZtLmNoYW5nZVRhYihcImNhbGNcIiwgJGV2ZW50KVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtfdm0uX3YoXCJSZWNobmVyXCIpXVxuICAgICAgICAgIClcbiAgICAgICAgXSlcbiAgICAgIF0pXG4gICAgXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iLCJ2YXIgcmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBfdm0gPSB0aGlzXG4gIHZhciBfaCA9IF92bS4kY3JlYXRlRWxlbWVudFxuICB2YXIgX2MgPSBfdm0uX3NlbGYuX2MgfHwgX2hcbiAgcmV0dXJuIF9jKFwiZGl2XCIsIHsgc3RhdGljQ2xhc3M6IFwidHdlZW5lZFwiIH0sIFtcbiAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0uaW50QW5pbWF0ZWQpKV0pLFxuICAgIF92bS5fdihcIiBcIiksXG4gICAgX3ZtLnByZWNpc2lvbiA+IDBcbiAgICAgID8gX2MoXCJkaXZcIiwgW192bS5fdihcIlxcbiAgICAsXCIgKyBfdm0uX3MoX3ZtLmRlY2lBbmltYXRlZCkgKyBcIlxcbiAgXCIpXSlcbiAgICAgIDogX2MoXCJkaXZcIiksXG4gICAgX3ZtLl92KFwiIFwiKSxcbiAgICBfYyhcImRpdlwiLCBbX3ZtLl92KF92bS5fcyhfdm0uZWluaGVpdCkpXSlcbiAgXSlcbn1cbnZhciBzdGF0aWNSZW5kZXJGbnMgPSBbXVxucmVuZGVyLl93aXRoU3RyaXBwZWQgPSB0cnVlXG5cbmV4cG9ydCB7IHJlbmRlciwgc3RhdGljUmVuZGVyRm5zIH0iXSwic291cmNlUm9vdCI6IiJ9